zend_vm_execute.h 2.0 MB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329153301533115332153331533415335153361533715338153391534015341153421534315344153451534615347153481534915350153511535215353153541535515356153571535815359153601536115362153631536415365153661536715368153691537015371153721537315374153751537615377153781537915380153811538215383153841538515386153871538815389153901539115392153931539415395153961539715398153991540015401154021540315404154051540615407154081540915410154111541215413154141541515416154171541815419154201542115422154231542415425154261542715428154291543015431154321543315434154351543615437154381543915440154411544215443154441544515446154471544815449154501545115452154531545415455154561545715458154591546015461154621546315464154651546615467154681546915470154711547215473154741547515476154771547815479154801548115482154831548415485154861548715488154891549015491154921549315494154951549615497154981549915500155011550215503155041550515506155071550815509155101551115512155131551415515155161551715518155191552015521155221552315524155251552615527155281552915530155311553215533155341553515536155371553815539155401554115542155431554415545155461554715548155491555015551155521555315554155551555615557155581555915560155611556215563155641556515566155671556815569155701557115572155731557415575155761557715578155791558015581155821558315584155851558615587155881558915590155911559215593155941559515596155971559815599156001560115602156031560415605156061560715608156091561015611156121561315614156151561615617156181561915620156211562215623156241562515626156271562815629156301563115632156331563415635156361563715638156391564015641156421564315644156451564615647156481564915650156511565215653156541565515656156571565815659156601566115662156631566415665156661566715668156691567015671156721567315674156751567615677156781567915680156811568215683156841568515686156871568815689156901569115692156931569415695156961569715698156991570015701157021570315704157051570615707157081570915710157111571215713157141571515716157171571815719157201572115722157231572415725157261572715728157291573015731157321573315734157351573615737157381573915740157411574215743157441574515746157471574815749157501575115752157531575415755157561575715758157591576015761157621576315764157651576615767157681576915770157711577215773157741577515776157771577815779157801578115782157831578415785157861578715788157891579015791157921579315794157951579615797157981579915800158011580215803158041580515806158071580815809158101581115812158131581415815158161581715818158191582015821158221582315824158251582615827158281582915830158311583215833158341583515836158371583815839158401584115842158431584415845158461584715848158491585015851158521585315854158551585615857158581585915860158611586215863158641586515866158671586815869158701587115872158731587415875158761587715878158791588015881158821588315884158851588615887158881588915890158911589215893158941589515896158971589815899159001590115902159031590415905159061590715908159091591015911159121591315914159151591615917159181591915920159211592215923159241592515926159271592815929159301593115932159331593415935159361593715938159391594015941159421594315944159451594615947159481594915950159511595215953159541595515956159571595815959159601596115962159631596415965159661596715968159691597015971159721597315974159751597615977159781597915980159811598215983159841598515986159871598815989159901599115992159931599415995159961599715998159991600016001160021600316004160051600616007160081600916010160111601216013160141601516016160171601816019160201602116022160231602416025160261602716028160291603016031160321603316034160351603616037160381603916040160411604216043160441604516046160471604816049160501605116052160531605416055160561605716058160591606016061160621606316064160651606616067160681606916070160711607216073160741607516076160771607816079160801608116082160831608416085160861608716088160891609016091160921609316094160951609616097160981609916100161011610216103161041610516106161071610816109161101611116112161131611416115161161611716118161191612016121161221612316124161251612616127161281612916130161311613216133161341613516136161371613816139161401614116142161431614416145161461614716148161491615016151161521615316154161551615616157161581615916160161611616216163161641616516166161671616816169161701617116172161731617416175161761617716178161791618016181161821618316184161851618616187161881618916190161911619216193161941619516196161971619816199162001620116202162031620416205162061620716208162091621016211162121621316214162151621616217162181621916220162211622216223162241622516226162271622816229162301623116232162331623416235162361623716238162391624016241162421624316244162451624616247162481624916250162511625216253162541625516256162571625816259162601626116262162631626416265162661626716268162691627016271162721627316274162751627616277162781627916280162811628216283162841628516286162871628816289162901629116292162931629416295162961629716298162991630016301163021630316304163051630616307163081630916310163111631216313163141631516316163171631816319163201632116322163231632416325163261632716328163291633016331163321633316334163351633616337163381633916340163411634216343163441634516346163471634816349163501635116352163531635416355163561635716358163591636016361163621636316364163651636616367163681636916370163711637216373163741637516376163771637816379163801638116382163831638416385163861638716388163891639016391163921639316394163951639616397163981639916400164011640216403164041640516406164071640816409164101641116412164131641416415164161641716418164191642016421164221642316424164251642616427164281642916430164311643216433164341643516436164371643816439164401644116442164431644416445164461644716448164491645016451164521645316454164551645616457164581645916460164611646216463164641646516466164671646816469164701647116472164731647416475164761647716478164791648016481164821648316484164851648616487164881648916490164911649216493164941649516496164971649816499165001650116502165031650416505165061650716508165091651016511165121651316514165151651616517165181651916520165211652216523165241652516526165271652816529165301653116532165331653416535165361653716538165391654016541165421654316544165451654616547165481654916550165511655216553165541655516556165571655816559165601656116562165631656416565165661656716568165691657016571165721657316574165751657616577165781657916580165811658216583165841658516586165871658816589165901659116592165931659416595165961659716598165991660016601166021660316604166051660616607166081660916610166111661216613166141661516616166171661816619166201662116622166231662416625166261662716628166291663016631166321663316634166351663616637166381663916640166411664216643166441664516646166471664816649166501665116652166531665416655166561665716658166591666016661166621666316664166651666616667166681666916670166711667216673166741667516676166771667816679166801668116682166831668416685166861668716688166891669016691166921669316694166951669616697166981669916700167011670216703167041670516706167071670816709167101671116712167131671416715167161671716718167191672016721167221672316724167251672616727167281672916730167311673216733167341673516736167371673816739167401674116742167431674416745167461674716748167491675016751167521675316754167551675616757167581675916760167611676216763167641676516766167671676816769167701677116772167731677416775167761677716778167791678016781167821678316784167851678616787167881678916790167911679216793167941679516796167971679816799168001680116802168031680416805168061680716808168091681016811168121681316814168151681616817168181681916820168211682216823168241682516826168271682816829168301683116832168331683416835168361683716838168391684016841168421684316844168451684616847168481684916850168511685216853168541685516856168571685816859168601686116862168631686416865168661686716868168691687016871168721687316874168751687616877168781687916880168811688216883168841688516886168871688816889168901689116892168931689416895168961689716898168991690016901169021690316904169051690616907169081690916910169111691216913169141691516916169171691816919169201692116922169231692416925169261692716928169291693016931169321693316934169351693616937169381693916940169411694216943169441694516946169471694816949169501695116952169531695416955169561695716958169591696016961169621696316964169651696616967169681696916970169711697216973169741697516976169771697816979169801698116982169831698416985169861698716988169891699016991169921699316994169951699616997169981699917000170011700217003170041700517006170071700817009170101701117012170131701417015170161701717018170191702017021170221702317024170251702617027170281702917030170311703217033170341703517036170371703817039170401704117042170431704417045170461704717048170491705017051170521705317054170551705617057170581705917060170611706217063170641706517066170671706817069170701707117072170731707417075170761707717078170791708017081170821708317084170851708617087170881708917090170911709217093170941709517096170971709817099171001710117102171031710417105171061710717108171091711017111171121711317114171151711617117171181711917120171211712217123171241712517126171271712817129171301713117132171331713417135171361713717138171391714017141171421714317144171451714617147171481714917150171511715217153171541715517156171571715817159171601716117162171631716417165171661716717168171691717017171171721717317174171751717617177171781717917180171811718217183171841718517186171871718817189171901719117192171931719417195171961719717198171991720017201172021720317204172051720617207172081720917210172111721217213172141721517216172171721817219172201722117222172231722417225172261722717228172291723017231172321723317234172351723617237172381723917240172411724217243172441724517246172471724817249172501725117252172531725417255172561725717258172591726017261172621726317264172651726617267172681726917270172711727217273172741727517276172771727817279172801728117282172831728417285172861728717288172891729017291172921729317294172951729617297172981729917300173011730217303173041730517306173071730817309173101731117312173131731417315173161731717318173191732017321173221732317324173251732617327173281732917330173311733217333173341733517336173371733817339173401734117342173431734417345173461734717348173491735017351173521735317354173551735617357173581735917360173611736217363173641736517366173671736817369173701737117372173731737417375173761737717378173791738017381173821738317384173851738617387173881738917390173911739217393173941739517396173971739817399174001740117402174031740417405174061740717408174091741017411174121741317414174151741617417174181741917420174211742217423174241742517426174271742817429174301743117432174331743417435174361743717438174391744017441174421744317444174451744617447174481744917450174511745217453174541745517456174571745817459174601746117462174631746417465174661746717468174691747017471174721747317474174751747617477174781747917480174811748217483174841748517486174871748817489174901749117492174931749417495174961749717498174991750017501175021750317504175051750617507175081750917510175111751217513175141751517516175171751817519175201752117522175231752417525175261752717528175291753017531175321753317534175351753617537175381753917540175411754217543175441754517546175471754817549175501755117552175531755417555175561755717558175591756017561175621756317564175651756617567175681756917570175711757217573175741757517576175771757817579175801758117582175831758417585175861758717588175891759017591175921759317594175951759617597175981759917600176011760217603176041760517606176071760817609176101761117612176131761417615176161761717618176191762017621176221762317624176251762617627176281762917630176311763217633176341763517636176371763817639176401764117642176431764417645176461764717648176491765017651176521765317654176551765617657176581765917660176611766217663176641766517666176671766817669176701767117672176731767417675176761767717678176791768017681176821768317684176851768617687176881768917690176911769217693176941769517696176971769817699177001770117702177031770417705177061770717708177091771017711177121771317714177151771617717177181771917720177211772217723177241772517726177271772817729177301773117732177331773417735177361773717738177391774017741177421774317744177451774617747177481774917750177511775217753177541775517756177571775817759177601776117762177631776417765177661776717768177691777017771177721777317774177751777617777177781777917780177811778217783177841778517786177871778817789177901779117792177931779417795177961779717798177991780017801178021780317804178051780617807178081780917810178111781217813178141781517816178171781817819178201782117822178231782417825178261782717828178291783017831178321783317834178351783617837178381783917840178411784217843178441784517846178471784817849178501785117852178531785417855178561785717858178591786017861178621786317864178651786617867178681786917870178711787217873178741787517876178771787817879178801788117882178831788417885178861788717888178891789017891178921789317894178951789617897178981789917900179011790217903179041790517906179071790817909179101791117912179131791417915179161791717918179191792017921179221792317924179251792617927179281792917930179311793217933179341793517936179371793817939179401794117942179431794417945179461794717948179491795017951179521795317954179551795617957179581795917960179611796217963179641796517966179671796817969179701797117972179731797417975179761797717978179791798017981179821798317984179851798617987179881798917990179911799217993179941799517996179971799817999180001800118002180031800418005180061800718008180091801018011180121801318014180151801618017180181801918020180211802218023180241802518026180271802818029180301803118032180331803418035180361803718038180391804018041180421804318044180451804618047180481804918050180511805218053180541805518056180571805818059180601806118062180631806418065180661806718068180691807018071180721807318074180751807618077180781807918080180811808218083180841808518086180871808818089180901809118092180931809418095180961809718098180991810018101181021810318104181051810618107181081810918110181111811218113181141811518116181171811818119181201812118122181231812418125181261812718128181291813018131181321813318134181351813618137181381813918140181411814218143181441814518146181471814818149181501815118152181531815418155181561815718158181591816018161181621816318164181651816618167181681816918170181711817218173181741817518176181771817818179181801818118182181831818418185181861818718188181891819018191181921819318194181951819618197181981819918200182011820218203182041820518206182071820818209182101821118212182131821418215182161821718218182191822018221182221822318224182251822618227182281822918230182311823218233182341823518236182371823818239182401824118242182431824418245182461824718248182491825018251182521825318254182551825618257182581825918260182611826218263182641826518266182671826818269182701827118272182731827418275182761827718278182791828018281182821828318284182851828618287182881828918290182911829218293182941829518296182971829818299183001830118302183031830418305183061830718308183091831018311183121831318314183151831618317183181831918320183211832218323183241832518326183271832818329183301833118332183331833418335183361833718338183391834018341183421834318344183451834618347183481834918350183511835218353183541835518356183571835818359183601836118362183631836418365183661836718368183691837018371183721837318374183751837618377183781837918380183811838218383183841838518386183871838818389183901839118392183931839418395183961839718398183991840018401184021840318404184051840618407184081840918410184111841218413184141841518416184171841818419184201842118422184231842418425184261842718428184291843018431184321843318434184351843618437184381843918440184411844218443184441844518446184471844818449184501845118452184531845418455184561845718458184591846018461184621846318464184651846618467184681846918470184711847218473184741847518476184771847818479184801848118482184831848418485184861848718488184891849018491184921849318494184951849618497184981849918500185011850218503185041850518506185071850818509185101851118512185131851418515185161851718518185191852018521185221852318524185251852618527185281852918530185311853218533185341853518536185371853818539185401854118542185431854418545185461854718548185491855018551185521855318554185551855618557185581855918560185611856218563185641856518566185671856818569185701857118572185731857418575185761857718578185791858018581185821858318584185851858618587185881858918590185911859218593185941859518596185971859818599186001860118602186031860418605186061860718608186091861018611186121861318614186151861618617186181861918620186211862218623186241862518626186271862818629186301863118632186331863418635186361863718638186391864018641186421864318644186451864618647186481864918650186511865218653186541865518656186571865818659186601866118662186631866418665186661866718668186691867018671186721867318674186751867618677186781867918680186811868218683186841868518686186871868818689186901869118692186931869418695186961869718698186991870018701187021870318704187051870618707187081870918710187111871218713187141871518716187171871818719187201872118722187231872418725187261872718728187291873018731187321873318734187351873618737187381873918740187411874218743187441874518746187471874818749187501875118752187531875418755187561875718758187591876018761187621876318764187651876618767187681876918770187711877218773187741877518776187771877818779187801878118782187831878418785187861878718788187891879018791187921879318794187951879618797187981879918800188011880218803188041880518806188071880818809188101881118812188131881418815188161881718818188191882018821188221882318824188251882618827188281882918830188311883218833188341883518836188371883818839188401884118842188431884418845188461884718848188491885018851188521885318854188551885618857188581885918860188611886218863188641886518866188671886818869188701887118872188731887418875188761887718878188791888018881188821888318884188851888618887188881888918890188911889218893188941889518896188971889818899189001890118902189031890418905189061890718908189091891018911189121891318914189151891618917189181891918920189211892218923189241892518926189271892818929189301893118932189331893418935189361893718938189391894018941189421894318944189451894618947189481894918950189511895218953189541895518956189571895818959189601896118962189631896418965189661896718968189691897018971189721897318974189751897618977189781897918980189811898218983189841898518986189871898818989189901899118992189931899418995189961899718998189991900019001190021900319004190051900619007190081900919010190111901219013190141901519016190171901819019190201902119022190231902419025190261902719028190291903019031190321903319034190351903619037190381903919040190411904219043190441904519046190471904819049190501905119052190531905419055190561905719058190591906019061190621906319064190651906619067190681906919070190711907219073190741907519076190771907819079190801908119082190831908419085190861908719088190891909019091190921909319094190951909619097190981909919100191011910219103191041910519106191071910819109191101911119112191131911419115191161911719118191191912019121191221912319124191251912619127191281912919130191311913219133191341913519136191371913819139191401914119142191431914419145191461914719148191491915019151191521915319154191551915619157191581915919160191611916219163191641916519166191671916819169191701917119172191731917419175191761917719178191791918019181191821918319184191851918619187191881918919190191911919219193191941919519196191971919819199192001920119202192031920419205192061920719208192091921019211192121921319214192151921619217192181921919220192211922219223192241922519226192271922819229192301923119232192331923419235192361923719238192391924019241192421924319244192451924619247192481924919250192511925219253192541925519256192571925819259192601926119262192631926419265192661926719268192691927019271192721927319274192751927619277192781927919280192811928219283192841928519286192871928819289192901929119292192931929419295192961929719298192991930019301193021930319304193051930619307193081930919310193111931219313193141931519316193171931819319193201932119322193231932419325193261932719328193291933019331193321933319334193351933619337193381933919340193411934219343193441934519346193471934819349193501935119352193531935419355193561935719358193591936019361193621936319364193651936619367193681936919370193711937219373193741937519376193771937819379193801938119382193831938419385193861938719388193891939019391193921939319394193951939619397193981939919400194011940219403194041940519406194071940819409194101941119412194131941419415194161941719418194191942019421194221942319424194251942619427194281942919430194311943219433194341943519436194371943819439194401944119442194431944419445194461944719448194491945019451194521945319454194551945619457194581945919460194611946219463194641946519466194671946819469194701947119472194731947419475194761947719478194791948019481194821948319484194851948619487194881948919490194911949219493194941949519496194971949819499195001950119502195031950419505195061950719508195091951019511195121951319514195151951619517195181951919520195211952219523195241952519526195271952819529195301953119532195331953419535195361953719538195391954019541195421954319544195451954619547195481954919550195511955219553195541955519556195571955819559195601956119562195631956419565195661956719568195691957019571195721957319574195751957619577195781957919580195811958219583195841958519586195871958819589195901959119592195931959419595195961959719598195991960019601196021960319604196051960619607196081960919610196111961219613196141961519616196171961819619196201962119622196231962419625196261962719628196291963019631196321963319634196351963619637196381963919640196411964219643196441964519646196471964819649196501965119652196531965419655196561965719658196591966019661196621966319664196651966619667196681966919670196711967219673196741967519676196771967819679196801968119682196831968419685196861968719688196891969019691196921969319694196951969619697196981969919700197011970219703197041970519706197071970819709197101971119712197131971419715197161971719718197191972019721197221972319724197251972619727197281972919730197311973219733197341973519736197371973819739197401974119742197431974419745197461974719748197491975019751197521975319754197551975619757197581975919760197611976219763197641976519766197671976819769197701977119772197731977419775197761977719778197791978019781197821978319784197851978619787197881978919790197911979219793197941979519796197971979819799198001980119802198031980419805198061980719808198091981019811198121981319814198151981619817198181981919820198211982219823198241982519826198271982819829198301983119832198331983419835198361983719838198391984019841198421984319844198451984619847198481984919850198511985219853198541985519856198571985819859198601986119862198631986419865198661986719868198691987019871198721987319874198751987619877198781987919880198811988219883198841988519886198871988819889198901989119892198931989419895198961989719898198991990019901199021990319904199051990619907199081990919910199111991219913199141991519916199171991819919199201992119922199231992419925199261992719928199291993019931199321993319934199351993619937199381993919940199411994219943199441994519946199471994819949199501995119952199531995419955199561995719958199591996019961199621996319964199651996619967199681996919970199711997219973199741997519976199771997819979199801998119982199831998419985199861998719988199891999019991199921999319994199951999619997199981999920000200012000220003200042000520006200072000820009200102001120012200132001420015200162001720018200192002020021200222002320024200252002620027200282002920030200312003220033200342003520036200372003820039200402004120042200432004420045200462004720048200492005020051200522005320054200552005620057200582005920060200612006220063200642006520066200672006820069200702007120072200732007420075200762007720078200792008020081200822008320084200852008620087200882008920090200912009220093200942009520096200972009820099201002010120102201032010420105201062010720108201092011020111201122011320114201152011620117201182011920120201212012220123201242012520126201272012820129201302013120132201332013420135201362013720138201392014020141201422014320144201452014620147201482014920150201512015220153201542015520156201572015820159201602016120162201632016420165201662016720168201692017020171201722017320174201752017620177201782017920180201812018220183201842018520186201872018820189201902019120192201932019420195201962019720198201992020020201202022020320204202052020620207202082020920210202112021220213202142021520216202172021820219202202022120222202232022420225202262022720228202292023020231202322023320234202352023620237202382023920240202412024220243202442024520246202472024820249202502025120252202532025420255202562025720258202592026020261202622026320264202652026620267202682026920270202712027220273202742027520276202772027820279202802028120282202832028420285202862028720288202892029020291202922029320294202952029620297202982029920300203012030220303203042030520306203072030820309203102031120312203132031420315203162031720318203192032020321203222032320324203252032620327203282032920330203312033220333203342033520336203372033820339203402034120342203432034420345203462034720348203492035020351203522035320354203552035620357203582035920360203612036220363203642036520366203672036820369203702037120372203732037420375203762037720378203792038020381203822038320384203852038620387203882038920390203912039220393203942039520396203972039820399204002040120402204032040420405204062040720408204092041020411204122041320414204152041620417204182041920420204212042220423204242042520426204272042820429204302043120432204332043420435204362043720438204392044020441204422044320444204452044620447204482044920450204512045220453204542045520456204572045820459204602046120462204632046420465204662046720468204692047020471204722047320474204752047620477204782047920480204812048220483204842048520486204872048820489204902049120492204932049420495204962049720498204992050020501205022050320504205052050620507205082050920510205112051220513205142051520516205172051820519205202052120522205232052420525205262052720528205292053020531205322053320534205352053620537205382053920540205412054220543205442054520546205472054820549205502055120552205532055420555205562055720558205592056020561205622056320564205652056620567205682056920570205712057220573205742057520576205772057820579205802058120582205832058420585205862058720588205892059020591205922059320594205952059620597205982059920600206012060220603206042060520606206072060820609206102061120612206132061420615206162061720618206192062020621206222062320624206252062620627206282062920630206312063220633206342063520636206372063820639206402064120642206432064420645206462064720648206492065020651206522065320654206552065620657206582065920660206612066220663206642066520666206672066820669206702067120672206732067420675206762067720678206792068020681206822068320684206852068620687206882068920690206912069220693206942069520696206972069820699207002070120702207032070420705207062070720708207092071020711207122071320714207152071620717207182071920720207212072220723207242072520726207272072820729207302073120732207332073420735207362073720738207392074020741207422074320744207452074620747207482074920750207512075220753207542075520756207572075820759207602076120762207632076420765207662076720768207692077020771207722077320774207752077620777207782077920780207812078220783207842078520786207872078820789207902079120792207932079420795207962079720798207992080020801208022080320804208052080620807208082080920810208112081220813208142081520816208172081820819208202082120822208232082420825208262082720828208292083020831208322083320834208352083620837208382083920840208412084220843208442084520846208472084820849208502085120852208532085420855208562085720858208592086020861208622086320864208652086620867208682086920870208712087220873208742087520876208772087820879208802088120882208832088420885208862088720888208892089020891208922089320894208952089620897208982089920900209012090220903209042090520906209072090820909209102091120912209132091420915209162091720918209192092020921209222092320924209252092620927209282092920930209312093220933209342093520936209372093820939209402094120942209432094420945209462094720948209492095020951209522095320954209552095620957209582095920960209612096220963209642096520966209672096820969209702097120972209732097420975209762097720978209792098020981209822098320984209852098620987209882098920990209912099220993209942099520996209972099820999210002100121002210032100421005210062100721008210092101021011210122101321014210152101621017210182101921020210212102221023210242102521026210272102821029210302103121032210332103421035210362103721038210392104021041210422104321044210452104621047210482104921050210512105221053210542105521056210572105821059210602106121062210632106421065210662106721068210692107021071210722107321074210752107621077210782107921080210812108221083210842108521086210872108821089210902109121092210932109421095210962109721098210992110021101211022110321104211052110621107211082110921110211112111221113211142111521116211172111821119211202112121122211232112421125211262112721128211292113021131211322113321134211352113621137211382113921140211412114221143211442114521146211472114821149211502115121152211532115421155211562115721158211592116021161211622116321164211652116621167211682116921170211712117221173211742117521176211772117821179211802118121182211832118421185211862118721188211892119021191211922119321194211952119621197211982119921200212012120221203212042120521206212072120821209212102121121212212132121421215212162121721218212192122021221212222122321224212252122621227212282122921230212312123221233212342123521236212372123821239212402124121242212432124421245212462124721248212492125021251212522125321254212552125621257212582125921260212612126221263212642126521266212672126821269212702127121272212732127421275212762127721278212792128021281212822128321284212852128621287212882128921290212912129221293212942129521296212972129821299213002130121302213032130421305213062130721308213092131021311213122131321314213152131621317213182131921320213212132221323213242132521326213272132821329213302133121332213332133421335213362133721338213392134021341213422134321344213452134621347213482134921350213512135221353213542135521356213572135821359213602136121362213632136421365213662136721368213692137021371213722137321374213752137621377213782137921380213812138221383213842138521386213872138821389213902139121392213932139421395213962139721398213992140021401214022140321404214052140621407214082140921410214112141221413214142141521416214172141821419214202142121422214232142421425214262142721428214292143021431214322143321434214352143621437214382143921440214412144221443214442144521446214472144821449214502145121452214532145421455214562145721458214592146021461214622146321464214652146621467214682146921470214712147221473214742147521476214772147821479214802148121482214832148421485214862148721488214892149021491214922149321494214952149621497214982149921500215012150221503215042150521506215072150821509215102151121512215132151421515215162151721518215192152021521215222152321524215252152621527215282152921530215312153221533215342153521536215372153821539215402154121542215432154421545215462154721548215492155021551215522155321554215552155621557215582155921560215612156221563215642156521566215672156821569215702157121572215732157421575215762157721578215792158021581215822158321584215852158621587215882158921590215912159221593215942159521596215972159821599216002160121602216032160421605216062160721608216092161021611216122161321614216152161621617216182161921620216212162221623216242162521626216272162821629216302163121632216332163421635216362163721638216392164021641216422164321644216452164621647216482164921650216512165221653216542165521656216572165821659216602166121662216632166421665216662166721668216692167021671216722167321674216752167621677216782167921680216812168221683216842168521686216872168821689216902169121692216932169421695216962169721698216992170021701217022170321704217052170621707217082170921710217112171221713217142171521716217172171821719217202172121722217232172421725217262172721728217292173021731217322173321734217352173621737217382173921740217412174221743217442174521746217472174821749217502175121752217532175421755217562175721758217592176021761217622176321764217652176621767217682176921770217712177221773217742177521776217772177821779217802178121782217832178421785217862178721788217892179021791217922179321794217952179621797217982179921800218012180221803218042180521806218072180821809218102181121812218132181421815218162181721818218192182021821218222182321824218252182621827218282182921830218312183221833218342183521836218372183821839218402184121842218432184421845218462184721848218492185021851218522185321854218552185621857218582185921860218612186221863218642186521866218672186821869218702187121872218732187421875218762187721878218792188021881218822188321884218852188621887218882188921890218912189221893218942189521896218972189821899219002190121902219032190421905219062190721908219092191021911219122191321914219152191621917219182191921920219212192221923219242192521926219272192821929219302193121932219332193421935219362193721938219392194021941219422194321944219452194621947219482194921950219512195221953219542195521956219572195821959219602196121962219632196421965219662196721968219692197021971219722197321974219752197621977219782197921980219812198221983219842198521986219872198821989219902199121992219932199421995219962199721998219992200022001220022200322004220052200622007220082200922010220112201222013220142201522016220172201822019220202202122022220232202422025220262202722028220292203022031220322203322034220352203622037220382203922040220412204222043220442204522046220472204822049220502205122052220532205422055220562205722058220592206022061220622206322064220652206622067220682206922070220712207222073220742207522076220772207822079220802208122082220832208422085220862208722088220892209022091220922209322094220952209622097220982209922100221012210222103221042210522106221072210822109221102211122112221132211422115221162211722118221192212022121221222212322124221252212622127221282212922130221312213222133221342213522136221372213822139221402214122142221432214422145221462214722148221492215022151221522215322154221552215622157221582215922160221612216222163221642216522166221672216822169221702217122172221732217422175221762217722178221792218022181221822218322184221852218622187221882218922190221912219222193221942219522196221972219822199222002220122202222032220422205222062220722208222092221022211222122221322214222152221622217222182221922220222212222222223222242222522226222272222822229222302223122232222332223422235222362223722238222392224022241222422224322244222452224622247222482224922250222512225222253222542225522256222572225822259222602226122262222632226422265222662226722268222692227022271222722227322274222752227622277222782227922280222812228222283222842228522286222872228822289222902229122292222932229422295222962229722298222992230022301223022230322304223052230622307223082230922310223112231222313223142231522316223172231822319223202232122322223232232422325223262232722328223292233022331223322233322334223352233622337223382233922340223412234222343223442234522346223472234822349223502235122352223532235422355223562235722358223592236022361223622236322364223652236622367223682236922370223712237222373223742237522376223772237822379223802238122382223832238422385223862238722388223892239022391223922239322394223952239622397223982239922400224012240222403224042240522406224072240822409224102241122412224132241422415224162241722418224192242022421224222242322424224252242622427224282242922430224312243222433224342243522436224372243822439224402244122442224432244422445224462244722448224492245022451224522245322454224552245622457224582245922460224612246222463224642246522466224672246822469224702247122472224732247422475224762247722478224792248022481224822248322484224852248622487224882248922490224912249222493224942249522496224972249822499225002250122502225032250422505225062250722508225092251022511225122251322514225152251622517225182251922520225212252222523225242252522526225272252822529225302253122532225332253422535225362253722538225392254022541225422254322544225452254622547225482254922550225512255222553225542255522556225572255822559225602256122562225632256422565225662256722568225692257022571225722257322574225752257622577225782257922580225812258222583225842258522586225872258822589225902259122592225932259422595225962259722598225992260022601226022260322604226052260622607226082260922610226112261222613226142261522616226172261822619226202262122622226232262422625226262262722628226292263022631226322263322634226352263622637226382263922640226412264222643226442264522646226472264822649226502265122652226532265422655226562265722658226592266022661226622266322664226652266622667226682266922670226712267222673226742267522676226772267822679226802268122682226832268422685226862268722688226892269022691226922269322694226952269622697226982269922700227012270222703227042270522706227072270822709227102271122712227132271422715227162271722718227192272022721227222272322724227252272622727227282272922730227312273222733227342273522736227372273822739227402274122742227432274422745227462274722748227492275022751227522275322754227552275622757227582275922760227612276222763227642276522766227672276822769227702277122772227732277422775227762277722778227792278022781227822278322784227852278622787227882278922790227912279222793227942279522796227972279822799228002280122802228032280422805228062280722808228092281022811228122281322814228152281622817228182281922820228212282222823228242282522826228272282822829228302283122832228332283422835228362283722838228392284022841228422284322844228452284622847228482284922850228512285222853228542285522856228572285822859228602286122862228632286422865228662286722868228692287022871228722287322874228752287622877228782287922880228812288222883228842288522886228872288822889228902289122892228932289422895228962289722898228992290022901229022290322904229052290622907229082290922910229112291222913229142291522916229172291822919229202292122922229232292422925229262292722928229292293022931229322293322934229352293622937229382293922940229412294222943229442294522946229472294822949229502295122952229532295422955229562295722958229592296022961229622296322964229652296622967229682296922970229712297222973229742297522976229772297822979229802298122982229832298422985229862298722988229892299022991229922299322994229952299622997229982299923000230012300223003230042300523006230072300823009230102301123012230132301423015230162301723018230192302023021230222302323024230252302623027230282302923030230312303223033230342303523036230372303823039230402304123042230432304423045230462304723048230492305023051230522305323054230552305623057230582305923060230612306223063230642306523066230672306823069230702307123072230732307423075230762307723078230792308023081230822308323084230852308623087230882308923090230912309223093230942309523096230972309823099231002310123102231032310423105231062310723108231092311023111231122311323114231152311623117231182311923120231212312223123231242312523126231272312823129231302313123132231332313423135231362313723138231392314023141231422314323144231452314623147231482314923150231512315223153231542315523156231572315823159231602316123162231632316423165231662316723168231692317023171231722317323174231752317623177231782317923180231812318223183231842318523186231872318823189231902319123192231932319423195231962319723198231992320023201232022320323204232052320623207232082320923210232112321223213232142321523216232172321823219232202322123222232232322423225232262322723228232292323023231232322323323234232352323623237232382323923240232412324223243232442324523246232472324823249232502325123252232532325423255232562325723258232592326023261232622326323264232652326623267232682326923270232712327223273232742327523276232772327823279232802328123282232832328423285232862328723288232892329023291232922329323294232952329623297232982329923300233012330223303233042330523306233072330823309233102331123312233132331423315233162331723318233192332023321233222332323324233252332623327233282332923330233312333223333233342333523336233372333823339233402334123342233432334423345233462334723348233492335023351233522335323354233552335623357233582335923360233612336223363233642336523366233672336823369233702337123372233732337423375233762337723378233792338023381233822338323384233852338623387233882338923390233912339223393233942339523396233972339823399234002340123402234032340423405234062340723408234092341023411234122341323414234152341623417234182341923420234212342223423234242342523426234272342823429234302343123432234332343423435234362343723438234392344023441234422344323444234452344623447234482344923450234512345223453234542345523456234572345823459234602346123462234632346423465234662346723468234692347023471234722347323474234752347623477234782347923480234812348223483234842348523486234872348823489234902349123492234932349423495234962349723498234992350023501235022350323504235052350623507235082350923510235112351223513235142351523516235172351823519235202352123522235232352423525235262352723528235292353023531235322353323534235352353623537235382353923540235412354223543235442354523546235472354823549235502355123552235532355423555235562355723558235592356023561235622356323564235652356623567235682356923570235712357223573235742357523576235772357823579235802358123582235832358423585235862358723588235892359023591235922359323594235952359623597235982359923600236012360223603236042360523606236072360823609236102361123612236132361423615236162361723618236192362023621236222362323624236252362623627236282362923630236312363223633236342363523636236372363823639236402364123642236432364423645236462364723648236492365023651236522365323654236552365623657236582365923660236612366223663236642366523666236672366823669236702367123672236732367423675236762367723678236792368023681236822368323684236852368623687236882368923690236912369223693236942369523696236972369823699237002370123702237032370423705237062370723708237092371023711237122371323714237152371623717237182371923720237212372223723237242372523726237272372823729237302373123732237332373423735237362373723738237392374023741237422374323744237452374623747237482374923750237512375223753237542375523756237572375823759237602376123762237632376423765237662376723768237692377023771237722377323774237752377623777237782377923780237812378223783237842378523786237872378823789237902379123792237932379423795237962379723798237992380023801238022380323804238052380623807238082380923810238112381223813238142381523816238172381823819238202382123822238232382423825238262382723828238292383023831238322383323834238352383623837238382383923840238412384223843238442384523846238472384823849238502385123852238532385423855238562385723858238592386023861238622386323864238652386623867238682386923870238712387223873238742387523876238772387823879238802388123882238832388423885238862388723888238892389023891238922389323894238952389623897238982389923900239012390223903239042390523906239072390823909239102391123912239132391423915239162391723918239192392023921239222392323924239252392623927239282392923930239312393223933239342393523936239372393823939239402394123942239432394423945239462394723948239492395023951239522395323954239552395623957239582395923960239612396223963239642396523966239672396823969239702397123972239732397423975239762397723978239792398023981239822398323984239852398623987239882398923990239912399223993239942399523996239972399823999240002400124002240032400424005240062400724008240092401024011240122401324014240152401624017240182401924020240212402224023240242402524026240272402824029240302403124032240332403424035240362403724038240392404024041240422404324044240452404624047240482404924050240512405224053240542405524056240572405824059240602406124062240632406424065240662406724068240692407024071240722407324074240752407624077240782407924080240812408224083240842408524086240872408824089240902409124092240932409424095240962409724098240992410024101241022410324104241052410624107241082410924110241112411224113241142411524116241172411824119241202412124122241232412424125241262412724128241292413024131241322413324134241352413624137241382413924140241412414224143241442414524146241472414824149241502415124152241532415424155241562415724158241592416024161241622416324164241652416624167241682416924170241712417224173241742417524176241772417824179241802418124182241832418424185241862418724188241892419024191241922419324194241952419624197241982419924200242012420224203242042420524206242072420824209242102421124212242132421424215242162421724218242192422024221242222422324224242252422624227242282422924230242312423224233242342423524236242372423824239242402424124242242432424424245242462424724248242492425024251242522425324254242552425624257242582425924260242612426224263242642426524266242672426824269242702427124272242732427424275242762427724278242792428024281242822428324284242852428624287242882428924290242912429224293242942429524296242972429824299243002430124302243032430424305243062430724308243092431024311243122431324314243152431624317243182431924320243212432224323243242432524326243272432824329243302433124332243332433424335243362433724338243392434024341243422434324344243452434624347243482434924350243512435224353243542435524356243572435824359243602436124362243632436424365243662436724368243692437024371243722437324374243752437624377243782437924380243812438224383243842438524386243872438824389243902439124392243932439424395243962439724398243992440024401244022440324404244052440624407244082440924410244112441224413244142441524416244172441824419244202442124422244232442424425244262442724428244292443024431244322443324434244352443624437244382443924440244412444224443244442444524446244472444824449244502445124452244532445424455244562445724458244592446024461244622446324464244652446624467244682446924470244712447224473244742447524476244772447824479244802448124482244832448424485244862448724488244892449024491244922449324494244952449624497244982449924500245012450224503245042450524506245072450824509245102451124512245132451424515245162451724518245192452024521245222452324524245252452624527245282452924530245312453224533245342453524536245372453824539245402454124542245432454424545245462454724548245492455024551245522455324554245552455624557245582455924560245612456224563245642456524566245672456824569245702457124572245732457424575245762457724578245792458024581245822458324584245852458624587245882458924590245912459224593245942459524596245972459824599246002460124602246032460424605246062460724608246092461024611246122461324614246152461624617246182461924620246212462224623246242462524626246272462824629246302463124632246332463424635246362463724638246392464024641246422464324644246452464624647246482464924650246512465224653246542465524656246572465824659246602466124662246632466424665246662466724668246692467024671246722467324674246752467624677246782467924680246812468224683246842468524686246872468824689246902469124692246932469424695246962469724698246992470024701247022470324704247052470624707247082470924710247112471224713247142471524716247172471824719247202472124722247232472424725247262472724728247292473024731247322473324734247352473624737247382473924740247412474224743247442474524746247472474824749247502475124752247532475424755247562475724758247592476024761247622476324764247652476624767247682476924770247712477224773247742477524776247772477824779247802478124782247832478424785247862478724788247892479024791247922479324794247952479624797247982479924800248012480224803248042480524806248072480824809248102481124812248132481424815248162481724818248192482024821248222482324824248252482624827248282482924830248312483224833248342483524836248372483824839248402484124842248432484424845248462484724848248492485024851248522485324854248552485624857248582485924860248612486224863248642486524866248672486824869248702487124872248732487424875248762487724878248792488024881248822488324884248852488624887248882488924890248912489224893248942489524896248972489824899249002490124902249032490424905249062490724908249092491024911249122491324914249152491624917249182491924920249212492224923249242492524926249272492824929249302493124932249332493424935249362493724938249392494024941249422494324944249452494624947249482494924950249512495224953249542495524956249572495824959249602496124962249632496424965249662496724968249692497024971249722497324974249752497624977249782497924980249812498224983249842498524986249872498824989249902499124992249932499424995249962499724998249992500025001250022500325004250052500625007250082500925010250112501225013250142501525016250172501825019250202502125022250232502425025250262502725028250292503025031250322503325034250352503625037250382503925040250412504225043250442504525046250472504825049250502505125052250532505425055250562505725058250592506025061250622506325064250652506625067250682506925070250712507225073250742507525076250772507825079250802508125082250832508425085250862508725088250892509025091250922509325094250952509625097250982509925100251012510225103251042510525106251072510825109251102511125112251132511425115251162511725118251192512025121251222512325124251252512625127251282512925130251312513225133251342513525136251372513825139251402514125142251432514425145251462514725148251492515025151251522515325154251552515625157251582515925160251612516225163251642516525166251672516825169251702517125172251732517425175251762517725178251792518025181251822518325184251852518625187251882518925190251912519225193251942519525196251972519825199252002520125202252032520425205252062520725208252092521025211252122521325214252152521625217252182521925220252212522225223252242522525226252272522825229252302523125232252332523425235252362523725238252392524025241252422524325244252452524625247252482524925250252512525225253252542525525256252572525825259252602526125262252632526425265252662526725268252692527025271252722527325274252752527625277252782527925280252812528225283252842528525286252872528825289252902529125292252932529425295252962529725298252992530025301253022530325304253052530625307253082530925310253112531225313253142531525316253172531825319253202532125322253232532425325253262532725328253292533025331253322533325334253352533625337253382533925340253412534225343253442534525346253472534825349253502535125352253532535425355253562535725358253592536025361253622536325364253652536625367253682536925370253712537225373253742537525376253772537825379253802538125382253832538425385253862538725388253892539025391253922539325394253952539625397253982539925400254012540225403254042540525406254072540825409254102541125412254132541425415254162541725418254192542025421254222542325424254252542625427254282542925430254312543225433254342543525436254372543825439254402544125442254432544425445254462544725448254492545025451254522545325454254552545625457254582545925460254612546225463254642546525466254672546825469254702547125472254732547425475254762547725478254792548025481254822548325484254852548625487254882548925490254912549225493254942549525496254972549825499255002550125502255032550425505255062550725508255092551025511255122551325514255152551625517255182551925520255212552225523255242552525526255272552825529255302553125532255332553425535255362553725538255392554025541255422554325544255452554625547255482554925550255512555225553255542555525556255572555825559255602556125562255632556425565255662556725568255692557025571255722557325574255752557625577255782557925580255812558225583255842558525586255872558825589255902559125592255932559425595255962559725598255992560025601256022560325604256052560625607256082560925610256112561225613256142561525616256172561825619256202562125622256232562425625256262562725628256292563025631256322563325634256352563625637256382563925640256412564225643256442564525646256472564825649256502565125652256532565425655256562565725658256592566025661256622566325664256652566625667256682566925670256712567225673256742567525676256772567825679256802568125682256832568425685256862568725688256892569025691256922569325694256952569625697256982569925700257012570225703257042570525706257072570825709257102571125712257132571425715257162571725718257192572025721257222572325724257252572625727257282572925730257312573225733257342573525736257372573825739257402574125742257432574425745257462574725748257492575025751257522575325754257552575625757257582575925760257612576225763257642576525766257672576825769257702577125772257732577425775257762577725778257792578025781257822578325784257852578625787257882578925790257912579225793257942579525796257972579825799258002580125802258032580425805258062580725808258092581025811258122581325814258152581625817258182581925820258212582225823258242582525826258272582825829258302583125832258332583425835258362583725838258392584025841258422584325844258452584625847258482584925850258512585225853258542585525856258572585825859258602586125862258632586425865258662586725868258692587025871258722587325874258752587625877258782587925880258812588225883258842588525886258872588825889258902589125892258932589425895258962589725898258992590025901259022590325904259052590625907259082590925910259112591225913259142591525916259172591825919259202592125922259232592425925259262592725928259292593025931259322593325934259352593625937259382593925940259412594225943259442594525946259472594825949259502595125952259532595425955259562595725958259592596025961259622596325964259652596625967259682596925970259712597225973259742597525976259772597825979259802598125982259832598425985259862598725988259892599025991259922599325994259952599625997259982599926000260012600226003260042600526006260072600826009260102601126012260132601426015260162601726018260192602026021260222602326024260252602626027260282602926030260312603226033260342603526036260372603826039260402604126042260432604426045260462604726048260492605026051260522605326054260552605626057260582605926060260612606226063260642606526066260672606826069260702607126072260732607426075260762607726078260792608026081260822608326084260852608626087260882608926090260912609226093260942609526096260972609826099261002610126102261032610426105261062610726108261092611026111261122611326114261152611626117261182611926120261212612226123261242612526126261272612826129261302613126132261332613426135261362613726138261392614026141261422614326144261452614626147261482614926150261512615226153261542615526156261572615826159261602616126162261632616426165261662616726168261692617026171261722617326174261752617626177261782617926180261812618226183261842618526186261872618826189261902619126192261932619426195261962619726198261992620026201262022620326204262052620626207262082620926210262112621226213262142621526216262172621826219262202622126222262232622426225262262622726228262292623026231262322623326234262352623626237262382623926240262412624226243262442624526246262472624826249262502625126252262532625426255262562625726258262592626026261262622626326264262652626626267262682626926270262712627226273262742627526276262772627826279262802628126282262832628426285262862628726288262892629026291262922629326294262952629626297262982629926300263012630226303263042630526306263072630826309263102631126312263132631426315263162631726318263192632026321263222632326324263252632626327263282632926330263312633226333263342633526336263372633826339263402634126342263432634426345263462634726348263492635026351263522635326354263552635626357263582635926360263612636226363263642636526366263672636826369263702637126372263732637426375263762637726378263792638026381263822638326384263852638626387263882638926390263912639226393263942639526396263972639826399264002640126402264032640426405264062640726408264092641026411264122641326414264152641626417264182641926420264212642226423264242642526426264272642826429264302643126432264332643426435264362643726438264392644026441264422644326444264452644626447264482644926450264512645226453264542645526456264572645826459264602646126462264632646426465264662646726468264692647026471264722647326474264752647626477264782647926480264812648226483264842648526486264872648826489264902649126492264932649426495264962649726498264992650026501265022650326504265052650626507265082650926510265112651226513265142651526516265172651826519265202652126522265232652426525265262652726528265292653026531265322653326534265352653626537265382653926540265412654226543265442654526546265472654826549265502655126552265532655426555265562655726558265592656026561265622656326564265652656626567265682656926570265712657226573265742657526576265772657826579265802658126582265832658426585265862658726588265892659026591265922659326594265952659626597265982659926600266012660226603266042660526606266072660826609266102661126612266132661426615266162661726618266192662026621266222662326624266252662626627266282662926630266312663226633266342663526636266372663826639266402664126642266432664426645266462664726648266492665026651266522665326654266552665626657266582665926660266612666226663266642666526666266672666826669266702667126672266732667426675266762667726678266792668026681266822668326684266852668626687266882668926690266912669226693266942669526696266972669826699267002670126702267032670426705267062670726708267092671026711267122671326714267152671626717267182671926720267212672226723267242672526726267272672826729267302673126732267332673426735267362673726738267392674026741267422674326744267452674626747267482674926750267512675226753267542675526756267572675826759267602676126762267632676426765267662676726768267692677026771267722677326774267752677626777267782677926780267812678226783267842678526786267872678826789267902679126792267932679426795267962679726798267992680026801268022680326804268052680626807268082680926810268112681226813268142681526816268172681826819268202682126822268232682426825268262682726828268292683026831268322683326834268352683626837268382683926840268412684226843268442684526846268472684826849268502685126852268532685426855268562685726858268592686026861268622686326864268652686626867268682686926870268712687226873268742687526876268772687826879268802688126882268832688426885268862688726888268892689026891268922689326894268952689626897268982689926900269012690226903269042690526906269072690826909269102691126912269132691426915269162691726918269192692026921269222692326924269252692626927269282692926930269312693226933269342693526936269372693826939269402694126942269432694426945269462694726948269492695026951269522695326954269552695626957269582695926960269612696226963269642696526966269672696826969269702697126972269732697426975269762697726978269792698026981269822698326984269852698626987269882698926990269912699226993269942699526996269972699826999270002700127002270032700427005270062700727008270092701027011270122701327014270152701627017270182701927020270212702227023270242702527026270272702827029270302703127032270332703427035270362703727038270392704027041270422704327044270452704627047270482704927050270512705227053270542705527056270572705827059270602706127062270632706427065270662706727068270692707027071270722707327074270752707627077270782707927080270812708227083270842708527086270872708827089270902709127092270932709427095270962709727098270992710027101271022710327104271052710627107271082710927110271112711227113271142711527116271172711827119271202712127122271232712427125271262712727128271292713027131271322713327134271352713627137271382713927140271412714227143271442714527146271472714827149271502715127152271532715427155271562715727158271592716027161271622716327164271652716627167271682716927170271712717227173271742717527176271772717827179271802718127182271832718427185271862718727188271892719027191271922719327194271952719627197271982719927200272012720227203272042720527206272072720827209272102721127212272132721427215272162721727218272192722027221272222722327224272252722627227272282722927230272312723227233272342723527236272372723827239272402724127242272432724427245272462724727248272492725027251272522725327254272552725627257272582725927260272612726227263272642726527266272672726827269272702727127272272732727427275272762727727278272792728027281272822728327284272852728627287272882728927290272912729227293272942729527296272972729827299273002730127302273032730427305273062730727308273092731027311273122731327314273152731627317273182731927320273212732227323273242732527326273272732827329273302733127332273332733427335273362733727338273392734027341273422734327344273452734627347273482734927350273512735227353273542735527356273572735827359273602736127362273632736427365273662736727368273692737027371273722737327374273752737627377273782737927380273812738227383273842738527386273872738827389273902739127392273932739427395273962739727398273992740027401274022740327404274052740627407274082740927410274112741227413274142741527416274172741827419274202742127422274232742427425274262742727428274292743027431274322743327434274352743627437274382743927440274412744227443274442744527446274472744827449274502745127452274532745427455274562745727458274592746027461274622746327464274652746627467274682746927470274712747227473274742747527476274772747827479274802748127482274832748427485274862748727488274892749027491274922749327494274952749627497274982749927500275012750227503275042750527506275072750827509275102751127512275132751427515275162751727518275192752027521275222752327524275252752627527275282752927530275312753227533275342753527536275372753827539275402754127542275432754427545275462754727548275492755027551275522755327554275552755627557275582755927560275612756227563275642756527566275672756827569275702757127572275732757427575275762757727578275792758027581275822758327584275852758627587275882758927590275912759227593275942759527596275972759827599276002760127602276032760427605276062760727608276092761027611276122761327614276152761627617276182761927620276212762227623276242762527626276272762827629276302763127632276332763427635276362763727638276392764027641276422764327644276452764627647276482764927650276512765227653276542765527656276572765827659276602766127662276632766427665276662766727668276692767027671276722767327674276752767627677276782767927680276812768227683276842768527686276872768827689276902769127692276932769427695276962769727698276992770027701277022770327704277052770627707277082770927710277112771227713277142771527716277172771827719277202772127722277232772427725277262772727728277292773027731277322773327734277352773627737277382773927740277412774227743277442774527746277472774827749277502775127752277532775427755277562775727758277592776027761277622776327764277652776627767277682776927770277712777227773277742777527776277772777827779277802778127782277832778427785277862778727788277892779027791277922779327794277952779627797277982779927800278012780227803278042780527806278072780827809278102781127812278132781427815278162781727818278192782027821278222782327824278252782627827278282782927830278312783227833278342783527836278372783827839278402784127842278432784427845278462784727848278492785027851278522785327854278552785627857278582785927860278612786227863278642786527866278672786827869278702787127872278732787427875278762787727878278792788027881278822788327884278852788627887278882788927890278912789227893278942789527896278972789827899279002790127902279032790427905279062790727908279092791027911279122791327914279152791627917279182791927920279212792227923279242792527926279272792827929279302793127932279332793427935279362793727938279392794027941279422794327944279452794627947279482794927950279512795227953279542795527956279572795827959279602796127962279632796427965279662796727968279692797027971279722797327974279752797627977279782797927980279812798227983279842798527986279872798827989279902799127992279932799427995279962799727998279992800028001280022800328004280052800628007280082800928010280112801228013280142801528016280172801828019280202802128022280232802428025280262802728028280292803028031280322803328034280352803628037280382803928040280412804228043280442804528046280472804828049280502805128052280532805428055280562805728058280592806028061280622806328064280652806628067280682806928070280712807228073280742807528076280772807828079280802808128082280832808428085280862808728088280892809028091280922809328094280952809628097280982809928100281012810228103281042810528106281072810828109281102811128112281132811428115281162811728118281192812028121281222812328124281252812628127281282812928130281312813228133281342813528136281372813828139281402814128142281432814428145281462814728148281492815028151281522815328154281552815628157281582815928160281612816228163281642816528166281672816828169281702817128172281732817428175281762817728178281792818028181281822818328184281852818628187281882818928190281912819228193281942819528196281972819828199282002820128202282032820428205282062820728208282092821028211282122821328214282152821628217282182821928220282212822228223282242822528226282272822828229282302823128232282332823428235282362823728238282392824028241282422824328244282452824628247282482824928250282512825228253282542825528256282572825828259282602826128262282632826428265282662826728268282692827028271282722827328274282752827628277282782827928280282812828228283282842828528286282872828828289282902829128292282932829428295282962829728298282992830028301283022830328304283052830628307283082830928310283112831228313283142831528316283172831828319283202832128322283232832428325283262832728328283292833028331283322833328334283352833628337283382833928340283412834228343283442834528346283472834828349283502835128352283532835428355283562835728358283592836028361283622836328364283652836628367283682836928370283712837228373283742837528376283772837828379283802838128382283832838428385283862838728388283892839028391283922839328394283952839628397283982839928400284012840228403284042840528406284072840828409284102841128412284132841428415284162841728418284192842028421284222842328424284252842628427284282842928430284312843228433284342843528436284372843828439284402844128442284432844428445284462844728448284492845028451284522845328454284552845628457284582845928460284612846228463284642846528466284672846828469284702847128472284732847428475284762847728478284792848028481284822848328484284852848628487284882848928490284912849228493284942849528496284972849828499285002850128502285032850428505285062850728508285092851028511285122851328514285152851628517285182851928520285212852228523285242852528526285272852828529285302853128532285332853428535285362853728538285392854028541285422854328544285452854628547285482854928550285512855228553285542855528556285572855828559285602856128562285632856428565285662856728568285692857028571285722857328574285752857628577285782857928580285812858228583285842858528586285872858828589285902859128592285932859428595285962859728598285992860028601286022860328604286052860628607286082860928610286112861228613286142861528616286172861828619286202862128622286232862428625286262862728628286292863028631286322863328634286352863628637286382863928640286412864228643286442864528646286472864828649286502865128652286532865428655286562865728658286592866028661286622866328664286652866628667286682866928670286712867228673286742867528676286772867828679286802868128682286832868428685286862868728688286892869028691286922869328694286952869628697286982869928700287012870228703287042870528706287072870828709287102871128712287132871428715287162871728718287192872028721287222872328724287252872628727287282872928730287312873228733287342873528736287372873828739287402874128742287432874428745287462874728748287492875028751287522875328754287552875628757287582875928760287612876228763287642876528766287672876828769287702877128772287732877428775287762877728778287792878028781287822878328784287852878628787287882878928790287912879228793287942879528796287972879828799288002880128802288032880428805288062880728808288092881028811288122881328814288152881628817288182881928820288212882228823288242882528826288272882828829288302883128832288332883428835288362883728838288392884028841288422884328844288452884628847288482884928850288512885228853288542885528856288572885828859288602886128862288632886428865288662886728868288692887028871288722887328874288752887628877288782887928880288812888228883288842888528886288872888828889288902889128892288932889428895288962889728898288992890028901289022890328904289052890628907289082890928910289112891228913289142891528916289172891828919289202892128922289232892428925289262892728928289292893028931289322893328934289352893628937289382893928940289412894228943289442894528946289472894828949289502895128952289532895428955289562895728958289592896028961289622896328964289652896628967289682896928970289712897228973289742897528976289772897828979289802898128982289832898428985289862898728988289892899028991289922899328994289952899628997289982899929000290012900229003290042900529006290072900829009290102901129012290132901429015290162901729018290192902029021290222902329024290252902629027290282902929030290312903229033290342903529036290372903829039290402904129042290432904429045290462904729048290492905029051290522905329054290552905629057290582905929060290612906229063290642906529066290672906829069290702907129072290732907429075290762907729078290792908029081290822908329084290852908629087290882908929090290912909229093290942909529096290972909829099291002910129102291032910429105291062910729108291092911029111291122911329114291152911629117291182911929120291212912229123291242912529126291272912829129291302913129132291332913429135291362913729138291392914029141291422914329144291452914629147291482914929150291512915229153291542915529156291572915829159291602916129162291632916429165291662916729168291692917029171291722917329174291752917629177291782917929180291812918229183291842918529186291872918829189291902919129192291932919429195291962919729198291992920029201292022920329204292052920629207292082920929210292112921229213292142921529216292172921829219292202922129222292232922429225292262922729228292292923029231292322923329234292352923629237292382923929240292412924229243292442924529246292472924829249292502925129252292532925429255292562925729258292592926029261292622926329264292652926629267292682926929270292712927229273292742927529276292772927829279292802928129282292832928429285292862928729288292892929029291292922929329294292952929629297292982929929300293012930229303293042930529306293072930829309293102931129312293132931429315293162931729318293192932029321293222932329324293252932629327293282932929330293312933229333293342933529336293372933829339293402934129342293432934429345293462934729348293492935029351293522935329354293552935629357293582935929360293612936229363293642936529366293672936829369293702937129372293732937429375293762937729378293792938029381293822938329384293852938629387293882938929390293912939229393293942939529396293972939829399294002940129402294032940429405294062940729408294092941029411294122941329414294152941629417294182941929420294212942229423294242942529426294272942829429294302943129432294332943429435294362943729438294392944029441294422944329444294452944629447294482944929450294512945229453294542945529456294572945829459294602946129462294632946429465294662946729468294692947029471294722947329474294752947629477294782947929480294812948229483294842948529486294872948829489294902949129492294932949429495294962949729498294992950029501295022950329504295052950629507295082950929510295112951229513295142951529516295172951829519295202952129522295232952429525295262952729528295292953029531295322953329534295352953629537295382953929540295412954229543295442954529546295472954829549295502955129552295532955429555295562955729558295592956029561295622956329564295652956629567295682956929570295712957229573295742957529576295772957829579295802958129582295832958429585295862958729588295892959029591295922959329594295952959629597295982959929600296012960229603296042960529606296072960829609296102961129612296132961429615296162961729618296192962029621296222962329624296252962629627296282962929630296312963229633296342963529636296372963829639296402964129642296432964429645296462964729648296492965029651296522965329654296552965629657296582965929660296612966229663296642966529666296672966829669296702967129672296732967429675296762967729678296792968029681296822968329684296852968629687296882968929690296912969229693296942969529696296972969829699297002970129702297032970429705297062970729708297092971029711297122971329714297152971629717297182971929720297212972229723297242972529726297272972829729297302973129732297332973429735297362973729738297392974029741297422974329744297452974629747297482974929750297512975229753297542975529756297572975829759297602976129762297632976429765297662976729768297692977029771297722977329774297752977629777297782977929780297812978229783297842978529786297872978829789297902979129792297932979429795297962979729798297992980029801298022980329804298052980629807298082980929810298112981229813298142981529816298172981829819298202982129822298232982429825298262982729828298292983029831298322983329834298352983629837298382983929840298412984229843298442984529846298472984829849298502985129852298532985429855298562985729858298592986029861298622986329864298652986629867298682986929870298712987229873298742987529876298772987829879298802988129882298832988429885298862988729888298892989029891298922989329894298952989629897298982989929900299012990229903299042990529906299072990829909299102991129912299132991429915299162991729918299192992029921299222992329924299252992629927299282992929930299312993229933299342993529936299372993829939299402994129942299432994429945299462994729948299492995029951299522995329954299552995629957299582995929960299612996229963299642996529966299672996829969299702997129972299732997429975299762997729978299792998029981299822998329984299852998629987299882998929990299912999229993299942999529996299972999829999300003000130002300033000430005300063000730008300093001030011300123001330014300153001630017300183001930020300213002230023300243002530026300273002830029300303003130032300333003430035300363003730038300393004030041300423004330044300453004630047300483004930050300513005230053300543005530056300573005830059300603006130062300633006430065300663006730068300693007030071300723007330074300753007630077300783007930080300813008230083300843008530086300873008830089300903009130092300933009430095300963009730098300993010030101301023010330104301053010630107301083010930110301113011230113301143011530116301173011830119301203012130122301233012430125301263012730128301293013030131301323013330134301353013630137301383013930140301413014230143301443014530146301473014830149301503015130152301533015430155301563015730158301593016030161301623016330164301653016630167301683016930170301713017230173301743017530176301773017830179301803018130182301833018430185301863018730188301893019030191301923019330194301953019630197301983019930200302013020230203302043020530206302073020830209302103021130212302133021430215302163021730218302193022030221302223022330224302253022630227302283022930230302313023230233302343023530236302373023830239302403024130242302433024430245302463024730248302493025030251302523025330254302553025630257302583025930260302613026230263302643026530266302673026830269302703027130272302733027430275302763027730278302793028030281302823028330284302853028630287302883028930290302913029230293302943029530296302973029830299303003030130302303033030430305303063030730308303093031030311303123031330314303153031630317303183031930320303213032230323303243032530326303273032830329303303033130332303333033430335303363033730338303393034030341303423034330344303453034630347303483034930350303513035230353303543035530356303573035830359303603036130362303633036430365303663036730368303693037030371303723037330374303753037630377303783037930380303813038230383303843038530386303873038830389303903039130392303933039430395303963039730398303993040030401304023040330404304053040630407304083040930410304113041230413304143041530416304173041830419304203042130422304233042430425304263042730428304293043030431304323043330434304353043630437304383043930440304413044230443304443044530446304473044830449304503045130452304533045430455304563045730458304593046030461304623046330464304653046630467304683046930470304713047230473304743047530476304773047830479304803048130482304833048430485304863048730488304893049030491304923049330494304953049630497304983049930500305013050230503305043050530506305073050830509305103051130512305133051430515305163051730518305193052030521305223052330524305253052630527305283052930530305313053230533305343053530536305373053830539305403054130542305433054430545305463054730548305493055030551305523055330554305553055630557305583055930560305613056230563305643056530566305673056830569305703057130572305733057430575305763057730578305793058030581305823058330584305853058630587305883058930590305913059230593305943059530596305973059830599306003060130602306033060430605306063060730608306093061030611306123061330614306153061630617306183061930620306213062230623306243062530626306273062830629306303063130632306333063430635306363063730638306393064030641306423064330644306453064630647306483064930650306513065230653306543065530656306573065830659306603066130662306633066430665306663066730668306693067030671306723067330674306753067630677306783067930680306813068230683306843068530686306873068830689306903069130692306933069430695306963069730698306993070030701307023070330704307053070630707307083070930710307113071230713307143071530716307173071830719307203072130722307233072430725307263072730728307293073030731307323073330734307353073630737307383073930740307413074230743307443074530746307473074830749307503075130752307533075430755307563075730758307593076030761307623076330764307653076630767307683076930770307713077230773307743077530776307773077830779307803078130782307833078430785307863078730788307893079030791307923079330794307953079630797307983079930800308013080230803308043080530806308073080830809308103081130812308133081430815308163081730818308193082030821308223082330824308253082630827308283082930830308313083230833308343083530836308373083830839308403084130842308433084430845308463084730848308493085030851308523085330854308553085630857308583085930860308613086230863308643086530866308673086830869308703087130872308733087430875308763087730878308793088030881308823088330884308853088630887308883088930890308913089230893308943089530896308973089830899309003090130902309033090430905309063090730908309093091030911309123091330914309153091630917309183091930920309213092230923309243092530926309273092830929309303093130932309333093430935309363093730938309393094030941309423094330944309453094630947309483094930950309513095230953309543095530956309573095830959309603096130962309633096430965309663096730968309693097030971309723097330974309753097630977309783097930980309813098230983309843098530986309873098830989309903099130992309933099430995309963099730998309993100031001310023100331004310053100631007310083100931010310113101231013310143101531016310173101831019310203102131022310233102431025310263102731028310293103031031310323103331034310353103631037310383103931040310413104231043310443104531046310473104831049310503105131052310533105431055310563105731058310593106031061310623106331064310653106631067310683106931070310713107231073310743107531076310773107831079310803108131082310833108431085310863108731088310893109031091310923109331094310953109631097310983109931100311013110231103311043110531106311073110831109311103111131112311133111431115311163111731118311193112031121311223112331124311253112631127311283112931130311313113231133311343113531136311373113831139311403114131142311433114431145311463114731148311493115031151311523115331154311553115631157311583115931160311613116231163311643116531166311673116831169311703117131172311733117431175311763117731178311793118031181311823118331184311853118631187311883118931190311913119231193311943119531196311973119831199312003120131202312033120431205312063120731208312093121031211312123121331214312153121631217312183121931220312213122231223312243122531226312273122831229312303123131232312333123431235312363123731238312393124031241312423124331244312453124631247312483124931250312513125231253312543125531256312573125831259312603126131262312633126431265312663126731268312693127031271312723127331274312753127631277312783127931280312813128231283312843128531286312873128831289312903129131292312933129431295312963129731298312993130031301313023130331304313053130631307313083130931310313113131231313313143131531316313173131831319313203132131322313233132431325313263132731328313293133031331313323133331334313353133631337313383133931340313413134231343313443134531346313473134831349313503135131352313533135431355313563135731358313593136031361313623136331364313653136631367313683136931370313713137231373313743137531376313773137831379313803138131382313833138431385313863138731388313893139031391313923139331394313953139631397313983139931400314013140231403314043140531406314073140831409314103141131412314133141431415314163141731418314193142031421314223142331424314253142631427314283142931430314313143231433314343143531436314373143831439314403144131442314433144431445314463144731448314493145031451314523145331454314553145631457314583145931460314613146231463314643146531466314673146831469314703147131472314733147431475314763147731478314793148031481314823148331484314853148631487314883148931490314913149231493314943149531496314973149831499315003150131502315033150431505315063150731508315093151031511315123151331514315153151631517315183151931520315213152231523315243152531526315273152831529315303153131532315333153431535315363153731538315393154031541315423154331544315453154631547315483154931550315513155231553315543155531556315573155831559315603156131562315633156431565315663156731568315693157031571315723157331574315753157631577315783157931580315813158231583315843158531586315873158831589315903159131592315933159431595315963159731598315993160031601316023160331604316053160631607316083160931610316113161231613316143161531616316173161831619316203162131622316233162431625316263162731628316293163031631316323163331634316353163631637316383163931640316413164231643316443164531646316473164831649316503165131652316533165431655316563165731658316593166031661316623166331664316653166631667316683166931670316713167231673316743167531676316773167831679316803168131682316833168431685316863168731688316893169031691316923169331694316953169631697316983169931700317013170231703317043170531706317073170831709317103171131712317133171431715317163171731718317193172031721317223172331724317253172631727317283172931730317313173231733317343173531736317373173831739317403174131742317433174431745317463174731748317493175031751317523175331754317553175631757317583175931760317613176231763317643176531766317673176831769317703177131772317733177431775317763177731778317793178031781317823178331784317853178631787317883178931790317913179231793317943179531796317973179831799318003180131802318033180431805318063180731808318093181031811318123181331814318153181631817318183181931820318213182231823318243182531826318273182831829318303183131832318333183431835318363183731838318393184031841318423184331844318453184631847318483184931850318513185231853318543185531856318573185831859318603186131862318633186431865318663186731868318693187031871318723187331874318753187631877318783187931880318813188231883318843188531886318873188831889318903189131892318933189431895318963189731898318993190031901319023190331904319053190631907319083190931910319113191231913319143191531916319173191831919319203192131922319233192431925319263192731928319293193031931319323193331934319353193631937319383193931940319413194231943319443194531946319473194831949319503195131952319533195431955319563195731958319593196031961319623196331964319653196631967319683196931970319713197231973319743197531976319773197831979319803198131982319833198431985319863198731988319893199031991319923199331994319953199631997319983199932000320013200232003320043200532006320073200832009320103201132012320133201432015320163201732018320193202032021320223202332024320253202632027320283202932030320313203232033320343203532036320373203832039320403204132042320433204432045320463204732048320493205032051320523205332054320553205632057320583205932060320613206232063320643206532066320673206832069320703207132072320733207432075320763207732078320793208032081320823208332084320853208632087320883208932090320913209232093320943209532096320973209832099321003210132102321033210432105321063210732108321093211032111321123211332114321153211632117321183211932120321213212232123321243212532126321273212832129321303213132132321333213432135321363213732138321393214032141321423214332144321453214632147321483214932150321513215232153321543215532156321573215832159321603216132162321633216432165321663216732168321693217032171321723217332174321753217632177321783217932180321813218232183321843218532186321873218832189321903219132192321933219432195321963219732198321993220032201322023220332204322053220632207322083220932210322113221232213322143221532216322173221832219322203222132222322233222432225322263222732228322293223032231322323223332234322353223632237322383223932240322413224232243322443224532246322473224832249322503225132252322533225432255322563225732258322593226032261322623226332264322653226632267322683226932270322713227232273322743227532276322773227832279322803228132282322833228432285322863228732288322893229032291322923229332294322953229632297322983229932300323013230232303323043230532306323073230832309323103231132312323133231432315323163231732318323193232032321323223232332324323253232632327323283232932330323313233232333323343233532336323373233832339323403234132342323433234432345323463234732348323493235032351323523235332354323553235632357323583235932360323613236232363323643236532366323673236832369323703237132372323733237432375323763237732378323793238032381323823238332384323853238632387323883238932390323913239232393323943239532396323973239832399324003240132402324033240432405324063240732408324093241032411324123241332414324153241632417324183241932420324213242232423324243242532426324273242832429324303243132432324333243432435324363243732438324393244032441324423244332444324453244632447324483244932450324513245232453324543245532456324573245832459324603246132462324633246432465324663246732468324693247032471324723247332474324753247632477324783247932480324813248232483324843248532486324873248832489324903249132492324933249432495324963249732498324993250032501325023250332504325053250632507325083250932510325113251232513325143251532516325173251832519325203252132522325233252432525325263252732528325293253032531325323253332534325353253632537325383253932540325413254232543325443254532546325473254832549325503255132552325533255432555325563255732558325593256032561325623256332564325653256632567325683256932570325713257232573325743257532576325773257832579325803258132582325833258432585325863258732588325893259032591325923259332594325953259632597325983259932600326013260232603326043260532606326073260832609326103261132612326133261432615326163261732618326193262032621326223262332624326253262632627326283262932630326313263232633326343263532636326373263832639326403264132642326433264432645326463264732648326493265032651326523265332654326553265632657326583265932660326613266232663326643266532666326673266832669326703267132672326733267432675326763267732678326793268032681326823268332684326853268632687326883268932690326913269232693326943269532696326973269832699327003270132702327033270432705327063270732708327093271032711327123271332714327153271632717327183271932720327213272232723327243272532726327273272832729327303273132732327333273432735327363273732738327393274032741327423274332744327453274632747327483274932750327513275232753327543275532756327573275832759327603276132762327633276432765327663276732768327693277032771327723277332774327753277632777327783277932780327813278232783327843278532786327873278832789327903279132792327933279432795327963279732798327993280032801328023280332804328053280632807328083280932810328113281232813328143281532816328173281832819328203282132822328233282432825328263282732828328293283032831328323283332834328353283632837328383283932840328413284232843328443284532846328473284832849328503285132852328533285432855328563285732858328593286032861328623286332864328653286632867328683286932870328713287232873328743287532876328773287832879328803288132882328833288432885328863288732888328893289032891328923289332894328953289632897328983289932900329013290232903329043290532906329073290832909329103291132912329133291432915329163291732918329193292032921329223292332924329253292632927329283292932930329313293232933329343293532936329373293832939329403294132942329433294432945329463294732948329493295032951329523295332954329553295632957329583295932960329613296232963329643296532966329673296832969329703297132972329733297432975329763297732978329793298032981329823298332984329853298632987329883298932990329913299232993329943299532996329973299832999330003300133002330033300433005330063300733008330093301033011330123301333014330153301633017330183301933020330213302233023330243302533026330273302833029330303303133032330333303433035330363303733038330393304033041330423304333044330453304633047330483304933050330513305233053330543305533056330573305833059330603306133062330633306433065330663306733068330693307033071330723307333074330753307633077330783307933080330813308233083330843308533086330873308833089330903309133092330933309433095330963309733098330993310033101331023310333104331053310633107331083310933110331113311233113331143311533116331173311833119331203312133122331233312433125331263312733128331293313033131331323313333134331353313633137331383313933140331413314233143331443314533146331473314833149331503315133152331533315433155331563315733158331593316033161331623316333164331653316633167331683316933170331713317233173331743317533176331773317833179331803318133182331833318433185331863318733188331893319033191331923319333194331953319633197331983319933200332013320233203332043320533206332073320833209332103321133212332133321433215332163321733218332193322033221332223322333224332253322633227332283322933230332313323233233332343323533236332373323833239332403324133242332433324433245332463324733248332493325033251332523325333254332553325633257332583325933260332613326233263332643326533266332673326833269332703327133272332733327433275332763327733278332793328033281332823328333284332853328633287332883328933290332913329233293332943329533296332973329833299333003330133302333033330433305333063330733308333093331033311333123331333314333153331633317333183331933320333213332233323333243332533326333273332833329333303333133332333333333433335333363333733338333393334033341333423334333344333453334633347333483334933350333513335233353333543335533356333573335833359333603336133362333633336433365333663336733368333693337033371333723337333374333753337633377333783337933380333813338233383333843338533386333873338833389333903339133392333933339433395333963339733398333993340033401334023340333404334053340633407334083340933410334113341233413334143341533416334173341833419334203342133422334233342433425334263342733428334293343033431334323343333434334353343633437334383343933440334413344233443334443344533446334473344833449334503345133452334533345433455334563345733458334593346033461334623346333464334653346633467334683346933470334713347233473334743347533476334773347833479334803348133482334833348433485334863348733488334893349033491334923349333494334953349633497334983349933500335013350233503335043350533506335073350833509335103351133512335133351433515335163351733518335193352033521335223352333524335253352633527335283352933530335313353233533335343353533536335373353833539335403354133542335433354433545335463354733548335493355033551335523355333554335553355633557335583355933560335613356233563335643356533566335673356833569335703357133572335733357433575335763357733578335793358033581335823358333584335853358633587335883358933590335913359233593335943359533596335973359833599336003360133602336033360433605336063360733608336093361033611336123361333614336153361633617336183361933620336213362233623336243362533626336273362833629336303363133632336333363433635336363363733638336393364033641336423364333644336453364633647336483364933650336513365233653336543365533656336573365833659336603366133662336633366433665336663366733668336693367033671336723367333674336753367633677336783367933680336813368233683336843368533686336873368833689336903369133692336933369433695336963369733698336993370033701337023370333704337053370633707337083370933710337113371233713337143371533716337173371833719337203372133722337233372433725337263372733728337293373033731337323373333734337353373633737337383373933740337413374233743337443374533746337473374833749337503375133752337533375433755337563375733758337593376033761337623376333764337653376633767337683376933770337713377233773337743377533776337773377833779337803378133782337833378433785337863378733788337893379033791337923379333794337953379633797337983379933800338013380233803338043380533806338073380833809338103381133812338133381433815338163381733818338193382033821338223382333824338253382633827338283382933830338313383233833338343383533836338373383833839338403384133842338433384433845338463384733848338493385033851338523385333854338553385633857338583385933860338613386233863338643386533866338673386833869338703387133872338733387433875338763387733878338793388033881338823388333884338853388633887338883388933890338913389233893338943389533896338973389833899339003390133902339033390433905339063390733908339093391033911339123391333914339153391633917339183391933920339213392233923339243392533926339273392833929339303393133932339333393433935339363393733938339393394033941339423394333944339453394633947339483394933950339513395233953339543395533956339573395833959339603396133962339633396433965339663396733968339693397033971339723397333974339753397633977339783397933980339813398233983339843398533986339873398833989339903399133992339933399433995339963399733998339993400034001340023400334004340053400634007340083400934010340113401234013340143401534016340173401834019340203402134022340233402434025340263402734028340293403034031340323403334034340353403634037340383403934040340413404234043340443404534046340473404834049340503405134052340533405434055340563405734058340593406034061340623406334064340653406634067340683406934070340713407234073340743407534076340773407834079340803408134082340833408434085340863408734088340893409034091340923409334094340953409634097340983409934100341013410234103341043410534106341073410834109341103411134112341133411434115341163411734118341193412034121341223412334124341253412634127341283412934130341313413234133341343413534136341373413834139341403414134142341433414434145341463414734148341493415034151341523415334154341553415634157341583415934160341613416234163341643416534166341673416834169341703417134172341733417434175341763417734178341793418034181341823418334184341853418634187341883418934190341913419234193341943419534196341973419834199342003420134202342033420434205342063420734208342093421034211342123421334214342153421634217342183421934220342213422234223342243422534226342273422834229342303423134232342333423434235342363423734238342393424034241342423424334244342453424634247342483424934250342513425234253342543425534256342573425834259342603426134262342633426434265342663426734268342693427034271342723427334274342753427634277342783427934280342813428234283342843428534286342873428834289342903429134292342933429434295342963429734298342993430034301343023430334304343053430634307343083430934310343113431234313343143431534316343173431834319343203432134322343233432434325343263432734328343293433034331343323433334334343353433634337343383433934340343413434234343343443434534346343473434834349343503435134352343533435434355343563435734358343593436034361343623436334364343653436634367343683436934370343713437234373343743437534376343773437834379343803438134382343833438434385343863438734388343893439034391343923439334394343953439634397343983439934400344013440234403344043440534406344073440834409344103441134412344133441434415344163441734418344193442034421344223442334424344253442634427344283442934430344313443234433344343443534436344373443834439344403444134442344433444434445344463444734448344493445034451344523445334454344553445634457344583445934460344613446234463344643446534466344673446834469344703447134472344733447434475344763447734478344793448034481344823448334484344853448634487344883448934490344913449234493344943449534496344973449834499345003450134502345033450434505345063450734508345093451034511345123451334514345153451634517345183451934520345213452234523345243452534526345273452834529345303453134532345333453434535345363453734538345393454034541345423454334544345453454634547345483454934550345513455234553345543455534556345573455834559345603456134562345633456434565345663456734568345693457034571345723457334574345753457634577345783457934580345813458234583345843458534586345873458834589345903459134592345933459434595345963459734598345993460034601346023460334604346053460634607346083460934610346113461234613346143461534616346173461834619346203462134622346233462434625346263462734628346293463034631346323463334634346353463634637346383463934640346413464234643346443464534646346473464834649346503465134652346533465434655346563465734658346593466034661346623466334664346653466634667346683466934670346713467234673346743467534676346773467834679346803468134682346833468434685346863468734688346893469034691346923469334694346953469634697346983469934700347013470234703347043470534706347073470834709347103471134712347133471434715347163471734718347193472034721347223472334724347253472634727347283472934730347313473234733347343473534736347373473834739347403474134742347433474434745347463474734748347493475034751347523475334754347553475634757347583475934760347613476234763347643476534766347673476834769347703477134772347733477434775347763477734778347793478034781347823478334784347853478634787347883478934790347913479234793347943479534796347973479834799348003480134802348033480434805348063480734808348093481034811348123481334814348153481634817348183481934820348213482234823348243482534826348273482834829348303483134832348333483434835348363483734838348393484034841348423484334844348453484634847348483484934850348513485234853348543485534856348573485834859348603486134862348633486434865348663486734868348693487034871348723487334874348753487634877348783487934880348813488234883348843488534886348873488834889348903489134892348933489434895348963489734898348993490034901349023490334904349053490634907349083490934910349113491234913349143491534916349173491834919349203492134922349233492434925349263492734928349293493034931349323493334934349353493634937349383493934940349413494234943349443494534946349473494834949349503495134952349533495434955349563495734958349593496034961349623496334964349653496634967349683496934970349713497234973349743497534976349773497834979349803498134982349833498434985349863498734988349893499034991349923499334994349953499634997349983499935000350013500235003350043500535006350073500835009350103501135012350133501435015350163501735018350193502035021350223502335024350253502635027350283502935030350313503235033350343503535036350373503835039350403504135042350433504435045350463504735048350493505035051350523505335054350553505635057350583505935060350613506235063350643506535066350673506835069350703507135072350733507435075350763507735078350793508035081350823508335084350853508635087350883508935090350913509235093350943509535096350973509835099351003510135102351033510435105351063510735108351093511035111351123511335114351153511635117351183511935120351213512235123351243512535126351273512835129351303513135132351333513435135351363513735138351393514035141351423514335144351453514635147351483514935150351513515235153351543515535156351573515835159351603516135162351633516435165351663516735168351693517035171351723517335174351753517635177351783517935180351813518235183351843518535186351873518835189351903519135192351933519435195351963519735198351993520035201352023520335204352053520635207352083520935210352113521235213352143521535216352173521835219352203522135222352233522435225352263522735228352293523035231352323523335234352353523635237352383523935240352413524235243352443524535246352473524835249352503525135252352533525435255352563525735258352593526035261352623526335264352653526635267352683526935270352713527235273352743527535276352773527835279352803528135282352833528435285352863528735288352893529035291352923529335294352953529635297352983529935300353013530235303353043530535306353073530835309353103531135312353133531435315353163531735318353193532035321353223532335324353253532635327353283532935330353313533235333353343533535336353373533835339353403534135342353433534435345353463534735348353493535035351353523535335354353553535635357353583535935360353613536235363353643536535366353673536835369353703537135372353733537435375353763537735378353793538035381353823538335384353853538635387353883538935390353913539235393353943539535396353973539835399354003540135402354033540435405354063540735408354093541035411354123541335414354153541635417354183541935420354213542235423354243542535426354273542835429354303543135432354333543435435354363543735438354393544035441354423544335444354453544635447354483544935450354513545235453354543545535456354573545835459354603546135462354633546435465354663546735468354693547035471354723547335474354753547635477354783547935480354813548235483354843548535486354873548835489354903549135492354933549435495354963549735498354993550035501355023550335504355053550635507355083550935510355113551235513355143551535516355173551835519355203552135522355233552435525355263552735528355293553035531355323553335534355353553635537355383553935540355413554235543355443554535546355473554835549355503555135552355533555435555355563555735558355593556035561355623556335564355653556635567355683556935570355713557235573355743557535576355773557835579355803558135582355833558435585355863558735588355893559035591355923559335594355953559635597355983559935600356013560235603356043560535606356073560835609356103561135612356133561435615356163561735618356193562035621356223562335624356253562635627356283562935630356313563235633356343563535636356373563835639356403564135642356433564435645356463564735648356493565035651356523565335654356553565635657356583565935660356613566235663356643566535666356673566835669356703567135672356733567435675356763567735678356793568035681356823568335684356853568635687356883568935690356913569235693356943569535696356973569835699357003570135702357033570435705357063570735708357093571035711357123571335714357153571635717357183571935720357213572235723357243572535726357273572835729357303573135732357333573435735357363573735738357393574035741357423574335744357453574635747357483574935750357513575235753357543575535756357573575835759357603576135762357633576435765357663576735768357693577035771357723577335774357753577635777357783577935780357813578235783357843578535786357873578835789357903579135792357933579435795357963579735798357993580035801358023580335804358053580635807358083580935810358113581235813358143581535816358173581835819358203582135822358233582435825358263582735828358293583035831358323583335834358353583635837358383583935840358413584235843358443584535846358473584835849358503585135852358533585435855358563585735858358593586035861358623586335864358653586635867358683586935870358713587235873358743587535876358773587835879358803588135882358833588435885358863588735888358893589035891358923589335894358953589635897358983589935900359013590235903359043590535906359073590835909359103591135912359133591435915359163591735918359193592035921359223592335924359253592635927359283592935930359313593235933359343593535936359373593835939359403594135942359433594435945359463594735948359493595035951359523595335954359553595635957359583595935960359613596235963359643596535966359673596835969359703597135972359733597435975359763597735978359793598035981359823598335984359853598635987359883598935990359913599235993359943599535996359973599835999360003600136002360033600436005360063600736008360093601036011360123601336014360153601636017360183601936020360213602236023360243602536026360273602836029360303603136032360333603436035360363603736038360393604036041360423604336044360453604636047360483604936050360513605236053360543605536056360573605836059360603606136062360633606436065360663606736068360693607036071360723607336074360753607636077360783607936080360813608236083360843608536086360873608836089360903609136092360933609436095360963609736098360993610036101361023610336104361053610636107361083610936110361113611236113361143611536116361173611836119361203612136122361233612436125361263612736128361293613036131361323613336134361353613636137361383613936140361413614236143361443614536146361473614836149361503615136152361533615436155361563615736158361593616036161361623616336164361653616636167361683616936170361713617236173361743617536176361773617836179361803618136182361833618436185361863618736188361893619036191361923619336194361953619636197361983619936200362013620236203362043620536206362073620836209362103621136212362133621436215362163621736218362193622036221362223622336224362253622636227362283622936230362313623236233362343623536236362373623836239362403624136242362433624436245362463624736248362493625036251362523625336254362553625636257362583625936260362613626236263362643626536266362673626836269362703627136272362733627436275362763627736278362793628036281362823628336284362853628636287362883628936290362913629236293362943629536296362973629836299363003630136302363033630436305363063630736308363093631036311363123631336314363153631636317363183631936320363213632236323363243632536326363273632836329363303633136332363333633436335363363633736338363393634036341363423634336344363453634636347363483634936350363513635236353363543635536356363573635836359363603636136362363633636436365363663636736368363693637036371363723637336374363753637636377363783637936380363813638236383363843638536386363873638836389363903639136392363933639436395363963639736398363993640036401364023640336404364053640636407364083640936410364113641236413364143641536416364173641836419364203642136422364233642436425364263642736428364293643036431364323643336434364353643636437364383643936440364413644236443364443644536446364473644836449364503645136452364533645436455364563645736458364593646036461364623646336464364653646636467364683646936470364713647236473364743647536476364773647836479364803648136482364833648436485364863648736488364893649036491364923649336494364953649636497364983649936500365013650236503365043650536506365073650836509365103651136512365133651436515365163651736518365193652036521365223652336524365253652636527365283652936530365313653236533365343653536536365373653836539365403654136542365433654436545365463654736548365493655036551365523655336554365553655636557365583655936560365613656236563365643656536566365673656836569365703657136572365733657436575365763657736578365793658036581365823658336584365853658636587365883658936590365913659236593365943659536596365973659836599366003660136602366033660436605366063660736608366093661036611366123661336614366153661636617366183661936620366213662236623366243662536626366273662836629366303663136632366333663436635366363663736638366393664036641366423664336644366453664636647366483664936650366513665236653366543665536656366573665836659366603666136662366633666436665366663666736668366693667036671366723667336674366753667636677366783667936680366813668236683366843668536686366873668836689366903669136692366933669436695366963669736698366993670036701367023670336704367053670636707367083670936710367113671236713367143671536716367173671836719367203672136722367233672436725367263672736728367293673036731367323673336734367353673636737367383673936740367413674236743367443674536746367473674836749367503675136752367533675436755367563675736758367593676036761367623676336764367653676636767367683676936770367713677236773367743677536776367773677836779367803678136782367833678436785367863678736788367893679036791367923679336794367953679636797367983679936800368013680236803368043680536806368073680836809368103681136812368133681436815368163681736818368193682036821368223682336824368253682636827368283682936830368313683236833368343683536836368373683836839368403684136842368433684436845368463684736848368493685036851368523685336854368553685636857368583685936860368613686236863368643686536866368673686836869368703687136872368733687436875368763687736878368793688036881368823688336884368853688636887368883688936890368913689236893368943689536896368973689836899369003690136902369033690436905369063690736908369093691036911369123691336914369153691636917369183691936920369213692236923369243692536926369273692836929369303693136932369333693436935369363693736938369393694036941369423694336944369453694636947369483694936950369513695236953369543695536956369573695836959369603696136962369633696436965369663696736968369693697036971369723697336974369753697636977369783697936980369813698236983369843698536986369873698836989369903699136992369933699436995369963699736998369993700037001370023700337004370053700637007370083700937010370113701237013370143701537016370173701837019370203702137022370233702437025370263702737028370293703037031370323703337034370353703637037370383703937040370413704237043370443704537046370473704837049370503705137052370533705437055370563705737058370593706037061370623706337064370653706637067370683706937070370713707237073370743707537076370773707837079370803708137082370833708437085370863708737088370893709037091370923709337094370953709637097370983709937100371013710237103371043710537106371073710837109371103711137112371133711437115371163711737118371193712037121371223712337124371253712637127371283712937130371313713237133371343713537136371373713837139371403714137142371433714437145371463714737148371493715037151371523715337154371553715637157371583715937160371613716237163371643716537166371673716837169371703717137172371733717437175371763717737178371793718037181371823718337184371853718637187371883718937190371913719237193371943719537196371973719837199372003720137202372033720437205372063720737208372093721037211372123721337214372153721637217372183721937220372213722237223372243722537226372273722837229372303723137232372333723437235372363723737238372393724037241372423724337244372453724637247372483724937250372513725237253372543725537256372573725837259372603726137262372633726437265372663726737268372693727037271372723727337274372753727637277372783727937280372813728237283372843728537286372873728837289372903729137292372933729437295372963729737298372993730037301373023730337304373053730637307373083730937310373113731237313373143731537316373173731837319373203732137322373233732437325373263732737328373293733037331373323733337334373353733637337373383733937340373413734237343373443734537346373473734837349373503735137352373533735437355373563735737358373593736037361373623736337364373653736637367373683736937370373713737237373373743737537376373773737837379373803738137382373833738437385373863738737388373893739037391373923739337394373953739637397373983739937400374013740237403374043740537406374073740837409374103741137412374133741437415374163741737418374193742037421374223742337424374253742637427374283742937430374313743237433374343743537436374373743837439374403744137442374433744437445374463744737448374493745037451374523745337454374553745637457374583745937460374613746237463374643746537466374673746837469374703747137472374733747437475374763747737478374793748037481374823748337484374853748637487374883748937490374913749237493374943749537496374973749837499375003750137502375033750437505375063750737508375093751037511375123751337514375153751637517375183751937520375213752237523375243752537526375273752837529375303753137532375333753437535375363753737538375393754037541375423754337544375453754637547375483754937550375513755237553375543755537556375573755837559375603756137562375633756437565375663756737568375693757037571375723757337574375753757637577375783757937580375813758237583375843758537586375873758837589375903759137592375933759437595375963759737598375993760037601376023760337604376053760637607376083760937610376113761237613376143761537616376173761837619376203762137622376233762437625376263762737628376293763037631376323763337634376353763637637376383763937640376413764237643376443764537646376473764837649376503765137652376533765437655376563765737658376593766037661376623766337664376653766637667376683766937670376713767237673376743767537676376773767837679376803768137682376833768437685376863768737688376893769037691376923769337694376953769637697376983769937700377013770237703377043770537706377073770837709377103771137712377133771437715377163771737718377193772037721377223772337724377253772637727377283772937730377313773237733377343773537736377373773837739377403774137742377433774437745377463774737748377493775037751377523775337754377553775637757377583775937760377613776237763377643776537766377673776837769377703777137772377733777437775377763777737778377793778037781377823778337784377853778637787377883778937790377913779237793377943779537796377973779837799378003780137802378033780437805378063780737808378093781037811378123781337814378153781637817378183781937820378213782237823378243782537826378273782837829378303783137832378333783437835378363783737838378393784037841378423784337844378453784637847378483784937850378513785237853378543785537856378573785837859378603786137862378633786437865378663786737868378693787037871378723787337874378753787637877378783787937880378813788237883378843788537886378873788837889378903789137892378933789437895378963789737898378993790037901379023790337904379053790637907379083790937910379113791237913379143791537916379173791837919379203792137922379233792437925379263792737928379293793037931379323793337934379353793637937379383793937940379413794237943379443794537946379473794837949379503795137952379533795437955379563795737958379593796037961379623796337964379653796637967379683796937970379713797237973379743797537976379773797837979379803798137982379833798437985379863798737988379893799037991379923799337994379953799637997379983799938000380013800238003380043800538006380073800838009380103801138012380133801438015380163801738018380193802038021380223802338024380253802638027380283802938030380313803238033380343803538036380373803838039380403804138042380433804438045380463804738048380493805038051380523805338054380553805638057380583805938060380613806238063380643806538066380673806838069380703807138072380733807438075380763807738078380793808038081380823808338084380853808638087380883808938090380913809238093380943809538096380973809838099381003810138102381033810438105381063810738108381093811038111381123811338114381153811638117381183811938120381213812238123381243812538126381273812838129381303813138132381333813438135381363813738138381393814038141381423814338144381453814638147381483814938150381513815238153381543815538156381573815838159381603816138162381633816438165381663816738168381693817038171381723817338174381753817638177381783817938180381813818238183381843818538186381873818838189381903819138192381933819438195381963819738198381993820038201382023820338204382053820638207382083820938210382113821238213382143821538216382173821838219382203822138222382233822438225382263822738228382293823038231382323823338234382353823638237382383823938240382413824238243382443824538246382473824838249382503825138252382533825438255382563825738258382593826038261382623826338264382653826638267382683826938270382713827238273382743827538276382773827838279382803828138282382833828438285382863828738288382893829038291382923829338294382953829638297382983829938300383013830238303383043830538306383073830838309383103831138312383133831438315383163831738318383193832038321383223832338324383253832638327383283832938330383313833238333383343833538336383373833838339383403834138342383433834438345383463834738348383493835038351383523835338354383553835638357383583835938360383613836238363383643836538366383673836838369383703837138372383733837438375383763837738378383793838038381383823838338384383853838638387383883838938390383913839238393383943839538396383973839838399384003840138402384033840438405384063840738408384093841038411384123841338414384153841638417384183841938420384213842238423384243842538426384273842838429384303843138432384333843438435384363843738438384393844038441384423844338444384453844638447384483844938450384513845238453384543845538456384573845838459384603846138462384633846438465384663846738468384693847038471384723847338474384753847638477384783847938480384813848238483384843848538486384873848838489384903849138492384933849438495384963849738498384993850038501385023850338504385053850638507385083850938510385113851238513385143851538516385173851838519385203852138522385233852438525385263852738528385293853038531385323853338534385353853638537385383853938540385413854238543385443854538546385473854838549385503855138552385533855438555385563855738558385593856038561385623856338564385653856638567385683856938570385713857238573385743857538576385773857838579385803858138582385833858438585385863858738588385893859038591385923859338594385953859638597385983859938600386013860238603386043860538606386073860838609386103861138612386133861438615386163861738618386193862038621386223862338624386253862638627386283862938630386313863238633386343863538636386373863838639386403864138642386433864438645386463864738648386493865038651386523865338654386553865638657386583865938660386613866238663386643866538666386673866838669386703867138672386733867438675386763867738678386793868038681386823868338684386853868638687386883868938690386913869238693386943869538696386973869838699387003870138702387033870438705387063870738708387093871038711387123871338714387153871638717387183871938720387213872238723387243872538726387273872838729387303873138732387333873438735387363873738738387393874038741387423874338744387453874638747387483874938750387513875238753387543875538756387573875838759387603876138762387633876438765387663876738768387693877038771387723877338774387753877638777387783877938780387813878238783387843878538786387873878838789387903879138792387933879438795387963879738798387993880038801388023880338804388053880638807388083880938810388113881238813388143881538816388173881838819388203882138822388233882438825388263882738828388293883038831388323883338834388353883638837388383883938840388413884238843388443884538846388473884838849388503885138852388533885438855388563885738858388593886038861388623886338864388653886638867388683886938870388713887238873388743887538876388773887838879388803888138882388833888438885388863888738888388893889038891388923889338894388953889638897388983889938900389013890238903389043890538906389073890838909389103891138912389133891438915389163891738918389193892038921389223892338924389253892638927389283892938930389313893238933389343893538936389373893838939389403894138942389433894438945389463894738948389493895038951389523895338954389553895638957389583895938960389613896238963389643896538966389673896838969389703897138972389733897438975389763897738978389793898038981389823898338984389853898638987389883898938990389913899238993389943899538996389973899838999390003900139002390033900439005390063900739008390093901039011390123901339014390153901639017390183901939020390213902239023390243902539026390273902839029390303903139032390333903439035390363903739038390393904039041390423904339044390453904639047390483904939050390513905239053390543905539056390573905839059390603906139062390633906439065390663906739068390693907039071390723907339074390753907639077390783907939080390813908239083390843908539086390873908839089390903909139092390933909439095390963909739098390993910039101391023910339104391053910639107391083910939110391113911239113391143911539116391173911839119391203912139122391233912439125391263912739128391293913039131391323913339134391353913639137391383913939140391413914239143391443914539146391473914839149391503915139152391533915439155391563915739158391593916039161391623916339164391653916639167391683916939170391713917239173391743917539176391773917839179391803918139182391833918439185391863918739188391893919039191391923919339194391953919639197391983919939200392013920239203392043920539206392073920839209392103921139212392133921439215392163921739218392193922039221392223922339224392253922639227392283922939230392313923239233392343923539236392373923839239392403924139242392433924439245392463924739248392493925039251392523925339254392553925639257392583925939260392613926239263392643926539266392673926839269392703927139272392733927439275392763927739278392793928039281392823928339284392853928639287392883928939290392913929239293392943929539296392973929839299393003930139302393033930439305393063930739308393093931039311393123931339314393153931639317393183931939320393213932239323393243932539326393273932839329393303933139332393333933439335393363933739338393393934039341393423934339344393453934639347393483934939350393513935239353393543935539356393573935839359393603936139362393633936439365393663936739368393693937039371393723937339374393753937639377393783937939380393813938239383393843938539386393873938839389393903939139392393933939439395393963939739398393993940039401394023940339404394053940639407394083940939410394113941239413394143941539416394173941839419394203942139422394233942439425394263942739428394293943039431394323943339434394353943639437394383943939440394413944239443394443944539446394473944839449394503945139452394533945439455394563945739458394593946039461394623946339464394653946639467394683946939470394713947239473394743947539476394773947839479394803948139482394833948439485394863948739488394893949039491394923949339494394953949639497394983949939500395013950239503395043950539506395073950839509395103951139512395133951439515395163951739518395193952039521395223952339524395253952639527395283952939530395313953239533395343953539536395373953839539395403954139542395433954439545395463954739548395493955039551395523955339554395553955639557395583955939560395613956239563395643956539566395673956839569395703957139572395733957439575395763957739578395793958039581395823958339584395853958639587395883958939590395913959239593395943959539596395973959839599396003960139602396033960439605396063960739608396093961039611396123961339614396153961639617396183961939620396213962239623396243962539626396273962839629396303963139632396333963439635396363963739638396393964039641396423964339644396453964639647396483964939650396513965239653396543965539656396573965839659396603966139662396633966439665396663966739668396693967039671396723967339674396753967639677396783967939680396813968239683396843968539686396873968839689396903969139692396933969439695396963969739698396993970039701397023970339704397053970639707397083970939710397113971239713397143971539716397173971839719397203972139722397233972439725397263972739728397293973039731397323973339734397353973639737397383973939740397413974239743397443974539746397473974839749397503975139752397533975439755397563975739758397593976039761397623976339764397653976639767397683976939770397713977239773397743977539776397773977839779397803978139782397833978439785397863978739788397893979039791397923979339794397953979639797397983979939800398013980239803398043980539806398073980839809398103981139812398133981439815398163981739818398193982039821398223982339824398253982639827398283982939830398313983239833398343983539836398373983839839398403984139842398433984439845398463984739848398493985039851398523985339854398553985639857398583985939860398613986239863398643986539866398673986839869398703987139872398733987439875398763987739878398793988039881398823988339884398853988639887398883988939890398913989239893398943989539896398973989839899399003990139902399033990439905399063990739908399093991039911399123991339914399153991639917399183991939920399213992239923399243992539926399273992839929399303993139932399333993439935399363993739938399393994039941399423994339944399453994639947399483994939950399513995239953399543995539956399573995839959399603996139962399633996439965399663996739968399693997039971399723997339974399753997639977399783997939980399813998239983399843998539986399873998839989399903999139992399933999439995399963999739998399994000040001400024000340004400054000640007400084000940010400114001240013400144001540016400174001840019400204002140022400234002440025400264002740028400294003040031400324003340034400354003640037400384003940040400414004240043400444004540046400474004840049400504005140052400534005440055400564005740058400594006040061400624006340064400654006640067400684006940070400714007240073400744007540076400774007840079400804008140082400834008440085400864008740088400894009040091400924009340094400954009640097400984009940100401014010240103401044010540106401074010840109401104011140112401134011440115401164011740118401194012040121401224012340124401254012640127401284012940130401314013240133401344013540136401374013840139401404014140142401434014440145401464014740148401494015040151401524015340154401554015640157401584015940160401614016240163401644016540166401674016840169401704017140172401734017440175401764017740178401794018040181401824018340184401854018640187401884018940190401914019240193401944019540196401974019840199402004020140202402034020440205402064020740208402094021040211402124021340214402154021640217402184021940220402214022240223402244022540226402274022840229402304023140232402334023440235402364023740238402394024040241402424024340244402454024640247402484024940250402514025240253402544025540256402574025840259402604026140262402634026440265402664026740268402694027040271402724027340274402754027640277402784027940280402814028240283402844028540286402874028840289402904029140292402934029440295402964029740298402994030040301403024030340304403054030640307403084030940310403114031240313403144031540316403174031840319403204032140322403234032440325403264032740328403294033040331403324033340334403354033640337403384033940340403414034240343403444034540346403474034840349403504035140352403534035440355403564035740358403594036040361403624036340364403654036640367403684036940370403714037240373403744037540376403774037840379403804038140382403834038440385403864038740388403894039040391403924039340394403954039640397403984039940400404014040240403404044040540406404074040840409404104041140412404134041440415404164041740418404194042040421404224042340424404254042640427404284042940430404314043240433404344043540436404374043840439404404044140442404434044440445404464044740448404494045040451404524045340454404554045640457404584045940460404614046240463404644046540466404674046840469404704047140472404734047440475404764047740478404794048040481404824048340484404854048640487404884048940490404914049240493404944049540496404974049840499405004050140502405034050440505405064050740508405094051040511405124051340514405154051640517405184051940520405214052240523405244052540526405274052840529405304053140532405334053440535405364053740538405394054040541405424054340544405454054640547405484054940550405514055240553405544055540556405574055840559405604056140562405634056440565405664056740568405694057040571405724057340574405754057640577405784057940580405814058240583405844058540586405874058840589405904059140592405934059440595405964059740598405994060040601406024060340604406054060640607406084060940610406114061240613406144061540616406174061840619406204062140622406234062440625406264062740628406294063040631406324063340634406354063640637406384063940640406414064240643406444064540646406474064840649406504065140652406534065440655406564065740658406594066040661406624066340664406654066640667406684066940670406714067240673406744067540676406774067840679406804068140682406834068440685406864068740688406894069040691406924069340694406954069640697406984069940700407014070240703407044070540706407074070840709407104071140712407134071440715407164071740718407194072040721407224072340724407254072640727407284072940730407314073240733407344073540736407374073840739407404074140742407434074440745407464074740748407494075040751407524075340754407554075640757407584075940760407614076240763407644076540766407674076840769407704077140772407734077440775407764077740778407794078040781407824078340784407854078640787407884078940790407914079240793407944079540796407974079840799408004080140802408034080440805408064080740808408094081040811408124081340814408154081640817408184081940820408214082240823408244082540826408274082840829408304083140832408334083440835408364083740838408394084040841408424084340844408454084640847408484084940850408514085240853408544085540856408574085840859408604086140862408634086440865408664086740868408694087040871408724087340874408754087640877408784087940880408814088240883408844088540886408874088840889408904089140892408934089440895408964089740898408994090040901409024090340904409054090640907409084090940910409114091240913409144091540916409174091840919409204092140922409234092440925409264092740928409294093040931409324093340934409354093640937409384093940940409414094240943409444094540946409474094840949409504095140952409534095440955409564095740958409594096040961409624096340964409654096640967409684096940970409714097240973409744097540976409774097840979409804098140982409834098440985409864098740988409894099040991409924099340994409954099640997409984099941000410014100241003410044100541006410074100841009410104101141012410134101441015410164101741018410194102041021410224102341024410254102641027410284102941030410314103241033410344103541036410374103841039410404104141042410434104441045410464104741048410494105041051410524105341054410554105641057410584105941060410614106241063410644106541066410674106841069410704107141072410734107441075410764107741078410794108041081410824108341084410854108641087410884108941090410914109241093410944109541096410974109841099411004110141102411034110441105411064110741108411094111041111411124111341114411154111641117411184111941120411214112241123411244112541126411274112841129411304113141132411334113441135411364113741138411394114041141411424114341144411454114641147411484114941150411514115241153411544115541156411574115841159411604116141162411634116441165411664116741168411694117041171411724117341174411754117641177411784117941180411814118241183411844118541186411874118841189411904119141192411934119441195411964119741198411994120041201412024120341204412054120641207412084120941210412114121241213412144121541216412174121841219412204122141222412234122441225412264122741228412294123041231412324123341234412354123641237412384123941240412414124241243412444124541246412474124841249412504125141252412534125441255412564125741258412594126041261412624126341264412654126641267412684126941270412714127241273412744127541276412774127841279412804128141282412834128441285412864128741288412894129041291412924129341294412954129641297412984129941300413014130241303413044130541306413074130841309413104131141312413134131441315413164131741318413194132041321413224132341324413254132641327413284132941330413314133241333413344133541336413374133841339413404134141342413434134441345413464134741348413494135041351413524135341354413554135641357413584135941360413614136241363413644136541366413674136841369413704137141372413734137441375413764137741378413794138041381413824138341384413854138641387413884138941390413914139241393413944139541396413974139841399414004140141402414034140441405414064140741408414094141041411414124141341414414154141641417414184141941420414214142241423414244142541426414274142841429414304143141432414334143441435414364143741438414394144041441414424144341444414454144641447414484144941450414514145241453414544145541456414574145841459414604146141462414634146441465414664146741468414694147041471414724147341474414754147641477414784147941480414814148241483414844148541486414874148841489414904149141492414934149441495414964149741498414994150041501415024150341504415054150641507415084150941510415114151241513415144151541516415174151841519415204152141522415234152441525415264152741528415294153041531415324153341534415354153641537415384153941540415414154241543415444154541546415474154841549415504155141552415534155441555415564155741558415594156041561415624156341564415654156641567415684156941570415714157241573415744157541576415774157841579415804158141582415834158441585415864158741588415894159041591415924159341594415954159641597415984159941600416014160241603416044160541606416074160841609416104161141612416134161441615416164161741618416194162041621416224162341624416254162641627416284162941630416314163241633416344163541636416374163841639416404164141642416434164441645416464164741648416494165041651416524165341654416554165641657416584165941660416614166241663416644166541666416674166841669416704167141672416734167441675416764167741678416794168041681416824168341684416854168641687416884168941690416914169241693416944169541696416974169841699417004170141702417034170441705417064170741708417094171041711417124171341714417154171641717417184171941720417214172241723417244172541726417274172841729417304173141732417334173441735417364173741738417394174041741417424174341744417454174641747417484174941750417514175241753417544175541756417574175841759417604176141762417634176441765417664176741768417694177041771417724177341774417754177641777417784177941780417814178241783417844178541786417874178841789417904179141792417934179441795417964179741798417994180041801418024180341804418054180641807418084180941810418114181241813418144181541816418174181841819418204182141822418234182441825418264182741828418294183041831418324183341834418354183641837418384183941840418414184241843418444184541846418474184841849418504185141852418534185441855418564185741858418594186041861418624186341864418654186641867418684186941870418714187241873418744187541876418774187841879418804188141882418834188441885418864188741888418894189041891418924189341894418954189641897418984189941900419014190241903419044190541906419074190841909419104191141912419134191441915419164191741918419194192041921419224192341924419254192641927419284192941930419314193241933419344193541936419374193841939419404194141942419434194441945419464194741948419494195041951419524195341954419554195641957419584195941960419614196241963419644196541966419674196841969419704197141972419734197441975419764197741978419794198041981419824198341984419854198641987419884198941990419914199241993419944199541996419974199841999420004200142002420034200442005420064200742008420094201042011420124201342014420154201642017420184201942020420214202242023420244202542026420274202842029420304203142032420334203442035420364203742038420394204042041420424204342044420454204642047420484204942050420514205242053420544205542056420574205842059420604206142062420634206442065420664206742068420694207042071420724207342074420754207642077420784207942080420814208242083420844208542086420874208842089420904209142092420934209442095420964209742098420994210042101421024210342104421054210642107421084210942110421114211242113421144211542116421174211842119421204212142122421234212442125421264212742128421294213042131421324213342134421354213642137421384213942140421414214242143421444214542146421474214842149421504215142152421534215442155421564215742158421594216042161421624216342164421654216642167421684216942170421714217242173421744217542176421774217842179421804218142182421834218442185421864218742188421894219042191421924219342194421954219642197421984219942200422014220242203422044220542206422074220842209422104221142212422134221442215422164221742218422194222042221422224222342224422254222642227422284222942230422314223242233422344223542236422374223842239422404224142242422434224442245422464224742248422494225042251422524225342254422554225642257422584225942260422614226242263422644226542266422674226842269422704227142272422734227442275422764227742278422794228042281422824228342284422854228642287422884228942290422914229242293422944229542296422974229842299423004230142302423034230442305423064230742308423094231042311423124231342314423154231642317423184231942320423214232242323423244232542326423274232842329423304233142332423334233442335423364233742338423394234042341423424234342344423454234642347423484234942350423514235242353423544235542356423574235842359423604236142362423634236442365423664236742368423694237042371423724237342374423754237642377423784237942380423814238242383423844238542386423874238842389423904239142392423934239442395423964239742398423994240042401424024240342404424054240642407424084240942410424114241242413424144241542416424174241842419424204242142422424234242442425424264242742428424294243042431424324243342434424354243642437424384243942440424414244242443424444244542446424474244842449424504245142452424534245442455424564245742458424594246042461424624246342464424654246642467424684246942470424714247242473424744247542476424774247842479424804248142482424834248442485424864248742488424894249042491424924249342494424954249642497424984249942500425014250242503425044250542506425074250842509425104251142512425134251442515425164251742518425194252042521425224252342524425254252642527425284252942530425314253242533425344253542536425374253842539425404254142542425434254442545425464254742548425494255042551425524255342554425554255642557425584255942560425614256242563425644256542566425674256842569425704257142572425734257442575425764257742578425794258042581425824258342584425854258642587425884258942590425914259242593425944259542596425974259842599426004260142602426034260442605426064260742608426094261042611426124261342614426154261642617426184261942620426214262242623426244262542626426274262842629426304263142632426334263442635426364263742638426394264042641426424264342644426454264642647426484264942650426514265242653426544265542656426574265842659426604266142662426634266442665426664266742668426694267042671426724267342674426754267642677426784267942680426814268242683426844268542686426874268842689426904269142692426934269442695426964269742698426994270042701427024270342704427054270642707427084270942710427114271242713427144271542716427174271842719427204272142722427234272442725427264272742728427294273042731427324273342734427354273642737427384273942740427414274242743427444274542746427474274842749427504275142752427534275442755427564275742758427594276042761427624276342764427654276642767427684276942770427714277242773427744277542776427774277842779427804278142782427834278442785427864278742788427894279042791427924279342794427954279642797427984279942800428014280242803428044280542806428074280842809428104281142812428134281442815428164281742818428194282042821428224282342824428254282642827428284282942830428314283242833428344283542836428374283842839428404284142842428434284442845428464284742848428494285042851428524285342854428554285642857428584285942860428614286242863428644286542866428674286842869428704287142872428734287442875428764287742878428794288042881428824288342884428854288642887428884288942890428914289242893428944289542896428974289842899429004290142902429034290442905429064290742908429094291042911429124291342914429154291642917429184291942920429214292242923429244292542926429274292842929429304293142932429334293442935429364293742938429394294042941429424294342944429454294642947429484294942950429514295242953429544295542956429574295842959429604296142962429634296442965429664296742968429694297042971429724297342974429754297642977429784297942980429814298242983429844298542986429874298842989429904299142992429934299442995429964299742998429994300043001430024300343004430054300643007430084300943010430114301243013430144301543016430174301843019430204302143022430234302443025430264302743028430294303043031430324303343034430354303643037430384303943040430414304243043430444304543046430474304843049430504305143052430534305443055430564305743058430594306043061430624306343064430654306643067430684306943070430714307243073430744307543076430774307843079430804308143082430834308443085430864308743088430894309043091430924309343094430954309643097430984309943100431014310243103431044310543106431074310843109431104311143112431134311443115431164311743118431194312043121431224312343124431254312643127431284312943130431314313243133431344313543136431374313843139431404314143142431434314443145431464314743148431494315043151431524315343154431554315643157431584315943160431614316243163431644316543166431674316843169431704317143172431734317443175431764317743178431794318043181431824318343184431854318643187431884318943190431914319243193431944319543196431974319843199432004320143202432034320443205432064320743208432094321043211432124321343214432154321643217432184321943220432214322243223432244322543226432274322843229432304323143232432334323443235432364323743238432394324043241432424324343244432454324643247432484324943250432514325243253432544325543256432574325843259432604326143262432634326443265432664326743268432694327043271432724327343274432754327643277432784327943280432814328243283432844328543286432874328843289432904329143292432934329443295432964329743298432994330043301433024330343304433054330643307433084330943310433114331243313433144331543316433174331843319433204332143322433234332443325433264332743328433294333043331433324333343334433354333643337433384333943340433414334243343433444334543346433474334843349433504335143352433534335443355433564335743358433594336043361433624336343364433654336643367433684336943370433714337243373433744337543376433774337843379433804338143382433834338443385433864338743388433894339043391433924339343394433954339643397433984339943400434014340243403434044340543406434074340843409434104341143412434134341443415434164341743418434194342043421434224342343424434254342643427434284342943430434314343243433434344343543436434374343843439434404344143442434434344443445434464344743448434494345043451434524345343454434554345643457434584345943460434614346243463434644346543466434674346843469434704347143472434734347443475434764347743478434794348043481434824348343484434854348643487434884348943490434914349243493434944349543496434974349843499435004350143502435034350443505435064350743508435094351043511435124351343514435154351643517435184351943520435214352243523435244352543526435274352843529435304353143532435334353443535435364353743538435394354043541435424354343544435454354643547435484354943550435514355243553435544355543556435574355843559435604356143562435634356443565435664356743568435694357043571435724357343574435754357643577435784357943580435814358243583435844358543586435874358843589435904359143592435934359443595435964359743598435994360043601436024360343604436054360643607436084360943610436114361243613436144361543616436174361843619436204362143622436234362443625436264362743628436294363043631436324363343634436354363643637436384363943640436414364243643436444364543646436474364843649436504365143652436534365443655436564365743658436594366043661436624366343664436654366643667436684366943670436714367243673436744367543676436774367843679436804368143682436834368443685436864368743688436894369043691436924369343694436954369643697436984369943700437014370243703437044370543706437074370843709437104371143712437134371443715437164371743718437194372043721437224372343724437254372643727437284372943730437314373243733437344373543736437374373843739437404374143742437434374443745437464374743748437494375043751437524375343754437554375643757437584375943760437614376243763437644376543766437674376843769437704377143772437734377443775437764377743778437794378043781437824378343784437854378643787437884378943790437914379243793437944379543796437974379843799438004380143802438034380443805438064380743808438094381043811438124381343814438154381643817438184381943820438214382243823438244382543826438274382843829438304383143832438334383443835438364383743838438394384043841438424384343844438454384643847438484384943850438514385243853438544385543856438574385843859438604386143862438634386443865438664386743868438694387043871438724387343874438754387643877438784387943880438814388243883438844388543886438874388843889438904389143892438934389443895438964389743898438994390043901439024390343904439054390643907439084390943910439114391243913439144391543916439174391843919439204392143922439234392443925439264392743928439294393043931439324393343934439354393643937439384393943940439414394243943439444394543946439474394843949439504395143952439534395443955439564395743958439594396043961439624396343964439654396643967439684396943970439714397243973439744397543976439774397843979439804398143982439834398443985439864398743988439894399043991439924399343994439954399643997439984399944000440014400244003440044400544006440074400844009440104401144012440134401444015440164401744018440194402044021440224402344024440254402644027440284402944030440314403244033440344403544036440374403844039440404404144042440434404444045440464404744048440494405044051440524405344054440554405644057440584405944060440614406244063440644406544066440674406844069440704407144072440734407444075440764407744078440794408044081440824408344084440854408644087440884408944090440914409244093440944409544096440974409844099441004410144102441034410444105441064410744108441094411044111441124411344114441154411644117441184411944120441214412244123441244412544126441274412844129441304413144132441334413444135441364413744138441394414044141441424414344144441454414644147441484414944150441514415244153441544415544156441574415844159441604416144162441634416444165441664416744168441694417044171441724417344174441754417644177441784417944180441814418244183441844418544186441874418844189441904419144192441934419444195441964419744198441994420044201442024420344204442054420644207442084420944210442114421244213442144421544216442174421844219442204422144222442234422444225442264422744228442294423044231442324423344234442354423644237442384423944240442414424244243442444424544246442474424844249442504425144252442534425444255442564425744258442594426044261442624426344264442654426644267442684426944270442714427244273442744427544276442774427844279442804428144282442834428444285442864428744288442894429044291442924429344294442954429644297442984429944300443014430244303443044430544306443074430844309443104431144312443134431444315443164431744318443194432044321443224432344324443254432644327443284432944330443314433244333443344433544336443374433844339443404434144342443434434444345443464434744348443494435044351443524435344354443554435644357443584435944360443614436244363443644436544366443674436844369443704437144372443734437444375443764437744378443794438044381443824438344384443854438644387443884438944390443914439244393443944439544396443974439844399444004440144402444034440444405444064440744408444094441044411444124441344414444154441644417444184441944420444214442244423444244442544426444274442844429444304443144432444334443444435444364443744438444394444044441444424444344444444454444644447444484444944450444514445244453444544445544456444574445844459444604446144462444634446444465444664446744468444694447044471444724447344474444754447644477444784447944480444814448244483444844448544486444874448844489444904449144492444934449444495444964449744498444994450044501445024450344504445054450644507445084450944510445114451244513445144451544516445174451844519445204452144522445234452444525445264452744528445294453044531445324453344534445354453644537445384453944540445414454244543445444454544546445474454844549445504455144552445534455444555445564455744558445594456044561445624456344564445654456644567445684456944570445714457244573445744457544576445774457844579445804458144582445834458444585445864458744588445894459044591445924459344594445954459644597445984459944600446014460244603446044460544606446074460844609446104461144612446134461444615446164461744618446194462044621446224462344624446254462644627446284462944630446314463244633446344463544636446374463844639446404464144642446434464444645446464464744648446494465044651446524465344654446554465644657446584465944660446614466244663446644466544666446674466844669446704467144672446734467444675446764467744678446794468044681446824468344684446854468644687446884468944690446914469244693446944469544696446974469844699447004470144702447034470444705447064470744708447094471044711447124471344714447154471644717447184471944720447214472244723447244472544726447274472844729447304473144732447334473444735447364473744738447394474044741447424474344744447454474644747447484474944750447514475244753447544475544756447574475844759447604476144762447634476444765447664476744768447694477044771447724477344774447754477644777447784477944780447814478244783447844478544786447874478844789447904479144792447934479444795447964479744798447994480044801448024480344804448054480644807448084480944810448114481244813448144481544816448174481844819448204482144822448234482444825448264482744828448294483044831448324483344834448354483644837448384483944840448414484244843448444484544846448474484844849448504485144852448534485444855448564485744858448594486044861448624486344864448654486644867448684486944870448714487244873448744487544876448774487844879448804488144882448834488444885448864488744888448894489044891448924489344894448954489644897448984489944900449014490244903449044490544906449074490844909449104491144912449134491444915449164491744918449194492044921449224492344924449254492644927449284492944930449314493244933449344493544936449374493844939449404494144942449434494444945449464494744948449494495044951449524495344954449554495644957449584495944960449614496244963449644496544966449674496844969449704497144972449734497444975449764497744978449794498044981449824498344984449854498644987449884498944990449914499244993449944499544996449974499844999450004500145002450034500445005450064500745008450094501045011450124501345014450154501645017450184501945020450214502245023450244502545026450274502845029450304503145032450334503445035450364503745038450394504045041450424504345044450454504645047450484504945050450514505245053450544505545056450574505845059450604506145062450634506445065450664506745068450694507045071450724507345074450754507645077450784507945080450814508245083450844508545086450874508845089450904509145092450934509445095450964509745098450994510045101451024510345104451054510645107451084510945110451114511245113451144511545116451174511845119451204512145122451234512445125451264512745128451294513045131451324513345134451354513645137451384513945140451414514245143451444514545146451474514845149451504515145152451534515445155451564515745158451594516045161451624516345164451654516645167451684516945170451714517245173451744517545176451774517845179451804518145182451834518445185451864518745188451894519045191451924519345194451954519645197451984519945200452014520245203452044520545206452074520845209452104521145212452134521445215452164521745218452194522045221452224522345224452254522645227452284522945230452314523245233452344523545236452374523845239452404524145242452434524445245452464524745248452494525045251452524525345254452554525645257452584525945260452614526245263452644526545266452674526845269452704527145272452734527445275452764527745278452794528045281452824528345284452854528645287452884528945290452914529245293452944529545296452974529845299453004530145302453034530445305453064530745308453094531045311453124531345314453154531645317453184531945320453214532245323453244532545326453274532845329453304533145332453334533445335453364533745338453394534045341453424534345344453454534645347453484534945350453514535245353453544535545356453574535845359453604536145362453634536445365453664536745368453694537045371453724537345374453754537645377453784537945380453814538245383453844538545386453874538845389453904539145392453934539445395453964539745398453994540045401454024540345404454054540645407454084540945410454114541245413454144541545416454174541845419454204542145422454234542445425454264542745428454294543045431454324543345434454354543645437454384543945440454414544245443454444544545446454474544845449454504545145452454534545445455454564545745458454594546045461454624546345464454654546645467454684546945470454714547245473454744547545476454774547845479454804548145482454834548445485454864548745488454894549045491454924549345494454954549645497454984549945500455014550245503455044550545506455074550845509455104551145512455134551445515455164551745518455194552045521455224552345524455254552645527455284552945530455314553245533455344553545536455374553845539455404554145542455434554445545455464554745548455494555045551455524555345554455554555645557455584555945560455614556245563455644556545566455674556845569455704557145572455734557445575455764557745578455794558045581455824558345584455854558645587455884558945590455914559245593455944559545596455974559845599456004560145602456034560445605456064560745608456094561045611456124561345614456154561645617456184561945620456214562245623456244562545626456274562845629456304563145632456334563445635456364563745638456394564045641456424564345644456454564645647456484564945650456514565245653456544565545656456574565845659456604566145662456634566445665456664566745668456694567045671456724567345674456754567645677456784567945680456814568245683456844568545686456874568845689456904569145692456934569445695456964569745698456994570045701457024570345704457054570645707457084570945710457114571245713457144571545716457174571845719457204572145722457234572445725457264572745728457294573045731457324573345734457354573645737457384573945740457414574245743457444574545746457474574845749457504575145752457534575445755457564575745758457594576045761457624576345764457654576645767457684576945770457714577245773457744577545776457774577845779457804578145782457834578445785457864578745788457894579045791457924579345794457954579645797457984579945800458014580245803458044580545806458074580845809458104581145812458134581445815458164581745818458194582045821458224582345824458254582645827458284582945830458314583245833458344583545836458374583845839458404584145842458434584445845458464584745848458494585045851458524585345854458554585645857458584585945860458614586245863458644586545866458674586845869458704587145872458734587445875458764587745878458794588045881458824588345884458854588645887458884588945890458914589245893458944589545896458974589845899459004590145902459034590445905459064590745908459094591045911459124591345914459154591645917459184591945920459214592245923459244592545926459274592845929459304593145932459334593445935459364593745938459394594045941459424594345944459454594645947459484594945950459514595245953459544595545956459574595845959459604596145962459634596445965459664596745968459694597045971459724597345974459754597645977459784597945980459814598245983459844598545986459874598845989459904599145992459934599445995459964599745998459994600046001460024600346004460054600646007460084600946010460114601246013460144601546016460174601846019460204602146022460234602446025460264602746028460294603046031460324603346034460354603646037460384603946040460414604246043460444604546046460474604846049460504605146052460534605446055460564605746058460594606046061460624606346064460654606646067460684606946070460714607246073460744607546076460774607846079460804608146082460834608446085460864608746088460894609046091460924609346094460954609646097460984609946100461014610246103461044610546106461074610846109461104611146112461134611446115461164611746118461194612046121461224612346124461254612646127461284612946130461314613246133461344613546136461374613846139461404614146142461434614446145461464614746148461494615046151461524615346154461554615646157461584615946160461614616246163461644616546166461674616846169461704617146172461734617446175461764617746178461794618046181461824618346184461854618646187461884618946190461914619246193461944619546196461974619846199462004620146202462034620446205462064620746208462094621046211462124621346214462154621646217462184621946220462214622246223462244622546226462274622846229462304623146232462334623446235462364623746238462394624046241462424624346244462454624646247462484624946250462514625246253462544625546256462574625846259462604626146262462634626446265462664626746268462694627046271462724627346274462754627646277462784627946280462814628246283462844628546286462874628846289462904629146292462934629446295462964629746298462994630046301463024630346304463054630646307463084630946310463114631246313463144631546316463174631846319463204632146322463234632446325463264632746328463294633046331463324633346334463354633646337463384633946340463414634246343463444634546346463474634846349463504635146352463534635446355463564635746358463594636046361463624636346364463654636646367463684636946370463714637246373463744637546376463774637846379463804638146382463834638446385463864638746388463894639046391463924639346394463954639646397463984639946400464014640246403464044640546406464074640846409464104641146412464134641446415464164641746418464194642046421464224642346424464254642646427464284642946430464314643246433464344643546436464374643846439464404644146442464434644446445464464644746448464494645046451464524645346454464554645646457464584645946460464614646246463464644646546466464674646846469464704647146472464734647446475464764647746478464794648046481464824648346484464854648646487464884648946490464914649246493464944649546496464974649846499465004650146502465034650446505465064650746508465094651046511465124651346514465154651646517465184651946520465214652246523465244652546526465274652846529465304653146532465334653446535465364653746538465394654046541465424654346544465454654646547465484654946550465514655246553465544655546556465574655846559465604656146562465634656446565465664656746568465694657046571465724657346574465754657646577465784657946580465814658246583465844658546586465874658846589465904659146592465934659446595465964659746598465994660046601466024660346604466054660646607466084660946610466114661246613466144661546616466174661846619466204662146622466234662446625466264662746628466294663046631466324663346634466354663646637466384663946640466414664246643466444664546646466474664846649466504665146652466534665446655466564665746658466594666046661466624666346664466654666646667466684666946670466714667246673466744667546676466774667846679466804668146682466834668446685466864668746688466894669046691466924669346694466954669646697466984669946700467014670246703467044670546706467074670846709467104671146712467134671446715467164671746718467194672046721467224672346724467254672646727467284672946730467314673246733467344673546736467374673846739467404674146742467434674446745467464674746748467494675046751467524675346754467554675646757467584675946760467614676246763467644676546766467674676846769467704677146772467734677446775467764677746778467794678046781467824678346784467854678646787467884678946790467914679246793467944679546796467974679846799468004680146802468034680446805468064680746808468094681046811468124681346814468154681646817468184681946820468214682246823468244682546826468274682846829468304683146832468334683446835468364683746838468394684046841468424684346844468454684646847468484684946850468514685246853468544685546856468574685846859468604686146862468634686446865468664686746868468694687046871468724687346874468754687646877468784687946880468814688246883468844688546886468874688846889468904689146892468934689446895468964689746898468994690046901469024690346904469054690646907469084690946910469114691246913469144691546916469174691846919469204692146922469234692446925469264692746928469294693046931469324693346934469354693646937469384693946940469414694246943469444694546946469474694846949469504695146952469534695446955469564695746958469594696046961469624696346964469654696646967469684696946970469714697246973469744697546976469774697846979469804698146982469834698446985469864698746988469894699046991469924699346994469954699646997469984699947000470014700247003470044700547006470074700847009470104701147012470134701447015470164701747018470194702047021470224702347024470254702647027470284702947030470314703247033470344703547036470374703847039470404704147042470434704447045470464704747048470494705047051470524705347054470554705647057470584705947060470614706247063470644706547066470674706847069470704707147072470734707447075470764707747078470794708047081470824708347084470854708647087470884708947090470914709247093470944709547096470974709847099471004710147102471034710447105471064710747108471094711047111471124711347114471154711647117471184711947120471214712247123471244712547126471274712847129471304713147132471334713447135471364713747138471394714047141471424714347144471454714647147471484714947150471514715247153471544715547156471574715847159471604716147162471634716447165471664716747168471694717047171471724717347174471754717647177471784717947180471814718247183471844718547186471874718847189471904719147192471934719447195471964719747198471994720047201472024720347204472054720647207472084720947210472114721247213472144721547216472174721847219472204722147222472234722447225472264722747228472294723047231472324723347234472354723647237472384723947240472414724247243472444724547246472474724847249472504725147252472534725447255472564725747258472594726047261472624726347264472654726647267472684726947270472714727247273472744727547276472774727847279472804728147282472834728447285472864728747288472894729047291472924729347294472954729647297472984729947300473014730247303473044730547306473074730847309473104731147312473134731447315473164731747318473194732047321473224732347324473254732647327473284732947330473314733247333473344733547336473374733847339473404734147342473434734447345473464734747348473494735047351473524735347354473554735647357473584735947360473614736247363473644736547366473674736847369473704737147372473734737447375473764737747378473794738047381473824738347384473854738647387473884738947390473914739247393473944739547396473974739847399474004740147402474034740447405474064740747408474094741047411474124741347414474154741647417474184741947420474214742247423474244742547426474274742847429474304743147432474334743447435474364743747438474394744047441474424744347444474454744647447474484744947450474514745247453474544745547456474574745847459474604746147462474634746447465474664746747468474694747047471474724747347474474754747647477474784747947480474814748247483474844748547486474874748847489474904749147492474934749447495474964749747498474994750047501475024750347504475054750647507475084750947510475114751247513475144751547516475174751847519475204752147522475234752447525475264752747528475294753047531475324753347534475354753647537475384753947540475414754247543475444754547546475474754847549475504755147552475534755447555475564755747558475594756047561475624756347564475654756647567475684756947570475714757247573475744757547576475774757847579475804758147582475834758447585475864758747588475894759047591475924759347594475954759647597475984759947600476014760247603476044760547606476074760847609476104761147612476134761447615476164761747618476194762047621476224762347624476254762647627476284762947630476314763247633476344763547636476374763847639476404764147642476434764447645476464764747648476494765047651476524765347654476554765647657476584765947660476614766247663476644766547666476674766847669476704767147672476734767447675476764767747678476794768047681476824768347684476854768647687476884768947690476914769247693476944769547696476974769847699477004770147702477034770447705477064770747708477094771047711477124771347714477154771647717477184771947720477214772247723477244772547726477274772847729477304773147732477334773447735477364773747738477394774047741477424774347744477454774647747477484774947750477514775247753477544775547756477574775847759477604776147762477634776447765477664776747768477694777047771477724777347774477754777647777477784777947780477814778247783477844778547786477874778847789477904779147792477934779447795477964779747798477994780047801478024780347804478054780647807478084780947810478114781247813478144781547816478174781847819478204782147822478234782447825478264782747828478294783047831478324783347834478354783647837478384783947840478414784247843478444784547846478474784847849478504785147852478534785447855478564785747858478594786047861478624786347864478654786647867478684786947870478714787247873478744787547876478774787847879478804788147882478834788447885478864788747888478894789047891478924789347894478954789647897478984789947900479014790247903479044790547906479074790847909479104791147912479134791447915479164791747918479194792047921479224792347924479254792647927479284792947930479314793247933479344793547936479374793847939479404794147942479434794447945479464794747948479494795047951479524795347954479554795647957479584795947960479614796247963479644796547966479674796847969479704797147972479734797447975479764797747978479794798047981479824798347984479854798647987479884798947990479914799247993479944799547996479974799847999480004800148002480034800448005480064800748008480094801048011480124801348014480154801648017480184801948020480214802248023480244802548026480274802848029480304803148032480334803448035480364803748038480394804048041480424804348044480454804648047480484804948050480514805248053480544805548056480574805848059480604806148062480634806448065480664806748068480694807048071480724807348074480754807648077480784807948080480814808248083480844808548086480874808848089480904809148092480934809448095480964809748098480994810048101481024810348104481054810648107481084810948110481114811248113481144811548116481174811848119481204812148122481234812448125481264812748128481294813048131481324813348134481354813648137481384813948140481414814248143481444814548146481474814848149481504815148152481534815448155481564815748158481594816048161481624816348164481654816648167481684816948170481714817248173481744817548176481774817848179481804818148182481834818448185481864818748188481894819048191481924819348194481954819648197481984819948200482014820248203482044820548206482074820848209482104821148212482134821448215482164821748218482194822048221482224822348224482254822648227482284822948230482314823248233482344823548236482374823848239482404824148242482434824448245482464824748248482494825048251482524825348254482554825648257482584825948260482614826248263482644826548266482674826848269482704827148272482734827448275482764827748278482794828048281482824828348284482854828648287482884828948290482914829248293482944829548296482974829848299483004830148302483034830448305483064830748308483094831048311483124831348314483154831648317483184831948320483214832248323483244832548326483274832848329483304833148332483334833448335483364833748338483394834048341483424834348344483454834648347483484834948350483514835248353483544835548356483574835848359483604836148362483634836448365483664836748368483694837048371483724837348374483754837648377483784837948380483814838248383483844838548386483874838848389483904839148392483934839448395483964839748398483994840048401484024840348404484054840648407484084840948410484114841248413484144841548416484174841848419484204842148422484234842448425484264842748428484294843048431484324843348434484354843648437484384843948440484414844248443484444844548446484474844848449484504845148452484534845448455484564845748458484594846048461484624846348464484654846648467484684846948470484714847248473484744847548476484774847848479484804848148482484834848448485484864848748488484894849048491484924849348494484954849648497484984849948500485014850248503485044850548506485074850848509485104851148512485134851448515485164851748518485194852048521485224852348524485254852648527485284852948530485314853248533485344853548536485374853848539485404854148542485434854448545485464854748548485494855048551485524855348554485554855648557485584855948560485614856248563485644856548566485674856848569485704857148572485734857448575485764857748578485794858048581485824858348584485854858648587485884858948590485914859248593485944859548596485974859848599486004860148602486034860448605486064860748608486094861048611486124861348614486154861648617486184861948620486214862248623486244862548626486274862848629486304863148632486334863448635486364863748638486394864048641486424864348644486454864648647486484864948650486514865248653486544865548656486574865848659486604866148662486634866448665486664866748668486694867048671486724867348674486754867648677486784867948680486814868248683486844868548686486874868848689486904869148692486934869448695486964869748698486994870048701487024870348704487054870648707487084870948710487114871248713487144871548716487174871848719487204872148722487234872448725487264872748728487294873048731487324873348734487354873648737487384873948740487414874248743487444874548746487474874848749487504875148752487534875448755487564875748758487594876048761487624876348764487654876648767487684876948770487714877248773487744877548776487774877848779487804878148782487834878448785487864878748788487894879048791487924879348794487954879648797487984879948800488014880248803488044880548806488074880848809488104881148812488134881448815488164881748818488194882048821488224882348824488254882648827488284882948830488314883248833488344883548836488374883848839488404884148842488434884448845488464884748848488494885048851488524885348854488554885648857488584885948860488614886248863488644886548866488674886848869488704887148872488734887448875488764887748878488794888048881488824888348884488854888648887488884888948890488914889248893488944889548896488974889848899489004890148902489034890448905489064890748908489094891048911489124891348914489154891648917489184891948920489214892248923489244892548926489274892848929489304893148932489334893448935489364893748938489394894048941489424894348944489454894648947489484894948950489514895248953489544895548956489574895848959489604896148962489634896448965489664896748968489694897048971489724897348974489754897648977489784897948980489814898248983489844898548986489874898848989489904899148992489934899448995489964899748998489994900049001490024900349004490054900649007490084900949010490114901249013490144901549016490174901849019490204902149022490234902449025490264902749028490294903049031490324903349034490354903649037490384903949040490414904249043490444904549046490474904849049490504905149052490534905449055490564905749058490594906049061490624906349064490654906649067490684906949070490714907249073490744907549076490774907849079490804908149082490834908449085490864908749088490894909049091490924909349094490954909649097490984909949100491014910249103491044910549106491074910849109491104911149112491134911449115491164911749118491194912049121491224912349124491254912649127491284912949130491314913249133491344913549136491374913849139491404914149142491434914449145491464914749148491494915049151491524915349154491554915649157491584915949160491614916249163491644916549166491674916849169491704917149172491734917449175491764917749178491794918049181491824918349184491854918649187491884918949190491914919249193491944919549196491974919849199492004920149202492034920449205492064920749208492094921049211492124921349214492154921649217492184921949220492214922249223492244922549226492274922849229492304923149232492334923449235492364923749238492394924049241492424924349244492454924649247492484924949250492514925249253492544925549256492574925849259492604926149262492634926449265492664926749268492694927049271492724927349274492754927649277492784927949280492814928249283492844928549286492874928849289492904929149292492934929449295492964929749298492994930049301493024930349304493054930649307493084930949310493114931249313493144931549316493174931849319493204932149322493234932449325493264932749328493294933049331493324933349334493354933649337493384933949340493414934249343493444934549346493474934849349493504935149352493534935449355493564935749358493594936049361493624936349364493654936649367493684936949370493714937249373493744937549376493774937849379493804938149382493834938449385493864938749388493894939049391493924939349394493954939649397493984939949400494014940249403494044940549406494074940849409494104941149412494134941449415494164941749418494194942049421494224942349424494254942649427494284942949430494314943249433494344943549436494374943849439494404944149442494434944449445494464944749448494494945049451494524945349454494554945649457494584945949460494614946249463494644946549466494674946849469494704947149472494734947449475494764947749478494794948049481494824948349484494854948649487494884948949490494914949249493494944949549496494974949849499495004950149502495034950449505495064950749508495094951049511495124951349514495154951649517495184951949520495214952249523495244952549526495274952849529495304953149532495334953449535495364953749538495394954049541495424954349544495454954649547495484954949550495514955249553495544955549556495574955849559495604956149562495634956449565495664956749568495694957049571495724957349574495754957649577495784957949580495814958249583495844958549586495874958849589495904959149592495934959449595495964959749598495994960049601496024960349604496054960649607496084960949610496114961249613496144961549616496174961849619496204962149622496234962449625496264962749628496294963049631496324963349634496354963649637496384963949640496414964249643496444964549646496474964849649496504965149652496534965449655496564965749658496594966049661496624966349664496654966649667496684966949670496714967249673496744967549676496774967849679496804968149682496834968449685496864968749688496894969049691496924969349694496954969649697496984969949700497014970249703497044970549706497074970849709497104971149712497134971449715497164971749718497194972049721497224972349724497254972649727497284972949730497314973249733497344973549736497374973849739497404974149742497434974449745497464974749748497494975049751497524975349754497554975649757497584975949760497614976249763497644976549766497674976849769497704977149772497734977449775497764977749778497794978049781497824978349784497854978649787497884978949790497914979249793497944979549796497974979849799498004980149802498034980449805498064980749808498094981049811498124981349814498154981649817498184981949820498214982249823498244982549826498274982849829498304983149832498334983449835498364983749838498394984049841498424984349844498454984649847498484984949850498514985249853498544985549856498574985849859498604986149862498634986449865498664986749868498694987049871498724987349874498754987649877498784987949880498814988249883498844988549886498874988849889498904989149892498934989449895498964989749898498994990049901499024990349904499054990649907499084990949910499114991249913499144991549916499174991849919499204992149922499234992449925499264992749928499294993049931499324993349934499354993649937499384993949940499414994249943499444994549946499474994849949499504995149952499534995449955499564995749958499594996049961499624996349964499654996649967499684996949970499714997249973499744997549976499774997849979499804998149982499834998449985499864998749988499894999049991499924999349994499954999649997499984999950000500015000250003500045000550006500075000850009500105001150012500135001450015500165001750018500195002050021500225002350024500255002650027500285002950030500315003250033500345003550036500375003850039500405004150042500435004450045500465004750048500495005050051500525005350054500555005650057500585005950060500615006250063500645006550066500675006850069500705007150072500735007450075500765007750078500795008050081500825008350084500855008650087500885008950090500915009250093500945009550096500975009850099501005010150102501035010450105501065010750108501095011050111501125011350114501155011650117501185011950120501215012250123501245012550126501275012850129501305013150132501335013450135501365013750138501395014050141501425014350144501455014650147501485014950150501515015250153501545015550156501575015850159501605016150162501635016450165501665016750168501695017050171501725017350174501755017650177501785017950180501815018250183501845018550186501875018850189501905019150192501935019450195501965019750198501995020050201502025020350204502055020650207502085020950210502115021250213502145021550216502175021850219502205022150222502235022450225502265022750228502295023050231502325023350234502355023650237502385023950240502415024250243502445024550246502475024850249502505025150252502535025450255502565025750258502595026050261502625026350264502655026650267502685026950270502715027250273502745027550276502775027850279502805028150282502835028450285502865028750288502895029050291502925029350294502955029650297502985029950300503015030250303503045030550306503075030850309503105031150312503135031450315503165031750318503195032050321503225032350324503255032650327503285032950330503315033250333503345033550336503375033850339503405034150342503435034450345503465034750348503495035050351503525035350354503555035650357503585035950360503615036250363503645036550366503675036850369503705037150372503735037450375503765037750378503795038050381503825038350384503855038650387503885038950390503915039250393503945039550396503975039850399504005040150402504035040450405504065040750408504095041050411504125041350414504155041650417504185041950420504215042250423504245042550426504275042850429504305043150432504335043450435504365043750438504395044050441504425044350444504455044650447504485044950450504515045250453504545045550456504575045850459504605046150462504635046450465504665046750468504695047050471504725047350474504755047650477504785047950480504815048250483504845048550486504875048850489504905049150492504935049450495504965049750498504995050050501505025050350504505055050650507505085050950510505115051250513505145051550516505175051850519505205052150522505235052450525505265052750528505295053050531505325053350534505355053650537505385053950540505415054250543505445054550546505475054850549505505055150552505535055450555505565055750558505595056050561505625056350564505655056650567505685056950570505715057250573505745057550576505775057850579505805058150582505835058450585505865058750588505895059050591505925059350594505955059650597505985059950600506015060250603506045060550606506075060850609506105061150612506135061450615506165061750618506195062050621506225062350624506255062650627506285062950630506315063250633506345063550636506375063850639506405064150642506435064450645506465064750648506495065050651506525065350654506555065650657506585065950660506615066250663506645066550666506675066850669506705067150672506735067450675506765067750678506795068050681506825068350684506855068650687506885068950690506915069250693506945069550696506975069850699507005070150702507035070450705507065070750708507095071050711507125071350714507155071650717507185071950720507215072250723507245072550726507275072850729507305073150732507335073450735507365073750738507395074050741507425074350744507455074650747507485074950750507515075250753507545075550756507575075850759507605076150762507635076450765507665076750768507695077050771507725077350774507755077650777507785077950780507815078250783507845078550786507875078850789507905079150792507935079450795507965079750798507995080050801508025080350804508055080650807508085080950810508115081250813508145081550816508175081850819508205082150822508235082450825508265082750828508295083050831508325083350834508355083650837508385083950840508415084250843508445084550846508475084850849508505085150852508535085450855508565085750858508595086050861508625086350864508655086650867508685086950870508715087250873508745087550876508775087850879508805088150882508835088450885508865088750888508895089050891508925089350894508955089650897508985089950900509015090250903509045090550906509075090850909509105091150912509135091450915509165091750918509195092050921509225092350924509255092650927509285092950930509315093250933509345093550936509375093850939509405094150942509435094450945509465094750948509495095050951509525095350954509555095650957509585095950960509615096250963509645096550966509675096850969509705097150972509735097450975509765097750978509795098050981509825098350984509855098650987509885098950990509915099250993509945099550996509975099850999510005100151002510035100451005510065100751008510095101051011510125101351014510155101651017510185101951020510215102251023510245102551026510275102851029510305103151032510335103451035510365103751038510395104051041510425104351044510455104651047510485104951050510515105251053510545105551056510575105851059510605106151062510635106451065510665106751068510695107051071510725107351074510755107651077510785107951080510815108251083510845108551086510875108851089510905109151092510935109451095510965109751098510995110051101511025110351104511055110651107511085110951110511115111251113511145111551116511175111851119511205112151122511235112451125511265112751128511295113051131511325113351134511355113651137511385113951140511415114251143511445114551146511475114851149511505115151152511535115451155511565115751158511595116051161511625116351164511655116651167511685116951170511715117251173511745117551176511775117851179511805118151182511835118451185511865118751188511895119051191511925119351194511955119651197511985119951200512015120251203512045120551206512075120851209512105121151212512135121451215512165121751218512195122051221512225122351224512255122651227512285122951230512315123251233512345123551236512375123851239512405124151242512435124451245512465124751248512495125051251512525125351254512555125651257512585125951260512615126251263512645126551266512675126851269512705127151272512735127451275512765127751278512795128051281512825128351284512855128651287512885128951290512915129251293512945129551296512975129851299513005130151302513035130451305513065130751308513095131051311513125131351314513155131651317513185131951320513215132251323513245132551326513275132851329513305133151332513335133451335513365133751338513395134051341513425134351344513455134651347513485134951350513515135251353513545135551356513575135851359513605136151362513635136451365513665136751368513695137051371513725137351374513755137651377513785137951380513815138251383513845138551386513875138851389513905139151392513935139451395513965139751398513995140051401514025140351404514055140651407514085140951410514115141251413514145141551416514175141851419514205142151422514235142451425514265142751428514295143051431514325143351434514355143651437514385143951440514415144251443514445144551446514475144851449514505145151452514535145451455514565145751458514595146051461514625146351464514655146651467514685146951470514715147251473514745147551476514775147851479514805148151482514835148451485514865148751488514895149051491514925149351494514955149651497514985149951500515015150251503515045150551506515075150851509515105151151512515135151451515515165151751518515195152051521515225152351524515255152651527515285152951530515315153251533515345153551536515375153851539515405154151542515435154451545515465154751548515495155051551515525155351554515555155651557515585155951560515615156251563515645156551566515675156851569515705157151572515735157451575515765157751578515795158051581515825158351584515855158651587515885158951590515915159251593515945159551596515975159851599516005160151602516035160451605516065160751608516095161051611516125161351614516155161651617516185161951620516215162251623516245162551626516275162851629516305163151632516335163451635516365163751638516395164051641516425164351644516455164651647516485164951650516515165251653516545165551656516575165851659516605166151662516635166451665516665166751668516695167051671516725167351674516755167651677516785167951680516815168251683516845168551686516875168851689516905169151692516935169451695516965169751698516995170051701517025170351704517055170651707517085170951710517115171251713517145171551716517175171851719517205172151722517235172451725517265172751728517295173051731517325173351734517355173651737517385173951740517415174251743517445174551746517475174851749517505175151752517535175451755517565175751758517595176051761517625176351764517655176651767517685176951770517715177251773517745177551776517775177851779517805178151782517835178451785517865178751788517895179051791517925179351794517955179651797517985179951800518015180251803518045180551806518075180851809518105181151812518135181451815518165181751818518195182051821518225182351824518255182651827518285182951830518315183251833518345183551836518375183851839518405184151842518435184451845518465184751848518495185051851518525185351854518555185651857518585185951860518615186251863518645186551866518675186851869518705187151872518735187451875518765187751878518795188051881518825188351884518855188651887518885188951890518915189251893518945189551896518975189851899519005190151902519035190451905519065190751908519095191051911519125191351914519155191651917519185191951920519215192251923519245192551926519275192851929519305193151932519335193451935519365193751938519395194051941519425194351944519455194651947519485194951950519515195251953519545195551956519575195851959519605196151962519635196451965519665196751968519695197051971519725197351974519755197651977519785197951980519815198251983519845198551986519875198851989519905199151992519935199451995519965199751998519995200052001520025200352004520055200652007520085200952010520115201252013520145201552016520175201852019520205202152022520235202452025520265202752028520295203052031520325203352034520355203652037520385203952040520415204252043520445204552046520475204852049520505205152052520535205452055520565205752058520595206052061520625206352064520655206652067520685206952070520715207252073520745207552076520775207852079520805208152082520835208452085520865208752088520895209052091520925209352094520955209652097520985209952100521015210252103521045210552106521075210852109521105211152112521135211452115521165211752118521195212052121521225212352124521255212652127521285212952130521315213252133521345213552136521375213852139521405214152142521435214452145521465214752148521495215052151521525215352154521555215652157521585215952160521615216252163521645216552166521675216852169521705217152172521735217452175521765217752178521795218052181521825218352184521855218652187521885218952190521915219252193521945219552196521975219852199522005220152202522035220452205522065220752208522095221052211522125221352214522155221652217522185221952220522215222252223522245222552226522275222852229522305223152232522335223452235522365223752238522395224052241522425224352244522455224652247522485224952250522515225252253522545225552256522575225852259522605226152262522635226452265522665226752268522695227052271522725227352274522755227652277522785227952280522815228252283522845228552286522875228852289522905229152292522935229452295522965229752298522995230052301523025230352304523055230652307523085230952310523115231252313523145231552316523175231852319523205232152322523235232452325523265232752328523295233052331523325233352334523355233652337523385233952340523415234252343523445234552346523475234852349523505235152352523535235452355523565235752358523595236052361523625236352364523655236652367523685236952370523715237252373523745237552376523775237852379523805238152382523835238452385523865238752388523895239052391523925239352394523955239652397523985239952400524015240252403524045240552406524075240852409524105241152412524135241452415524165241752418524195242052421524225242352424524255242652427524285242952430524315243252433524345243552436524375243852439524405244152442524435244452445524465244752448524495245052451524525245352454524555245652457524585245952460524615246252463524645246552466524675246852469524705247152472524735247452475524765247752478524795248052481524825248352484524855248652487524885248952490524915249252493524945249552496524975249852499525005250152502525035250452505525065250752508525095251052511525125251352514525155251652517525185251952520525215252252523525245252552526525275252852529525305253152532525335253452535525365253752538525395254052541525425254352544525455254652547525485254952550525515255252553525545255552556525575255852559525605256152562525635256452565525665256752568525695257052571525725257352574525755257652577525785257952580525815258252583525845258552586525875258852589525905259152592525935259452595525965259752598525995260052601526025260352604526055260652607526085260952610526115261252613526145261552616526175261852619526205262152622526235262452625526265262752628526295263052631526325263352634526355263652637526385263952640526415264252643526445264552646526475264852649526505265152652526535265452655526565265752658526595266052661526625266352664526655266652667526685266952670526715267252673526745267552676526775267852679526805268152682526835268452685526865268752688526895269052691526925269352694526955269652697526985269952700527015270252703527045270552706527075270852709527105271152712527135271452715527165271752718527195272052721527225272352724527255272652727527285272952730527315273252733527345273552736527375273852739527405274152742527435274452745527465274752748527495275052751527525275352754527555275652757527585275952760527615276252763527645276552766527675276852769527705277152772527735277452775527765277752778527795278052781527825278352784527855278652787527885278952790527915279252793527945279552796527975279852799528005280152802528035280452805528065280752808528095281052811528125281352814528155281652817528185281952820528215282252823528245282552826528275282852829528305283152832528335283452835528365283752838528395284052841528425284352844528455284652847528485284952850528515285252853528545285552856528575285852859528605286152862528635286452865528665286752868528695287052871528725287352874528755287652877528785287952880528815288252883528845288552886528875288852889528905289152892528935289452895528965289752898528995290052901529025290352904529055290652907529085290952910529115291252913529145291552916529175291852919529205292152922529235292452925529265292752928529295293052931529325293352934529355293652937529385293952940529415294252943529445294552946529475294852949529505295152952529535295452955529565295752958529595296052961529625296352964529655296652967529685296952970529715297252973529745297552976529775297852979529805298152982529835298452985529865298752988529895299052991529925299352994529955299652997529985299953000530015300253003530045300553006530075300853009530105301153012530135301453015530165301753018530195302053021530225302353024530255302653027530285302953030530315303253033530345303553036530375303853039530405304153042530435304453045530465304753048530495305053051530525305353054530555305653057530585305953060530615306253063530645306553066530675306853069530705307153072530735307453075530765307753078530795308053081530825308353084530855308653087530885308953090530915309253093530945309553096530975309853099531005310153102531035310453105531065310753108531095311053111531125311353114531155311653117531185311953120531215312253123531245312553126531275312853129531305313153132531335313453135531365313753138531395314053141531425314353144531455314653147531485314953150531515315253153531545315553156531575315853159531605316153162531635316453165531665316753168531695317053171531725317353174531755317653177531785317953180531815318253183531845318553186531875318853189531905319153192531935319453195531965319753198531995320053201532025320353204532055320653207532085320953210532115321253213532145321553216532175321853219532205322153222532235322453225532265322753228532295323053231532325323353234532355323653237532385323953240532415324253243532445324553246532475324853249532505325153252532535325453255532565325753258532595326053261532625326353264532655326653267532685326953270532715327253273532745327553276532775327853279532805328153282532835328453285532865328753288532895329053291532925329353294532955329653297532985329953300533015330253303533045330553306533075330853309533105331153312533135331453315533165331753318533195332053321533225332353324533255332653327533285332953330533315333253333533345333553336533375333853339533405334153342533435334453345533465334753348533495335053351533525335353354533555335653357533585335953360533615336253363533645336553366533675336853369533705337153372533735337453375533765337753378533795338053381533825338353384533855338653387533885338953390533915339253393533945339553396533975339853399534005340153402534035340453405534065340753408534095341053411534125341353414534155341653417534185341953420534215342253423534245342553426534275342853429534305343153432534335343453435534365343753438534395344053441534425344353444534455344653447534485344953450534515345253453534545345553456534575345853459534605346153462534635346453465534665346753468534695347053471534725347353474534755347653477534785347953480534815348253483534845348553486534875348853489534905349153492534935349453495534965349753498534995350053501535025350353504535055350653507535085350953510535115351253513535145351553516535175351853519535205352153522535235352453525535265352753528535295353053531535325353353534535355353653537535385353953540535415354253543535445354553546535475354853549535505355153552535535355453555535565355753558535595356053561535625356353564535655356653567535685356953570535715357253573535745357553576535775357853579535805358153582535835358453585535865358753588535895359053591535925359353594535955359653597535985359953600536015360253603536045360553606536075360853609536105361153612536135361453615536165361753618536195362053621536225362353624536255362653627536285362953630536315363253633536345363553636536375363853639536405364153642536435364453645536465364753648536495365053651536525365353654536555365653657536585365953660536615366253663536645366553666536675366853669536705367153672536735367453675536765367753678536795368053681536825368353684536855368653687536885368953690536915369253693536945369553696536975369853699537005370153702537035370453705537065370753708537095371053711537125371353714537155371653717537185371953720537215372253723537245372553726537275372853729537305373153732537335373453735537365373753738537395374053741537425374353744537455374653747537485374953750537515375253753537545375553756537575375853759537605376153762537635376453765537665376753768537695377053771537725377353774537755377653777537785377953780537815378253783537845378553786537875378853789537905379153792537935379453795537965379753798537995380053801538025380353804538055380653807538085380953810538115381253813538145381553816538175381853819538205382153822538235382453825538265382753828538295383053831538325383353834538355383653837538385383953840538415384253843538445384553846538475384853849538505385153852538535385453855538565385753858538595386053861538625386353864538655386653867538685386953870538715387253873538745387553876538775387853879538805388153882538835388453885538865388753888538895389053891538925389353894538955389653897538985389953900539015390253903539045390553906539075390853909539105391153912539135391453915539165391753918539195392053921539225392353924539255392653927539285392953930539315393253933539345393553936539375393853939539405394153942539435394453945539465394753948539495395053951539525395353954539555395653957539585395953960539615396253963539645396553966539675396853969539705397153972539735397453975539765397753978539795398053981539825398353984539855398653987539885398953990539915399253993539945399553996539975399853999540005400154002540035400454005540065400754008540095401054011540125401354014540155401654017540185401954020540215402254023540245402554026540275402854029540305403154032540335403454035540365403754038540395404054041540425404354044540455404654047540485404954050540515405254053540545405554056540575405854059540605406154062540635406454065540665406754068540695407054071540725407354074540755407654077540785407954080540815408254083540845408554086540875408854089540905409154092540935409454095540965409754098540995410054101541025410354104541055410654107541085410954110541115411254113541145411554116541175411854119541205412154122541235412454125541265412754128541295413054131541325413354134541355413654137541385413954140541415414254143541445414554146541475414854149541505415154152541535415454155541565415754158541595416054161541625416354164541655416654167541685416954170541715417254173541745417554176541775417854179541805418154182541835418454185541865418754188541895419054191541925419354194541955419654197541985419954200542015420254203542045420554206542075420854209542105421154212542135421454215542165421754218542195422054221542225422354224542255422654227542285422954230542315423254233542345423554236542375423854239542405424154242542435424454245542465424754248542495425054251542525425354254542555425654257542585425954260542615426254263542645426554266542675426854269542705427154272542735427454275542765427754278542795428054281542825428354284542855428654287542885428954290542915429254293542945429554296542975429854299543005430154302543035430454305543065430754308543095431054311543125431354314543155431654317543185431954320543215432254323543245432554326543275432854329543305433154332543335433454335543365433754338543395434054341543425434354344543455434654347543485434954350543515435254353543545435554356543575435854359543605436154362543635436454365543665436754368543695437054371543725437354374543755437654377543785437954380543815438254383543845438554386543875438854389543905439154392543935439454395543965439754398543995440054401544025440354404544055440654407544085440954410544115441254413544145441554416544175441854419544205442154422544235442454425544265442754428544295443054431544325443354434544355443654437544385443954440544415444254443544445444554446544475444854449544505445154452544535445454455544565445754458544595446054461544625446354464544655446654467544685446954470544715447254473544745447554476544775447854479544805448154482544835448454485544865448754488544895449054491544925449354494544955449654497544985449954500545015450254503545045450554506545075450854509545105451154512545135451454515545165451754518545195452054521545225452354524545255452654527545285452954530545315453254533545345453554536545375453854539545405454154542545435454454545545465454754548545495455054551545525455354554545555455654557545585455954560545615456254563545645456554566545675456854569545705457154572545735457454575545765457754578545795458054581545825458354584545855458654587545885458954590545915459254593545945459554596545975459854599546005460154602546035460454605546065460754608546095461054611546125461354614546155461654617546185461954620546215462254623546245462554626546275462854629546305463154632546335463454635546365463754638546395464054641546425464354644546455464654647546485464954650546515465254653546545465554656546575465854659546605466154662546635466454665546665466754668546695467054671546725467354674546755467654677546785467954680546815468254683546845468554686546875468854689546905469154692546935469454695546965469754698546995470054701547025470354704547055470654707547085470954710547115471254713547145471554716547175471854719547205472154722547235472454725547265472754728547295473054731547325473354734547355473654737547385473954740547415474254743547445474554746547475474854749547505475154752547535475454755547565475754758547595476054761547625476354764547655476654767547685476954770547715477254773547745477554776547775477854779547805478154782547835478454785547865478754788547895479054791547925479354794547955479654797547985479954800548015480254803548045480554806548075480854809548105481154812548135481454815548165481754818548195482054821548225482354824548255482654827548285482954830548315483254833548345483554836548375483854839548405484154842548435484454845548465484754848548495485054851548525485354854548555485654857548585485954860548615486254863548645486554866548675486854869548705487154872548735487454875548765487754878548795488054881548825488354884548855488654887548885488954890548915489254893548945489554896548975489854899549005490154902549035490454905549065490754908549095491054911549125491354914549155491654917549185491954920549215492254923549245492554926549275492854929549305493154932549335493454935549365493754938549395494054941549425494354944549455494654947549485494954950549515495254953549545495554956549575495854959549605496154962549635496454965549665496754968549695497054971549725497354974549755497654977549785497954980549815498254983549845498554986549875498854989549905499154992549935499454995549965499754998549995500055001550025500355004550055500655007550085500955010550115501255013550145501555016550175501855019550205502155022550235502455025550265502755028550295503055031550325503355034550355503655037550385503955040550415504255043550445504555046550475504855049550505505155052550535505455055550565505755058550595506055061550625506355064550655506655067550685506955070550715507255073550745507555076550775507855079550805508155082550835508455085550865508755088550895509055091550925509355094550955509655097550985509955100551015510255103551045510555106551075510855109551105511155112551135511455115551165511755118551195512055121551225512355124551255512655127551285512955130551315513255133551345513555136551375513855139551405514155142551435514455145551465514755148551495515055151551525515355154551555515655157551585515955160551615516255163551645516555166551675516855169551705517155172551735517455175551765517755178551795518055181551825518355184551855518655187551885518955190551915519255193551945519555196551975519855199552005520155202552035520455205552065520755208552095521055211552125521355214552155521655217552185521955220552215522255223552245522555226552275522855229552305523155232552335523455235552365523755238552395524055241552425524355244552455524655247552485524955250552515525255253552545525555256552575525855259552605526155262552635526455265552665526755268552695527055271552725527355274552755527655277552785527955280552815528255283552845528555286552875528855289552905529155292552935529455295552965529755298552995530055301553025530355304553055530655307553085530955310553115531255313553145531555316553175531855319553205532155322553235532455325553265532755328553295533055331553325533355334553355533655337553385533955340553415534255343553445534555346553475534855349553505535155352553535535455355553565535755358553595536055361553625536355364553655536655367553685536955370553715537255373553745537555376553775537855379553805538155382553835538455385553865538755388553895539055391553925539355394553955539655397553985539955400554015540255403554045540555406554075540855409554105541155412554135541455415554165541755418554195542055421554225542355424554255542655427554285542955430554315543255433554345543555436554375543855439554405544155442554435544455445554465544755448554495545055451554525545355454554555545655457554585545955460554615546255463554645546555466554675546855469554705547155472554735547455475554765547755478554795548055481554825548355484554855548655487554885548955490554915549255493554945549555496554975549855499555005550155502555035550455505555065550755508555095551055511555125551355514555155551655517555185551955520555215552255523555245552555526555275552855529555305553155532555335553455535555365553755538555395554055541555425554355544555455554655547555485554955550555515555255553555545555555556555575555855559555605556155562555635556455565555665556755568555695557055571555725557355574555755557655577555785557955580555815558255583555845558555586555875558855589555905559155592555935559455595555965559755598555995560055601556025560355604556055560655607556085560955610556115561255613556145561555616556175561855619556205562155622556235562455625556265562755628556295563055631556325563355634556355563655637556385563955640556415564255643556445564555646556475564855649556505565155652556535565455655556565565755658556595566055661556625566355664556655566655667556685566955670556715567255673556745567555676556775567855679556805568155682556835568455685556865568755688556895569055691556925569355694556955569655697556985569955700557015570255703557045570555706557075570855709557105571155712557135571455715557165571755718557195572055721557225572355724557255572655727557285572955730557315573255733557345573555736557375573855739557405574155742557435574455745557465574755748557495575055751557525575355754557555575655757557585575955760557615576255763557645576555766557675576855769557705577155772557735577455775557765577755778557795578055781557825578355784557855578655787557885578955790557915579255793557945579555796557975579855799558005580155802558035580455805558065580755808558095581055811558125581355814558155581655817558185581955820558215582255823558245582555826558275582855829558305583155832558335583455835558365583755838558395584055841558425584355844558455584655847558485584955850558515585255853558545585555856558575585855859558605586155862558635586455865558665586755868558695587055871558725587355874558755587655877558785587955880558815588255883558845588555886558875588855889558905589155892558935589455895558965589755898558995590055901559025590355904559055590655907559085590955910559115591255913559145591555916559175591855919559205592155922559235592455925559265592755928559295593055931559325593355934559355593655937559385593955940559415594255943559445594555946559475594855949559505595155952559535595455955559565595755958559595596055961559625596355964559655596655967559685596955970559715597255973559745597555976559775597855979559805598155982559835598455985559865598755988559895599055991559925599355994559955599655997559985599956000560015600256003560045600556006560075600856009560105601156012560135601456015560165601756018560195602056021560225602356024560255602656027560285602956030560315603256033560345603556036560375603856039560405604156042560435604456045560465604756048560495605056051560525605356054560555605656057560585605956060560615606256063560645606556066560675606856069560705607156072560735607456075560765607756078560795608056081560825608356084560855608656087560885608956090560915609256093560945609556096560975609856099561005610156102561035610456105561065610756108561095611056111561125611356114561155611656117561185611956120561215612256123561245612556126561275612856129561305613156132561335613456135561365613756138561395614056141561425614356144561455614656147561485614956150561515615256153561545615556156561575615856159561605616156162561635616456165561665616756168561695617056171561725617356174561755617656177561785617956180561815618256183561845618556186561875618856189561905619156192561935619456195561965619756198561995620056201562025620356204562055620656207562085620956210562115621256213562145621556216562175621856219562205622156222562235622456225562265622756228562295623056231562325623356234562355623656237562385623956240562415624256243562445624556246562475624856249562505625156252562535625456255562565625756258562595626056261562625626356264562655626656267562685626956270562715627256273562745627556276562775627856279562805628156282562835628456285562865628756288562895629056291562925629356294562955629656297562985629956300563015630256303563045630556306563075630856309563105631156312563135631456315563165631756318563195632056321563225632356324563255632656327563285632956330563315633256333563345633556336563375633856339563405634156342563435634456345563465634756348563495635056351563525635356354563555635656357563585635956360563615636256363563645636556366563675636856369563705637156372563735637456375563765637756378563795638056381563825638356384563855638656387563885638956390563915639256393563945639556396563975639856399564005640156402564035640456405564065640756408564095641056411564125641356414564155641656417564185641956420564215642256423564245642556426564275642856429564305643156432564335643456435564365643756438564395644056441564425644356444564455644656447564485644956450564515645256453564545645556456564575645856459564605646156462564635646456465564665646756468564695647056471564725647356474564755647656477564785647956480564815648256483564845648556486564875648856489564905649156492564935649456495564965649756498564995650056501565025650356504565055650656507565085650956510565115651256513565145651556516565175651856519565205652156522565235652456525565265652756528565295653056531565325653356534565355653656537565385653956540565415654256543565445654556546565475654856549565505655156552565535655456555565565655756558565595656056561565625656356564565655656656567565685656956570565715657256573565745657556576565775657856579565805658156582565835658456585565865658756588565895659056591565925659356594565955659656597565985659956600566015660256603566045660556606566075660856609566105661156612566135661456615566165661756618566195662056621566225662356624566255662656627566285662956630566315663256633566345663556636566375663856639566405664156642566435664456645566465664756648566495665056651566525665356654566555665656657566585665956660566615666256663566645666556666566675666856669566705667156672566735667456675566765667756678566795668056681566825668356684566855668656687566885668956690566915669256693566945669556696566975669856699567005670156702567035670456705567065670756708567095671056711567125671356714567155671656717567185671956720567215672256723567245672556726567275672856729567305673156732567335673456735567365673756738567395674056741567425674356744567455674656747567485674956750567515675256753567545675556756567575675856759567605676156762567635676456765567665676756768567695677056771567725677356774567755677656777567785677956780567815678256783567845678556786567875678856789567905679156792567935679456795567965679756798567995680056801568025680356804568055680656807568085680956810568115681256813568145681556816568175681856819568205682156822568235682456825568265682756828568295683056831568325683356834568355683656837568385683956840568415684256843568445684556846568475684856849568505685156852568535685456855568565685756858568595686056861568625686356864568655686656867568685686956870568715687256873568745687556876568775687856879568805688156882568835688456885568865688756888568895689056891568925689356894568955689656897568985689956900569015690256903569045690556906569075690856909569105691156912569135691456915569165691756918569195692056921569225692356924569255692656927569285692956930569315693256933569345693556936569375693856939569405694156942569435694456945569465694756948569495695056951569525695356954569555695656957569585695956960569615696256963569645696556966569675696856969569705697156972569735697456975569765697756978569795698056981569825698356984569855698656987569885698956990569915699256993569945699556996569975699856999570005700157002570035700457005570065700757008570095701057011570125701357014570155701657017570185701957020570215702257023570245702557026570275702857029570305703157032570335703457035570365703757038570395704057041570425704357044570455704657047570485704957050570515705257053570545705557056570575705857059570605706157062570635706457065570665706757068570695707057071570725707357074570755707657077570785707957080570815708257083570845708557086570875708857089570905709157092570935709457095570965709757098570995710057101571025710357104571055710657107571085710957110571115711257113571145711557116571175711857119571205712157122571235712457125571265712757128571295713057131571325713357134571355713657137571385713957140571415714257143571445714557146571475714857149571505715157152571535715457155571565715757158571595716057161571625716357164571655716657167571685716957170571715717257173571745717557176571775717857179571805718157182571835718457185571865718757188571895719057191571925719357194571955719657197571985719957200572015720257203572045720557206572075720857209572105721157212572135721457215572165721757218572195722057221572225722357224572255722657227572285722957230572315723257233572345723557236572375723857239572405724157242572435724457245572465724757248572495725057251572525725357254572555725657257572585725957260572615726257263572645726557266572675726857269572705727157272572735727457275572765727757278572795728057281572825728357284572855728657287572885728957290572915729257293572945729557296572975729857299573005730157302573035730457305573065730757308573095731057311573125731357314573155731657317573185731957320573215732257323573245732557326573275732857329573305733157332573335733457335573365733757338573395734057341573425734357344573455734657347573485734957350573515735257353573545735557356573575735857359573605736157362573635736457365573665736757368573695737057371573725737357374573755737657377573785737957380573815738257383573845738557386573875738857389573905739157392573935739457395573965739757398573995740057401574025740357404574055740657407574085740957410574115741257413574145741557416574175741857419574205742157422574235742457425574265742757428574295743057431574325743357434574355743657437574385743957440574415744257443574445744557446574475744857449574505745157452574535745457455574565745757458574595746057461574625746357464574655746657467574685746957470574715747257473574745747557476574775747857479574805748157482574835748457485574865748757488574895749057491574925749357494574955749657497574985749957500575015750257503575045750557506575075750857509575105751157512575135751457515575165751757518575195752057521575225752357524575255752657527575285752957530575315753257533575345753557536575375753857539575405754157542575435754457545575465754757548575495755057551575525755357554575555755657557575585755957560575615756257563575645756557566575675756857569575705757157572575735757457575575765757757578575795758057581575825758357584575855758657587575885758957590575915759257593575945759557596575975759857599576005760157602576035760457605576065760757608576095761057611576125761357614576155761657617576185761957620576215762257623576245762557626576275762857629576305763157632576335763457635576365763757638576395764057641576425764357644576455764657647576485764957650576515765257653576545765557656576575765857659576605766157662576635766457665576665766757668576695767057671576725767357674576755767657677576785767957680576815768257683576845768557686576875768857689576905769157692576935769457695576965769757698576995770057701577025770357704577055770657707577085770957710577115771257713577145771557716577175771857719577205772157722577235772457725577265772757728577295773057731577325773357734577355773657737577385773957740577415774257743577445774557746577475774857749577505775157752577535775457755577565775757758577595776057761577625776357764577655776657767577685776957770577715777257773577745777557776577775777857779577805778157782577835778457785577865778757788577895779057791577925779357794577955779657797577985779957800578015780257803578045780557806578075780857809578105781157812578135781457815578165781757818578195782057821578225782357824578255782657827578285782957830578315783257833578345783557836578375783857839578405784157842578435784457845578465784757848578495785057851578525785357854578555785657857578585785957860578615786257863578645786557866578675786857869578705787157872578735787457875578765787757878578795788057881578825788357884578855788657887578885788957890578915789257893578945789557896578975789857899579005790157902579035790457905579065790757908579095791057911579125791357914579155791657917579185791957920579215792257923579245792557926579275792857929579305793157932579335793457935579365793757938579395794057941579425794357944579455794657947579485794957950579515795257953579545795557956579575795857959579605796157962579635796457965579665796757968579695797057971579725797357974579755797657977579785797957980579815798257983579845798557986579875798857989579905799157992579935799457995579965799757998579995800058001580025800358004580055800658007580085800958010580115801258013580145801558016580175801858019580205802158022580235802458025580265802758028580295803058031580325803358034580355803658037580385803958040580415804258043580445804558046580475804858049580505805158052580535805458055580565805758058580595806058061580625806358064580655806658067580685806958070580715807258073580745807558076580775807858079580805808158082580835808458085580865808758088580895809058091580925809358094580955809658097580985809958100581015810258103581045810558106581075810858109581105811158112581135811458115581165811758118581195812058121581225812358124581255812658127581285812958130581315813258133581345813558136581375813858139581405814158142581435814458145581465814758148581495815058151581525815358154581555815658157581585815958160581615816258163581645816558166581675816858169581705817158172581735817458175581765817758178581795818058181581825818358184581855818658187581885818958190581915819258193581945819558196581975819858199582005820158202582035820458205582065820758208582095821058211582125821358214582155821658217582185821958220582215822258223582245822558226582275822858229582305823158232582335823458235582365823758238582395824058241582425824358244582455824658247582485824958250582515825258253582545825558256582575825858259582605826158262582635826458265582665826758268582695827058271582725827358274582755827658277582785827958280582815828258283582845828558286582875828858289582905829158292582935829458295582965829758298582995830058301583025830358304583055830658307583085830958310583115831258313583145831558316583175831858319583205832158322583235832458325583265832758328583295833058331583325833358334583355833658337583385833958340583415834258343583445834558346583475834858349583505835158352583535835458355583565835758358583595836058361583625836358364583655836658367583685836958370583715837258373583745837558376583775837858379583805838158382583835838458385583865838758388583895839058391583925839358394583955839658397583985839958400584015840258403584045840558406584075840858409584105841158412584135841458415584165841758418584195842058421584225842358424584255842658427584285842958430584315843258433584345843558436584375843858439584405844158442584435844458445584465844758448584495845058451584525845358454584555845658457584585845958460584615846258463584645846558466584675846858469584705847158472584735847458475584765847758478584795848058481584825848358484584855848658487584885848958490584915849258493584945849558496584975849858499585005850158502585035850458505585065850758508585095851058511585125851358514585155851658517585185851958520585215852258523585245852558526585275852858529585305853158532585335853458535585365853758538585395854058541585425854358544585455854658547585485854958550585515855258553585545855558556585575855858559585605856158562585635856458565585665856758568585695857058571585725857358574585755857658577585785857958580585815858258583585845858558586585875858858589585905859158592585935859458595585965859758598585995860058601586025860358604586055860658607586085860958610586115861258613586145861558616586175861858619586205862158622586235862458625586265862758628586295863058631586325863358634586355863658637586385863958640586415864258643586445864558646586475864858649586505865158652586535865458655586565865758658586595866058661586625866358664586655866658667586685866958670586715867258673586745867558676586775867858679586805868158682586835868458685586865868758688586895869058691586925869358694586955869658697586985869958700587015870258703587045870558706587075870858709587105871158712587135871458715587165871758718587195872058721587225872358724587255872658727587285872958730587315873258733587345873558736587375873858739587405874158742587435874458745587465874758748587495875058751587525875358754587555875658757587585875958760587615876258763587645876558766587675876858769587705877158772587735877458775587765877758778587795878058781587825878358784587855878658787587885878958790587915879258793587945879558796587975879858799588005880158802588035880458805588065880758808588095881058811588125881358814588155881658817588185881958820588215882258823588245882558826588275882858829588305883158832588335883458835588365883758838588395884058841588425884358844588455884658847588485884958850588515885258853588545885558856588575885858859588605886158862588635886458865588665886758868588695887058871588725887358874588755887658877588785887958880588815888258883588845888558886588875888858889588905889158892588935889458895588965889758898588995890058901589025890358904589055890658907589085890958910589115891258913589145891558916589175891858919589205892158922589235892458925589265892758928589295893058931589325893358934589355893658937589385893958940589415894258943589445894558946589475894858949589505895158952589535895458955589565895758958589595896058961589625896358964589655896658967589685896958970589715897258973589745897558976589775897858979589805898158982589835898458985589865898758988589895899058991589925899358994589955899658997589985899959000590015900259003590045900559006590075900859009590105901159012590135901459015590165901759018590195902059021590225902359024590255902659027590285902959030590315903259033590345903559036590375903859039590405904159042590435904459045590465904759048590495905059051590525905359054590555905659057590585905959060590615906259063590645906559066590675906859069590705907159072590735907459075590765907759078590795908059081590825908359084590855908659087590885908959090590915909259093590945909559096590975909859099591005910159102591035910459105591065910759108591095911059111591125911359114591155911659117591185911959120591215912259123591245912559126591275912859129591305913159132591335913459135591365913759138591395914059141591425914359144591455914659147591485914959150591515915259153591545915559156591575915859159591605916159162591635916459165591665916759168591695917059171591725917359174591755917659177591785917959180591815918259183591845918559186591875918859189591905919159192591935919459195591965919759198591995920059201592025920359204592055920659207592085920959210592115921259213592145921559216592175921859219592205922159222592235922459225592265922759228592295923059231592325923359234592355923659237592385923959240592415924259243592445924559246592475924859249592505925159252592535925459255592565925759258592595926059261592625926359264592655926659267592685926959270592715927259273592745927559276592775927859279592805928159282592835928459285592865928759288592895929059291592925929359294592955929659297592985929959300593015930259303593045930559306593075930859309593105931159312593135931459315593165931759318593195932059321593225932359324593255932659327593285932959330593315933259333593345933559336593375933859339593405934159342593435934459345593465934759348593495935059351593525935359354593555935659357593585935959360593615936259363593645936559366593675936859369593705937159372593735937459375593765937759378593795938059381593825938359384593855938659387593885938959390593915939259393593945939559396593975939859399594005940159402594035940459405594065940759408594095941059411594125941359414594155941659417594185941959420594215942259423594245942559426594275942859429594305943159432594335943459435594365943759438594395944059441594425944359444594455944659447594485944959450594515945259453594545945559456594575945859459594605946159462594635946459465594665946759468594695947059471594725947359474594755947659477594785947959480594815948259483594845948559486594875948859489594905949159492594935949459495594965949759498594995950059501595025950359504595055950659507595085950959510595115951259513595145951559516595175951859519595205952159522595235952459525595265952759528595295953059531595325953359534595355953659537595385953959540595415954259543595445954559546595475954859549595505955159552595535955459555595565955759558595595956059561595625956359564595655956659567595685956959570595715957259573595745957559576595775957859579595805958159582595835958459585595865958759588595895959059591595925959359594595955959659597595985959959600596015960259603596045960559606596075960859609596105961159612596135961459615596165961759618596195962059621596225962359624596255962659627596285962959630596315963259633596345963559636596375963859639596405964159642596435964459645596465964759648596495965059651596525965359654596555965659657596585965959660596615966259663596645966559666596675966859669596705967159672596735967459675596765967759678596795968059681596825968359684596855968659687596885968959690596915969259693596945969559696596975969859699597005970159702597035970459705597065970759708597095971059711597125971359714597155971659717597185971959720597215972259723597245972559726597275972859729597305973159732597335973459735597365973759738597395974059741597425974359744597455974659747597485974959750597515975259753597545975559756597575975859759597605976159762597635976459765597665976759768597695977059771597725977359774597755977659777597785977959780597815978259783597845978559786597875978859789597905979159792597935979459795597965979759798597995980059801598025980359804598055980659807598085980959810598115981259813598145981559816598175981859819598205982159822598235982459825598265982759828598295983059831598325983359834598355983659837598385983959840598415984259843598445984559846598475984859849598505985159852598535985459855598565985759858598595986059861598625986359864598655986659867598685986959870598715987259873598745987559876598775987859879598805988159882598835988459885598865988759888598895989059891598925989359894598955989659897598985989959900599015990259903599045990559906599075990859909599105991159912599135991459915599165991759918599195992059921599225992359924599255992659927599285992959930599315993259933599345993559936599375993859939599405994159942599435994459945599465994759948599495995059951599525995359954599555995659957599585995959960599615996259963599645996559966599675996859969599705997159972599735997459975599765997759978599795998059981599825998359984599855998659987599885998959990599915999259993599945999559996599975999859999600006000160002600036000460005600066000760008600096001060011600126001360014600156001660017600186001960020600216002260023600246002560026600276002860029600306003160032600336003460035600366003760038600396004060041600426004360044600456004660047600486004960050600516005260053600546005560056600576005860059600606006160062600636006460065600666006760068600696007060071600726007360074600756007660077600786007960080600816008260083600846008560086600876008860089600906009160092600936009460095600966009760098600996010060101601026010360104601056010660107601086010960110601116011260113601146011560116601176011860119601206012160122601236012460125601266012760128601296013060131601326013360134601356013660137601386013960140601416014260143601446014560146601476014860149601506015160152601536015460155601566015760158601596016060161601626016360164601656016660167601686016960170601716017260173601746017560176601776017860179601806018160182601836018460185601866018760188601896019060191601926019360194601956019660197601986019960200602016020260203602046020560206602076020860209602106021160212602136021460215602166021760218602196022060221602226022360224602256022660227602286022960230602316023260233602346023560236602376023860239602406024160242602436024460245602466024760248602496025060251602526025360254602556025660257602586025960260602616026260263602646026560266602676026860269602706027160272602736027460275602766027760278602796028060281602826028360284602856028660287602886028960290602916029260293602946029560296602976029860299603006030160302603036030460305603066030760308603096031060311603126031360314603156031660317603186031960320603216032260323603246032560326603276032860329603306033160332603336033460335603366033760338603396034060341603426034360344603456034660347603486034960350603516035260353603546035560356603576035860359603606036160362603636036460365603666036760368603696037060371603726037360374603756037660377603786037960380603816038260383603846038560386603876038860389603906039160392603936039460395603966039760398603996040060401604026040360404604056040660407604086040960410604116041260413604146041560416604176041860419604206042160422604236042460425604266042760428604296043060431604326043360434604356043660437604386043960440604416044260443604446044560446604476044860449604506045160452604536045460455604566045760458604596046060461604626046360464604656046660467604686046960470604716047260473604746047560476604776047860479604806048160482604836048460485604866048760488604896049060491604926049360494604956049660497604986049960500605016050260503605046050560506605076050860509605106051160512605136051460515605166051760518605196052060521605226052360524605256052660527605286052960530605316053260533605346053560536605376053860539605406054160542605436054460545605466054760548605496055060551605526055360554605556055660557605586055960560605616056260563605646056560566605676056860569605706057160572605736057460575605766057760578605796058060581605826058360584605856058660587605886058960590605916059260593605946059560596605976059860599606006060160602606036060460605606066060760608606096061060611606126061360614606156061660617606186061960620606216062260623606246062560626606276062860629606306063160632606336063460635606366063760638606396064060641606426064360644606456064660647606486064960650606516065260653606546065560656606576065860659606606066160662606636066460665606666066760668606696067060671606726067360674606756067660677606786067960680606816068260683606846068560686606876068860689606906069160692606936069460695606966069760698606996070060701607026070360704607056070660707607086070960710607116071260713607146071560716607176071860719607206072160722607236072460725607266072760728607296073060731607326073360734607356073660737607386073960740607416074260743607446074560746607476074860749607506075160752607536075460755607566075760758607596076060761607626076360764607656076660767607686076960770607716077260773607746077560776607776077860779607806078160782607836078460785607866078760788607896079060791607926079360794607956079660797607986079960800608016080260803608046080560806608076080860809608106081160812608136081460815608166081760818608196082060821608226082360824608256082660827608286082960830608316083260833608346083560836608376083860839608406084160842608436084460845608466084760848608496085060851608526085360854608556085660857608586085960860608616086260863608646086560866608676086860869608706087160872608736087460875608766087760878608796088060881608826088360884608856088660887608886088960890608916089260893608946089560896608976089860899609006090160902609036090460905609066090760908609096091060911609126091360914609156091660917609186091960920609216092260923609246092560926609276092860929609306093160932609336093460935609366093760938609396094060941609426094360944609456094660947609486094960950609516095260953609546095560956609576095860959609606096160962609636096460965609666096760968609696097060971609726097360974609756097660977609786097960980609816098260983609846098560986609876098860989609906099160992609936099460995609966099760998609996100061001610026100361004610056100661007610086100961010610116101261013610146101561016610176101861019610206102161022610236102461025610266102761028610296103061031610326103361034610356103661037610386103961040610416104261043610446104561046610476104861049610506105161052610536105461055610566105761058610596106061061610626106361064610656106661067610686106961070610716107261073610746107561076610776107861079610806108161082610836108461085610866108761088610896109061091610926109361094610956109661097610986109961100611016110261103611046110561106611076110861109611106111161112611136111461115611166111761118611196112061121611226112361124611256112661127611286112961130611316113261133611346113561136611376113861139611406114161142611436114461145611466114761148611496115061151611526115361154611556115661157611586115961160611616116261163611646116561166611676116861169611706117161172611736117461175611766117761178611796118061181611826118361184611856118661187611886118961190611916119261193611946119561196611976119861199612006120161202612036120461205612066120761208612096121061211612126121361214612156121661217612186121961220612216122261223612246122561226612276122861229612306123161232612336123461235612366123761238612396124061241612426124361244612456124661247612486124961250612516125261253612546125561256612576125861259612606126161262612636126461265612666126761268612696127061271612726127361274612756127661277612786127961280612816128261283612846128561286612876128861289612906129161292612936129461295612966129761298612996130061301613026130361304613056130661307613086130961310613116131261313613146131561316613176131861319613206132161322613236132461325613266132761328613296133061331613326133361334613356133661337613386133961340613416134261343613446134561346613476134861349613506135161352613536135461355613566135761358613596136061361613626136361364613656136661367613686136961370613716137261373613746137561376613776137861379613806138161382613836138461385613866138761388613896139061391613926139361394613956139661397613986139961400614016140261403614046140561406614076140861409614106141161412614136141461415614166141761418614196142061421614226142361424614256142661427614286142961430614316143261433614346143561436614376143861439614406144161442614436144461445614466144761448614496145061451614526145361454614556145661457614586145961460614616146261463614646146561466614676146861469614706147161472614736147461475614766147761478614796148061481614826148361484614856148661487614886148961490614916149261493614946149561496614976149861499615006150161502615036150461505615066150761508615096151061511615126151361514615156151661517615186151961520615216152261523615246152561526615276152861529615306153161532615336153461535615366153761538615396154061541615426154361544615456154661547615486154961550615516155261553615546155561556615576155861559615606156161562615636156461565615666156761568615696157061571615726157361574615756157661577615786157961580615816158261583615846158561586615876158861589615906159161592615936159461595615966159761598615996160061601616026160361604616056160661607616086160961610616116161261613616146161561616616176161861619616206162161622616236162461625616266162761628616296163061631616326163361634616356163661637616386163961640616416164261643616446164561646616476164861649616506165161652616536165461655616566165761658616596166061661616626166361664616656166661667616686166961670616716167261673616746167561676616776167861679616806168161682616836168461685616866168761688616896169061691616926169361694616956169661697616986169961700617016170261703617046170561706617076170861709617106171161712617136171461715617166171761718617196172061721617226172361724617256172661727617286172961730617316173261733617346173561736617376173861739617406174161742617436174461745617466174761748617496175061751617526175361754617556175661757617586175961760617616176261763617646176561766617676176861769617706177161772617736177461775617766177761778617796178061781617826178361784617856178661787617886178961790617916179261793617946179561796617976179861799618006180161802618036180461805618066180761808618096181061811618126181361814618156181661817618186181961820618216182261823618246182561826618276182861829618306183161832618336183461835618366183761838618396184061841618426184361844618456184661847618486184961850618516185261853618546185561856618576185861859618606186161862618636186461865618666186761868618696187061871618726187361874618756187661877618786187961880618816188261883618846188561886618876188861889618906189161892618936189461895618966189761898618996190061901619026190361904619056190661907619086190961910619116191261913619146191561916619176191861919619206192161922619236192461925619266192761928619296193061931619326193361934619356193661937619386193961940619416194261943619446194561946619476194861949619506195161952619536195461955619566195761958619596196061961619626196361964619656196661967619686196961970619716197261973619746197561976619776197861979619806198161982619836198461985619866198761988619896199061991619926199361994619956199661997619986199962000620016200262003620046200562006620076200862009620106201162012620136201462015620166201762018620196202062021620226202362024620256202662027620286202962030620316203262033620346203562036620376203862039620406204162042620436204462045620466204762048620496205062051620526205362054620556205662057620586205962060620616206262063620646206562066620676206862069620706207162072620736207462075620766207762078620796208062081620826208362084620856208662087620886208962090620916209262093620946209562096620976209862099621006210162102621036210462105621066210762108621096211062111621126211362114621156211662117621186211962120621216212262123621246212562126621276212862129621306213162132621336213462135621366213762138621396214062141621426214362144621456214662147621486214962150621516215262153621546215562156621576215862159621606216162162621636216462165621666216762168621696217062171621726217362174621756217662177621786217962180621816218262183621846218562186621876218862189621906219162192621936219462195621966219762198621996220062201622026220362204622056220662207622086220962210622116221262213622146221562216622176221862219622206222162222622236222462225622266222762228622296223062231622326223362234622356223662237622386223962240622416224262243622446224562246622476224862249622506225162252622536225462255622566225762258622596226062261622626226362264622656226662267622686226962270622716227262273622746227562276622776227862279622806228162282622836228462285622866228762288622896229062291622926229362294622956229662297622986229962300623016230262303623046230562306623076230862309623106231162312623136231462315623166231762318623196232062321623226232362324623256232662327623286232962330623316233262333623346233562336623376233862339623406234162342623436234462345623466234762348623496235062351623526235362354623556235662357623586235962360623616236262363623646236562366623676236862369623706237162372623736237462375623766237762378623796238062381623826238362384623856238662387623886238962390623916239262393623946239562396623976239862399624006240162402624036240462405624066240762408624096241062411624126241362414624156241662417624186241962420624216242262423624246242562426624276242862429624306243162432624336243462435624366243762438624396244062441624426244362444624456244662447624486244962450624516245262453624546245562456624576245862459624606246162462624636246462465624666246762468624696247062471624726247362474624756247662477624786247962480624816248262483624846248562486624876248862489624906249162492624936249462495624966249762498624996250062501625026250362504625056250662507625086250962510625116251262513625146251562516625176251862519625206252162522625236252462525625266252762528625296253062531625326253362534625356253662537625386253962540625416254262543625446254562546625476254862549625506255162552625536255462555625566255762558625596256062561625626256362564625656256662567625686256962570625716257262573625746257562576625776257862579625806258162582625836258462585625866258762588625896259062591625926259362594625956259662597625986259962600626016260262603626046260562606626076260862609626106261162612626136261462615626166261762618626196262062621626226262362624626256262662627626286262962630626316263262633626346263562636626376263862639626406264162642626436264462645626466264762648626496265062651626526265362654626556265662657626586265962660626616266262663626646266562666626676266862669626706267162672626736267462675626766267762678626796268062681626826268362684626856268662687626886268962690626916269262693626946269562696626976269862699627006270162702627036270462705627066270762708627096271062711627126271362714627156271662717627186271962720627216272262723627246272562726627276272862729627306273162732627336273462735627366273762738627396274062741627426274362744627456274662747627486274962750627516275262753627546275562756627576275862759627606276162762627636276462765627666276762768627696277062771627726277362774627756277662777627786277962780627816278262783627846278562786627876278862789627906279162792627936279462795627966279762798627996280062801628026280362804628056280662807628086280962810628116281262813628146281562816628176281862819628206282162822628236282462825628266282762828628296283062831628326283362834628356283662837628386283962840628416284262843628446284562846628476284862849628506285162852628536285462855628566285762858628596286062861628626286362864628656286662867628686286962870628716287262873628746287562876628776287862879628806288162882628836288462885628866288762888628896289062891628926289362894628956289662897628986289962900629016290262903629046290562906629076290862909629106291162912629136291462915629166291762918629196292062921629226292362924629256292662927629286292962930629316293262933629346293562936629376293862939629406294162942629436294462945629466294762948629496295062951629526295362954629556295662957629586295962960629616296262963629646296562966629676296862969629706297162972629736297462975629766297762978629796298062981629826298362984629856298662987629886298962990629916299262993629946299562996629976299862999630006300163002630036300463005630066300763008630096301063011630126301363014630156301663017630186301963020630216302263023630246302563026630276302863029630306303163032630336303463035630366303763038630396304063041630426304363044630456304663047630486304963050630516305263053630546305563056630576305863059630606306163062630636306463065630666306763068630696307063071630726307363074630756307663077630786307963080630816308263083630846308563086630876308863089630906309163092630936309463095630966309763098630996310063101631026310363104631056310663107631086310963110631116311263113631146311563116631176311863119631206312163122631236312463125631266312763128631296313063131631326313363134631356313663137631386313963140631416314263143631446314563146631476314863149631506315163152631536315463155631566315763158631596316063161631626316363164631656316663167631686316963170631716317263173631746317563176631776317863179631806318163182631836318463185631866318763188631896319063191631926319363194631956319663197631986319963200632016320263203632046320563206632076320863209632106321163212632136321463215632166321763218632196322063221632226322363224632256322663227632286322963230632316323263233632346323563236632376323863239632406324163242632436324463245632466324763248632496325063251632526325363254632556325663257632586325963260632616326263263632646326563266632676326863269632706327163272632736327463275632766327763278632796328063281632826328363284632856328663287632886328963290632916329263293632946329563296632976329863299633006330163302633036330463305633066330763308633096331063311633126331363314633156331663317633186331963320633216332263323633246332563326633276332863329633306333163332633336333463335633366333763338633396334063341633426334363344633456334663347633486334963350633516335263353633546335563356633576335863359633606336163362633636336463365633666336763368633696337063371633726337363374633756337663377633786337963380633816338263383633846338563386633876338863389633906339163392633936339463395633966339763398633996340063401634026340363404634056340663407634086340963410634116341263413634146341563416634176341863419634206342163422634236342463425634266342763428634296343063431634326343363434634356343663437634386343963440634416344263443634446344563446634476344863449634506345163452634536345463455634566345763458634596346063461634626346363464634656346663467634686346963470634716347263473634746347563476634776347863479634806348163482634836348463485634866348763488634896349063491634926349363494634956349663497634986349963500635016350263503635046350563506635076350863509635106351163512635136351463515635166351763518635196352063521635226352363524635256352663527635286352963530635316353263533635346353563536635376353863539635406354163542635436354463545635466354763548635496355063551635526355363554635556355663557635586355963560635616356263563635646356563566635676356863569635706357163572635736357463575635766357763578635796358063581635826358363584635856358663587635886358963590635916359263593635946359563596635976359863599636006360163602636036360463605636066360763608636096361063611636126361363614636156361663617636186361963620636216362263623636246362563626636276362863629636306363163632636336363463635636366363763638636396364063641636426364363644636456364663647636486364963650636516365263653636546365563656636576365863659636606366163662636636366463665636666366763668636696367063671636726367363674636756367663677636786367963680636816368263683636846368563686636876368863689636906369163692636936369463695636966369763698636996370063701637026370363704637056370663707637086370963710637116371263713637146371563716637176371863719637206372163722637236372463725637266372763728637296373063731637326373363734637356373663737637386373963740637416374263743637446374563746637476374863749637506375163752637536375463755637566375763758637596376063761637626376363764637656376663767637686376963770637716377263773637746377563776637776377863779637806378163782637836378463785637866378763788637896379063791637926379363794637956379663797637986379963800638016380263803638046380563806638076380863809638106381163812638136381463815638166381763818638196382063821638226382363824638256382663827638286382963830638316383263833638346383563836638376383863839638406384163842638436384463845638466384763848638496385063851638526385363854638556385663857638586385963860638616386263863638646386563866638676386863869638706387163872638736387463875638766387763878638796388063881638826388363884638856388663887638886388963890638916389263893638946389563896638976389863899639006390163902639036390463905639066390763908639096391063911639126391363914639156391663917639186391963920639216392263923639246392563926639276392863929639306393163932639336393463935639366393763938639396394063941639426394363944639456394663947639486394963950639516395263953639546395563956639576395863959639606396163962639636396463965639666396763968639696397063971639726397363974639756397663977639786397963980639816398263983639846398563986639876398863989639906399163992639936399463995639966399763998639996400064001640026400364004640056400664007640086400964010640116401264013640146401564016640176401864019640206402164022640236402464025640266402764028640296403064031640326403364034640356403664037640386403964040640416404264043640446404564046640476404864049640506405164052640536405464055640566405764058640596406064061640626406364064640656406664067640686406964070640716407264073640746407564076640776407864079640806408164082640836408464085640866408764088640896409064091640926409364094640956409664097640986409964100641016410264103641046410564106641076410864109641106411164112641136411464115641166411764118641196412064121641226412364124641256412664127641286412964130641316413264133641346413564136641376413864139641406414164142641436414464145641466414764148641496415064151641526415364154641556415664157641586415964160641616416264163641646416564166641676416864169641706417164172641736417464175641766417764178641796418064181641826418364184641856418664187641886418964190641916419264193641946419564196641976419864199642006420164202642036420464205642066420764208642096421064211642126421364214642156421664217642186421964220642216422264223642246422564226642276422864229642306423164232642336423464235642366423764238642396424064241642426424364244642456424664247642486424964250642516425264253642546425564256642576425864259642606426164262642636426464265642666426764268642696427064271642726427364274642756427664277642786427964280642816428264283642846428564286
  1. /*
  2. +----------------------------------------------------------------------+
  3. | Zend Engine |
  4. +----------------------------------------------------------------------+
  5. | Copyright (c) Zend Technologies Ltd. (http://www.zend.com) |
  6. +----------------------------------------------------------------------+
  7. | This source file is subject to version 2.00 of the Zend license, |
  8. | that is bundled with this package in the file LICENSE, and is |
  9. | available through the world-wide-web at the following url: |
  10. | http://www.zend.com/license/2_00.txt. |
  11. | If you did not receive a copy of the Zend license and are unable to |
  12. | obtain it through the world-wide-web, please send a note to |
  13. | license@zend.com so we can mail you a copy immediately. |
  14. +----------------------------------------------------------------------+
  15. | Authors: Andi Gutmans <andi@php.net> |
  16. | Zeev Suraski <zeev@php.net> |
  17. | Dmitry Stogov <dmitry@php.net> |
  18. +----------------------------------------------------------------------+
  19. */
  20. #ifdef ZEND_WIN32
  21. # pragma warning(disable : 4101)
  22. # pragma warning(once : 6235)
  23. # pragma warning(once : 6237)
  24. # pragma warning(once : 6239)
  25. # pragma warning(once : 6240)
  26. # pragma warning(once : 6285)
  27. # pragma warning(once : 6286)
  28. # pragma warning(once : 6326)
  29. #endif
  30. static user_opcode_handler_t zend_user_opcode_handlers[256] = {
  31. (user_opcode_handler_t)NULL,
  32. (user_opcode_handler_t)NULL,
  33. (user_opcode_handler_t)NULL,
  34. (user_opcode_handler_t)NULL,
  35. (user_opcode_handler_t)NULL,
  36. (user_opcode_handler_t)NULL,
  37. (user_opcode_handler_t)NULL,
  38. (user_opcode_handler_t)NULL,
  39. (user_opcode_handler_t)NULL,
  40. (user_opcode_handler_t)NULL,
  41. (user_opcode_handler_t)NULL,
  42. (user_opcode_handler_t)NULL,
  43. (user_opcode_handler_t)NULL,
  44. (user_opcode_handler_t)NULL,
  45. (user_opcode_handler_t)NULL,
  46. (user_opcode_handler_t)NULL,
  47. (user_opcode_handler_t)NULL,
  48. (user_opcode_handler_t)NULL,
  49. (user_opcode_handler_t)NULL,
  50. (user_opcode_handler_t)NULL,
  51. (user_opcode_handler_t)NULL,
  52. (user_opcode_handler_t)NULL,
  53. (user_opcode_handler_t)NULL,
  54. (user_opcode_handler_t)NULL,
  55. (user_opcode_handler_t)NULL,
  56. (user_opcode_handler_t)NULL,
  57. (user_opcode_handler_t)NULL,
  58. (user_opcode_handler_t)NULL,
  59. (user_opcode_handler_t)NULL,
  60. (user_opcode_handler_t)NULL,
  61. (user_opcode_handler_t)NULL,
  62. (user_opcode_handler_t)NULL,
  63. (user_opcode_handler_t)NULL,
  64. (user_opcode_handler_t)NULL,
  65. (user_opcode_handler_t)NULL,
  66. (user_opcode_handler_t)NULL,
  67. (user_opcode_handler_t)NULL,
  68. (user_opcode_handler_t)NULL,
  69. (user_opcode_handler_t)NULL,
  70. (user_opcode_handler_t)NULL,
  71. (user_opcode_handler_t)NULL,
  72. (user_opcode_handler_t)NULL,
  73. (user_opcode_handler_t)NULL,
  74. (user_opcode_handler_t)NULL,
  75. (user_opcode_handler_t)NULL,
  76. (user_opcode_handler_t)NULL,
  77. (user_opcode_handler_t)NULL,
  78. (user_opcode_handler_t)NULL,
  79. (user_opcode_handler_t)NULL,
  80. (user_opcode_handler_t)NULL,
  81. (user_opcode_handler_t)NULL,
  82. (user_opcode_handler_t)NULL,
  83. (user_opcode_handler_t)NULL,
  84. (user_opcode_handler_t)NULL,
  85. (user_opcode_handler_t)NULL,
  86. (user_opcode_handler_t)NULL,
  87. (user_opcode_handler_t)NULL,
  88. (user_opcode_handler_t)NULL,
  89. (user_opcode_handler_t)NULL,
  90. (user_opcode_handler_t)NULL,
  91. (user_opcode_handler_t)NULL,
  92. (user_opcode_handler_t)NULL,
  93. (user_opcode_handler_t)NULL,
  94. (user_opcode_handler_t)NULL,
  95. (user_opcode_handler_t)NULL,
  96. (user_opcode_handler_t)NULL,
  97. (user_opcode_handler_t)NULL,
  98. (user_opcode_handler_t)NULL,
  99. (user_opcode_handler_t)NULL,
  100. (user_opcode_handler_t)NULL,
  101. (user_opcode_handler_t)NULL,
  102. (user_opcode_handler_t)NULL,
  103. (user_opcode_handler_t)NULL,
  104. (user_opcode_handler_t)NULL,
  105. (user_opcode_handler_t)NULL,
  106. (user_opcode_handler_t)NULL,
  107. (user_opcode_handler_t)NULL,
  108. (user_opcode_handler_t)NULL,
  109. (user_opcode_handler_t)NULL,
  110. (user_opcode_handler_t)NULL,
  111. (user_opcode_handler_t)NULL,
  112. (user_opcode_handler_t)NULL,
  113. (user_opcode_handler_t)NULL,
  114. (user_opcode_handler_t)NULL,
  115. (user_opcode_handler_t)NULL,
  116. (user_opcode_handler_t)NULL,
  117. (user_opcode_handler_t)NULL,
  118. (user_opcode_handler_t)NULL,
  119. (user_opcode_handler_t)NULL,
  120. (user_opcode_handler_t)NULL,
  121. (user_opcode_handler_t)NULL,
  122. (user_opcode_handler_t)NULL,
  123. (user_opcode_handler_t)NULL,
  124. (user_opcode_handler_t)NULL,
  125. (user_opcode_handler_t)NULL,
  126. (user_opcode_handler_t)NULL,
  127. (user_opcode_handler_t)NULL,
  128. (user_opcode_handler_t)NULL,
  129. (user_opcode_handler_t)NULL,
  130. (user_opcode_handler_t)NULL,
  131. (user_opcode_handler_t)NULL,
  132. (user_opcode_handler_t)NULL,
  133. (user_opcode_handler_t)NULL,
  134. (user_opcode_handler_t)NULL,
  135. (user_opcode_handler_t)NULL,
  136. (user_opcode_handler_t)NULL,
  137. (user_opcode_handler_t)NULL,
  138. (user_opcode_handler_t)NULL,
  139. (user_opcode_handler_t)NULL,
  140. (user_opcode_handler_t)NULL,
  141. (user_opcode_handler_t)NULL,
  142. (user_opcode_handler_t)NULL,
  143. (user_opcode_handler_t)NULL,
  144. (user_opcode_handler_t)NULL,
  145. (user_opcode_handler_t)NULL,
  146. (user_opcode_handler_t)NULL,
  147. (user_opcode_handler_t)NULL,
  148. (user_opcode_handler_t)NULL,
  149. (user_opcode_handler_t)NULL,
  150. (user_opcode_handler_t)NULL,
  151. (user_opcode_handler_t)NULL,
  152. (user_opcode_handler_t)NULL,
  153. (user_opcode_handler_t)NULL,
  154. (user_opcode_handler_t)NULL,
  155. (user_opcode_handler_t)NULL,
  156. (user_opcode_handler_t)NULL,
  157. (user_opcode_handler_t)NULL,
  158. (user_opcode_handler_t)NULL,
  159. (user_opcode_handler_t)NULL,
  160. (user_opcode_handler_t)NULL,
  161. (user_opcode_handler_t)NULL,
  162. (user_opcode_handler_t)NULL,
  163. (user_opcode_handler_t)NULL,
  164. (user_opcode_handler_t)NULL,
  165. (user_opcode_handler_t)NULL,
  166. (user_opcode_handler_t)NULL,
  167. (user_opcode_handler_t)NULL,
  168. (user_opcode_handler_t)NULL,
  169. (user_opcode_handler_t)NULL,
  170. (user_opcode_handler_t)NULL,
  171. (user_opcode_handler_t)NULL,
  172. (user_opcode_handler_t)NULL,
  173. (user_opcode_handler_t)NULL,
  174. (user_opcode_handler_t)NULL,
  175. (user_opcode_handler_t)NULL,
  176. (user_opcode_handler_t)NULL,
  177. (user_opcode_handler_t)NULL,
  178. (user_opcode_handler_t)NULL,
  179. (user_opcode_handler_t)NULL,
  180. (user_opcode_handler_t)NULL,
  181. (user_opcode_handler_t)NULL,
  182. (user_opcode_handler_t)NULL,
  183. (user_opcode_handler_t)NULL,
  184. (user_opcode_handler_t)NULL,
  185. (user_opcode_handler_t)NULL,
  186. (user_opcode_handler_t)NULL,
  187. (user_opcode_handler_t)NULL,
  188. (user_opcode_handler_t)NULL,
  189. (user_opcode_handler_t)NULL,
  190. (user_opcode_handler_t)NULL,
  191. (user_opcode_handler_t)NULL,
  192. (user_opcode_handler_t)NULL,
  193. (user_opcode_handler_t)NULL,
  194. (user_opcode_handler_t)NULL,
  195. (user_opcode_handler_t)NULL,
  196. (user_opcode_handler_t)NULL,
  197. (user_opcode_handler_t)NULL,
  198. (user_opcode_handler_t)NULL,
  199. (user_opcode_handler_t)NULL,
  200. (user_opcode_handler_t)NULL,
  201. (user_opcode_handler_t)NULL,
  202. (user_opcode_handler_t)NULL,
  203. (user_opcode_handler_t)NULL,
  204. (user_opcode_handler_t)NULL,
  205. (user_opcode_handler_t)NULL,
  206. (user_opcode_handler_t)NULL,
  207. (user_opcode_handler_t)NULL,
  208. (user_opcode_handler_t)NULL,
  209. (user_opcode_handler_t)NULL,
  210. (user_opcode_handler_t)NULL,
  211. (user_opcode_handler_t)NULL,
  212. (user_opcode_handler_t)NULL,
  213. (user_opcode_handler_t)NULL,
  214. (user_opcode_handler_t)NULL,
  215. (user_opcode_handler_t)NULL,
  216. (user_opcode_handler_t)NULL,
  217. (user_opcode_handler_t)NULL,
  218. (user_opcode_handler_t)NULL,
  219. (user_opcode_handler_t)NULL,
  220. (user_opcode_handler_t)NULL,
  221. (user_opcode_handler_t)NULL,
  222. (user_opcode_handler_t)NULL,
  223. (user_opcode_handler_t)NULL,
  224. (user_opcode_handler_t)NULL,
  225. (user_opcode_handler_t)NULL,
  226. (user_opcode_handler_t)NULL,
  227. (user_opcode_handler_t)NULL,
  228. (user_opcode_handler_t)NULL,
  229. (user_opcode_handler_t)NULL,
  230. (user_opcode_handler_t)NULL,
  231. (user_opcode_handler_t)NULL,
  232. (user_opcode_handler_t)NULL,
  233. (user_opcode_handler_t)NULL,
  234. (user_opcode_handler_t)NULL,
  235. (user_opcode_handler_t)NULL,
  236. (user_opcode_handler_t)NULL,
  237. (user_opcode_handler_t)NULL,
  238. (user_opcode_handler_t)NULL,
  239. (user_opcode_handler_t)NULL,
  240. (user_opcode_handler_t)NULL,
  241. (user_opcode_handler_t)NULL,
  242. (user_opcode_handler_t)NULL,
  243. (user_opcode_handler_t)NULL,
  244. (user_opcode_handler_t)NULL,
  245. (user_opcode_handler_t)NULL,
  246. (user_opcode_handler_t)NULL,
  247. (user_opcode_handler_t)NULL,
  248. (user_opcode_handler_t)NULL,
  249. (user_opcode_handler_t)NULL,
  250. (user_opcode_handler_t)NULL,
  251. (user_opcode_handler_t)NULL,
  252. (user_opcode_handler_t)NULL,
  253. (user_opcode_handler_t)NULL,
  254. (user_opcode_handler_t)NULL,
  255. (user_opcode_handler_t)NULL,
  256. (user_opcode_handler_t)NULL,
  257. (user_opcode_handler_t)NULL,
  258. (user_opcode_handler_t)NULL,
  259. (user_opcode_handler_t)NULL,
  260. (user_opcode_handler_t)NULL,
  261. (user_opcode_handler_t)NULL,
  262. (user_opcode_handler_t)NULL,
  263. (user_opcode_handler_t)NULL,
  264. (user_opcode_handler_t)NULL,
  265. (user_opcode_handler_t)NULL,
  266. (user_opcode_handler_t)NULL,
  267. (user_opcode_handler_t)NULL,
  268. (user_opcode_handler_t)NULL,
  269. (user_opcode_handler_t)NULL,
  270. (user_opcode_handler_t)NULL,
  271. (user_opcode_handler_t)NULL,
  272. (user_opcode_handler_t)NULL,
  273. (user_opcode_handler_t)NULL,
  274. (user_opcode_handler_t)NULL,
  275. (user_opcode_handler_t)NULL,
  276. (user_opcode_handler_t)NULL,
  277. (user_opcode_handler_t)NULL,
  278. (user_opcode_handler_t)NULL,
  279. (user_opcode_handler_t)NULL,
  280. (user_opcode_handler_t)NULL,
  281. (user_opcode_handler_t)NULL,
  282. (user_opcode_handler_t)NULL,
  283. (user_opcode_handler_t)NULL,
  284. (user_opcode_handler_t)NULL,
  285. (user_opcode_handler_t)NULL,
  286. (user_opcode_handler_t)NULL
  287. };
  288. static zend_uchar zend_user_opcodes[256] = {0,
  289. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
  290. 17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,
  291. 33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,
  292. 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,
  293. 65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,
  294. 81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,
  295. 97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,
  296. 113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,
  297. 129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,
  298. 145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,
  299. 161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,
  300. 177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,
  301. 193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,
  302. 209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,
  303. 225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,
  304. 241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
  305. };
  306. #define SPEC_START_MASK 0x0000ffff
  307. #define SPEC_EXTRA_MASK 0xfffc0000
  308. #define SPEC_RULE_OP1 0x00010000
  309. #define SPEC_RULE_OP2 0x00020000
  310. #define SPEC_RULE_OP_DATA 0x00040000
  311. #define SPEC_RULE_RETVAL 0x00080000
  312. #define SPEC_RULE_QUICK_ARG 0x00100000
  313. #define SPEC_RULE_SMART_BRANCH 0x00200000
  314. #define SPEC_RULE_COMMUTATIVE 0x00800000
  315. #define SPEC_RULE_ISSET 0x01000000
  316. #define SPEC_RULE_OBSERVER 0x02000000
  317. static const uint32_t *zend_spec_handlers;
  318. static const void * const *zend_opcode_handlers;
  319. static int zend_handlers_count;
  320. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  321. static const void * const * zend_opcode_handler_funcs;
  322. static zend_op hybrid_halt_op;
  323. #endif
  324. #if (ZEND_VM_KIND != ZEND_VM_KIND_HYBRID) || !ZEND_VM_SPEC
  325. static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op* op);
  326. #endif
  327. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  328. static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend_op* op);
  329. #else
  330. # define zend_vm_get_opcode_handler_func zend_vm_get_opcode_handler
  331. #endif
  332. #ifndef VM_TRACE
  333. # define VM_TRACE(op)
  334. #endif
  335. #ifndef VM_TRACE_START
  336. # define VM_TRACE_START()
  337. #endif
  338. #ifndef VM_TRACE_END
  339. # define VM_TRACE_END()
  340. #endif
  341. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  342. #define HYBRID_NEXT() goto *(void**)(OPLINE->handler)
  343. #define HYBRID_SWITCH() HYBRID_NEXT();
  344. #define HYBRID_CASE(op) op ## _LABEL
  345. #define HYBRID_BREAK() HYBRID_NEXT()
  346. #define HYBRID_DEFAULT ZEND_NULL_LABEL
  347. #endif
  348. #ifdef ZEND_VM_FP_GLOBAL_REG
  349. # define ZEND_OPCODE_HANDLER_ARGS void
  350. # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU
  351. # define ZEND_OPCODE_HANDLER_ARGS_DC
  352. # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC
  353. #else
  354. # define ZEND_OPCODE_HANDLER_ARGS zend_execute_data *execute_data
  355. # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU execute_data
  356. # define ZEND_OPCODE_HANDLER_ARGS_DC , ZEND_OPCODE_HANDLER_ARGS
  357. # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC , ZEND_OPCODE_HANDLER_ARGS_PASSTHRU
  358. #endif
  359. #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
  360. # define ZEND_OPCODE_HANDLER_RET void
  361. # define ZEND_VM_TAIL_CALL(call) call; return
  362. # ifdef ZEND_VM_TAIL_CALL_DISPATCH
  363. # define ZEND_VM_CONTINUE() ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); return
  364. # else
  365. # define ZEND_VM_CONTINUE() return
  366. # endif
  367. # if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  368. # define ZEND_VM_RETURN() opline = &hybrid_halt_op; return
  369. # define ZEND_VM_HOT zend_always_inline ZEND_COLD ZEND_OPT_SIZE
  370. # define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE
  371. # else
  372. # define ZEND_VM_RETURN() opline = NULL; return
  373. # define ZEND_VM_HOT
  374. # define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE
  375. # endif
  376. #else
  377. # define ZEND_OPCODE_HANDLER_RET int
  378. # define ZEND_VM_TAIL_CALL(call) return call
  379. # define ZEND_VM_CONTINUE() return 0
  380. # define ZEND_VM_RETURN() return -1
  381. # define ZEND_VM_HOT
  382. # define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE
  383. #endif
  384. typedef ZEND_OPCODE_HANDLER_RET (ZEND_FASTCALL *opcode_handler_t) (ZEND_OPCODE_HANDLER_ARGS);
  385. #define DCL_OPLINE
  386. #ifdef ZEND_VM_IP_GLOBAL_REG
  387. # define OPLINE opline
  388. # define USE_OPLINE
  389. # define LOAD_OPLINE() opline = EX(opline)
  390. # define LOAD_OPLINE_EX()
  391. # define LOAD_NEXT_OPLINE() opline = EX(opline) + 1
  392. # define SAVE_OPLINE() EX(opline) = opline
  393. # define SAVE_OPLINE_EX() SAVE_OPLINE()
  394. #else
  395. # define OPLINE EX(opline)
  396. # define USE_OPLINE const zend_op *opline = EX(opline);
  397. # define LOAD_OPLINE()
  398. # define LOAD_OPLINE_EX()
  399. # define LOAD_NEXT_OPLINE() ZEND_VM_INC_OPCODE()
  400. # define SAVE_OPLINE()
  401. # define SAVE_OPLINE_EX()
  402. #endif
  403. #define HANDLE_EXCEPTION() ZEND_ASSERT(EG(exception)); LOAD_OPLINE(); ZEND_VM_CONTINUE()
  404. #define HANDLE_EXCEPTION_LEAVE() ZEND_ASSERT(EG(exception)); LOAD_OPLINE(); ZEND_VM_LEAVE()
  405. #if defined(ZEND_VM_FP_GLOBAL_REG)
  406. # define ZEND_VM_ENTER_EX() ZEND_VM_INTERRUPT_CHECK(); ZEND_VM_CONTINUE()
  407. # define ZEND_VM_ENTER() execute_data = EG(current_execute_data); LOAD_OPLINE(); ZEND_VM_ENTER_EX()
  408. # define ZEND_VM_LEAVE() ZEND_VM_CONTINUE()
  409. #elif defined(ZEND_VM_IP_GLOBAL_REG)
  410. # define ZEND_VM_ENTER_EX() return 1
  411. # define ZEND_VM_ENTER() opline = EG(current_execute_data)->opline; ZEND_VM_ENTER_EX()
  412. # define ZEND_VM_LEAVE() return 2
  413. #else
  414. # define ZEND_VM_ENTER_EX() return 1
  415. # define ZEND_VM_ENTER() return 1
  416. # define ZEND_VM_LEAVE() return 2
  417. #endif
  418. #define ZEND_VM_INTERRUPT() ZEND_VM_TAIL_CALL(zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  419. #define ZEND_VM_LOOP_INTERRUPT() zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  420. #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));
  421. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS);
  422. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS);
  423. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_add_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
  424. {
  425. USE_OPLINE
  426. SAVE_OPLINE();
  427. if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
  428. op_1 = ZVAL_UNDEFINED_OP1();
  429. }
  430. if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
  431. op_2 = ZVAL_UNDEFINED_OP2();
  432. }
  433. add_function(EX_VAR(opline->result.var), op_1, op_2);
  434. if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
  435. zval_ptr_dtor_nogc(op_1);
  436. }
  437. if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
  438. zval_ptr_dtor_nogc(op_2);
  439. }
  440. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  441. }
  442. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_sub_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
  443. {
  444. USE_OPLINE
  445. SAVE_OPLINE();
  446. if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
  447. op_1 = ZVAL_UNDEFINED_OP1();
  448. }
  449. if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
  450. op_2 = ZVAL_UNDEFINED_OP2();
  451. }
  452. sub_function(EX_VAR(opline->result.var), op_1, op_2);
  453. if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
  454. zval_ptr_dtor_nogc(op_1);
  455. }
  456. if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
  457. zval_ptr_dtor_nogc(op_2);
  458. }
  459. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  460. }
  461. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_mul_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
  462. {
  463. USE_OPLINE
  464. SAVE_OPLINE();
  465. if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
  466. op_1 = ZVAL_UNDEFINED_OP1();
  467. }
  468. if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
  469. op_2 = ZVAL_UNDEFINED_OP2();
  470. }
  471. mul_function(EX_VAR(opline->result.var), op_1, op_2);
  472. if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
  473. zval_ptr_dtor_nogc(op_1);
  474. }
  475. if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
  476. zval_ptr_dtor_nogc(op_2);
  477. }
  478. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  479. }
  480. static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  481. {
  482. USE_OPLINE
  483. SAVE_OPLINE();
  484. zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
  485. ZVAL_UNDEF(EX_VAR(opline->result.var));
  486. HANDLE_EXCEPTION();
  487. }
  488. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_mod_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
  489. {
  490. USE_OPLINE
  491. SAVE_OPLINE();
  492. if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
  493. op_1 = ZVAL_UNDEFINED_OP1();
  494. }
  495. if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
  496. op_2 = ZVAL_UNDEFINED_OP2();
  497. }
  498. mod_function(EX_VAR(opline->result.var), op_1, op_2);
  499. if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
  500. zval_ptr_dtor_nogc(op_1);
  501. }
  502. if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
  503. zval_ptr_dtor_nogc(op_2);
  504. }
  505. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  506. }
  507. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_shift_left_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
  508. {
  509. USE_OPLINE
  510. SAVE_OPLINE();
  511. if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
  512. op_1 = ZVAL_UNDEFINED_OP1();
  513. }
  514. if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
  515. op_2 = ZVAL_UNDEFINED_OP2();
  516. }
  517. shift_left_function(EX_VAR(opline->result.var), op_1, op_2);
  518. if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
  519. zval_ptr_dtor_nogc(op_1);
  520. }
  521. if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
  522. zval_ptr_dtor_nogc(op_2);
  523. }
  524. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  525. }
  526. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_shift_right_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
  527. {
  528. USE_OPLINE
  529. SAVE_OPLINE();
  530. if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
  531. op_1 = ZVAL_UNDEFINED_OP1();
  532. }
  533. if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
  534. op_2 = ZVAL_UNDEFINED_OP2();
  535. }
  536. shift_right_function(EX_VAR(opline->result.var), op_1, op_2);
  537. if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
  538. zval_ptr_dtor_nogc(op_1);
  539. }
  540. if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
  541. zval_ptr_dtor_nogc(op_2);
  542. }
  543. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  544. }
  545. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_is_equal_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
  546. {
  547. int ret;
  548. USE_OPLINE
  549. SAVE_OPLINE();
  550. if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
  551. op_1 = ZVAL_UNDEFINED_OP1();
  552. }
  553. if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
  554. op_2 = ZVAL_UNDEFINED_OP2();
  555. }
  556. ret = zend_compare(op_1, op_2);
  557. if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
  558. zval_ptr_dtor_nogc(op_1);
  559. }
  560. if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
  561. zval_ptr_dtor_nogc(op_2);
  562. }
  563. ZEND_VM_SMART_BRANCH(ret == 0, 1);
  564. }
  565. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_is_not_equal_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
  566. {
  567. int ret;
  568. USE_OPLINE
  569. SAVE_OPLINE();
  570. if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
  571. op_1 = ZVAL_UNDEFINED_OP1();
  572. }
  573. if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
  574. op_2 = ZVAL_UNDEFINED_OP2();
  575. }
  576. ret = zend_compare(op_1, op_2);
  577. if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
  578. zval_ptr_dtor_nogc(op_1);
  579. }
  580. if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
  581. zval_ptr_dtor_nogc(op_2);
  582. }
  583. ZEND_VM_SMART_BRANCH(ret != 0, 1);
  584. }
  585. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_is_smaller_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
  586. {
  587. int ret;
  588. USE_OPLINE
  589. SAVE_OPLINE();
  590. if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
  591. op_1 = ZVAL_UNDEFINED_OP1();
  592. }
  593. if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
  594. op_2 = ZVAL_UNDEFINED_OP2();
  595. }
  596. ret = zend_compare(op_1, op_2);
  597. if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
  598. zval_ptr_dtor_nogc(op_1);
  599. }
  600. if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
  601. zval_ptr_dtor_nogc(op_2);
  602. }
  603. ZEND_VM_SMART_BRANCH(ret < 0, 1);
  604. }
  605. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_is_smaller_or_equal_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
  606. {
  607. int ret;
  608. USE_OPLINE
  609. SAVE_OPLINE();
  610. if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
  611. op_1 = ZVAL_UNDEFINED_OP1();
  612. }
  613. if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
  614. op_2 = ZVAL_UNDEFINED_OP2();
  615. }
  616. ret = zend_compare(op_1, op_2);
  617. if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
  618. zval_ptr_dtor_nogc(op_1);
  619. }
  620. if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
  621. zval_ptr_dtor_nogc(op_2);
  622. }
  623. ZEND_VM_SMART_BRANCH(ret <= 0, 1);
  624. }
  625. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_bw_or_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
  626. {
  627. USE_OPLINE
  628. SAVE_OPLINE();
  629. if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
  630. op_1 = ZVAL_UNDEFINED_OP1();
  631. }
  632. if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
  633. op_2 = ZVAL_UNDEFINED_OP2();
  634. }
  635. bitwise_or_function(EX_VAR(opline->result.var), op_1, op_2);
  636. if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
  637. zval_ptr_dtor_nogc(op_1);
  638. }
  639. if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
  640. zval_ptr_dtor_nogc(op_2);
  641. }
  642. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  643. }
  644. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_bw_and_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
  645. {
  646. USE_OPLINE
  647. SAVE_OPLINE();
  648. if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
  649. op_1 = ZVAL_UNDEFINED_OP1();
  650. }
  651. if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
  652. op_2 = ZVAL_UNDEFINED_OP2();
  653. }
  654. bitwise_and_function(EX_VAR(opline->result.var), op_1, op_2);
  655. if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
  656. zval_ptr_dtor_nogc(op_1);
  657. }
  658. if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
  659. zval_ptr_dtor_nogc(op_2);
  660. }
  661. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  662. }
  663. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_bw_xor_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
  664. {
  665. USE_OPLINE
  666. SAVE_OPLINE();
  667. if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
  668. op_1 = ZVAL_UNDEFINED_OP1();
  669. }
  670. if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
  671. op_2 = ZVAL_UNDEFINED_OP2();
  672. }
  673. bitwise_xor_function(EX_VAR(opline->result.var), op_1, op_2);
  674. if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
  675. zval_ptr_dtor_nogc(op_1);
  676. }
  677. if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
  678. zval_ptr_dtor_nogc(op_2);
  679. }
  680. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  681. }
  682. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_bw_not_helper_SPEC(zval *op_1 ZEND_OPCODE_HANDLER_ARGS_DC)
  683. {
  684. USE_OPLINE
  685. SAVE_OPLINE();
  686. if (UNEXPECTED(Z_TYPE_P(op_1) == IS_UNDEF)) {
  687. op_1 = ZVAL_UNDEFINED_OP1();
  688. }
  689. bitwise_not_function(EX_VAR(opline->result.var), op_1);
  690. FREE_OP(opline->op1_type, opline->op1.var);
  691. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  692. }
  693. static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  694. {
  695. USE_OPLINE
  696. SAVE_OPLINE();
  697. zend_throw_error(NULL, "Using $this when not in object context");
  698. UNDEF_RESULT();
  699. HANDLE_EXCEPTION();
  700. }
  701. static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  702. {
  703. USE_OPLINE
  704. zval *function_name;
  705. SAVE_OPLINE();
  706. function_name = RT_CONSTANT(opline, opline->op2);
  707. zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(function_name));
  708. HANDLE_EXCEPTION();
  709. }
  710. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  711. {
  712. /* This helper actually never will receive IS_VAR as second op, and has the same handling for VAR and TMP in the first op, but for interoperability with the other binary_assign_op helpers, it is necessary to "include" it */
  713. USE_OPLINE
  714. zval *prop, *value;
  715. zend_property_info *prop_info;
  716. zend_reference *ref;
  717. SAVE_OPLINE();
  718. if (UNEXPECTED(zend_fetch_static_property_address(&prop, &prop_info, (opline+1)->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS)) {
  719. UNDEF_RESULT();
  720. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  721. HANDLE_EXCEPTION();
  722. }
  723. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  724. do {
  725. if (UNEXPECTED(Z_ISREF_P(prop))) {
  726. ref = Z_REF_P(prop);
  727. prop = Z_REFVAL_P(prop);
  728. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  729. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  730. break;
  731. }
  732. }
  733. if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
  734. /* special case for typed properties */
  735. zend_binary_assign_op_typed_prop(prop_info, prop, value OPLINE_CC EXECUTE_DATA_CC);
  736. } else {
  737. zend_binary_op(prop, prop, value OPLINE_CC);
  738. }
  739. } while (0);
  740. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  741. ZVAL_COPY(EX_VAR(opline->result.var), prop);
  742. }
  743. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  744. /* assign_static_prop has two opcodes! */
  745. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  746. }
  747. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  748. {
  749. USE_OPLINE
  750. zval *prop;
  751. zend_property_info *prop_info;
  752. SAVE_OPLINE();
  753. if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
  754. UNDEF_RESULT();
  755. HANDLE_EXCEPTION();
  756. }
  757. zend_pre_incdec_property_zval(prop,
  758. ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
  759. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  760. }
  761. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  762. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  763. {
  764. USE_OPLINE
  765. zval *prop;
  766. zend_property_info *prop_info;
  767. SAVE_OPLINE();
  768. if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
  769. UNDEF_RESULT();
  770. HANDLE_EXCEPTION();
  771. }
  772. zend_post_incdec_property_zval(prop,
  773. ZEND_TYPE_IS_SET(prop_info->type) ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
  774. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  775. }
  776. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  777. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC(int type ZEND_OPCODE_HANDLER_ARGS_DC)
  778. {
  779. USE_OPLINE
  780. zval *prop;
  781. SAVE_OPLINE();
  782. if (UNEXPECTED(zend_fetch_static_property_address(&prop, NULL, opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS, type, opline->extended_value & ZEND_FETCH_OBJ_FLAGS OPLINE_CC EXECUTE_DATA_CC) != SUCCESS)) {
  783. ZEND_ASSERT(EG(exception) || (type == BP_VAR_IS));
  784. prop = &EG(uninitialized_zval);
  785. }
  786. if (type == BP_VAR_R || type == BP_VAR_IS) {
  787. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), prop);
  788. } else {
  789. ZVAL_INDIRECT(EX_VAR(opline->result.var), prop);
  790. }
  791. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  792. }
  793. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  794. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  795. {
  796. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  797. }
  798. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  799. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  800. {
  801. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  802. }
  803. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  804. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  805. {
  806. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  807. }
  808. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  809. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  810. {
  811. int fetch_type =
  812. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  813. BP_VAR_W : BP_VAR_R;
  814. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  815. }
  816. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  817. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  818. {
  819. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  820. }
  821. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  822. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  823. {
  824. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  825. }
  826. static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  827. {
  828. USE_OPLINE
  829. SAVE_OPLINE();
  830. zend_throw_error(NULL, "Cannot use temporary expression in write context");
  831. FREE_OP(opline->op2_type, opline->op2.var);
  832. FREE_OP(opline->op1_type, opline->op1.var);
  833. ZVAL_UNDEF(EX_VAR(opline->result.var));
  834. HANDLE_EXCEPTION();
  835. }
  836. static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  837. {
  838. USE_OPLINE
  839. SAVE_OPLINE();
  840. zend_throw_error(NULL, "Cannot use [] for reading");
  841. FREE_OP(opline->op2_type, opline->op2.var);
  842. FREE_OP(opline->op1_type, opline->op1.var);
  843. ZVAL_UNDEF(EX_VAR(opline->result.var));
  844. HANDLE_EXCEPTION();
  845. }
  846. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  847. {
  848. USE_OPLINE
  849. zval *prop, *value;
  850. zend_property_info *prop_info;
  851. SAVE_OPLINE();
  852. if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
  853. UNDEF_RESULT();
  854. HANDLE_EXCEPTION();
  855. }
  856. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  857. if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
  858. value = zend_assign_to_typed_prop(prop_info, prop, value EXECUTE_DATA_CC);
  859. } else {
  860. value = zend_assign_to_variable(prop, value, IS_CONST, EX_USES_STRICT_TYPES());
  861. }
  862. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  863. ZVAL_COPY(EX_VAR(opline->result.var), value);
  864. }
  865. /* assign_static_prop has two opcodes! */
  866. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  867. }
  868. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  869. {
  870. USE_OPLINE
  871. zval *prop, *value;
  872. zend_property_info *prop_info;
  873. SAVE_OPLINE();
  874. if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
  875. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  876. UNDEF_RESULT();
  877. HANDLE_EXCEPTION();
  878. }
  879. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  880. if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
  881. value = zend_assign_to_typed_prop(prop_info, prop, value EXECUTE_DATA_CC);
  882. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  883. } else {
  884. value = zend_assign_to_variable(prop, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  885. }
  886. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  887. ZVAL_COPY(EX_VAR(opline->result.var), value);
  888. }
  889. /* assign_static_prop has two opcodes! */
  890. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  891. }
  892. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  893. {
  894. USE_OPLINE
  895. zval *prop, *value;
  896. zend_property_info *prop_info;
  897. SAVE_OPLINE();
  898. if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
  899. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  900. UNDEF_RESULT();
  901. HANDLE_EXCEPTION();
  902. }
  903. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  904. if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
  905. value = zend_assign_to_typed_prop(prop_info, prop, value EXECUTE_DATA_CC);
  906. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  907. } else {
  908. value = zend_assign_to_variable(prop, value, IS_VAR, EX_USES_STRICT_TYPES());
  909. }
  910. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  911. ZVAL_COPY(EX_VAR(opline->result.var), value);
  912. }
  913. /* assign_static_prop has two opcodes! */
  914. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  915. }
  916. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  917. {
  918. USE_OPLINE
  919. zval *prop, *value;
  920. zend_property_info *prop_info;
  921. SAVE_OPLINE();
  922. if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
  923. UNDEF_RESULT();
  924. HANDLE_EXCEPTION();
  925. }
  926. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  927. if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
  928. value = zend_assign_to_typed_prop(prop_info, prop, value EXECUTE_DATA_CC);
  929. } else {
  930. value = zend_assign_to_variable(prop, value, IS_CV, EX_USES_STRICT_TYPES());
  931. }
  932. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  933. ZVAL_COPY(EX_VAR(opline->result.var), value);
  934. }
  935. /* assign_static_prop has two opcodes! */
  936. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  937. }
  938. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  939. {
  940. USE_OPLINE
  941. zval *prop, *value_ptr;
  942. zend_property_info *prop_info;
  943. SAVE_OPLINE();
  944. if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value & ~ZEND_RETURNS_FUNCTION, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
  945. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  946. UNDEF_RESULT();
  947. HANDLE_EXCEPTION();
  948. }
  949. value_ptr = get_zval_ptr_ptr((opline+1)->op1_type, (opline+1)->op1, BP_VAR_W);
  950. if ((opline+1)->op1_type == IS_VAR && (opline->extended_value & ZEND_RETURNS_FUNCTION) && UNEXPECTED(!Z_ISREF_P(value_ptr))) {
  951. if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(prop, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
  952. prop = &EG(uninitialized_zval);
  953. }
  954. } else if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
  955. prop = zend_assign_to_typed_property_reference(prop_info, prop, value_ptr EXECUTE_DATA_CC);
  956. } else {
  957. zend_assign_to_variable_reference(prop, value_ptr);
  958. }
  959. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  960. ZVAL_COPY(EX_VAR(opline->result.var), prop);
  961. }
  962. if ((opline+1)->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));};
  963. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  964. }
  965. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  966. {
  967. zend_execute_data *old_execute_data;
  968. uint32_t call_info = EX_CALL_INFO();
  969. SAVE_OPLINE();
  970. if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) == 0)) {
  971. EG(current_execute_data) = EX(prev_execute_data);
  972. i_free_compiled_variables(execute_data);
  973. #ifdef ZEND_PREFER_RELOAD
  974. call_info = EX_CALL_INFO();
  975. #endif
  976. if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
  977. OBJ_RELEASE(Z_OBJ(execute_data->This));
  978. } else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
  979. OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
  980. }
  981. EG(vm_stack_top) = (zval*)execute_data;
  982. execute_data = EX(prev_execute_data);
  983. if (UNEXPECTED(EG(exception) != NULL)) {
  984. zend_rethrow_exception(execute_data);
  985. HANDLE_EXCEPTION_LEAVE();
  986. }
  987. LOAD_NEXT_OPLINE();
  988. ZEND_VM_LEAVE();
  989. } else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
  990. EG(current_execute_data) = EX(prev_execute_data);
  991. i_free_compiled_variables(execute_data);
  992. #ifdef ZEND_PREFER_RELOAD
  993. call_info = EX_CALL_INFO();
  994. #endif
  995. if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
  996. zend_clean_and_cache_symbol_table(EX(symbol_table));
  997. }
  998. if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
  999. zend_free_extra_named_params(EX(extra_named_params));
  1000. }
  1001. /* Free extra args before releasing the closure,
  1002. * as that may free the op_array. */
  1003. zend_vm_stack_free_extra_args_ex(call_info, execute_data);
  1004. if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
  1005. OBJ_RELEASE(Z_OBJ(execute_data->This));
  1006. } else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
  1007. OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
  1008. }
  1009. old_execute_data = execute_data;
  1010. execute_data = EX(prev_execute_data);
  1011. zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
  1012. if (UNEXPECTED(EG(exception) != NULL)) {
  1013. zend_rethrow_exception(execute_data);
  1014. HANDLE_EXCEPTION_LEAVE();
  1015. }
  1016. LOAD_NEXT_OPLINE();
  1017. ZEND_VM_LEAVE();
  1018. } else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
  1019. zend_detach_symbol_table(execute_data);
  1020. zend_destroy_static_vars(&EX(func)->op_array);
  1021. destroy_op_array(&EX(func)->op_array);
  1022. efree_size(EX(func), sizeof(zend_op_array));
  1023. #ifdef ZEND_PREFER_RELOAD
  1024. call_info = EX_CALL_INFO();
  1025. #endif
  1026. old_execute_data = execute_data;
  1027. execute_data = EG(current_execute_data) = EX(prev_execute_data);
  1028. zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
  1029. zend_attach_symbol_table(execute_data);
  1030. if (UNEXPECTED(EG(exception) != NULL)) {
  1031. zend_rethrow_exception(execute_data);
  1032. HANDLE_EXCEPTION_LEAVE();
  1033. }
  1034. LOAD_NEXT_OPLINE();
  1035. ZEND_VM_LEAVE();
  1036. } else {
  1037. if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
  1038. EG(current_execute_data) = EX(prev_execute_data);
  1039. i_free_compiled_variables(execute_data);
  1040. #ifdef ZEND_PREFER_RELOAD
  1041. call_info = EX_CALL_INFO();
  1042. #endif
  1043. if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS))) {
  1044. if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
  1045. zend_clean_and_cache_symbol_table(EX(symbol_table));
  1046. }
  1047. zend_vm_stack_free_extra_args_ex(call_info, execute_data);
  1048. if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
  1049. zend_free_extra_named_params(EX(extra_named_params));
  1050. }
  1051. }
  1052. if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
  1053. OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
  1054. }
  1055. ZEND_VM_RETURN();
  1056. } else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
  1057. zend_array *symbol_table = EX(symbol_table);
  1058. zend_detach_symbol_table(execute_data);
  1059. old_execute_data = EX(prev_execute_data);
  1060. while (old_execute_data) {
  1061. if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
  1062. if (old_execute_data->symbol_table == symbol_table) {
  1063. zend_attach_symbol_table(old_execute_data);
  1064. }
  1065. break;
  1066. }
  1067. old_execute_data = old_execute_data->prev_execute_data;
  1068. }
  1069. EG(current_execute_data) = EX(prev_execute_data);
  1070. ZEND_VM_RETURN();
  1071. }
  1072. }
  1073. }
  1074. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1075. {
  1076. USE_OPLINE
  1077. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
  1078. }
  1079. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1080. {
  1081. USE_OPLINE
  1082. zend_execute_data *call = EX(call);
  1083. zend_function *fbc = call->func;
  1084. zval *ret;
  1085. zval retval;
  1086. SAVE_OPLINE();
  1087. EX(call) = call->prev_execute_data;
  1088. call->prev_execute_data = execute_data;
  1089. EG(current_execute_data) = call;
  1090. #if ZEND_DEBUG
  1091. bool should_throw = zend_internal_call_should_throw(fbc, call);
  1092. #endif
  1093. ret = 0 ? EX_VAR(opline->result.var) : &retval;
  1094. ZVAL_NULL(ret);
  1095. fbc->internal_function.handler(call, ret);
  1096. #if ZEND_DEBUG
  1097. if (!EG(exception) && call->func) {
  1098. if (should_throw) {
  1099. zend_internal_call_arginfo_violation(call->func);
  1100. }
  1101. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  1102. zend_verify_internal_return_type(call->func, ret));
  1103. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  1104. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  1105. zend_verify_internal_func_info(call->func, ret);
  1106. }
  1107. #endif
  1108. EG(current_execute_data) = execute_data;
  1109. zend_vm_stack_free_args(call);
  1110. uint32_t call_info = ZEND_CALL_INFO(call);
  1111. if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
  1112. if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
  1113. zend_free_extra_named_params(call->extra_named_params);
  1114. }
  1115. zend_vm_stack_free_call_frame_ex(call_info, call);
  1116. } else {
  1117. EG(vm_stack_top) = (zval*)call;
  1118. }
  1119. if (!0) {
  1120. i_zval_ptr_dtor(ret);
  1121. }
  1122. if (UNEXPECTED(EG(exception) != NULL)) {
  1123. zend_rethrow_exception(execute_data);
  1124. HANDLE_EXCEPTION();
  1125. }
  1126. ZEND_VM_SET_OPCODE(opline + 1);
  1127. ZEND_VM_CONTINUE();
  1128. }
  1129. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1130. {
  1131. USE_OPLINE
  1132. zend_execute_data *call = EX(call);
  1133. zend_function *fbc = call->func;
  1134. zval *ret;
  1135. zval retval;
  1136. SAVE_OPLINE();
  1137. EX(call) = call->prev_execute_data;
  1138. call->prev_execute_data = execute_data;
  1139. EG(current_execute_data) = call;
  1140. #if ZEND_DEBUG
  1141. bool should_throw = zend_internal_call_should_throw(fbc, call);
  1142. #endif
  1143. ret = 1 ? EX_VAR(opline->result.var) : &retval;
  1144. ZVAL_NULL(ret);
  1145. fbc->internal_function.handler(call, ret);
  1146. #if ZEND_DEBUG
  1147. if (!EG(exception) && call->func) {
  1148. if (should_throw) {
  1149. zend_internal_call_arginfo_violation(call->func);
  1150. }
  1151. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  1152. zend_verify_internal_return_type(call->func, ret));
  1153. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  1154. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  1155. zend_verify_internal_func_info(call->func, ret);
  1156. }
  1157. #endif
  1158. EG(current_execute_data) = execute_data;
  1159. zend_vm_stack_free_args(call);
  1160. uint32_t call_info = ZEND_CALL_INFO(call);
  1161. if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
  1162. if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
  1163. zend_free_extra_named_params(call->extra_named_params);
  1164. }
  1165. zend_vm_stack_free_call_frame_ex(call_info, call);
  1166. } else {
  1167. EG(vm_stack_top) = (zval*)call;
  1168. }
  1169. if (!1) {
  1170. i_zval_ptr_dtor(ret);
  1171. }
  1172. if (UNEXPECTED(EG(exception) != NULL)) {
  1173. zend_rethrow_exception(execute_data);
  1174. HANDLE_EXCEPTION();
  1175. }
  1176. ZEND_VM_SET_OPCODE(opline + 1);
  1177. ZEND_VM_CONTINUE();
  1178. }
  1179. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1180. {
  1181. USE_OPLINE
  1182. zend_execute_data *call = EX(call);
  1183. zend_function *fbc = call->func;
  1184. zval *ret;
  1185. SAVE_OPLINE();
  1186. EX(call) = call->prev_execute_data;
  1187. ret = NULL;
  1188. if (0) {
  1189. ret = EX_VAR(opline->result.var);
  1190. }
  1191. call->prev_execute_data = execute_data;
  1192. execute_data = call;
  1193. i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
  1194. LOAD_OPLINE_EX();
  1195. ZEND_VM_ENTER_EX();
  1196. }
  1197. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1198. {
  1199. USE_OPLINE
  1200. zend_execute_data *call = EX(call);
  1201. zend_function *fbc = call->func;
  1202. zval *ret;
  1203. SAVE_OPLINE();
  1204. EX(call) = call->prev_execute_data;
  1205. ret = NULL;
  1206. if (1) {
  1207. ret = EX_VAR(opline->result.var);
  1208. }
  1209. call->prev_execute_data = execute_data;
  1210. execute_data = call;
  1211. i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
  1212. LOAD_OPLINE_EX();
  1213. ZEND_VM_ENTER_EX();
  1214. }
  1215. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1216. {
  1217. USE_OPLINE
  1218. zend_execute_data *call = EX(call);
  1219. zend_function *fbc = call->func;
  1220. zval *ret;
  1221. SAVE_OPLINE();
  1222. EX(call) = call->prev_execute_data;
  1223. ret = NULL;
  1224. if (RETURN_VALUE_USED(opline)) {
  1225. ret = EX_VAR(opline->result.var);
  1226. }
  1227. call->prev_execute_data = execute_data;
  1228. execute_data = call;
  1229. i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
  1230. LOAD_OPLINE_EX();
  1231. SAVE_OPLINE();
  1232. zend_observer_fcall_begin(execute_data);
  1233. ZEND_VM_ENTER_EX();
  1234. }
  1235. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1236. {
  1237. USE_OPLINE
  1238. zend_execute_data *call = EX(call);
  1239. zend_function *fbc = call->func;
  1240. zval *ret;
  1241. SAVE_OPLINE();
  1242. EX(call) = call->prev_execute_data;
  1243. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
  1244. ret = NULL;
  1245. if (0) {
  1246. ret = EX_VAR(opline->result.var);
  1247. }
  1248. call->prev_execute_data = execute_data;
  1249. execute_data = call;
  1250. i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
  1251. LOAD_OPLINE_EX();
  1252. ZEND_VM_ENTER_EX();
  1253. } else {
  1254. zval retval;
  1255. ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
  1256. if (0) {
  1257. ret = NULL;
  1258. }
  1259. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
  1260. zend_deprecated_function(fbc);
  1261. if (UNEXPECTED(EG(exception) != NULL)) {
  1262. UNDEF_RESULT();
  1263. if (!0) {
  1264. ret = &retval;
  1265. ZVAL_UNDEF(ret);
  1266. }
  1267. goto fcall_by_name_end;
  1268. }
  1269. }
  1270. call->prev_execute_data = execute_data;
  1271. EG(current_execute_data) = call;
  1272. #if ZEND_DEBUG
  1273. bool should_throw = zend_internal_call_should_throw(fbc, call);
  1274. #endif
  1275. ret = 0 ? EX_VAR(opline->result.var) : &retval;
  1276. ZVAL_NULL(ret);
  1277. fbc->internal_function.handler(call, ret);
  1278. #if ZEND_DEBUG
  1279. if (!EG(exception) && call->func) {
  1280. if (should_throw) {
  1281. zend_internal_call_arginfo_violation(call->func);
  1282. }
  1283. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  1284. zend_verify_internal_return_type(call->func, ret));
  1285. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  1286. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  1287. zend_verify_internal_func_info(call->func, ret);
  1288. }
  1289. #endif
  1290. EG(current_execute_data) = execute_data;
  1291. fcall_by_name_end:
  1292. zend_vm_stack_free_args(call);
  1293. uint32_t call_info = ZEND_CALL_INFO(call);
  1294. if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
  1295. if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
  1296. zend_free_extra_named_params(call->extra_named_params);
  1297. }
  1298. zend_vm_stack_free_call_frame_ex(call_info, call);
  1299. } else {
  1300. EG(vm_stack_top) = (zval*)call;
  1301. }
  1302. if (!0) {
  1303. i_zval_ptr_dtor(ret);
  1304. }
  1305. }
  1306. if (UNEXPECTED(EG(exception) != NULL)) {
  1307. zend_rethrow_exception(execute_data);
  1308. HANDLE_EXCEPTION();
  1309. }
  1310. ZEND_VM_SET_OPCODE(opline + 1);
  1311. ZEND_VM_CONTINUE();
  1312. }
  1313. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1314. {
  1315. USE_OPLINE
  1316. zend_execute_data *call = EX(call);
  1317. zend_function *fbc = call->func;
  1318. zval *ret;
  1319. SAVE_OPLINE();
  1320. EX(call) = call->prev_execute_data;
  1321. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
  1322. ret = NULL;
  1323. if (1) {
  1324. ret = EX_VAR(opline->result.var);
  1325. }
  1326. call->prev_execute_data = execute_data;
  1327. execute_data = call;
  1328. i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
  1329. LOAD_OPLINE_EX();
  1330. ZEND_VM_ENTER_EX();
  1331. } else {
  1332. zval retval;
  1333. ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
  1334. if (0) {
  1335. ret = NULL;
  1336. }
  1337. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
  1338. zend_deprecated_function(fbc);
  1339. if (UNEXPECTED(EG(exception) != NULL)) {
  1340. UNDEF_RESULT();
  1341. if (!1) {
  1342. ret = &retval;
  1343. ZVAL_UNDEF(ret);
  1344. }
  1345. goto fcall_by_name_end;
  1346. }
  1347. }
  1348. call->prev_execute_data = execute_data;
  1349. EG(current_execute_data) = call;
  1350. #if ZEND_DEBUG
  1351. bool should_throw = zend_internal_call_should_throw(fbc, call);
  1352. #endif
  1353. ret = 1 ? EX_VAR(opline->result.var) : &retval;
  1354. ZVAL_NULL(ret);
  1355. fbc->internal_function.handler(call, ret);
  1356. #if ZEND_DEBUG
  1357. if (!EG(exception) && call->func) {
  1358. if (should_throw) {
  1359. zend_internal_call_arginfo_violation(call->func);
  1360. }
  1361. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  1362. zend_verify_internal_return_type(call->func, ret));
  1363. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  1364. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  1365. zend_verify_internal_func_info(call->func, ret);
  1366. }
  1367. #endif
  1368. EG(current_execute_data) = execute_data;
  1369. fcall_by_name_end:
  1370. zend_vm_stack_free_args(call);
  1371. uint32_t call_info = ZEND_CALL_INFO(call);
  1372. if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
  1373. if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
  1374. zend_free_extra_named_params(call->extra_named_params);
  1375. }
  1376. zend_vm_stack_free_call_frame_ex(call_info, call);
  1377. } else {
  1378. EG(vm_stack_top) = (zval*)call;
  1379. }
  1380. if (!1) {
  1381. i_zval_ptr_dtor(ret);
  1382. }
  1383. }
  1384. if (UNEXPECTED(EG(exception) != NULL)) {
  1385. zend_rethrow_exception(execute_data);
  1386. HANDLE_EXCEPTION();
  1387. }
  1388. ZEND_VM_SET_OPCODE(opline + 1);
  1389. ZEND_VM_CONTINUE();
  1390. }
  1391. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1392. {
  1393. USE_OPLINE
  1394. zend_execute_data *call = EX(call);
  1395. zend_function *fbc = call->func;
  1396. zval *ret;
  1397. SAVE_OPLINE();
  1398. EX(call) = call->prev_execute_data;
  1399. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
  1400. ret = NULL;
  1401. if (RETURN_VALUE_USED(opline)) {
  1402. ret = EX_VAR(opline->result.var);
  1403. }
  1404. call->prev_execute_data = execute_data;
  1405. execute_data = call;
  1406. i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
  1407. LOAD_OPLINE_EX();
  1408. SAVE_OPLINE();
  1409. zend_observer_fcall_begin(execute_data);
  1410. ZEND_VM_ENTER_EX();
  1411. } else {
  1412. zval retval;
  1413. ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
  1414. if (1) {
  1415. ret = NULL;
  1416. }
  1417. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
  1418. zend_deprecated_function(fbc);
  1419. if (UNEXPECTED(EG(exception) != NULL)) {
  1420. UNDEF_RESULT();
  1421. if (!RETURN_VALUE_USED(opline)) {
  1422. ret = &retval;
  1423. ZVAL_UNDEF(ret);
  1424. }
  1425. goto fcall_by_name_end;
  1426. }
  1427. }
  1428. call->prev_execute_data = execute_data;
  1429. EG(current_execute_data) = call;
  1430. #if ZEND_DEBUG
  1431. bool should_throw = zend_internal_call_should_throw(fbc, call);
  1432. #endif
  1433. ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
  1434. ZVAL_NULL(ret);
  1435. fbc->internal_function.handler(call, ret);
  1436. #if ZEND_DEBUG
  1437. if (!EG(exception) && call->func) {
  1438. if (should_throw) {
  1439. zend_internal_call_arginfo_violation(call->func);
  1440. }
  1441. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  1442. zend_verify_internal_return_type(call->func, ret));
  1443. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  1444. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  1445. zend_verify_internal_func_info(call->func, ret);
  1446. }
  1447. #endif
  1448. EG(current_execute_data) = execute_data;
  1449. fcall_by_name_end:
  1450. zend_vm_stack_free_args(call);
  1451. uint32_t call_info = ZEND_CALL_INFO(call);
  1452. if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
  1453. if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
  1454. zend_free_extra_named_params(call->extra_named_params);
  1455. }
  1456. zend_vm_stack_free_call_frame_ex(call_info, call);
  1457. } else {
  1458. EG(vm_stack_top) = (zval*)call;
  1459. }
  1460. if (!RETURN_VALUE_USED(opline)) {
  1461. i_zval_ptr_dtor(ret);
  1462. }
  1463. }
  1464. if (UNEXPECTED(EG(exception) != NULL)) {
  1465. zend_rethrow_exception(execute_data);
  1466. HANDLE_EXCEPTION();
  1467. }
  1468. ZEND_VM_SET_OPCODE(opline + 1);
  1469. ZEND_VM_CONTINUE();
  1470. }
  1471. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1472. {
  1473. USE_OPLINE
  1474. zend_execute_data *call = EX(call);
  1475. zend_function *fbc = call->func;
  1476. zval *ret;
  1477. SAVE_OPLINE();
  1478. EX(call) = call->prev_execute_data;
  1479. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
  1480. ret = NULL;
  1481. if (0) {
  1482. ret = EX_VAR(opline->result.var);
  1483. }
  1484. call->prev_execute_data = execute_data;
  1485. execute_data = call;
  1486. i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
  1487. if (EXPECTED(zend_execute_ex == execute_ex)) {
  1488. LOAD_OPLINE_EX();
  1489. ZEND_VM_ENTER_EX();
  1490. } else {
  1491. SAVE_OPLINE_EX();
  1492. execute_data = EX(prev_execute_data);
  1493. LOAD_OPLINE();
  1494. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  1495. zend_execute_ex(call);
  1496. }
  1497. } else {
  1498. zval retval;
  1499. ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
  1500. if (0) {
  1501. ret = NULL;
  1502. }
  1503. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
  1504. zend_deprecated_function(fbc);
  1505. if (UNEXPECTED(EG(exception) != NULL)) {
  1506. UNDEF_RESULT();
  1507. if (!0) {
  1508. ret = &retval;
  1509. ZVAL_UNDEF(ret);
  1510. }
  1511. goto fcall_end;
  1512. }
  1513. }
  1514. call->prev_execute_data = execute_data;
  1515. EG(current_execute_data) = call;
  1516. #if ZEND_DEBUG
  1517. bool should_throw = zend_internal_call_should_throw(fbc, call);
  1518. #endif
  1519. ret = 0 ? EX_VAR(opline->result.var) : &retval;
  1520. ZVAL_NULL(ret);
  1521. if (!zend_execute_internal) {
  1522. /* saves one function call if zend_execute_internal is not used */
  1523. fbc->internal_function.handler(call, ret);
  1524. } else {
  1525. zend_execute_internal(call, ret);
  1526. }
  1527. #if ZEND_DEBUG
  1528. if (!EG(exception) && call->func) {
  1529. if (should_throw) {
  1530. zend_internal_call_arginfo_violation(call->func);
  1531. }
  1532. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  1533. zend_verify_internal_return_type(call->func, ret));
  1534. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  1535. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  1536. zend_verify_internal_func_info(call->func, ret);
  1537. }
  1538. #endif
  1539. EG(current_execute_data) = execute_data;
  1540. fcall_end:
  1541. zend_vm_stack_free_args(call);
  1542. if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
  1543. zend_free_extra_named_params(call->extra_named_params);
  1544. }
  1545. if (!0) {
  1546. i_zval_ptr_dtor(ret);
  1547. }
  1548. }
  1549. if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
  1550. OBJ_RELEASE(Z_OBJ(call->This));
  1551. }
  1552. zend_vm_stack_free_call_frame(call);
  1553. if (UNEXPECTED(EG(exception) != NULL)) {
  1554. zend_rethrow_exception(execute_data);
  1555. HANDLE_EXCEPTION();
  1556. }
  1557. ZEND_VM_SET_OPCODE(opline + 1);
  1558. ZEND_VM_CONTINUE();
  1559. }
  1560. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1561. {
  1562. USE_OPLINE
  1563. zend_execute_data *call = EX(call);
  1564. zend_function *fbc = call->func;
  1565. zval *ret;
  1566. SAVE_OPLINE();
  1567. EX(call) = call->prev_execute_data;
  1568. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
  1569. ret = NULL;
  1570. if (1) {
  1571. ret = EX_VAR(opline->result.var);
  1572. }
  1573. call->prev_execute_data = execute_data;
  1574. execute_data = call;
  1575. i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
  1576. if (EXPECTED(zend_execute_ex == execute_ex)) {
  1577. LOAD_OPLINE_EX();
  1578. ZEND_VM_ENTER_EX();
  1579. } else {
  1580. SAVE_OPLINE_EX();
  1581. execute_data = EX(prev_execute_data);
  1582. LOAD_OPLINE();
  1583. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  1584. zend_execute_ex(call);
  1585. }
  1586. } else {
  1587. zval retval;
  1588. ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
  1589. if (0) {
  1590. ret = NULL;
  1591. }
  1592. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
  1593. zend_deprecated_function(fbc);
  1594. if (UNEXPECTED(EG(exception) != NULL)) {
  1595. UNDEF_RESULT();
  1596. if (!1) {
  1597. ret = &retval;
  1598. ZVAL_UNDEF(ret);
  1599. }
  1600. goto fcall_end;
  1601. }
  1602. }
  1603. call->prev_execute_data = execute_data;
  1604. EG(current_execute_data) = call;
  1605. #if ZEND_DEBUG
  1606. bool should_throw = zend_internal_call_should_throw(fbc, call);
  1607. #endif
  1608. ret = 1 ? EX_VAR(opline->result.var) : &retval;
  1609. ZVAL_NULL(ret);
  1610. if (!zend_execute_internal) {
  1611. /* saves one function call if zend_execute_internal is not used */
  1612. fbc->internal_function.handler(call, ret);
  1613. } else {
  1614. zend_execute_internal(call, ret);
  1615. }
  1616. #if ZEND_DEBUG
  1617. if (!EG(exception) && call->func) {
  1618. if (should_throw) {
  1619. zend_internal_call_arginfo_violation(call->func);
  1620. }
  1621. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  1622. zend_verify_internal_return_type(call->func, ret));
  1623. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  1624. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  1625. zend_verify_internal_func_info(call->func, ret);
  1626. }
  1627. #endif
  1628. EG(current_execute_data) = execute_data;
  1629. fcall_end:
  1630. zend_vm_stack_free_args(call);
  1631. if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
  1632. zend_free_extra_named_params(call->extra_named_params);
  1633. }
  1634. if (!1) {
  1635. i_zval_ptr_dtor(ret);
  1636. }
  1637. }
  1638. if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
  1639. OBJ_RELEASE(Z_OBJ(call->This));
  1640. }
  1641. zend_vm_stack_free_call_frame(call);
  1642. if (UNEXPECTED(EG(exception) != NULL)) {
  1643. zend_rethrow_exception(execute_data);
  1644. HANDLE_EXCEPTION();
  1645. }
  1646. ZEND_VM_SET_OPCODE(opline + 1);
  1647. ZEND_VM_CONTINUE();
  1648. }
  1649. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1650. {
  1651. USE_OPLINE
  1652. zend_execute_data *call = EX(call);
  1653. zend_function *fbc = call->func;
  1654. zval *ret;
  1655. SAVE_OPLINE();
  1656. EX(call) = call->prev_execute_data;
  1657. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
  1658. ret = NULL;
  1659. if (RETURN_VALUE_USED(opline)) {
  1660. ret = EX_VAR(opline->result.var);
  1661. }
  1662. call->prev_execute_data = execute_data;
  1663. execute_data = call;
  1664. i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
  1665. if (EXPECTED(zend_execute_ex == execute_ex)) {
  1666. LOAD_OPLINE_EX();
  1667. SAVE_OPLINE();
  1668. zend_observer_fcall_begin(execute_data);
  1669. ZEND_VM_ENTER_EX();
  1670. } else {
  1671. SAVE_OPLINE_EX();
  1672. zend_observer_fcall_begin(execute_data);
  1673. execute_data = EX(prev_execute_data);
  1674. LOAD_OPLINE();
  1675. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  1676. zend_execute_ex(call);
  1677. }
  1678. } else {
  1679. zval retval;
  1680. ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
  1681. if (1) {
  1682. ret = NULL;
  1683. }
  1684. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
  1685. zend_deprecated_function(fbc);
  1686. if (UNEXPECTED(EG(exception) != NULL)) {
  1687. UNDEF_RESULT();
  1688. if (!RETURN_VALUE_USED(opline)) {
  1689. ret = &retval;
  1690. ZVAL_UNDEF(ret);
  1691. }
  1692. goto fcall_end;
  1693. }
  1694. }
  1695. call->prev_execute_data = execute_data;
  1696. EG(current_execute_data) = call;
  1697. #if ZEND_DEBUG
  1698. bool should_throw = zend_internal_call_should_throw(fbc, call);
  1699. #endif
  1700. ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
  1701. ZVAL_NULL(ret);
  1702. if (!zend_execute_internal) {
  1703. /* saves one function call if zend_execute_internal is not used */
  1704. fbc->internal_function.handler(call, ret);
  1705. } else {
  1706. zend_execute_internal(call, ret);
  1707. }
  1708. #if ZEND_DEBUG
  1709. if (!EG(exception) && call->func) {
  1710. if (should_throw) {
  1711. zend_internal_call_arginfo_violation(call->func);
  1712. }
  1713. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  1714. zend_verify_internal_return_type(call->func, ret));
  1715. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  1716. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  1717. zend_verify_internal_func_info(call->func, ret);
  1718. }
  1719. #endif
  1720. EG(current_execute_data) = execute_data;
  1721. fcall_end:
  1722. zend_vm_stack_free_args(call);
  1723. if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
  1724. zend_free_extra_named_params(call->extra_named_params);
  1725. }
  1726. if (!RETURN_VALUE_USED(opline)) {
  1727. i_zval_ptr_dtor(ret);
  1728. }
  1729. }
  1730. if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
  1731. OBJ_RELEASE(Z_OBJ(call->This));
  1732. }
  1733. zend_vm_stack_free_call_frame(call);
  1734. if (UNEXPECTED(EG(exception) != NULL)) {
  1735. zend_rethrow_exception(execute_data);
  1736. HANDLE_EXCEPTION();
  1737. }
  1738. ZEND_VM_SET_OPCODE(opline + 1);
  1739. ZEND_VM_CONTINUE();
  1740. }
  1741. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1742. {
  1743. zval *return_value = EX(return_value);
  1744. if (EXPECTED(return_value)) {
  1745. USE_OPLINE
  1746. zend_generator *generator;
  1747. zend_execute_data *gen_execute_data;
  1748. uint32_t num_args, used_stack, call_info;
  1749. object_init_ex(return_value, zend_ce_generator);
  1750. /*
  1751. * Normally the execute_data is allocated on the VM stack (because it does
  1752. * not actually do any allocation and thus is faster). For generators
  1753. * though this behavior would be suboptimal, because the (rather large)
  1754. * structure would have to be copied back and forth every time execution is
  1755. * suspended or resumed. That's why for generators the execution context
  1756. * is allocated on heap.
  1757. */
  1758. num_args = EX_NUM_ARGS();
  1759. if (EXPECTED(num_args <= EX(func)->op_array.num_args)) {
  1760. used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var + EX(func)->op_array.T) * sizeof(zval);
  1761. gen_execute_data = (zend_execute_data*)emalloc(used_stack);
  1762. used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var) * sizeof(zval);
  1763. } else {
  1764. 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);
  1765. gen_execute_data = (zend_execute_data*)emalloc(used_stack);
  1766. }
  1767. memcpy(gen_execute_data, execute_data, used_stack);
  1768. /* Save execution context in generator object. */
  1769. generator = (zend_generator *) Z_OBJ_P(EX(return_value));
  1770. generator->execute_data = gen_execute_data;
  1771. generator->frozen_call_stack = NULL;
  1772. generator->execute_fake.opline = NULL;
  1773. generator->execute_fake.func = NULL;
  1774. generator->execute_fake.prev_execute_data = NULL;
  1775. ZVAL_OBJ(&generator->execute_fake.This, (zend_object *) generator);
  1776. gen_execute_data->opline = opline + 1;
  1777. /* EX(return_value) keeps pointer to zend_object (not a real zval) */
  1778. gen_execute_data->return_value = (zval*)generator;
  1779. call_info = Z_TYPE_INFO(EX(This));
  1780. if ((call_info & Z_TYPE_MASK) == IS_OBJECT
  1781. && (!(call_info & (ZEND_CALL_CLOSURE|ZEND_CALL_RELEASE_THIS))
  1782. /* Bug #72523 */
  1783. || UNEXPECTED(zend_execute_ex != execute_ex))) {
  1784. ZEND_ADD_CALL_FLAG_EX(call_info, ZEND_CALL_RELEASE_THIS);
  1785. Z_ADDREF(gen_execute_data->This);
  1786. }
  1787. ZEND_ADD_CALL_FLAG_EX(call_info, (ZEND_CALL_TOP_FUNCTION | ZEND_CALL_ALLOCATED | ZEND_CALL_GENERATOR));
  1788. Z_TYPE_INFO(gen_execute_data->This) = call_info;
  1789. gen_execute_data->prev_execute_data = NULL;
  1790. call_info = EX_CALL_INFO();
  1791. EG(current_execute_data) = EX(prev_execute_data);
  1792. if (EXPECTED(!(call_info & (ZEND_CALL_TOP|ZEND_CALL_ALLOCATED)))) {
  1793. EG(vm_stack_top) = (zval*)execute_data;
  1794. execute_data = EX(prev_execute_data);
  1795. LOAD_NEXT_OPLINE();
  1796. ZEND_VM_LEAVE();
  1797. } else if (EXPECTED(!(call_info & ZEND_CALL_TOP))) {
  1798. zend_execute_data *old_execute_data = execute_data;
  1799. execute_data = EX(prev_execute_data);
  1800. zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
  1801. LOAD_NEXT_OPLINE();
  1802. ZEND_VM_LEAVE();
  1803. } else {
  1804. ZEND_VM_RETURN();
  1805. }
  1806. } else {
  1807. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  1808. }
  1809. }
  1810. static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_cannot_pass_by_ref_helper_SPEC(uint32_t _arg_num, zval *_arg ZEND_OPCODE_HANDLER_ARGS_DC)
  1811. {
  1812. USE_OPLINE
  1813. SAVE_OPLINE();
  1814. zend_cannot_pass_by_reference(_arg_num);
  1815. FREE_OP(opline->op1_type, opline->op1.var);
  1816. ZVAL_UNDEF(_arg);
  1817. HANDLE_EXCEPTION();
  1818. }
  1819. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1820. {
  1821. USE_OPLINE
  1822. zval *args;
  1823. uint32_t arg_num;
  1824. SAVE_OPLINE();
  1825. args = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
  1826. arg_num = ZEND_CALL_NUM_ARGS(EX(call)) + 1;
  1827. send_again:
  1828. if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
  1829. HashTable *ht = Z_ARRVAL_P(args);
  1830. zval *arg, *top;
  1831. zend_string *name;
  1832. bool have_named_params = 0;
  1833. zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, zend_hash_num_elements(ht));
  1834. // TODO: Speed this up using a flag that specifies whether there are any ref parameters.
  1835. if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_REFCOUNT_P(args) > 1) {
  1836. uint32_t tmp_arg_num = arg_num;
  1837. bool separate = 0;
  1838. /* check if any of arguments are going to be passed by reference */
  1839. ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
  1840. if (UNEXPECTED(name)) {
  1841. void *cache_slot[2] = {NULL, NULL};
  1842. tmp_arg_num = zend_get_arg_offset_by_name(
  1843. EX(call)->func, name, cache_slot) + 1;
  1844. }
  1845. if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, tmp_arg_num)) {
  1846. separate = 1;
  1847. break;
  1848. }
  1849. tmp_arg_num++;
  1850. } ZEND_HASH_FOREACH_END();
  1851. if (separate) {
  1852. SEPARATE_ARRAY(args);
  1853. ht = Z_ARRVAL_P(args);
  1854. }
  1855. }
  1856. ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
  1857. if (UNEXPECTED(name)) {
  1858. void *cache_slot[2] = {NULL, NULL};
  1859. have_named_params = 1;
  1860. top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
  1861. if (UNEXPECTED(!top)) {
  1862. FREE_OP(opline->op1_type, opline->op1.var);
  1863. HANDLE_EXCEPTION();
  1864. }
  1865. } else {
  1866. if (have_named_params) {
  1867. zend_throw_error(NULL,
  1868. "Cannot use positional argument after named argument during unpacking");
  1869. FREE_OP(opline->op1_type, opline->op1.var);
  1870. HANDLE_EXCEPTION();
  1871. }
  1872. top = ZEND_CALL_ARG(EX(call), arg_num);
  1873. ZEND_CALL_NUM_ARGS(EX(call))++;
  1874. }
  1875. if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  1876. if (Z_ISREF_P(arg)) {
  1877. Z_ADDREF_P(arg);
  1878. ZVAL_REF(top, Z_REF_P(arg));
  1879. } else if (opline->op1_type & (IS_VAR|IS_CV)) {
  1880. /* array is already separated above */
  1881. ZVAL_MAKE_REF_EX(arg, 2);
  1882. ZVAL_REF(top, Z_REF_P(arg));
  1883. } else {
  1884. Z_TRY_ADDREF_P(arg);
  1885. ZVAL_NEW_REF(top, arg);
  1886. }
  1887. } else {
  1888. ZVAL_COPY_DEREF(top, arg);
  1889. }
  1890. arg_num++;
  1891. } ZEND_HASH_FOREACH_END();
  1892. } else if (EXPECTED(Z_TYPE_P(args) == IS_OBJECT)) {
  1893. zend_class_entry *ce = Z_OBJCE_P(args);
  1894. zend_object_iterator *iter;
  1895. bool have_named_params = 0;
  1896. if (!ce || !ce->get_iterator) {
  1897. zend_type_error("Only arrays and Traversables can be unpacked");
  1898. } else {
  1899. iter = ce->get_iterator(ce, args, 0);
  1900. if (UNEXPECTED(!iter)) {
  1901. FREE_OP(opline->op1_type, opline->op1.var);
  1902. if (!EG(exception)) {
  1903. zend_throw_exception_ex(
  1904. NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
  1905. );
  1906. }
  1907. HANDLE_EXCEPTION();
  1908. }
  1909. const zend_object_iterator_funcs *funcs = iter->funcs;
  1910. if (funcs->rewind) {
  1911. funcs->rewind(iter);
  1912. }
  1913. for (; funcs->valid(iter) == SUCCESS; ++arg_num) {
  1914. zval *arg, *top;
  1915. if (UNEXPECTED(EG(exception) != NULL)) {
  1916. break;
  1917. }
  1918. arg = funcs->get_current_data(iter);
  1919. if (UNEXPECTED(EG(exception) != NULL)) {
  1920. break;
  1921. }
  1922. zend_string *name = NULL;
  1923. if (funcs->get_current_key) {
  1924. zval key;
  1925. funcs->get_current_key(iter, &key);
  1926. if (UNEXPECTED(EG(exception) != NULL)) {
  1927. break;
  1928. }
  1929. if (UNEXPECTED(Z_TYPE(key) != IS_LONG)) {
  1930. if (UNEXPECTED(Z_TYPE(key) != IS_STRING)) {
  1931. zend_throw_error(NULL,
  1932. "Keys must be of type int|string during argument unpacking");
  1933. zval_ptr_dtor(&key);
  1934. break;
  1935. }
  1936. name = Z_STR_P(&key);
  1937. }
  1938. }
  1939. if (UNEXPECTED(name)) {
  1940. void *cache_slot[2] = {NULL, NULL};
  1941. have_named_params = 1;
  1942. top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
  1943. if (UNEXPECTED(!top)) {
  1944. zend_string_release(name);
  1945. break;
  1946. }
  1947. ZVAL_DEREF(arg);
  1948. Z_TRY_ADDREF_P(arg);
  1949. if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  1950. zend_error(
  1951. E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
  1952. " by unpacking a Traversable, passing by-value instead", arg_num,
  1953. EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
  1954. EX(call)->func->common.scope ? "::" : "",
  1955. ZSTR_VAL(EX(call)->func->common.function_name)
  1956. );
  1957. ZVAL_NEW_REF(top, arg);
  1958. } else {
  1959. ZVAL_COPY_VALUE(top, arg);
  1960. }
  1961. zend_string_release(name);
  1962. } else {
  1963. if (have_named_params) {
  1964. zend_throw_error(NULL,
  1965. "Cannot use positional argument after named argument during unpacking");
  1966. break;
  1967. }
  1968. zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, 1);
  1969. top = ZEND_CALL_ARG(EX(call), arg_num);
  1970. ZVAL_DEREF(arg);
  1971. Z_TRY_ADDREF_P(arg);
  1972. if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  1973. zend_error(
  1974. E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
  1975. " by unpacking a Traversable, passing by-value instead", arg_num,
  1976. EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
  1977. EX(call)->func->common.scope ? "::" : "",
  1978. ZSTR_VAL(EX(call)->func->common.function_name)
  1979. );
  1980. ZVAL_NEW_REF(top, arg);
  1981. } else {
  1982. ZVAL_COPY_VALUE(top, arg);
  1983. }
  1984. ZEND_CALL_NUM_ARGS(EX(call))++;
  1985. }
  1986. funcs->move_forward(iter);
  1987. }
  1988. zend_iterator_dtor(iter);
  1989. }
  1990. } else if (EXPECTED(Z_ISREF_P(args))) {
  1991. args = Z_REFVAL_P(args);
  1992. goto send_again;
  1993. } else {
  1994. if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) {
  1995. ZVAL_UNDEFINED_OP1();
  1996. }
  1997. zend_type_error("Only arrays and Traversables can be unpacked");
  1998. }
  1999. FREE_OP(opline->op1_type, opline->op1.var);
  2000. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2001. }
  2002. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2003. {
  2004. USE_OPLINE
  2005. zval *args;
  2006. SAVE_OPLINE();
  2007. args = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
  2008. if (UNEXPECTED(Z_TYPE_P(args) != IS_ARRAY)) {
  2009. if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(args)) {
  2010. args = Z_REFVAL_P(args);
  2011. if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
  2012. goto send_array;
  2013. }
  2014. }
  2015. zend_type_error("call_user_func_array(): Argument #2 ($args) must be of type array, %s given", zend_zval_type_name(args));
  2016. FREE_OP(opline->op2_type, opline->op2.var);
  2017. FREE_OP(opline->op1_type, opline->op1.var);
  2018. HANDLE_EXCEPTION();
  2019. } else {
  2020. uint32_t arg_num;
  2021. HashTable *ht;
  2022. zval *arg, *param;
  2023. send_array:
  2024. ht = Z_ARRVAL_P(args);
  2025. if (opline->op2_type != IS_UNUSED) {
  2026. /* We don't need to handle named params in this case,
  2027. * because array_slice() is called with $preserve_keys == false. */
  2028. zval *op2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
  2029. uint32_t skip = opline->extended_value;
  2030. uint32_t count = zend_hash_num_elements(ht);
  2031. zend_long len;
  2032. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  2033. len = Z_LVAL_P(op2);
  2034. } else if (Z_TYPE_P(op2) == IS_NULL) {
  2035. len = count - skip;
  2036. } else if (EX_USES_STRICT_TYPES()
  2037. || !zend_parse_arg_long_weak(op2, &len, /* arg_num */ 3)) {
  2038. zend_type_error(
  2039. "array_slice(): Argument #3 ($length) must be of type ?int, %s given",
  2040. zend_zval_type_name(op2));
  2041. FREE_OP(opline->op2_type, opline->op2.var);
  2042. FREE_OP(opline->op1_type, opline->op1.var);
  2043. HANDLE_EXCEPTION();
  2044. }
  2045. if (len < 0) {
  2046. len += (zend_long)(count - skip);
  2047. }
  2048. if (skip < count && len > 0) {
  2049. if (len > (zend_long)(count - skip)) {
  2050. len = (zend_long)(count - skip);
  2051. }
  2052. zend_vm_stack_extend_call_frame(&EX(call), 0, len);
  2053. arg_num = 1;
  2054. param = ZEND_CALL_ARG(EX(call), 1);
  2055. ZEND_HASH_FOREACH_VAL(ht, arg) {
  2056. bool must_wrap = 0;
  2057. if (skip > 0) {
  2058. skip--;
  2059. continue;
  2060. } else if ((zend_long)(arg_num - 1) >= len) {
  2061. break;
  2062. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  2063. if (UNEXPECTED(!Z_ISREF_P(arg))) {
  2064. if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  2065. /* By-value send is not allowed -- emit a warning,
  2066. * but still perform the call. */
  2067. zend_param_must_be_ref(EX(call)->func, arg_num);
  2068. must_wrap = 1;
  2069. }
  2070. }
  2071. } else {
  2072. if (Z_ISREF_P(arg) &&
  2073. !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
  2074. /* don't separate references for __call */
  2075. arg = Z_REFVAL_P(arg);
  2076. }
  2077. }
  2078. if (EXPECTED(!must_wrap)) {
  2079. ZVAL_COPY(param, arg);
  2080. } else {
  2081. Z_TRY_ADDREF_P(arg);
  2082. ZVAL_NEW_REF(param, arg);
  2083. }
  2084. ZEND_CALL_NUM_ARGS(EX(call))++;
  2085. arg_num++;
  2086. param++;
  2087. } ZEND_HASH_FOREACH_END();
  2088. }
  2089. FREE_OP(opline->op2_type, opline->op2.var);
  2090. } else {
  2091. zend_string *name;
  2092. bool have_named_params;
  2093. zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht));
  2094. arg_num = 1;
  2095. param = ZEND_CALL_ARG(EX(call), 1);
  2096. have_named_params = 0;
  2097. ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
  2098. if (name) {
  2099. void *cache_slot[2] = {NULL, NULL};
  2100. have_named_params = 1;
  2101. param = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
  2102. if (!param) {
  2103. FREE_OP(opline->op1_type, opline->op1.var);
  2104. HANDLE_EXCEPTION();
  2105. }
  2106. } else if (have_named_params) {
  2107. zend_throw_error(NULL,
  2108. "Cannot use positional argument after named argument");
  2109. FREE_OP(opline->op1_type, opline->op1.var);
  2110. HANDLE_EXCEPTION();
  2111. }
  2112. bool must_wrap = 0;
  2113. if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  2114. if (UNEXPECTED(!Z_ISREF_P(arg))) {
  2115. if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  2116. /* By-value send is not allowed -- emit a warning,
  2117. * but still perform the call. */
  2118. zend_param_must_be_ref(EX(call)->func, arg_num);
  2119. must_wrap = 1;
  2120. }
  2121. }
  2122. } else {
  2123. if (Z_ISREF_P(arg) &&
  2124. !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
  2125. /* don't separate references for __call */
  2126. arg = Z_REFVAL_P(arg);
  2127. }
  2128. }
  2129. if (EXPECTED(!must_wrap)) {
  2130. ZVAL_COPY(param, arg);
  2131. } else {
  2132. Z_TRY_ADDREF_P(arg);
  2133. ZVAL_NEW_REF(param, arg);
  2134. }
  2135. if (!name) {
  2136. ZEND_CALL_NUM_ARGS(EX(call))++;
  2137. arg_num++;
  2138. param++;
  2139. }
  2140. } ZEND_HASH_FOREACH_END();
  2141. }
  2142. }
  2143. FREE_OP(opline->op1_type, opline->op1.var);
  2144. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2145. }
  2146. static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  2147. {
  2148. #ifdef ZEND_VM_IP_GLOBAL_REG
  2149. USE_OPLINE
  2150. SAVE_OPLINE();
  2151. #endif
  2152. zend_missing_arg_error(execute_data);
  2153. HANDLE_EXCEPTION();
  2154. }
  2155. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_verify_recv_arg_type_helper_SPEC(zval *op_1 ZEND_OPCODE_HANDLER_ARGS_DC)
  2156. {
  2157. USE_OPLINE
  2158. SAVE_OPLINE();
  2159. if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), opline->op1.num, op_1, CACHE_ADDR(opline->extended_value)))) {
  2160. HANDLE_EXCEPTION();
  2161. }
  2162. ZEND_VM_NEXT_OPCODE();
  2163. }
  2164. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_NOTYPE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2165. {
  2166. USE_OPLINE
  2167. uint32_t arg_num = opline->op1.num;
  2168. if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
  2169. ZEND_VM_TAIL_CALL(zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  2170. }
  2171. ZEND_VM_NEXT_OPCODE();
  2172. }
  2173. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_case_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
  2174. {
  2175. int ret;
  2176. USE_OPLINE
  2177. SAVE_OPLINE();
  2178. if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
  2179. op_1 = ZVAL_UNDEFINED_OP1();
  2180. }
  2181. if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
  2182. op_2 = ZVAL_UNDEFINED_OP2();
  2183. }
  2184. ret = zend_compare(op_1, op_2);
  2185. if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
  2186. zval_ptr_dtor_nogc(op_2);
  2187. }
  2188. ZEND_VM_SMART_BRANCH(ret == 0, 1);
  2189. }
  2190. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2191. {
  2192. USE_OPLINE
  2193. zval *op1;
  2194. HashTable *result_ht;
  2195. SAVE_OPLINE();
  2196. op1 = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
  2197. result_ht = Z_ARRVAL_P(EX_VAR(opline->result.var));
  2198. add_unpack_again:
  2199. if (EXPECTED(Z_TYPE_P(op1) == IS_ARRAY)) {
  2200. HashTable *ht = Z_ARRVAL_P(op1);
  2201. zval *val;
  2202. zend_string *key;
  2203. ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
  2204. if (Z_ISREF_P(val) && Z_REFCOUNT_P(val) == 1) {
  2205. val = Z_REFVAL_P(val);
  2206. }
  2207. Z_TRY_ADDREF_P(val);
  2208. if (key) {
  2209. zend_hash_update(result_ht, key, val);
  2210. } else {
  2211. if (!zend_hash_next_index_insert(result_ht, val)) {
  2212. zend_cannot_add_element();
  2213. zval_ptr_dtor_nogc(val);
  2214. break;
  2215. }
  2216. }
  2217. } ZEND_HASH_FOREACH_END();
  2218. } else if (EXPECTED(Z_TYPE_P(op1) == IS_OBJECT)) {
  2219. zend_class_entry *ce = Z_OBJCE_P(op1);
  2220. zend_object_iterator *iter;
  2221. if (!ce || !ce->get_iterator) {
  2222. zend_type_error("Only arrays and Traversables can be unpacked");
  2223. } else {
  2224. iter = ce->get_iterator(ce, op1, 0);
  2225. if (UNEXPECTED(!iter)) {
  2226. FREE_OP(opline->op1_type, opline->op1.var);
  2227. if (!EG(exception)) {
  2228. zend_throw_exception_ex(
  2229. NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
  2230. );
  2231. }
  2232. HANDLE_EXCEPTION();
  2233. }
  2234. const zend_object_iterator_funcs *funcs = iter->funcs;
  2235. if (funcs->rewind) {
  2236. funcs->rewind(iter);
  2237. }
  2238. for (; funcs->valid(iter) == SUCCESS; ) {
  2239. zval *val;
  2240. if (UNEXPECTED(EG(exception) != NULL)) {
  2241. break;
  2242. }
  2243. val = funcs->get_current_data(iter);
  2244. if (UNEXPECTED(EG(exception) != NULL)) {
  2245. break;
  2246. }
  2247. zval key;
  2248. if (funcs->get_current_key) {
  2249. funcs->get_current_key(iter, &key);
  2250. if (UNEXPECTED(EG(exception) != NULL)) {
  2251. break;
  2252. }
  2253. if (UNEXPECTED(Z_TYPE(key) != IS_LONG && Z_TYPE(key) != IS_STRING)) {
  2254. zend_throw_error(NULL,
  2255. "Keys must be of type int|string during array unpacking");
  2256. zval_ptr_dtor(&key);
  2257. break;
  2258. }
  2259. } else {
  2260. ZVAL_UNDEF(&key);
  2261. }
  2262. ZVAL_DEREF(val);
  2263. Z_TRY_ADDREF_P(val);
  2264. zend_ulong num_key;
  2265. if (Z_TYPE(key) == IS_STRING && !ZEND_HANDLE_NUMERIC(Z_STR(key), num_key)) {
  2266. zend_hash_update(result_ht, Z_STR(key), val);
  2267. zval_ptr_dtor_str(&key);
  2268. } else {
  2269. zval_ptr_dtor(&key);
  2270. if (!zend_hash_next_index_insert(result_ht, val)) {
  2271. zend_cannot_add_element();
  2272. zval_ptr_dtor_nogc(val);
  2273. break;
  2274. }
  2275. }
  2276. funcs->move_forward(iter);
  2277. if (UNEXPECTED(EG(exception))) {
  2278. break;
  2279. }
  2280. }
  2281. zend_iterator_dtor(iter);
  2282. }
  2283. } else if (EXPECTED(Z_ISREF_P(op1))) {
  2284. op1 = Z_REFVAL_P(op1);
  2285. goto add_unpack_again;
  2286. } else {
  2287. zend_throw_error(NULL, "Only arrays and Traversables can be unpacked");
  2288. }
  2289. FREE_OP(opline->op1_type, opline->op1.var);
  2290. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2291. }
  2292. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2293. {
  2294. USE_OPLINE
  2295. zval *varname;
  2296. zend_string *name, *tmp_name = NULL;
  2297. zend_class_entry *ce;
  2298. SAVE_OPLINE();
  2299. if (opline->op2_type == IS_CONST) {
  2300. ce = CACHED_PTR(opline->extended_value);
  2301. if (UNEXPECTED(ce == NULL)) {
  2302. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  2303. if (UNEXPECTED(ce == NULL)) {
  2304. FREE_OP(opline->op1_type, opline->op1.var);
  2305. HANDLE_EXCEPTION();
  2306. }
  2307. /*CACHE_PTR(opline->extended_value, ce);*/
  2308. }
  2309. } else if (opline->op2_type == IS_UNUSED) {
  2310. ce = zend_fetch_class(NULL, opline->op2.num);
  2311. if (UNEXPECTED(ce == NULL)) {
  2312. FREE_OP(opline->op1_type, opline->op1.var);
  2313. HANDLE_EXCEPTION();
  2314. }
  2315. } else {
  2316. ce = Z_CE_P(EX_VAR(opline->op2.var));
  2317. }
  2318. varname = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
  2319. if (opline->op1_type == IS_CONST) {
  2320. name = Z_STR_P(varname);
  2321. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  2322. name = Z_STR_P(varname);
  2323. } else {
  2324. if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  2325. varname = ZVAL_UNDEFINED_OP1();
  2326. }
  2327. name = zval_try_get_tmp_string(varname, &tmp_name);
  2328. if (UNEXPECTED(!name)) {
  2329. FREE_OP(opline->op1_type, opline->op1.var);
  2330. HANDLE_EXCEPTION();
  2331. }
  2332. }
  2333. zend_std_unset_static_property(ce, name);
  2334. zend_tmp_string_release(tmp_name);
  2335. FREE_OP(opline->op1_type, opline->op1.var);
  2336. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2337. }
  2338. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fe_fetch_object_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  2339. {
  2340. USE_OPLINE
  2341. zval *array;
  2342. zval *value;
  2343. uint32_t value_type;
  2344. HashTable *fe_ht;
  2345. HashPosition pos;
  2346. Bucket *p;
  2347. zend_object_iterator *iter;
  2348. array = EX_VAR(opline->op1.var);
  2349. SAVE_OPLINE();
  2350. ZEND_ASSERT(Z_TYPE_P(array) == IS_OBJECT);
  2351. if ((iter = zend_iterator_unwrap(array)) == NULL) {
  2352. /* plain object */
  2353. fe_ht = Z_OBJPROP_P(array);
  2354. pos = zend_hash_iterator_pos(Z_FE_ITER_P(array), fe_ht);
  2355. p = fe_ht->arData + pos;
  2356. while (1) {
  2357. if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
  2358. /* reached end of iteration */
  2359. goto fe_fetch_r_exit;
  2360. }
  2361. pos++;
  2362. value = &p->val;
  2363. value_type = Z_TYPE_INFO_P(value);
  2364. if (EXPECTED(value_type != IS_UNDEF)) {
  2365. if (UNEXPECTED(value_type == IS_INDIRECT)) {
  2366. value = Z_INDIRECT_P(value);
  2367. value_type = Z_TYPE_INFO_P(value);
  2368. if (EXPECTED(value_type != IS_UNDEF)
  2369. && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
  2370. break;
  2371. }
  2372. } else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
  2373. || !p->key
  2374. || zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
  2375. break;
  2376. }
  2377. }
  2378. p++;
  2379. }
  2380. EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos;
  2381. if (RETURN_VALUE_USED(opline)) {
  2382. if (UNEXPECTED(!p->key)) {
  2383. ZVAL_LONG(EX_VAR(opline->result.var), p->h);
  2384. } else if (ZSTR_VAL(p->key)[0]) {
  2385. ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
  2386. } else {
  2387. const char *class_name, *prop_name;
  2388. size_t prop_name_len;
  2389. zend_unmangle_property_name_ex(
  2390. p->key, &class_name, &prop_name, &prop_name_len);
  2391. ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
  2392. }
  2393. }
  2394. } else {
  2395. const zend_object_iterator_funcs *funcs = iter->funcs;
  2396. if (EXPECTED(++iter->index > 0)) {
  2397. /* This could cause an endless loop if index becomes zero again.
  2398. * In case that ever happens we need an additional flag. */
  2399. funcs->move_forward(iter);
  2400. if (UNEXPECTED(EG(exception) != NULL)) {
  2401. UNDEF_RESULT();
  2402. HANDLE_EXCEPTION();
  2403. }
  2404. if (UNEXPECTED(funcs->valid(iter) == FAILURE)) {
  2405. /* reached end of iteration */
  2406. if (UNEXPECTED(EG(exception) != NULL)) {
  2407. UNDEF_RESULT();
  2408. HANDLE_EXCEPTION();
  2409. }
  2410. fe_fetch_r_exit:
  2411. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  2412. ZEND_VM_CONTINUE();
  2413. }
  2414. }
  2415. value = funcs->get_current_data(iter);
  2416. if (UNEXPECTED(EG(exception) != NULL)) {
  2417. UNDEF_RESULT();
  2418. HANDLE_EXCEPTION();
  2419. }
  2420. if (!value) {
  2421. /* failure in get_current_data */
  2422. goto fe_fetch_r_exit;
  2423. }
  2424. if (RETURN_VALUE_USED(opline)) {
  2425. if (funcs->get_current_key) {
  2426. funcs->get_current_key(iter, EX_VAR(opline->result.var));
  2427. if (UNEXPECTED(EG(exception) != NULL)) {
  2428. UNDEF_RESULT();
  2429. HANDLE_EXCEPTION();
  2430. }
  2431. } else {
  2432. ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
  2433. }
  2434. }
  2435. value_type = Z_TYPE_INFO_P(value);
  2436. }
  2437. if (EXPECTED(opline->op2_type == IS_CV)) {
  2438. zval *variable_ptr = EX_VAR(opline->op2.var);
  2439. zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  2440. } else {
  2441. zval *res = EX_VAR(opline->op2.var);
  2442. zend_refcounted *gc = Z_COUNTED_P(value);
  2443. ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
  2444. if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
  2445. GC_ADDREF(gc);
  2446. }
  2447. }
  2448. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2449. }
  2450. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2451. {
  2452. USE_OPLINE
  2453. zval *value;
  2454. zend_result fetch_result;
  2455. bool result;
  2456. SAVE_OPLINE();
  2457. fetch_result = zend_fetch_static_property_address(&value, NULL, opline->extended_value & ~ZEND_ISEMPTY, BP_VAR_IS, 0 OPLINE_CC EXECUTE_DATA_CC);
  2458. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  2459. result = fetch_result == SUCCESS && Z_TYPE_P(value) > IS_NULL &&
  2460. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  2461. } else {
  2462. result = fetch_result != SUCCESS || !i_zend_is_true(value);
  2463. }
  2464. ZEND_VM_SMART_BRANCH(result, 1);
  2465. }
  2466. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2467. {
  2468. USE_OPLINE
  2469. SAVE_OPLINE();
  2470. if (opline->op1_type != IS_UNUSED) {
  2471. zval *ptr = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
  2472. do {
  2473. if (Z_TYPE_P(ptr) == IS_LONG) {
  2474. EG(exit_status) = Z_LVAL_P(ptr);
  2475. } else {
  2476. if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
  2477. ptr = Z_REFVAL_P(ptr);
  2478. if (Z_TYPE_P(ptr) == IS_LONG) {
  2479. EG(exit_status) = Z_LVAL_P(ptr);
  2480. break;
  2481. }
  2482. }
  2483. zend_print_zval(ptr, 0);
  2484. }
  2485. } while (0);
  2486. FREE_OP(opline->op1_type, opline->op1.var);
  2487. }
  2488. if (!EG(exception)) {
  2489. zend_throw_unwind_exit();
  2490. }
  2491. HANDLE_EXCEPTION();
  2492. }
  2493. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2494. {
  2495. USE_OPLINE
  2496. ZVAL_LONG(EX_VAR(opline->result.var), EG(error_reporting));
  2497. if (!E_HAS_ONLY_FATAL_ERRORS(EG(error_reporting))) {
  2498. do {
  2499. /* Do not silence fatal errors */
  2500. EG(error_reporting) &= E_FATAL_ERRORS;
  2501. if (!EG(error_reporting_ini_entry)) {
  2502. zval *zv = zend_hash_find_known_hash(EG(ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING));
  2503. if (zv) {
  2504. EG(error_reporting_ini_entry) = (zend_ini_entry *)Z_PTR_P(zv);
  2505. } else {
  2506. break;
  2507. }
  2508. }
  2509. if (!EG(error_reporting_ini_entry)->modified) {
  2510. if (!EG(modified_ini_directives)) {
  2511. ALLOC_HASHTABLE(EG(modified_ini_directives));
  2512. zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
  2513. }
  2514. if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), EG(error_reporting_ini_entry)) != NULL)) {
  2515. EG(error_reporting_ini_entry)->orig_value = EG(error_reporting_ini_entry)->value;
  2516. EG(error_reporting_ini_entry)->orig_modifiable = EG(error_reporting_ini_entry)->modifiable;
  2517. EG(error_reporting_ini_entry)->modified = 1;
  2518. }
  2519. }
  2520. } while (0);
  2521. }
  2522. ZEND_VM_NEXT_OPCODE();
  2523. }
  2524. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2525. {
  2526. USE_OPLINE
  2527. if (!EG(no_extensions)) {
  2528. SAVE_OPLINE();
  2529. zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, execute_data);
  2530. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2531. }
  2532. ZEND_VM_NEXT_OPCODE();
  2533. }
  2534. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2535. {
  2536. USE_OPLINE
  2537. if (!EG(no_extensions)) {
  2538. SAVE_OPLINE();
  2539. zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, execute_data);
  2540. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2541. }
  2542. ZEND_VM_NEXT_OPCODE();
  2543. }
  2544. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2545. {
  2546. USE_OPLINE
  2547. if (!EG(no_extensions)) {
  2548. SAVE_OPLINE();
  2549. zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, execute_data);
  2550. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2551. }
  2552. ZEND_VM_NEXT_OPCODE();
  2553. }
  2554. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2555. {
  2556. zval *zv;
  2557. zend_class_entry *ce;
  2558. USE_OPLINE
  2559. ce = CACHED_PTR(opline->extended_value);
  2560. if (UNEXPECTED(ce == NULL)) {
  2561. zend_string *rtd_key = Z_STR_P(RT_CONSTANT(opline, opline->op1));
  2562. zv = zend_hash_find_known_hash(EG(class_table), rtd_key);
  2563. ZEND_ASSERT(zv != NULL);
  2564. ce = Z_CE_P(zv);
  2565. if (!(ce->ce_flags & ZEND_ACC_LINKED)) {
  2566. SAVE_OPLINE();
  2567. ce = zend_do_link_class(ce, (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL, rtd_key);
  2568. if (!ce) {
  2569. HANDLE_EXCEPTION();
  2570. }
  2571. }
  2572. CACHE_PTR(opline->extended_value, ce);
  2573. }
  2574. Z_CE_P(EX_VAR(opline->result.var)) = ce;
  2575. ZEND_VM_NEXT_OPCODE();
  2576. }
  2577. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2578. {
  2579. zend_function *func;
  2580. USE_OPLINE
  2581. SAVE_OPLINE();
  2582. func = (zend_function *) EX(func)->op_array.dynamic_func_defs[opline->op2.num];
  2583. do_bind_function(func, RT_CONSTANT(opline, opline->op1));
  2584. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2585. }
  2586. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2587. {
  2588. USE_OPLINE
  2589. if ((uint32_t)++EG(ticks_count) >= opline->extended_value) {
  2590. EG(ticks_count) = 0;
  2591. if (zend_ticks_function) {
  2592. SAVE_OPLINE();
  2593. zend_ticks_function(opline->extended_value);
  2594. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2595. }
  2596. }
  2597. ZEND_VM_NEXT_OPCODE();
  2598. }
  2599. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2600. {
  2601. USE_OPLINE
  2602. ZEND_VM_NEXT_OPCODE();
  2603. }
  2604. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2605. {
  2606. USE_OPLINE
  2607. ZEND_VM_NEXT_OPCODE();
  2608. }
  2609. static zend_never_inline 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)
  2610. {
  2611. /* May be NULL during generator closing (only finally blocks are executed) */
  2612. zend_object *ex = EG(exception);
  2613. /* Walk try/catch/finally structures upwards, performing the necessary actions */
  2614. for (; try_catch_offset != (uint32_t) -1; try_catch_offset--) {
  2615. zend_try_catch_element *try_catch =
  2616. &EX(func)->op_array.try_catch_array[try_catch_offset];
  2617. if (op_num < try_catch->catch_op && ex) {
  2618. /* Go to catch block */
  2619. cleanup_live_vars(execute_data, op_num, try_catch->catch_op);
  2620. ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->catch_op], 0);
  2621. } else if (op_num < try_catch->finally_op) {
  2622. if (ex && zend_is_unwind_exit(ex)) {
  2623. /* Don't execute finally blocks on exit (for now) */
  2624. continue;
  2625. }
  2626. /* Go to finally block */
  2627. zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
  2628. cleanup_live_vars(execute_data, op_num, try_catch->finally_op);
  2629. Z_OBJ_P(fast_call) = EG(exception);
  2630. EG(exception) = NULL;
  2631. Z_OPLINE_NUM_P(fast_call) = (uint32_t)-1;
  2632. ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->finally_op], 0);
  2633. } else if (op_num < try_catch->finally_end) {
  2634. zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
  2635. /* cleanup incomplete RETURN statement */
  2636. if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
  2637. && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
  2638. zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);
  2639. zval_ptr_dtor(return_value);
  2640. }
  2641. /* Chain potential exception from wrapping finally block */
  2642. if (Z_OBJ_P(fast_call)) {
  2643. if (ex) {
  2644. zend_exception_set_previous(ex, Z_OBJ_P(fast_call));
  2645. } else {
  2646. ex = EG(exception) = Z_OBJ_P(fast_call);
  2647. }
  2648. }
  2649. }
  2650. }
  2651. /* Uncaught exception */
  2652. if (zend_observer_fcall_op_array_extension != -1) {
  2653. zend_observer_fcall_end(execute_data, NULL);
  2654. }
  2655. cleanup_live_vars(execute_data, op_num, 0);
  2656. if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
  2657. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  2658. zend_generator_close(generator, 1);
  2659. ZEND_VM_RETURN();
  2660. } else {
  2661. /* We didn't execute RETURN, and have to initialize return_value */
  2662. if (EX(return_value)) {
  2663. ZVAL_UNDEF(EX(return_value));
  2664. }
  2665. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  2666. }
  2667. }
  2668. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2669. {
  2670. const zend_op *throw_op = EG(opline_before_exception);
  2671. uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes;
  2672. int i, current_try_catch_offset = -1;
  2673. if ((throw_op->opcode == ZEND_FREE || throw_op->opcode == ZEND_FE_FREE)
  2674. && throw_op->extended_value & ZEND_FREE_ON_RETURN) {
  2675. /* exceptions thrown because of loop var destruction on return/break/...
  2676. * are logically thrown at the end of the foreach loop, so adjust the
  2677. * throw_op_num.
  2678. */
  2679. const zend_live_range *range = find_live_range(
  2680. &EX(func)->op_array, throw_op_num, throw_op->op1.var);
  2681. /* free op1 of the corresponding RETURN */
  2682. for (i = throw_op_num; i < range->end; i++) {
  2683. if (EX(func)->op_array.opcodes[i].opcode == ZEND_FREE
  2684. || EX(func)->op_array.opcodes[i].opcode == ZEND_FE_FREE) {
  2685. /* pass */
  2686. } else {
  2687. if (EX(func)->op_array.opcodes[i].opcode == ZEND_RETURN
  2688. && (EX(func)->op_array.opcodes[i].op1_type & (IS_VAR|IS_TMP_VAR))) {
  2689. zval_ptr_dtor(EX_VAR(EX(func)->op_array.opcodes[i].op1.var));
  2690. }
  2691. break;
  2692. }
  2693. }
  2694. throw_op_num = range->end;
  2695. }
  2696. /* Find the innermost try/catch/finally the exception was thrown in */
  2697. for (i = 0; i < EX(func)->op_array.last_try_catch; i++) {
  2698. zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[i];
  2699. if (try_catch->try_op > throw_op_num) {
  2700. /* further blocks will not be relevant... */
  2701. break;
  2702. }
  2703. if (throw_op_num < try_catch->catch_op || throw_op_num < try_catch->finally_end) {
  2704. current_try_catch_offset = i;
  2705. }
  2706. }
  2707. cleanup_unfinished_calls(execute_data, throw_op_num);
  2708. if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) {
  2709. switch (throw_op->opcode) {
  2710. case ZEND_ADD_ARRAY_ELEMENT:
  2711. case ZEND_ADD_ARRAY_UNPACK:
  2712. case ZEND_ROPE_INIT:
  2713. case ZEND_ROPE_ADD:
  2714. break; /* exception while building structures, live range handling will free those */
  2715. case ZEND_FETCH_CLASS:
  2716. case ZEND_DECLARE_ANON_CLASS:
  2717. break; /* return value is zend_class_entry pointer */
  2718. default:
  2719. /* smart branch opcodes may not initialize result */
  2720. if (!zend_is_smart_branch(throw_op)) {
  2721. zval_ptr_dtor_nogc(EX_VAR(throw_op->result.var));
  2722. }
  2723. }
  2724. }
  2725. ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, throw_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  2726. }
  2727. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2728. {
  2729. USE_OPLINE
  2730. int ret;
  2731. SAVE_OPLINE();
  2732. ret = zend_user_opcode_handlers[opline->opcode](execute_data);
  2733. opline = EX(opline);
  2734. switch (ret) {
  2735. case ZEND_USER_OPCODE_CONTINUE:
  2736. ZEND_VM_CONTINUE();
  2737. case ZEND_USER_OPCODE_RETURN:
  2738. if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
  2739. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  2740. zend_generator_close(generator, 1);
  2741. ZEND_VM_RETURN();
  2742. } else {
  2743. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  2744. }
  2745. case ZEND_USER_OPCODE_ENTER:
  2746. ZEND_VM_ENTER();
  2747. case ZEND_USER_OPCODE_LEAVE:
  2748. ZEND_VM_LEAVE();
  2749. case ZEND_USER_OPCODE_DISPATCH:
  2750. ZEND_VM_DISPATCH(opline->opcode, opline);
  2751. default:
  2752. ZEND_VM_DISPATCH((zend_uchar)(ret & 0xff), opline);
  2753. }
  2754. }
  2755. static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  2756. {
  2757. USE_OPLINE
  2758. SAVE_OPLINE();
  2759. zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
  2760. FREE_OP(opline->op2_type, opline->op2.var);
  2761. FREE_OP(opline->op1_type, opline->op1.var);
  2762. UNDEF_RESULT();
  2763. HANDLE_EXCEPTION();
  2764. }
  2765. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2766. {
  2767. USE_OPLINE
  2768. zval *fast_call = EX_VAR(opline->op1.var);
  2769. SAVE_OPLINE();
  2770. /* cleanup incomplete RETURN statement */
  2771. if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
  2772. && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
  2773. zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);
  2774. zval_ptr_dtor(return_value);
  2775. }
  2776. /* cleanup delayed exception */
  2777. if (Z_OBJ_P(fast_call) != NULL) {
  2778. /* discard the previously thrown exception */
  2779. OBJ_RELEASE(Z_OBJ_P(fast_call));
  2780. Z_OBJ_P(fast_call) = NULL;
  2781. }
  2782. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2783. }
  2784. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2785. {
  2786. USE_OPLINE
  2787. zval *fast_call = EX_VAR(opline->result.var);
  2788. Z_OBJ_P(fast_call) = NULL;
  2789. /* set return address */
  2790. Z_OPLINE_NUM_P(fast_call) = opline - EX(func)->op_array.opcodes;
  2791. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
  2792. }
  2793. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2794. {
  2795. USE_OPLINE
  2796. zval *fast_call = EX_VAR(opline->op1.var);
  2797. uint32_t current_try_catch_offset, current_op_num;
  2798. if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1) {
  2799. const zend_op *fast_ret = EX(func)->op_array.opcodes + Z_OPLINE_NUM_P(fast_call);
  2800. ZEND_VM_JMP_EX(fast_ret + 1, 0);
  2801. }
  2802. /* special case for unhandled exceptions */
  2803. EG(exception) = Z_OBJ_P(fast_call);
  2804. Z_OBJ_P(fast_call) = NULL;
  2805. current_try_catch_offset = opline->op2.num;
  2806. current_op_num = opline - EX(func)->op_array.opcodes;
  2807. ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, current_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  2808. }
  2809. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2810. {
  2811. USE_OPLINE
  2812. if (EG(assertions) <= 0) {
  2813. zend_op *target = OP_JMP_ADDR(opline, opline->op2);
  2814. if (RETURN_VALUE_USED(opline)) {
  2815. ZVAL_TRUE(EX_VAR(opline->result.var));
  2816. }
  2817. ZEND_VM_JMP_EX(target, 0);
  2818. } else {
  2819. ZEND_VM_NEXT_OPCODE();
  2820. }
  2821. }
  2822. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2823. {
  2824. zend_array *args = NULL;
  2825. zend_function *fbc = EX(func);
  2826. zval *ret = EX(return_value);
  2827. uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
  2828. uint32_t num_args = EX_NUM_ARGS();
  2829. zend_execute_data *call;
  2830. SAVE_OPLINE();
  2831. if (num_args) {
  2832. zval *p = ZEND_CALL_ARG(execute_data, 1);
  2833. zval *end = p + num_args;
  2834. args = zend_new_array(num_args);
  2835. zend_hash_real_init_packed(args);
  2836. ZEND_HASH_FILL_PACKED(args) {
  2837. do {
  2838. ZEND_HASH_FILL_ADD(p);
  2839. p++;
  2840. } while (p != end);
  2841. } ZEND_HASH_FILL_END();
  2842. }
  2843. call = execute_data;
  2844. execute_data = EG(current_execute_data) = EX(prev_execute_data);
  2845. call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
  2846. ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
  2847. ZEND_CALL_NUM_ARGS(call) = 2;
  2848. ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);
  2849. zval *call_args = ZEND_CALL_ARG(call, 2);
  2850. if (args) {
  2851. ZVAL_ARR(call_args, args);
  2852. } else {
  2853. ZVAL_EMPTY_ARRAY(call_args);
  2854. }
  2855. if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
  2856. if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
  2857. GC_ADDREF(call->extra_named_params);
  2858. ZVAL_ARR(call_args, call->extra_named_params);
  2859. } else {
  2860. SEPARATE_ARRAY(call_args);
  2861. zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
  2862. }
  2863. }
  2864. zend_free_trampoline(fbc);
  2865. fbc = call->func;
  2866. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
  2867. if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  2868. init_func_run_time_cache(&fbc->op_array);
  2869. }
  2870. execute_data = call;
  2871. i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
  2872. if (EXPECTED(zend_execute_ex == execute_ex)) {
  2873. LOAD_OPLINE_EX();
  2874. ZEND_VM_ENTER_EX();
  2875. } else {
  2876. SAVE_OPLINE_EX();
  2877. execute_data = EX(prev_execute_data);
  2878. LOAD_OPLINE();
  2879. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  2880. zend_execute_ex(call);
  2881. }
  2882. } else {
  2883. zval retval;
  2884. ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
  2885. EG(current_execute_data) = call;
  2886. #if ZEND_DEBUG
  2887. bool should_throw = zend_internal_call_should_throw(fbc, call);
  2888. #endif
  2889. if (ret == NULL) {
  2890. ret = &retval;
  2891. }
  2892. ZVAL_NULL(ret);
  2893. if (!zend_execute_internal) {
  2894. /* saves one function call if zend_execute_internal is not used */
  2895. fbc->internal_function.handler(call, ret);
  2896. } else {
  2897. zend_execute_internal(call, ret);
  2898. }
  2899. #if ZEND_DEBUG
  2900. if (!EG(exception) && call->func) {
  2901. if (should_throw) {
  2902. zend_internal_call_arginfo_violation(call->func);
  2903. }
  2904. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  2905. zend_verify_internal_return_type(call->func, ret));
  2906. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  2907. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  2908. zend_verify_internal_func_info(call->func, ret);
  2909. }
  2910. #endif
  2911. EG(current_execute_data) = call->prev_execute_data;
  2912. zend_vm_stack_free_args(call);
  2913. if (ret == &retval) {
  2914. zval_ptr_dtor(ret);
  2915. }
  2916. }
  2917. execute_data = EG(current_execute_data);
  2918. if (!EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
  2919. ZEND_VM_RETURN();
  2920. }
  2921. if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
  2922. zend_object *object = Z_OBJ(call->This);
  2923. OBJ_RELEASE(object);
  2924. }
  2925. zend_vm_stack_free_call_frame(call);
  2926. if (UNEXPECTED(EG(exception) != NULL)) {
  2927. zend_rethrow_exception(execute_data);
  2928. HANDLE_EXCEPTION_LEAVE();
  2929. }
  2930. LOAD_OPLINE();
  2931. ZEND_VM_INC_OPCODE();
  2932. ZEND_VM_LEAVE();
  2933. }
  2934. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2935. {
  2936. zend_array *args = NULL;
  2937. zend_function *fbc = EX(func);
  2938. zval *ret = EX(return_value);
  2939. uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
  2940. uint32_t num_args = EX_NUM_ARGS();
  2941. zend_execute_data *call;
  2942. SAVE_OPLINE();
  2943. if (num_args) {
  2944. zval *p = ZEND_CALL_ARG(execute_data, 1);
  2945. zval *end = p + num_args;
  2946. args = zend_new_array(num_args);
  2947. zend_hash_real_init_packed(args);
  2948. ZEND_HASH_FILL_PACKED(args) {
  2949. do {
  2950. ZEND_HASH_FILL_ADD(p);
  2951. p++;
  2952. } while (p != end);
  2953. } ZEND_HASH_FILL_END();
  2954. }
  2955. call = execute_data;
  2956. execute_data = EG(current_execute_data) = EX(prev_execute_data);
  2957. call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
  2958. ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
  2959. ZEND_CALL_NUM_ARGS(call) = 2;
  2960. ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);
  2961. zval *call_args = ZEND_CALL_ARG(call, 2);
  2962. if (args) {
  2963. ZVAL_ARR(call_args, args);
  2964. } else {
  2965. ZVAL_EMPTY_ARRAY(call_args);
  2966. }
  2967. if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
  2968. if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
  2969. GC_ADDREF(call->extra_named_params);
  2970. ZVAL_ARR(call_args, call->extra_named_params);
  2971. } else {
  2972. SEPARATE_ARRAY(call_args);
  2973. zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
  2974. }
  2975. }
  2976. zend_free_trampoline(fbc);
  2977. fbc = call->func;
  2978. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
  2979. if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  2980. init_func_run_time_cache(&fbc->op_array);
  2981. }
  2982. execute_data = call;
  2983. i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
  2984. if (EXPECTED(zend_execute_ex == execute_ex)) {
  2985. LOAD_OPLINE_EX();
  2986. SAVE_OPLINE();
  2987. zend_observer_fcall_begin(execute_data);
  2988. ZEND_VM_ENTER_EX();
  2989. } else {
  2990. SAVE_OPLINE_EX();
  2991. zend_observer_fcall_begin(execute_data);
  2992. execute_data = EX(prev_execute_data);
  2993. LOAD_OPLINE();
  2994. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  2995. zend_execute_ex(call);
  2996. }
  2997. } else {
  2998. zval retval;
  2999. ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
  3000. EG(current_execute_data) = call;
  3001. #if ZEND_DEBUG
  3002. bool should_throw = zend_internal_call_should_throw(fbc, call);
  3003. #endif
  3004. if (ret == NULL) {
  3005. ret = &retval;
  3006. }
  3007. ZVAL_NULL(ret);
  3008. if (!zend_execute_internal) {
  3009. /* saves one function call if zend_execute_internal is not used */
  3010. fbc->internal_function.handler(call, ret);
  3011. } else {
  3012. zend_execute_internal(call, ret);
  3013. }
  3014. #if ZEND_DEBUG
  3015. if (!EG(exception) && call->func) {
  3016. if (should_throw) {
  3017. zend_internal_call_arginfo_violation(call->func);
  3018. }
  3019. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  3020. zend_verify_internal_return_type(call->func, ret));
  3021. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  3022. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  3023. zend_verify_internal_func_info(call->func, ret);
  3024. }
  3025. #endif
  3026. EG(current_execute_data) = call->prev_execute_data;
  3027. zend_vm_stack_free_args(call);
  3028. if (ret == &retval) {
  3029. zval_ptr_dtor(ret);
  3030. }
  3031. }
  3032. execute_data = EG(current_execute_data);
  3033. if (!EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
  3034. ZEND_VM_RETURN();
  3035. }
  3036. if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
  3037. zend_object *object = Z_OBJ(call->This);
  3038. OBJ_RELEASE(object);
  3039. }
  3040. zend_vm_stack_free_call_frame(call);
  3041. if (UNEXPECTED(EG(exception) != NULL)) {
  3042. zend_rethrow_exception(execute_data);
  3043. HANDLE_EXCEPTION_LEAVE();
  3044. }
  3045. LOAD_OPLINE();
  3046. ZEND_VM_INC_OPCODE();
  3047. ZEND_VM_LEAVE();
  3048. }
  3049. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3050. {
  3051. USE_OPLINE
  3052. OPLINE = OP_JMP_ADDR(opline, opline->op1);
  3053. ZEND_VM_CONTINUE();
  3054. }
  3055. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  3056. {
  3057. EG(vm_interrupt) = 0;
  3058. SAVE_OPLINE();
  3059. if (EG(timed_out)) {
  3060. zend_timeout();
  3061. } else if (zend_interrupt_function) {
  3062. zend_interrupt_function(execute_data);
  3063. if (EG(exception)) {
  3064. /* We have to UNDEF result, because ZEND_HANDLE_EXCEPTION is going to free it */
  3065. const zend_op *throw_op = EG(opline_before_exception);
  3066. if (throw_op
  3067. && throw_op->result_type & (IS_TMP_VAR|IS_VAR)
  3068. && throw_op->opcode != ZEND_ADD_ARRAY_ELEMENT
  3069. && throw_op->opcode != ZEND_ADD_ARRAY_UNPACK
  3070. && throw_op->opcode != ZEND_ROPE_INIT
  3071. && throw_op->opcode != ZEND_ROPE_ADD) {
  3072. ZVAL_UNDEF(ZEND_CALL_VAR(EG(current_execute_data), throw_op->result.var));
  3073. }
  3074. }
  3075. ZEND_VM_ENTER();
  3076. }
  3077. ZEND_VM_CONTINUE();
  3078. }
  3079. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3080. {
  3081. USE_OPLINE
  3082. zend_function *fbc;
  3083. zval *function_name, *func;
  3084. zend_execute_data *call;
  3085. fbc = CACHED_PTR(opline->result.num);
  3086. if (UNEXPECTED(fbc == NULL)) {
  3087. function_name = (zval*)RT_CONSTANT(opline, opline->op2);
  3088. func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(function_name+1));
  3089. if (UNEXPECTED(func == NULL)) {
  3090. ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3091. }
  3092. fbc = Z_FUNC_P(func);
  3093. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  3094. init_func_run_time_cache(&fbc->op_array);
  3095. }
  3096. CACHE_PTR(opline->result.num, fbc);
  3097. }
  3098. call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  3099. fbc, opline->extended_value, NULL);
  3100. call->prev_execute_data = EX(call);
  3101. EX(call) = call;
  3102. ZEND_VM_NEXT_OPCODE();
  3103. }
  3104. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3105. {
  3106. USE_OPLINE
  3107. zval *function_name;
  3108. zend_execute_data *call;
  3109. SAVE_OPLINE();
  3110. function_name = RT_CONSTANT(opline, opline->op2);
  3111. try_function_name:
  3112. if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  3113. call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
  3114. } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
  3115. call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
  3116. } else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
  3117. call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
  3118. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
  3119. function_name = Z_REFVAL_P(function_name);
  3120. goto try_function_name;
  3121. } else {
  3122. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  3123. function_name = ZVAL_UNDEFINED_OP2();
  3124. if (UNEXPECTED(EG(exception) != NULL)) {
  3125. HANDLE_EXCEPTION();
  3126. }
  3127. }
  3128. zend_throw_error(NULL, "Value of type %s is not callable",
  3129. zend_zval_type_name(function_name));
  3130. call = NULL;
  3131. }
  3132. if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
  3133. if (UNEXPECTED(EG(exception))) {
  3134. if (call) {
  3135. if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
  3136. zend_string_release_ex(call->func->common.function_name, 0);
  3137. zend_free_trampoline(call->func);
  3138. }
  3139. zend_vm_stack_free_call_frame(call);
  3140. }
  3141. HANDLE_EXCEPTION();
  3142. }
  3143. } else if (!call) {
  3144. HANDLE_EXCEPTION();
  3145. }
  3146. call->prev_execute_data = EX(call);
  3147. EX(call) = call;
  3148. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3149. }
  3150. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3151. {
  3152. USE_OPLINE
  3153. zval *func_name;
  3154. zval *func;
  3155. zend_function *fbc;
  3156. zend_execute_data *call;
  3157. fbc = CACHED_PTR(opline->result.num);
  3158. if (UNEXPECTED(fbc == NULL)) {
  3159. func_name = (zval *)RT_CONSTANT(opline, opline->op2);
  3160. func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name + 1));
  3161. if (func == NULL) {
  3162. func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name + 2));
  3163. if (UNEXPECTED(func == NULL)) {
  3164. ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3165. }
  3166. }
  3167. fbc = Z_FUNC_P(func);
  3168. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  3169. init_func_run_time_cache(&fbc->op_array);
  3170. }
  3171. CACHE_PTR(opline->result.num, fbc);
  3172. }
  3173. call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  3174. fbc, opline->extended_value, NULL);
  3175. call->prev_execute_data = EX(call);
  3176. EX(call) = call;
  3177. ZEND_VM_NEXT_OPCODE();
  3178. }
  3179. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3180. {
  3181. USE_OPLINE
  3182. zval *fname;
  3183. zval *func;
  3184. zend_function *fbc;
  3185. zend_execute_data *call;
  3186. fbc = CACHED_PTR(opline->result.num);
  3187. if (UNEXPECTED(fbc == NULL)) {
  3188. fname = (zval*)RT_CONSTANT(opline, opline->op2);
  3189. func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(fname));
  3190. if (UNEXPECTED(func == NULL)) {
  3191. ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3192. }
  3193. fbc = Z_FUNC_P(func);
  3194. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  3195. init_func_run_time_cache(&fbc->op_array);
  3196. }
  3197. CACHE_PTR(opline->result.num, fbc);
  3198. }
  3199. call = _zend_vm_stack_push_call_frame_ex(
  3200. opline->op1.num, ZEND_CALL_NESTED_FUNCTION,
  3201. fbc, opline->extended_value, NULL);
  3202. call->prev_execute_data = EX(call);
  3203. EX(call) = call;
  3204. ZEND_VM_NEXT_OPCODE();
  3205. }
  3206. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3207. {
  3208. USE_OPLINE
  3209. uint32_t arg_num;
  3210. zval *param;
  3211. ZEND_VM_REPEATABLE_OPCODE
  3212. arg_num = opline->op1.num;
  3213. param = EX_VAR(opline->result.var);
  3214. if (arg_num > EX_NUM_ARGS()) {
  3215. zval *default_value = RT_CONSTANT(opline, opline->op2);
  3216. if (Z_OPT_TYPE_P(default_value) == IS_CONSTANT_AST) {
  3217. zval *cache_val = (zval*)CACHE_ADDR(Z_CACHE_SLOT_P(default_value));
  3218. /* we keep in cache only not refcounted values */
  3219. if (Z_TYPE_P(cache_val) != IS_UNDEF) {
  3220. ZVAL_COPY_VALUE(param, cache_val);
  3221. } else {
  3222. SAVE_OPLINE();
  3223. ZVAL_COPY(param, default_value);
  3224. if (UNEXPECTED(zval_update_constant_ex(param, EX(func)->op_array.scope) != SUCCESS)) {
  3225. zval_ptr_dtor_nogc(param);
  3226. ZVAL_UNDEF(param);
  3227. HANDLE_EXCEPTION();
  3228. }
  3229. if (!Z_REFCOUNTED_P(param)) {
  3230. ZVAL_COPY_VALUE(cache_val, param);
  3231. }
  3232. }
  3233. goto recv_init_check_type;
  3234. } else {
  3235. ZVAL_COPY(param, default_value);
  3236. }
  3237. } else {
  3238. recv_init_check_type:
  3239. if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
  3240. SAVE_OPLINE();
  3241. if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param, CACHE_ADDR(opline->extended_value)))) {
  3242. HANDLE_EXCEPTION();
  3243. }
  3244. }
  3245. }
  3246. ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
  3247. ZEND_VM_NEXT_OPCODE();
  3248. }
  3249. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3250. {
  3251. USE_OPLINE
  3252. zval *function_name;
  3253. zend_execute_data *call;
  3254. SAVE_OPLINE();
  3255. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  3256. try_function_name:
  3257. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  3258. call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
  3259. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
  3260. call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
  3261. } else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
  3262. call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
  3263. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
  3264. function_name = Z_REFVAL_P(function_name);
  3265. goto try_function_name;
  3266. } else {
  3267. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  3268. function_name = ZVAL_UNDEFINED_OP2();
  3269. if (UNEXPECTED(EG(exception) != NULL)) {
  3270. HANDLE_EXCEPTION();
  3271. }
  3272. }
  3273. zend_throw_error(NULL, "Value of type %s is not callable",
  3274. zend_zval_type_name(function_name));
  3275. call = NULL;
  3276. }
  3277. if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
  3278. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  3279. if (UNEXPECTED(EG(exception))) {
  3280. if (call) {
  3281. if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
  3282. zend_string_release_ex(call->func->common.function_name, 0);
  3283. zend_free_trampoline(call->func);
  3284. }
  3285. zend_vm_stack_free_call_frame(call);
  3286. }
  3287. HANDLE_EXCEPTION();
  3288. }
  3289. } else if (!call) {
  3290. HANDLE_EXCEPTION();
  3291. }
  3292. call->prev_execute_data = EX(call);
  3293. EX(call) = call;
  3294. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3295. }
  3296. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3297. {
  3298. USE_OPLINE
  3299. uint32_t arg_num = opline->op1.num;
  3300. zval *param;
  3301. if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
  3302. ZEND_VM_TAIL_CALL(zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3303. }
  3304. param = EX_VAR(opline->result.var);
  3305. if (UNEXPECTED(!(opline->op2.num & (1u << Z_TYPE_P(param))))) {
  3306. ZEND_VM_TAIL_CALL(zend_verify_recv_arg_type_helper_SPEC(param ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  3307. }
  3308. ZEND_VM_NEXT_OPCODE();
  3309. }
  3310. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3311. {
  3312. USE_OPLINE
  3313. uint32_t arg_num = opline->op1.num;
  3314. uint32_t arg_count = EX_NUM_ARGS();
  3315. zval *params;
  3316. SAVE_OPLINE();
  3317. params = EX_VAR(opline->result.var);
  3318. if (arg_num <= arg_count) {
  3319. ZEND_ASSERT(EX(func)->common.fn_flags & ZEND_ACC_VARIADIC);
  3320. ZEND_ASSERT(EX(func)->common.num_args == arg_num - 1);
  3321. zend_arg_info *arg_info = &EX(func)->common.arg_info[arg_num - 1];
  3322. array_init_size(params, arg_count - arg_num + 1);
  3323. zend_hash_real_init_packed(Z_ARRVAL_P(params));
  3324. ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
  3325. zval *param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
  3326. if (UNEXPECTED(ZEND_TYPE_IS_SET(arg_info->type))) {
  3327. ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_FREE_EXTRA_ARGS);
  3328. do {
  3329. if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param, CACHE_ADDR(opline->extended_value)))) {
  3330. ZEND_HASH_FILL_FINISH();
  3331. HANDLE_EXCEPTION();
  3332. }
  3333. if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
  3334. ZEND_HASH_FILL_ADD(param);
  3335. param++;
  3336. } while (++arg_num <= arg_count);
  3337. } else {
  3338. do {
  3339. if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
  3340. ZEND_HASH_FILL_ADD(param);
  3341. param++;
  3342. } while (++arg_num <= arg_count);
  3343. }
  3344. } ZEND_HASH_FILL_END();
  3345. } else {
  3346. ZVAL_EMPTY_ARRAY(params);
  3347. }
  3348. if (EX_CALL_INFO() & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
  3349. zend_string *name;
  3350. zval *param;
  3351. zend_arg_info *arg_info = &EX(func)->common.arg_info[EX(func)->common.num_args];
  3352. if (ZEND_TYPE_IS_SET(arg_info->type)) {
  3353. SEPARATE_ARRAY(params);
  3354. ZEND_HASH_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
  3355. if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param, CACHE_ADDR(opline->extended_value)))) {
  3356. HANDLE_EXCEPTION();
  3357. }
  3358. Z_TRY_ADDREF_P(param);
  3359. zend_hash_add_new(Z_ARRVAL_P(params), name, param);
  3360. } ZEND_HASH_FOREACH_END();
  3361. } else if (zend_hash_num_elements(Z_ARRVAL_P(params)) == 0) {
  3362. GC_ADDREF(EX(extra_named_params));
  3363. ZVAL_ARR(params, EX(extra_named_params));
  3364. } else {
  3365. SEPARATE_ARRAY(params);
  3366. ZEND_HASH_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
  3367. Z_TRY_ADDREF_P(param);
  3368. zend_hash_add_new(Z_ARRVAL_P(params), name, param);
  3369. } ZEND_HASH_FOREACH_END();
  3370. }
  3371. }
  3372. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3373. }
  3374. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3375. {
  3376. USE_OPLINE
  3377. zval *function_name;
  3378. zend_execute_data *call;
  3379. SAVE_OPLINE();
  3380. function_name = EX_VAR(opline->op2.var);
  3381. try_function_name:
  3382. if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  3383. call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
  3384. } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
  3385. call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
  3386. } else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
  3387. call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
  3388. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
  3389. function_name = Z_REFVAL_P(function_name);
  3390. goto try_function_name;
  3391. } else {
  3392. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  3393. function_name = ZVAL_UNDEFINED_OP2();
  3394. if (UNEXPECTED(EG(exception) != NULL)) {
  3395. HANDLE_EXCEPTION();
  3396. }
  3397. }
  3398. zend_throw_error(NULL, "Value of type %s is not callable",
  3399. zend_zval_type_name(function_name));
  3400. call = NULL;
  3401. }
  3402. if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
  3403. if (UNEXPECTED(EG(exception))) {
  3404. if (call) {
  3405. if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
  3406. zend_string_release_ex(call->func->common.function_name, 0);
  3407. zend_free_trampoline(call->func);
  3408. }
  3409. zend_vm_stack_free_call_frame(call);
  3410. }
  3411. HANDLE_EXCEPTION();
  3412. }
  3413. } else if (!call) {
  3414. HANDLE_EXCEPTION();
  3415. }
  3416. call->prev_execute_data = EX(call);
  3417. EX(call) = call;
  3418. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3419. }
  3420. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3421. {
  3422. USE_OPLINE
  3423. zval *op1;
  3424. op1 = RT_CONSTANT(opline, opline->op1);
  3425. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  3426. ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
  3427. ZEND_VM_NEXT_OPCODE();
  3428. }
  3429. ZEND_VM_TAIL_CALL(zend_bw_not_helper_SPEC(op1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  3430. }
  3431. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3432. {
  3433. USE_OPLINE
  3434. zval *val;
  3435. val = RT_CONSTANT(opline, opline->op1);
  3436. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  3437. ZVAL_FALSE(EX_VAR(opline->result.var));
  3438. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  3439. /* The result and op1 can be the same cv zval */
  3440. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  3441. ZVAL_TRUE(EX_VAR(opline->result.var));
  3442. if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  3443. SAVE_OPLINE();
  3444. ZVAL_UNDEFINED_OP1();
  3445. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3446. }
  3447. } else {
  3448. SAVE_OPLINE();
  3449. ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
  3450. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3451. }
  3452. ZEND_VM_NEXT_OPCODE();
  3453. }
  3454. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3455. {
  3456. USE_OPLINE
  3457. zval *z;
  3458. SAVE_OPLINE();
  3459. z = RT_CONSTANT(opline, opline->op1);
  3460. if (Z_TYPE_P(z) == IS_STRING) {
  3461. zend_string *str = Z_STR_P(z);
  3462. if (ZSTR_LEN(str) != 0) {
  3463. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  3464. }
  3465. } else {
  3466. zend_string *str = zval_get_string_func(z);
  3467. if (ZSTR_LEN(str) != 0) {
  3468. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  3469. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
  3470. ZVAL_UNDEFINED_OP1();
  3471. }
  3472. zend_string_release_ex(str, 0);
  3473. }
  3474. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3475. }
  3476. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3477. {
  3478. USE_OPLINE
  3479. zval *val;
  3480. zend_uchar op1_type;
  3481. val = RT_CONSTANT(opline, opline->op1);
  3482. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  3483. ZEND_VM_NEXT_OPCODE();
  3484. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  3485. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  3486. SAVE_OPLINE();
  3487. ZVAL_UNDEFINED_OP1();
  3488. if (UNEXPECTED(EG(exception))) {
  3489. HANDLE_EXCEPTION();
  3490. }
  3491. }
  3492. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  3493. }
  3494. SAVE_OPLINE();
  3495. op1_type = IS_CONST;
  3496. if (i_zend_is_true(val)) {
  3497. opline++;
  3498. } else {
  3499. opline = OP_JMP_ADDR(opline, opline->op2);
  3500. }
  3501. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  3502. zval_ptr_dtor_nogc(val);
  3503. }
  3504. ZEND_VM_JMP(opline);
  3505. }
  3506. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3507. {
  3508. USE_OPLINE
  3509. zval *val;
  3510. zend_uchar op1_type;
  3511. val = RT_CONSTANT(opline, opline->op1);
  3512. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  3513. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  3514. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  3515. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  3516. SAVE_OPLINE();
  3517. ZVAL_UNDEFINED_OP1();
  3518. if (UNEXPECTED(EG(exception))) {
  3519. HANDLE_EXCEPTION();
  3520. }
  3521. }
  3522. ZEND_VM_NEXT_OPCODE();
  3523. }
  3524. SAVE_OPLINE();
  3525. op1_type = IS_CONST;
  3526. if (i_zend_is_true(val)) {
  3527. opline = OP_JMP_ADDR(opline, opline->op2);
  3528. } else {
  3529. opline++;
  3530. }
  3531. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  3532. zval_ptr_dtor_nogc(val);
  3533. }
  3534. ZEND_VM_JMP(opline);
  3535. }
  3536. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3537. {
  3538. USE_OPLINE
  3539. zval *val;
  3540. zend_uchar op1_type;
  3541. val = RT_CONSTANT(opline, opline->op1);
  3542. if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
  3543. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  3544. ZEND_VM_CONTINUE();
  3545. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  3546. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  3547. SAVE_OPLINE();
  3548. ZVAL_UNDEFINED_OP1();
  3549. if (UNEXPECTED(EG(exception))) {
  3550. HANDLE_EXCEPTION();
  3551. }
  3552. }
  3553. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  3554. }
  3555. SAVE_OPLINE();
  3556. op1_type = IS_CONST;
  3557. if (i_zend_is_true(val)) {
  3558. opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
  3559. } else {
  3560. opline = OP_JMP_ADDR(opline, opline->op2);
  3561. }
  3562. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  3563. zval_ptr_dtor_nogc(val);
  3564. }
  3565. ZEND_VM_JMP(opline);
  3566. }
  3567. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3568. {
  3569. USE_OPLINE
  3570. zval *val;
  3571. bool ret;
  3572. val = RT_CONSTANT(opline, opline->op1);
  3573. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  3574. ZVAL_TRUE(EX_VAR(opline->result.var));
  3575. ZEND_VM_NEXT_OPCODE();
  3576. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  3577. ZVAL_FALSE(EX_VAR(opline->result.var));
  3578. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  3579. SAVE_OPLINE();
  3580. ZVAL_UNDEFINED_OP1();
  3581. if (UNEXPECTED(EG(exception))) {
  3582. HANDLE_EXCEPTION();
  3583. }
  3584. }
  3585. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  3586. }
  3587. SAVE_OPLINE();
  3588. ret = i_zend_is_true(val);
  3589. if (ret) {
  3590. ZVAL_TRUE(EX_VAR(opline->result.var));
  3591. opline++;
  3592. } else {
  3593. ZVAL_FALSE(EX_VAR(opline->result.var));
  3594. opline = OP_JMP_ADDR(opline, opline->op2);
  3595. }
  3596. ZEND_VM_JMP(opline);
  3597. }
  3598. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3599. {
  3600. USE_OPLINE
  3601. zval *val;
  3602. bool ret;
  3603. val = RT_CONSTANT(opline, opline->op1);
  3604. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  3605. ZVAL_TRUE(EX_VAR(opline->result.var));
  3606. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  3607. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  3608. ZVAL_FALSE(EX_VAR(opline->result.var));
  3609. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  3610. SAVE_OPLINE();
  3611. ZVAL_UNDEFINED_OP1();
  3612. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3613. } else {
  3614. ZEND_VM_NEXT_OPCODE();
  3615. }
  3616. }
  3617. SAVE_OPLINE();
  3618. ret = i_zend_is_true(val);
  3619. if (ret) {
  3620. ZVAL_TRUE(EX_VAR(opline->result.var));
  3621. opline = OP_JMP_ADDR(opline, opline->op2);
  3622. } else {
  3623. ZVAL_FALSE(EX_VAR(opline->result.var));
  3624. opline++;
  3625. }
  3626. ZEND_VM_JMP(opline);
  3627. }
  3628. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3629. {
  3630. USE_OPLINE
  3631. zval *retval_ptr;
  3632. zval *return_value;
  3633. retval_ptr = RT_CONSTANT(opline, opline->op1);
  3634. return_value = EX(return_value);
  3635. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  3636. SAVE_OPLINE();
  3637. retval_ptr = ZVAL_UNDEFINED_OP1();
  3638. if (return_value) {
  3639. ZVAL_NULL(return_value);
  3640. }
  3641. } else if (!return_value) {
  3642. if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
  3643. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  3644. SAVE_OPLINE();
  3645. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  3646. }
  3647. }
  3648. } else {
  3649. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  3650. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3651. if (IS_CONST == IS_CONST) {
  3652. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  3653. Z_ADDREF_P(return_value);
  3654. }
  3655. }
  3656. } else if (IS_CONST == IS_CV) {
  3657. do {
  3658. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  3659. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  3660. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  3661. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  3662. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3663. if (GC_MAY_LEAK(ref)) {
  3664. SAVE_OPLINE();
  3665. gc_possible_root(ref);
  3666. }
  3667. ZVAL_NULL(retval_ptr);
  3668. break;
  3669. } else {
  3670. Z_ADDREF_P(retval_ptr);
  3671. }
  3672. } else {
  3673. retval_ptr = Z_REFVAL_P(retval_ptr);
  3674. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  3675. Z_ADDREF_P(retval_ptr);
  3676. }
  3677. }
  3678. }
  3679. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3680. } while (0);
  3681. } else /* if (IS_CONST == IS_VAR) */ {
  3682. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  3683. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  3684. retval_ptr = Z_REFVAL_P(retval_ptr);
  3685. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3686. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  3687. efree_size(ref, sizeof(zend_reference));
  3688. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  3689. Z_ADDREF_P(retval_ptr);
  3690. }
  3691. } else {
  3692. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3693. }
  3694. }
  3695. }
  3696. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3697. }
  3698. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3699. {
  3700. USE_OPLINE
  3701. zval *retval_ptr;
  3702. zval *return_value;
  3703. zval observer_retval;
  3704. retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
  3705. return_value = EX(return_value);
  3706. if (!return_value) { return_value = &observer_retval; };
  3707. if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  3708. SAVE_OPLINE();
  3709. retval_ptr = ZVAL_UNDEFINED_OP1();
  3710. if (return_value) {
  3711. ZVAL_NULL(return_value);
  3712. }
  3713. } else if (!return_value) {
  3714. if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
  3715. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  3716. SAVE_OPLINE();
  3717. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  3718. }
  3719. }
  3720. } else {
  3721. if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
  3722. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3723. if (opline->op1_type == IS_CONST) {
  3724. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  3725. Z_ADDREF_P(return_value);
  3726. }
  3727. }
  3728. } else if (opline->op1_type == IS_CV) {
  3729. do {
  3730. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  3731. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  3732. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  3733. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  3734. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3735. if (GC_MAY_LEAK(ref)) {
  3736. SAVE_OPLINE();
  3737. gc_possible_root(ref);
  3738. }
  3739. ZVAL_NULL(retval_ptr);
  3740. break;
  3741. } else {
  3742. Z_ADDREF_P(retval_ptr);
  3743. }
  3744. } else {
  3745. retval_ptr = Z_REFVAL_P(retval_ptr);
  3746. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  3747. Z_ADDREF_P(retval_ptr);
  3748. }
  3749. }
  3750. }
  3751. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3752. } while (0);
  3753. } else /* if (opline->op1_type == IS_VAR) */ {
  3754. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  3755. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  3756. retval_ptr = Z_REFVAL_P(retval_ptr);
  3757. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3758. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  3759. efree_size(ref, sizeof(zend_reference));
  3760. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  3761. Z_ADDREF_P(retval_ptr);
  3762. }
  3763. } else {
  3764. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3765. }
  3766. }
  3767. }
  3768. SAVE_OPLINE();
  3769. zend_observer_fcall_end(execute_data, return_value);
  3770. if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
  3771. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3772. }
  3773. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3774. {
  3775. USE_OPLINE
  3776. zval *retval_ptr;
  3777. zval *return_value;
  3778. SAVE_OPLINE();
  3779. return_value = EX(return_value);
  3780. do {
  3781. if ((IS_CONST & (IS_CONST|IS_TMP_VAR)) ||
  3782. (IS_CONST == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
  3783. /* Not supposed to happen, but we'll allow it */
  3784. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  3785. retval_ptr = RT_CONSTANT(opline, opline->op1);
  3786. if (!return_value) {
  3787. } else {
  3788. if (IS_CONST == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  3789. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3790. break;
  3791. }
  3792. ZVAL_NEW_REF(return_value, retval_ptr);
  3793. if (IS_CONST == IS_CONST) {
  3794. Z_TRY_ADDREF_P(retval_ptr);
  3795. }
  3796. }
  3797. break;
  3798. }
  3799. retval_ptr = NULL;
  3800. if (IS_CONST == IS_VAR) {
  3801. ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
  3802. if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
  3803. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  3804. if (return_value) {
  3805. ZVAL_NEW_REF(return_value, retval_ptr);
  3806. } else {
  3807. }
  3808. break;
  3809. }
  3810. }
  3811. if (return_value) {
  3812. if (Z_ISREF_P(retval_ptr)) {
  3813. Z_ADDREF_P(retval_ptr);
  3814. } else {
  3815. ZVAL_MAKE_REF_EX(retval_ptr, 2);
  3816. }
  3817. ZVAL_REF(return_value, Z_REF_P(retval_ptr));
  3818. }
  3819. } while (0);
  3820. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3821. }
  3822. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3823. {
  3824. USE_OPLINE
  3825. zval *retval_ptr;
  3826. zval *return_value;
  3827. zval observer_retval;
  3828. SAVE_OPLINE();
  3829. return_value = EX(return_value);
  3830. if (!return_value) { return_value = &observer_retval; };
  3831. do {
  3832. if ((opline->op1_type & (IS_CONST|IS_TMP_VAR)) ||
  3833. (opline->op1_type == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
  3834. /* Not supposed to happen, but we'll allow it */
  3835. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  3836. retval_ptr = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
  3837. if (!return_value) {
  3838. FREE_OP(opline->op1_type, opline->op1.var);
  3839. } else {
  3840. if (opline->op1_type == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  3841. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3842. break;
  3843. }
  3844. ZVAL_NEW_REF(return_value, retval_ptr);
  3845. if (opline->op1_type == IS_CONST) {
  3846. Z_TRY_ADDREF_P(retval_ptr);
  3847. }
  3848. }
  3849. break;
  3850. }
  3851. retval_ptr = get_zval_ptr_ptr(opline->op1_type, opline->op1, BP_VAR_W);
  3852. if (opline->op1_type == IS_VAR) {
  3853. ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
  3854. if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
  3855. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  3856. if (return_value) {
  3857. ZVAL_NEW_REF(return_value, retval_ptr);
  3858. } else {
  3859. if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));};
  3860. }
  3861. break;
  3862. }
  3863. }
  3864. if (return_value) {
  3865. if (Z_ISREF_P(retval_ptr)) {
  3866. Z_ADDREF_P(retval_ptr);
  3867. } else {
  3868. ZVAL_MAKE_REF_EX(retval_ptr, 2);
  3869. }
  3870. ZVAL_REF(return_value, Z_REF_P(retval_ptr));
  3871. }
  3872. if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));};
  3873. } while (0);
  3874. zend_observer_fcall_end(execute_data, return_value);
  3875. if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
  3876. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3877. }
  3878. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3879. {
  3880. USE_OPLINE
  3881. zval *retval;
  3882. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  3883. SAVE_OPLINE();
  3884. retval = RT_CONSTANT(opline, opline->op1);
  3885. /* Copy return value into generator->retval */
  3886. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  3887. ZVAL_COPY_VALUE(&generator->retval, retval);
  3888. if (IS_CONST == IS_CONST) {
  3889. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
  3890. Z_ADDREF(generator->retval);
  3891. }
  3892. }
  3893. } else if (IS_CONST == IS_CV) {
  3894. ZVAL_COPY_DEREF(&generator->retval, retval);
  3895. } else /* if (IS_CONST == IS_VAR) */ {
  3896. if (UNEXPECTED(Z_ISREF_P(retval))) {
  3897. zend_refcounted *ref = Z_COUNTED_P(retval);
  3898. retval = Z_REFVAL_P(retval);
  3899. ZVAL_COPY_VALUE(&generator->retval, retval);
  3900. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  3901. efree_size(ref, sizeof(zend_reference));
  3902. } else if (Z_OPT_REFCOUNTED_P(retval)) {
  3903. Z_ADDREF_P(retval);
  3904. }
  3905. } else {
  3906. ZVAL_COPY_VALUE(&generator->retval, retval);
  3907. }
  3908. }
  3909. /* Close the generator to free up resources */
  3910. zend_generator_close(generator, 1);
  3911. /* Pass execution back to handling code */
  3912. ZEND_VM_RETURN();
  3913. }
  3914. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3915. {
  3916. USE_OPLINE
  3917. zval *retval;
  3918. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  3919. SAVE_OPLINE();
  3920. retval = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
  3921. /* Copy return value into generator->retval */
  3922. if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
  3923. ZVAL_COPY_VALUE(&generator->retval, retval);
  3924. if (opline->op1_type == IS_CONST) {
  3925. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
  3926. Z_ADDREF(generator->retval);
  3927. }
  3928. }
  3929. } else if (opline->op1_type == IS_CV) {
  3930. ZVAL_COPY_DEREF(&generator->retval, retval);
  3931. } else /* if (opline->op1_type == IS_VAR) */ {
  3932. if (UNEXPECTED(Z_ISREF_P(retval))) {
  3933. zend_refcounted *ref = Z_COUNTED_P(retval);
  3934. retval = Z_REFVAL_P(retval);
  3935. ZVAL_COPY_VALUE(&generator->retval, retval);
  3936. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  3937. efree_size(ref, sizeof(zend_reference));
  3938. } else if (Z_OPT_REFCOUNTED_P(retval)) {
  3939. Z_ADDREF_P(retval);
  3940. }
  3941. } else {
  3942. ZVAL_COPY_VALUE(&generator->retval, retval);
  3943. }
  3944. }
  3945. zend_observer_fcall_end(generator->execute_data, &generator->retval);
  3946. /* Close the generator to free up resources */
  3947. zend_generator_close(generator, 1);
  3948. /* Pass execution back to handling code */
  3949. ZEND_VM_RETURN();
  3950. }
  3951. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3952. {
  3953. USE_OPLINE
  3954. zval *value;
  3955. SAVE_OPLINE();
  3956. value = RT_CONSTANT(opline, opline->op1);
  3957. do {
  3958. if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
  3959. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  3960. value = Z_REFVAL_P(value);
  3961. if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
  3962. break;
  3963. }
  3964. }
  3965. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  3966. ZVAL_UNDEFINED_OP1();
  3967. if (UNEXPECTED(EG(exception) != NULL)) {
  3968. HANDLE_EXCEPTION();
  3969. }
  3970. }
  3971. zend_throw_error(NULL, "Can only throw objects");
  3972. HANDLE_EXCEPTION();
  3973. }
  3974. } while (0);
  3975. zend_exception_save();
  3976. Z_TRY_ADDREF_P(value);
  3977. zend_throw_exception_object(value);
  3978. zend_exception_restore();
  3979. HANDLE_EXCEPTION();
  3980. }
  3981. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3982. {
  3983. USE_OPLINE
  3984. zend_class_entry *ce, *catch_ce;
  3985. zend_object *exception;
  3986. SAVE_OPLINE();
  3987. /* Check whether an exception has been thrown, if not, jump over code */
  3988. zend_exception_restore();
  3989. if (EG(exception) == NULL) {
  3990. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  3991. }
  3992. catch_ce = CACHED_PTR(opline->extended_value & ~ZEND_LAST_CATCH);
  3993. if (UNEXPECTED(catch_ce == NULL)) {
  3994. catch_ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD | ZEND_FETCH_CLASS_SILENT);
  3995. CACHE_PTR(opline->extended_value & ~ZEND_LAST_CATCH, catch_ce);
  3996. }
  3997. ce = EG(exception)->ce;
  3998. #ifdef HAVE_DTRACE
  3999. if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) {
  4000. DTRACE_EXCEPTION_CAUGHT((char *)ce->name);
  4001. }
  4002. #endif /* HAVE_DTRACE */
  4003. if (ce != catch_ce) {
  4004. if (!catch_ce || !instanceof_function(ce, catch_ce)) {
  4005. if (opline->extended_value & ZEND_LAST_CATCH) {
  4006. zend_rethrow_exception(execute_data);
  4007. HANDLE_EXCEPTION();
  4008. }
  4009. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  4010. }
  4011. }
  4012. exception = EG(exception);
  4013. EG(exception) = NULL;
  4014. if (RETURN_VALUE_USED(opline)) {
  4015. /* Always perform a strict assignment. There is a reasonable expectation that if you
  4016. * write "catch (Exception $e)" then $e will actually be instanceof Exception. As such,
  4017. * we should not permit coercion to string here. */
  4018. zval tmp;
  4019. ZVAL_OBJ(&tmp, exception);
  4020. zend_assign_to_variable(EX_VAR(opline->result.var), &tmp, IS_TMP_VAR, /* strict */ 1);
  4021. } else {
  4022. OBJ_RELEASE(exception);
  4023. }
  4024. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4025. }
  4026. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4027. {
  4028. USE_OPLINE
  4029. zval *arg, *param;
  4030. SAVE_OPLINE();
  4031. arg = RT_CONSTANT(opline, opline->op1);
  4032. param = ZEND_CALL_VAR(EX(call), opline->result.var);
  4033. if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
  4034. zend_param_must_be_ref(EX(call)->func, opline->op2.num);
  4035. Z_TRY_ADDREF_P(arg);
  4036. ZVAL_NEW_REF(param, arg);
  4037. } else {
  4038. ZVAL_COPY(param, arg);
  4039. }
  4040. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4041. }
  4042. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4043. {
  4044. USE_OPLINE
  4045. zval *val;
  4046. val = RT_CONSTANT(opline, opline->op1);
  4047. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  4048. ZVAL_TRUE(EX_VAR(opline->result.var));
  4049. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  4050. /* The result and op1 can be the same cv zval */
  4051. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  4052. ZVAL_FALSE(EX_VAR(opline->result.var));
  4053. if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  4054. SAVE_OPLINE();
  4055. ZVAL_UNDEFINED_OP1();
  4056. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4057. }
  4058. } else {
  4059. SAVE_OPLINE();
  4060. ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
  4061. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4062. }
  4063. ZEND_VM_NEXT_OPCODE();
  4064. }
  4065. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4066. {
  4067. USE_OPLINE
  4068. zval *obj;
  4069. zend_object *zobj;
  4070. zend_class_entry *ce, *scope;
  4071. zend_function *clone;
  4072. zend_object_clone_obj_t clone_call;
  4073. SAVE_OPLINE();
  4074. obj = RT_CONSTANT(opline, opline->op1);
  4075. do {
  4076. if (IS_CONST == IS_CONST ||
  4077. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
  4078. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
  4079. obj = Z_REFVAL_P(obj);
  4080. if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
  4081. break;
  4082. }
  4083. }
  4084. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4085. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
  4086. ZVAL_UNDEFINED_OP1();
  4087. if (UNEXPECTED(EG(exception) != NULL)) {
  4088. HANDLE_EXCEPTION();
  4089. }
  4090. }
  4091. zend_throw_error(NULL, "__clone method called on non-object");
  4092. HANDLE_EXCEPTION();
  4093. }
  4094. } while (0);
  4095. zobj = Z_OBJ_P(obj);
  4096. ce = zobj->ce;
  4097. clone = ce->clone;
  4098. clone_call = zobj->handlers->clone_obj;
  4099. if (UNEXPECTED(clone_call == NULL)) {
  4100. zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
  4101. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4102. HANDLE_EXCEPTION();
  4103. }
  4104. if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
  4105. scope = EX(func)->op_array.scope;
  4106. if (clone->common.scope != scope) {
  4107. if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
  4108. || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
  4109. zend_wrong_clone_call(clone, scope);
  4110. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4111. HANDLE_EXCEPTION();
  4112. }
  4113. }
  4114. }
  4115. ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
  4116. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4117. }
  4118. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4119. {
  4120. USE_OPLINE
  4121. zval *expr;
  4122. zval *result = EX_VAR(opline->result.var);
  4123. HashTable *ht;
  4124. SAVE_OPLINE();
  4125. expr = RT_CONSTANT(opline, opline->op1);
  4126. switch (opline->extended_value) {
  4127. case IS_LONG:
  4128. ZVAL_LONG(result, zval_get_long(expr));
  4129. break;
  4130. case IS_DOUBLE:
  4131. ZVAL_DOUBLE(result, zval_get_double(expr));
  4132. break;
  4133. case IS_STRING:
  4134. ZVAL_STR(result, zval_get_string(expr));
  4135. break;
  4136. default:
  4137. ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
  4138. if (IS_CONST & (IS_VAR|IS_CV)) {
  4139. ZVAL_DEREF(expr);
  4140. }
  4141. /* If value is already of correct type, return it directly */
  4142. if (Z_TYPE_P(expr) == opline->extended_value) {
  4143. ZVAL_COPY_VALUE(result, expr);
  4144. if (IS_CONST == IS_CONST) {
  4145. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  4146. } else if (IS_CONST != IS_TMP_VAR) {
  4147. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  4148. }
  4149. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4150. }
  4151. if (opline->extended_value == IS_ARRAY) {
  4152. if (IS_CONST == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
  4153. if (Z_TYPE_P(expr) != IS_NULL) {
  4154. ZVAL_ARR(result, zend_new_array(1));
  4155. expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
  4156. if (IS_CONST == IS_CONST) {
  4157. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  4158. } else {
  4159. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  4160. }
  4161. } else {
  4162. ZVAL_EMPTY_ARRAY(result);
  4163. }
  4164. } else if (Z_OBJ_P(expr)->properties == NULL
  4165. && Z_OBJ_HT_P(expr)->get_properties_for == NULL
  4166. && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
  4167. /* Optimized version without rebuilding properties HashTable */
  4168. ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
  4169. } else {
  4170. HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
  4171. if (obj_ht) {
  4172. /* fast copy */
  4173. ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
  4174. (Z_OBJCE_P(expr)->default_properties_count ||
  4175. Z_OBJ_P(expr)->handlers != &std_object_handlers ||
  4176. GC_IS_RECURSIVE(obj_ht))));
  4177. zend_release_properties(obj_ht);
  4178. } else {
  4179. ZVAL_EMPTY_ARRAY(result);
  4180. }
  4181. }
  4182. } else {
  4183. ZEND_ASSERT(opline->extended_value == IS_OBJECT);
  4184. ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
  4185. if (Z_TYPE_P(expr) == IS_ARRAY) {
  4186. ht = zend_symtable_to_proptable(Z_ARR_P(expr));
  4187. if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
  4188. /* TODO: try not to duplicate immutable arrays as well ??? */
  4189. ht = zend_array_dup(ht);
  4190. }
  4191. Z_OBJ_P(result)->properties = ht;
  4192. } else if (Z_TYPE_P(expr) != IS_NULL) {
  4193. Z_OBJ_P(result)->properties = ht = zend_new_array(1);
  4194. expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
  4195. if (IS_CONST == IS_CONST) {
  4196. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  4197. } else {
  4198. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  4199. }
  4200. }
  4201. }
  4202. }
  4203. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4204. }
  4205. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4206. {
  4207. USE_OPLINE
  4208. zend_op_array *new_op_array;
  4209. zval *inc_filename;
  4210. SAVE_OPLINE();
  4211. inc_filename = RT_CONSTANT(opline, opline->op1);
  4212. new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
  4213. if (UNEXPECTED(EG(exception) != NULL)) {
  4214. if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
  4215. destroy_op_array(new_op_array);
  4216. efree_size(new_op_array, sizeof(zend_op_array));
  4217. }
  4218. UNDEF_RESULT();
  4219. HANDLE_EXCEPTION();
  4220. } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
  4221. if (RETURN_VALUE_USED(opline)) {
  4222. ZVAL_TRUE(EX_VAR(opline->result.var));
  4223. }
  4224. } else if (EXPECTED(new_op_array != NULL)) {
  4225. zval *return_value = NULL;
  4226. zend_execute_data *call;
  4227. if (RETURN_VALUE_USED(opline)) {
  4228. return_value = EX_VAR(opline->result.var);
  4229. }
  4230. new_op_array->scope = EX(func)->op_array.scope;
  4231. call = zend_vm_stack_push_call_frame(
  4232. (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
  4233. (zend_function*)new_op_array, 0,
  4234. Z_PTR(EX(This)));
  4235. if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
  4236. call->symbol_table = EX(symbol_table);
  4237. } else {
  4238. call->symbol_table = zend_rebuild_symbol_table();
  4239. }
  4240. call->prev_execute_data = execute_data;
  4241. i_init_code_execute_data(call, new_op_array, return_value);
  4242. if (EXPECTED(zend_execute_ex == execute_ex)) {
  4243. ZEND_VM_ENTER();
  4244. } else {
  4245. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  4246. zend_execute_ex(call);
  4247. zend_vm_stack_free_call_frame(call);
  4248. }
  4249. zend_destroy_static_vars(new_op_array);
  4250. destroy_op_array(new_op_array);
  4251. efree_size(new_op_array, sizeof(zend_op_array));
  4252. if (UNEXPECTED(EG(exception) != NULL)) {
  4253. zend_rethrow_exception(execute_data);
  4254. UNDEF_RESULT();
  4255. HANDLE_EXCEPTION();
  4256. }
  4257. } else if (RETURN_VALUE_USED(opline)) {
  4258. ZVAL_FALSE(EX_VAR(opline->result.var));
  4259. }
  4260. ZEND_VM_NEXT_OPCODE();
  4261. }
  4262. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4263. {
  4264. USE_OPLINE
  4265. zend_op_array *new_op_array;
  4266. zval *inc_filename;
  4267. SAVE_OPLINE();
  4268. inc_filename = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
  4269. new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
  4270. if (UNEXPECTED(EG(exception) != NULL)) {
  4271. FREE_OP(opline->op1_type, opline->op1.var);
  4272. if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
  4273. destroy_op_array(new_op_array);
  4274. efree_size(new_op_array, sizeof(zend_op_array));
  4275. }
  4276. UNDEF_RESULT();
  4277. HANDLE_EXCEPTION();
  4278. } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
  4279. if (RETURN_VALUE_USED(opline)) {
  4280. ZVAL_TRUE(EX_VAR(opline->result.var));
  4281. }
  4282. } else if (EXPECTED(new_op_array != NULL)) {
  4283. zval *return_value = NULL;
  4284. zend_execute_data *call;
  4285. if (RETURN_VALUE_USED(opline)) {
  4286. return_value = EX_VAR(opline->result.var);
  4287. }
  4288. new_op_array->scope = EX(func)->op_array.scope;
  4289. call = zend_vm_stack_push_call_frame(
  4290. (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
  4291. (zend_function*)new_op_array, 0,
  4292. Z_PTR(EX(This)));
  4293. if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
  4294. call->symbol_table = EX(symbol_table);
  4295. } else {
  4296. call->symbol_table = zend_rebuild_symbol_table();
  4297. }
  4298. call->prev_execute_data = execute_data;
  4299. i_init_code_execute_data(call, new_op_array, return_value);
  4300. zend_observer_fcall_begin(call);
  4301. if (EXPECTED(zend_execute_ex == execute_ex)) {
  4302. FREE_OP(opline->op1_type, opline->op1.var);
  4303. ZEND_VM_ENTER();
  4304. } else {
  4305. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  4306. zend_execute_ex(call);
  4307. zend_vm_stack_free_call_frame(call);
  4308. }
  4309. zend_destroy_static_vars(new_op_array);
  4310. destroy_op_array(new_op_array);
  4311. efree_size(new_op_array, sizeof(zend_op_array));
  4312. if (UNEXPECTED(EG(exception) != NULL)) {
  4313. zend_rethrow_exception(execute_data);
  4314. FREE_OP(opline->op1_type, opline->op1.var);
  4315. UNDEF_RESULT();
  4316. HANDLE_EXCEPTION();
  4317. }
  4318. } else if (RETURN_VALUE_USED(opline)) {
  4319. ZVAL_FALSE(EX_VAR(opline->result.var));
  4320. }
  4321. FREE_OP(opline->op1_type, opline->op1.var);
  4322. ZEND_VM_NEXT_OPCODE();
  4323. }
  4324. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4325. {
  4326. USE_OPLINE
  4327. zval *array_ptr, *result;
  4328. SAVE_OPLINE();
  4329. array_ptr = RT_CONSTANT(opline, opline->op1);
  4330. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  4331. result = EX_VAR(opline->result.var);
  4332. ZVAL_COPY_VALUE(result, array_ptr);
  4333. if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
  4334. Z_ADDREF_P(array_ptr);
  4335. }
  4336. Z_FE_POS_P(result) = 0;
  4337. ZEND_VM_NEXT_OPCODE();
  4338. } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  4339. zend_object *zobj = Z_OBJ_P(array_ptr);
  4340. if (!zobj->ce->get_iterator) {
  4341. HashTable *properties = zobj->properties;
  4342. if (properties) {
  4343. if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
  4344. if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
  4345. GC_DELREF(properties);
  4346. }
  4347. properties = zobj->properties = zend_array_dup(properties);
  4348. }
  4349. } else {
  4350. properties = zobj->handlers->get_properties(zobj);
  4351. }
  4352. result = EX_VAR(opline->result.var);
  4353. ZVAL_COPY_VALUE(result, array_ptr);
  4354. if (IS_CONST != IS_TMP_VAR) {
  4355. Z_ADDREF_P(array_ptr);
  4356. }
  4357. if (zend_hash_num_elements(properties) == 0) {
  4358. Z_FE_ITER_P(result) = (uint32_t) -1;
  4359. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  4360. }
  4361. Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
  4362. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4363. } else {
  4364. bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
  4365. if (UNEXPECTED(EG(exception))) {
  4366. HANDLE_EXCEPTION();
  4367. } else if (is_empty) {
  4368. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  4369. } else {
  4370. ZEND_VM_NEXT_OPCODE();
  4371. }
  4372. }
  4373. } else {
  4374. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
  4375. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4376. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  4377. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  4378. }
  4379. }
  4380. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4381. {
  4382. USE_OPLINE
  4383. zval *array_ptr, *array_ref;
  4384. SAVE_OPLINE();
  4385. if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
  4386. array_ref = array_ptr = NULL;
  4387. if (Z_ISREF_P(array_ref)) {
  4388. array_ptr = Z_REFVAL_P(array_ref);
  4389. }
  4390. } else {
  4391. array_ref = array_ptr = RT_CONSTANT(opline, opline->op1);
  4392. }
  4393. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  4394. if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
  4395. if (array_ptr == array_ref) {
  4396. ZVAL_NEW_REF(array_ref, array_ref);
  4397. array_ptr = Z_REFVAL_P(array_ref);
  4398. }
  4399. Z_ADDREF_P(array_ref);
  4400. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  4401. } else {
  4402. array_ref = EX_VAR(opline->result.var);
  4403. ZVAL_NEW_REF(array_ref, array_ptr);
  4404. array_ptr = Z_REFVAL_P(array_ref);
  4405. }
  4406. if (IS_CONST == IS_CONST) {
  4407. ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
  4408. } else {
  4409. SEPARATE_ARRAY(array_ptr);
  4410. }
  4411. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
  4412. if (IS_CONST == IS_VAR) {
  4413. }
  4414. ZEND_VM_NEXT_OPCODE();
  4415. } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  4416. if (!Z_OBJCE_P(array_ptr)->get_iterator) {
  4417. HashTable *properties;
  4418. if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
  4419. if (array_ptr == array_ref) {
  4420. ZVAL_NEW_REF(array_ref, array_ref);
  4421. array_ptr = Z_REFVAL_P(array_ref);
  4422. }
  4423. Z_ADDREF_P(array_ref);
  4424. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  4425. } else {
  4426. array_ptr = EX_VAR(opline->result.var);
  4427. ZVAL_COPY_VALUE(array_ptr, array_ref);
  4428. }
  4429. if (Z_OBJ_P(array_ptr)->properties
  4430. && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
  4431. if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
  4432. GC_DELREF(Z_OBJ_P(array_ptr)->properties);
  4433. }
  4434. Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
  4435. }
  4436. properties = Z_OBJPROP_P(array_ptr);
  4437. if (zend_hash_num_elements(properties) == 0) {
  4438. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
  4439. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  4440. }
  4441. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
  4442. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4443. } else {
  4444. bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
  4445. if (IS_CONST == IS_VAR) {
  4446. } else {
  4447. }
  4448. if (UNEXPECTED(EG(exception))) {
  4449. HANDLE_EXCEPTION();
  4450. } else if (is_empty) {
  4451. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  4452. } else {
  4453. ZEND_VM_NEXT_OPCODE();
  4454. }
  4455. }
  4456. } else {
  4457. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
  4458. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4459. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  4460. if (IS_CONST == IS_VAR) {
  4461. } else {
  4462. }
  4463. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  4464. }
  4465. }
  4466. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4467. {
  4468. USE_OPLINE
  4469. zval *value;
  4470. zend_reference *ref = NULL;
  4471. bool ret;
  4472. SAVE_OPLINE();
  4473. value = RT_CONSTANT(opline, opline->op1);
  4474. if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) {
  4475. if (IS_CONST == IS_VAR) {
  4476. ref = Z_REF_P(value);
  4477. }
  4478. value = Z_REFVAL_P(value);
  4479. }
  4480. ret = i_zend_is_true(value);
  4481. if (UNEXPECTED(EG(exception))) {
  4482. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4483. HANDLE_EXCEPTION();
  4484. }
  4485. if (ret) {
  4486. zval *result = EX_VAR(opline->result.var);
  4487. ZVAL_COPY_VALUE(result, value);
  4488. if (IS_CONST == IS_CONST) {
  4489. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  4490. } else if (IS_CONST == IS_CV) {
  4491. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  4492. } else if (IS_CONST == IS_VAR && ref) {
  4493. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  4494. efree_size(ref, sizeof(zend_reference));
  4495. } else if (Z_OPT_REFCOUNTED_P(result)) {
  4496. Z_ADDREF_P(result);
  4497. }
  4498. }
  4499. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  4500. }
  4501. ZEND_VM_NEXT_OPCODE();
  4502. }
  4503. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4504. {
  4505. USE_OPLINE
  4506. zval *value;
  4507. zend_reference *ref = NULL;
  4508. SAVE_OPLINE();
  4509. value = RT_CONSTANT(opline, opline->op1);
  4510. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  4511. if (IS_CONST & IS_VAR) {
  4512. ref = Z_REF_P(value);
  4513. }
  4514. value = Z_REFVAL_P(value);
  4515. }
  4516. if (Z_TYPE_P(value) > IS_NULL) {
  4517. zval *result = EX_VAR(opline->result.var);
  4518. ZVAL_COPY_VALUE(result, value);
  4519. if (IS_CONST == IS_CONST) {
  4520. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  4521. } else if (IS_CONST == IS_CV) {
  4522. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  4523. } else if ((IS_CONST & IS_VAR) && ref) {
  4524. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  4525. efree_size(ref, sizeof(zend_reference));
  4526. } else if (Z_OPT_REFCOUNTED_P(result)) {
  4527. Z_ADDREF_P(result);
  4528. }
  4529. }
  4530. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  4531. }
  4532. if ((IS_CONST & IS_VAR) && ref) {
  4533. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  4534. efree_size(ref, sizeof(zend_reference));
  4535. }
  4536. }
  4537. ZEND_VM_NEXT_OPCODE();
  4538. }
  4539. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4540. {
  4541. USE_OPLINE
  4542. zval *val, *result;
  4543. val = RT_CONSTANT(opline, opline->op1);
  4544. if (Z_TYPE_P(val) > IS_NULL) {
  4545. do {
  4546. if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
  4547. val = Z_REFVAL_P(val);
  4548. if (Z_TYPE_P(val) <= IS_NULL) {
  4549. break;
  4550. }
  4551. }
  4552. ZEND_VM_NEXT_OPCODE();
  4553. } while (0);
  4554. }
  4555. result = EX_VAR(opline->result.var);
  4556. if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
  4557. ZVAL_NULL(result);
  4558. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
  4559. SAVE_OPLINE();
  4560. ZVAL_UNDEFINED_OP1();
  4561. if (UNEXPECTED(EG(exception) != NULL)) {
  4562. HANDLE_EXCEPTION();
  4563. }
  4564. }
  4565. } else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
  4566. ZVAL_FALSE(result);
  4567. } else {
  4568. ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
  4569. ZVAL_TRUE(result);
  4570. }
  4571. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  4572. }
  4573. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4574. {
  4575. USE_OPLINE
  4576. zval *value;
  4577. zval *result = EX_VAR(opline->result.var);
  4578. value = RT_CONSTANT(opline, opline->op1);
  4579. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  4580. SAVE_OPLINE();
  4581. ZVAL_UNDEFINED_OP1();
  4582. ZVAL_NULL(result);
  4583. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4584. }
  4585. if (IS_CONST == IS_CV) {
  4586. ZVAL_COPY_DEREF(result, value);
  4587. } else if (IS_CONST == IS_VAR) {
  4588. if (UNEXPECTED(Z_ISREF_P(value))) {
  4589. ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
  4590. if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
  4591. efree_size(Z_REF_P(value), sizeof(zend_reference));
  4592. } else if (Z_OPT_REFCOUNTED_P(result)) {
  4593. Z_ADDREF_P(result);
  4594. }
  4595. } else {
  4596. ZVAL_COPY_VALUE(result, value);
  4597. }
  4598. } else {
  4599. ZVAL_COPY_VALUE(result, value);
  4600. if (IS_CONST == IS_CONST) {
  4601. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
  4602. Z_ADDREF_P(result);
  4603. }
  4604. }
  4605. }
  4606. ZEND_VM_NEXT_OPCODE();
  4607. }
  4608. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4609. {
  4610. USE_OPLINE
  4611. SAVE_OPLINE();
  4612. do_bind_class(RT_CONSTANT(opline, opline->op1), (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
  4613. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4614. }
  4615. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4616. {
  4617. USE_OPLINE
  4618. zend_function *func;
  4619. zval *object;
  4620. zend_class_entry *called_scope;
  4621. func = (zend_function *) EX(func)->op_array.dynamic_func_defs[opline->op2.num];
  4622. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  4623. called_scope = Z_OBJCE(EX(This));
  4624. if (UNEXPECTED((func->common.fn_flags & ZEND_ACC_STATIC) ||
  4625. (EX(func)->common.fn_flags & ZEND_ACC_STATIC))) {
  4626. object = NULL;
  4627. } else {
  4628. object = &EX(This);
  4629. }
  4630. } else {
  4631. called_scope = Z_CE(EX(This));
  4632. object = NULL;
  4633. }
  4634. zend_create_closure(EX_VAR(opline->result.var), func,
  4635. EX(func)->op_array.scope, called_scope, object);
  4636. ZEND_VM_NEXT_OPCODE();
  4637. }
  4638. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4639. {
  4640. USE_OPLINE
  4641. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  4642. zval *val;
  4643. SAVE_OPLINE();
  4644. val = RT_CONSTANT(opline, opline->op1);
  4645. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  4646. zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
  4647. UNDEF_RESULT();
  4648. HANDLE_EXCEPTION();
  4649. }
  4650. yield_from_try_again:
  4651. if (Z_TYPE_P(val) == IS_ARRAY) {
  4652. ZVAL_COPY_VALUE(&generator->values, val);
  4653. if (Z_OPT_REFCOUNTED_P(val)) {
  4654. Z_ADDREF_P(val);
  4655. }
  4656. Z_FE_POS(generator->values) = 0;
  4657. } else if (IS_CONST != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
  4658. zend_class_entry *ce = Z_OBJCE_P(val);
  4659. if (ce == zend_ce_generator) {
  4660. zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
  4661. Z_ADDREF_P(val);
  4662. if (UNEXPECTED(new_gen->execute_data == NULL)) {
  4663. zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
  4664. zval_ptr_dtor(val);
  4665. UNDEF_RESULT();
  4666. HANDLE_EXCEPTION();
  4667. } else if (Z_ISUNDEF(new_gen->retval)) {
  4668. if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
  4669. zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
  4670. zval_ptr_dtor(val);
  4671. UNDEF_RESULT();
  4672. HANDLE_EXCEPTION();
  4673. } else {
  4674. zend_generator_yield_from(generator, new_gen);
  4675. }
  4676. } else {
  4677. if (RETURN_VALUE_USED(opline)) {
  4678. ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
  4679. }
  4680. ZEND_VM_NEXT_OPCODE();
  4681. }
  4682. } else {
  4683. zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
  4684. if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
  4685. if (!EG(exception)) {
  4686. zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
  4687. }
  4688. UNDEF_RESULT();
  4689. HANDLE_EXCEPTION();
  4690. }
  4691. iter->index = 0;
  4692. if (iter->funcs->rewind) {
  4693. iter->funcs->rewind(iter);
  4694. if (UNEXPECTED(EG(exception) != NULL)) {
  4695. OBJ_RELEASE(&iter->std);
  4696. UNDEF_RESULT();
  4697. HANDLE_EXCEPTION();
  4698. }
  4699. }
  4700. ZVAL_OBJ(&generator->values, &iter->std);
  4701. }
  4702. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
  4703. val = Z_REFVAL_P(val);
  4704. goto yield_from_try_again;
  4705. } else {
  4706. zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
  4707. UNDEF_RESULT();
  4708. HANDLE_EXCEPTION();
  4709. }
  4710. /* This is the default return value
  4711. * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
  4712. if (RETURN_VALUE_USED(opline)) {
  4713. ZVAL_NULL(EX_VAR(opline->result.var));
  4714. }
  4715. /* This generator has no send target (though the generator we delegate to might have one) */
  4716. generator->send_target = NULL;
  4717. /* We increment to the next op, so we are at the correct position when the
  4718. * generator is resumed. */
  4719. ZEND_VM_INC_OPCODE();
  4720. /* The GOTO VM uses a local opline variable. We need to set the opline
  4721. * variable in execute_data so we don't resume at an old position. */
  4722. SAVE_OPLINE();
  4723. ZEND_VM_RETURN();
  4724. }
  4725. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4726. {
  4727. USE_OPLINE
  4728. zval *value;
  4729. value = RT_CONSTANT(opline, opline->op1);
  4730. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  4731. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  4732. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  4733. zval_ptr_dtor_str(value);
  4734. }
  4735. ZEND_VM_NEXT_OPCODE();
  4736. } else {
  4737. bool strict;
  4738. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
  4739. value = Z_REFVAL_P(value);
  4740. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  4741. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  4742. ZEND_VM_NEXT_OPCODE();
  4743. }
  4744. }
  4745. SAVE_OPLINE();
  4746. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  4747. value = ZVAL_UNDEFINED_OP1();
  4748. }
  4749. strict = EX_USES_STRICT_TYPES();
  4750. do {
  4751. if (EXPECTED(!strict)) {
  4752. zend_string *str;
  4753. zval tmp;
  4754. if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
  4755. zend_error(E_DEPRECATED,
  4756. "strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
  4757. ZVAL_LONG(EX_VAR(opline->result.var), 0);
  4758. if (UNEXPECTED(EG(exception))) {
  4759. HANDLE_EXCEPTION();
  4760. }
  4761. break;
  4762. }
  4763. ZVAL_COPY(&tmp, value);
  4764. if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
  4765. ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
  4766. zval_ptr_dtor(&tmp);
  4767. break;
  4768. }
  4769. zval_ptr_dtor(&tmp);
  4770. }
  4771. if (!EG(exception)) {
  4772. zend_type_error("strlen(): Argument #1 ($str) must be of type string, %s given", zend_zval_type_name(value));
  4773. }
  4774. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4775. } while (0);
  4776. }
  4777. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4778. }
  4779. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4780. {
  4781. USE_OPLINE
  4782. zval *value;
  4783. int result = 0;
  4784. value = RT_CONSTANT(opline, opline->op1);
  4785. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  4786. type_check_resource:
  4787. if (opline->extended_value != MAY_BE_RESOURCE
  4788. || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
  4789. result = 1;
  4790. }
  4791. } else if ((IS_CONST & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
  4792. value = Z_REFVAL_P(value);
  4793. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  4794. goto type_check_resource;
  4795. }
  4796. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  4797. result = ((1 << IS_NULL) & opline->extended_value) != 0;
  4798. SAVE_OPLINE();
  4799. ZVAL_UNDEFINED_OP1();
  4800. if (UNEXPECTED(EG(exception))) {
  4801. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4802. HANDLE_EXCEPTION();
  4803. }
  4804. }
  4805. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  4806. SAVE_OPLINE();
  4807. ZEND_VM_SMART_BRANCH(result, 1);
  4808. } else {
  4809. ZEND_VM_SMART_BRANCH(result, 0);
  4810. }
  4811. }
  4812. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4813. {
  4814. USE_OPLINE
  4815. zend_constant *c;
  4816. c = CACHED_PTR(opline->extended_value);
  4817. if (EXPECTED(c != NULL)) {
  4818. if (!IS_SPECIAL_CACHE_VAL(c)) {
  4819. defined_true:
  4820. ZEND_VM_SMART_BRANCH_TRUE();
  4821. } else if (EXPECTED(zend_hash_num_elements(EG(zend_constants)) == DECODE_SPECIAL_CACHE_NUM(c))) {
  4822. defined_false:
  4823. ZEND_VM_SMART_BRANCH_FALSE();
  4824. }
  4825. }
  4826. if (zend_quick_check_constant(RT_CONSTANT(opline, opline->op1) OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
  4827. CACHE_PTR(opline->extended_value, ENCODE_SPECIAL_CACHE_NUM(zend_hash_num_elements(EG(zend_constants))));
  4828. goto defined_false;
  4829. } else {
  4830. goto defined_true;
  4831. }
  4832. }
  4833. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4834. {
  4835. USE_OPLINE
  4836. zval *value;
  4837. value = RT_CONSTANT(opline, opline->op1);
  4838. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
  4839. ZEND_VM_NEXT_OPCODE();
  4840. }
  4841. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4842. {
  4843. USE_OPLINE
  4844. zval *value;
  4845. value = RT_CONSTANT(opline, opline->op1);
  4846. ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
  4847. ZEND_VM_NEXT_OPCODE();
  4848. }
  4849. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4850. {
  4851. USE_OPLINE
  4852. zval *value;
  4853. value = RT_CONSTANT(opline, opline->op1);
  4854. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
  4855. ZEND_VM_NEXT_OPCODE();
  4856. }
  4857. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4858. {
  4859. USE_OPLINE
  4860. zval *value, *arg;
  4861. value = RT_CONSTANT(opline, opline->op1);
  4862. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  4863. ZVAL_COPY_VALUE(arg, value);
  4864. ZEND_VM_NEXT_OPCODE();
  4865. }
  4866. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4867. {
  4868. USE_OPLINE
  4869. zval *value, *arg;
  4870. uint32_t arg_num = opline->op2.num;
  4871. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  4872. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  4873. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  4874. }
  4875. value = RT_CONSTANT(opline, opline->op1);
  4876. ZVAL_COPY_VALUE(arg, value);
  4877. ZEND_VM_NEXT_OPCODE();
  4878. }
  4879. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4880. {
  4881. USE_OPLINE
  4882. zval *op1, *op2, *result;
  4883. double d1, d2;
  4884. op1 = RT_CONSTANT(opline, opline->op1);
  4885. op2 = RT_CONSTANT(opline, opline->op2);
  4886. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  4887. /* pass */
  4888. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  4889. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  4890. result = EX_VAR(opline->result.var);
  4891. fast_long_add_function(result, op1, op2);
  4892. ZEND_VM_NEXT_OPCODE();
  4893. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  4894. d1 = (double)Z_LVAL_P(op1);
  4895. d2 = Z_DVAL_P(op2);
  4896. goto add_double;
  4897. }
  4898. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  4899. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  4900. d1 = Z_DVAL_P(op1);
  4901. d2 = Z_DVAL_P(op2);
  4902. add_double:
  4903. result = EX_VAR(opline->result.var);
  4904. ZVAL_DOUBLE(result, d1 + d2);
  4905. ZEND_VM_NEXT_OPCODE();
  4906. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  4907. d1 = Z_DVAL_P(op1);
  4908. d2 = (double)Z_LVAL_P(op2);
  4909. goto add_double;
  4910. }
  4911. }
  4912. ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  4913. }
  4914. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4915. {
  4916. USE_OPLINE
  4917. zval *op1, *op2, *result;
  4918. double d1, d2;
  4919. op1 = RT_CONSTANT(opline, opline->op1);
  4920. op2 = RT_CONSTANT(opline, opline->op2);
  4921. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  4922. /* pass */
  4923. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  4924. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  4925. result = EX_VAR(opline->result.var);
  4926. fast_long_sub_function(result, op1, op2);
  4927. ZEND_VM_NEXT_OPCODE();
  4928. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  4929. d1 = (double)Z_LVAL_P(op1);
  4930. d2 = Z_DVAL_P(op2);
  4931. goto sub_double;
  4932. }
  4933. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  4934. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  4935. d1 = Z_DVAL_P(op1);
  4936. d2 = Z_DVAL_P(op2);
  4937. sub_double:
  4938. result = EX_VAR(opline->result.var);
  4939. ZVAL_DOUBLE(result, d1 - d2);
  4940. ZEND_VM_NEXT_OPCODE();
  4941. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  4942. d1 = Z_DVAL_P(op1);
  4943. d2 = (double)Z_LVAL_P(op2);
  4944. goto sub_double;
  4945. }
  4946. }
  4947. ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  4948. }
  4949. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4950. {
  4951. USE_OPLINE
  4952. zval *op1, *op2, *result;
  4953. double d1, d2;
  4954. op1 = RT_CONSTANT(opline, opline->op1);
  4955. op2 = RT_CONSTANT(opline, opline->op2);
  4956. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  4957. /* pass */
  4958. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  4959. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  4960. zend_long overflow;
  4961. result = EX_VAR(opline->result.var);
  4962. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  4963. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  4964. ZEND_VM_NEXT_OPCODE();
  4965. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  4966. d1 = (double)Z_LVAL_P(op1);
  4967. d2 = Z_DVAL_P(op2);
  4968. goto mul_double;
  4969. }
  4970. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  4971. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  4972. d1 = Z_DVAL_P(op1);
  4973. d2 = Z_DVAL_P(op2);
  4974. mul_double:
  4975. result = EX_VAR(opline->result.var);
  4976. ZVAL_DOUBLE(result, d1 * d2);
  4977. ZEND_VM_NEXT_OPCODE();
  4978. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  4979. d1 = Z_DVAL_P(op1);
  4980. d2 = (double)Z_LVAL_P(op2);
  4981. goto mul_double;
  4982. }
  4983. }
  4984. ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  4985. }
  4986. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4987. {
  4988. USE_OPLINE
  4989. zval *op1, *op2;
  4990. SAVE_OPLINE();
  4991. op1 = RT_CONSTANT(opline, opline->op1);
  4992. op2 = RT_CONSTANT(opline, opline->op2);
  4993. div_function(EX_VAR(opline->result.var), op1, op2);
  4994. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4995. }
  4996. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4997. {
  4998. USE_OPLINE
  4999. zval *op1, *op2, *result;
  5000. op1 = RT_CONSTANT(opline, opline->op1);
  5001. op2 = RT_CONSTANT(opline, opline->op2);
  5002. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  5003. /* pass */
  5004. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  5005. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5006. result = EX_VAR(opline->result.var);
  5007. if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
  5008. ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5009. } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
  5010. /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
  5011. ZVAL_LONG(result, 0);
  5012. } else {
  5013. ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
  5014. }
  5015. ZEND_VM_NEXT_OPCODE();
  5016. }
  5017. }
  5018. ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5019. }
  5020. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5021. {
  5022. USE_OPLINE
  5023. zval *op1, *op2;
  5024. op1 = RT_CONSTANT(opline, opline->op1);
  5025. op2 = RT_CONSTANT(opline, opline->op2);
  5026. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  5027. /* pass */
  5028. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  5029. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  5030. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  5031. /* Perform shift on unsigned numbers to get well-defined wrap behavior. */
  5032. ZVAL_LONG(EX_VAR(opline->result.var),
  5033. (zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
  5034. ZEND_VM_NEXT_OPCODE();
  5035. }
  5036. ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5037. }
  5038. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5039. {
  5040. USE_OPLINE
  5041. zval *op1, *op2;
  5042. op1 = RT_CONSTANT(opline, opline->op1);
  5043. op2 = RT_CONSTANT(opline, opline->op2);
  5044. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  5045. /* pass */
  5046. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  5047. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  5048. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  5049. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
  5050. ZEND_VM_NEXT_OPCODE();
  5051. }
  5052. ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5053. }
  5054. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5055. {
  5056. USE_OPLINE
  5057. zval *op1, *op2;
  5058. SAVE_OPLINE();
  5059. op1 = RT_CONSTANT(opline, opline->op1);
  5060. op2 = RT_CONSTANT(opline, opline->op2);
  5061. pow_function(EX_VAR(opline->result.var), op1, op2);
  5062. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5063. }
  5064. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5065. {
  5066. USE_OPLINE
  5067. zval *op1, *op2;
  5068. bool result;
  5069. SAVE_OPLINE();
  5070. op1 = RT_CONSTANT(opline, opline->op1);
  5071. op2 = RT_CONSTANT(opline, opline->op2);
  5072. result = fast_is_identical_function(op1, op2);
  5073. ZEND_VM_SMART_BRANCH(result, 1);
  5074. }
  5075. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5076. {
  5077. USE_OPLINE
  5078. zval *op1, *op2;
  5079. bool result;
  5080. SAVE_OPLINE();
  5081. op1 = RT_CONSTANT(opline, opline->op1);
  5082. op2 = RT_CONSTANT(opline, opline->op2);
  5083. result = fast_is_not_identical_function(op1, op2);
  5084. ZEND_VM_SMART_BRANCH(result, 1);
  5085. }
  5086. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5087. {
  5088. USE_OPLINE
  5089. zval *op1, *op2;
  5090. double d1, d2;
  5091. op1 = RT_CONSTANT(opline, opline->op1);
  5092. op2 = RT_CONSTANT(opline, opline->op2);
  5093. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  5094. /* pass */
  5095. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  5096. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  5097. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  5098. is_equal_true:
  5099. ZEND_VM_SMART_BRANCH_TRUE();
  5100. } else {
  5101. is_equal_false:
  5102. ZEND_VM_SMART_BRANCH_FALSE();
  5103. }
  5104. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  5105. d1 = (double)Z_LVAL_P(op1);
  5106. d2 = Z_DVAL_P(op2);
  5107. goto is_equal_double;
  5108. }
  5109. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  5110. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  5111. d1 = Z_DVAL_P(op1);
  5112. d2 = Z_DVAL_P(op2);
  5113. is_equal_double:
  5114. if (d1 == d2) {
  5115. goto is_equal_true;
  5116. } else {
  5117. goto is_equal_false;
  5118. }
  5119. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  5120. d1 = Z_DVAL_P(op1);
  5121. d2 = (double)Z_LVAL_P(op2);
  5122. goto is_equal_double;
  5123. }
  5124. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  5125. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  5126. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  5127. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5128. zval_ptr_dtor_str(op1);
  5129. }
  5130. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5131. zval_ptr_dtor_str(op2);
  5132. }
  5133. if (result) {
  5134. goto is_equal_true;
  5135. } else {
  5136. goto is_equal_false;
  5137. }
  5138. }
  5139. }
  5140. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5141. }
  5142. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5143. {
  5144. USE_OPLINE
  5145. zval *op1, *op2;
  5146. double d1, d2;
  5147. op1 = RT_CONSTANT(opline, opline->op1);
  5148. op2 = RT_CONSTANT(opline, opline->op2);
  5149. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  5150. /* pass */
  5151. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  5152. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  5153. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  5154. is_not_equal_true:
  5155. ZEND_VM_SMART_BRANCH_TRUE();
  5156. } else {
  5157. is_not_equal_false:
  5158. ZEND_VM_SMART_BRANCH_FALSE();
  5159. }
  5160. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  5161. d1 = (double)Z_LVAL_P(op1);
  5162. d2 = Z_DVAL_P(op2);
  5163. goto is_not_equal_double;
  5164. }
  5165. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  5166. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  5167. d1 = Z_DVAL_P(op1);
  5168. d2 = Z_DVAL_P(op2);
  5169. is_not_equal_double:
  5170. if (d1 != d2) {
  5171. goto is_not_equal_true;
  5172. } else {
  5173. goto is_not_equal_false;
  5174. }
  5175. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  5176. d1 = Z_DVAL_P(op1);
  5177. d2 = (double)Z_LVAL_P(op2);
  5178. goto is_not_equal_double;
  5179. }
  5180. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  5181. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  5182. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  5183. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5184. zval_ptr_dtor_str(op1);
  5185. }
  5186. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5187. zval_ptr_dtor_str(op2);
  5188. }
  5189. if (!result) {
  5190. goto is_not_equal_true;
  5191. } else {
  5192. goto is_not_equal_false;
  5193. }
  5194. }
  5195. }
  5196. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5197. }
  5198. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5199. {
  5200. USE_OPLINE
  5201. zval *op1, *op2;
  5202. double d1, d2;
  5203. op1 = RT_CONSTANT(opline, opline->op1);
  5204. op2 = RT_CONSTANT(opline, opline->op2);
  5205. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  5206. /* pass */
  5207. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  5208. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5209. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  5210. is_smaller_true:
  5211. ZEND_VM_SMART_BRANCH_TRUE();
  5212. } else {
  5213. is_smaller_false:
  5214. ZEND_VM_SMART_BRANCH_FALSE();
  5215. }
  5216. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  5217. d1 = (double)Z_LVAL_P(op1);
  5218. d2 = Z_DVAL_P(op2);
  5219. goto is_smaller_double;
  5220. }
  5221. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  5222. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  5223. d1 = Z_DVAL_P(op1);
  5224. d2 = Z_DVAL_P(op2);
  5225. is_smaller_double:
  5226. if (d1 < d2) {
  5227. goto is_smaller_true;
  5228. } else {
  5229. goto is_smaller_false;
  5230. }
  5231. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5232. d1 = Z_DVAL_P(op1);
  5233. d2 = (double)Z_LVAL_P(op2);
  5234. goto is_smaller_double;
  5235. }
  5236. }
  5237. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5238. }
  5239. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5240. {
  5241. USE_OPLINE
  5242. zval *op1, *op2;
  5243. double d1, d2;
  5244. op1 = RT_CONSTANT(opline, opline->op1);
  5245. op2 = RT_CONSTANT(opline, opline->op2);
  5246. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  5247. /* pass */
  5248. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  5249. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5250. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  5251. is_smaller_or_equal_true:
  5252. ZEND_VM_SMART_BRANCH_TRUE();
  5253. ZVAL_TRUE(EX_VAR(opline->result.var));
  5254. ZEND_VM_NEXT_OPCODE();
  5255. } else {
  5256. is_smaller_or_equal_false:
  5257. ZEND_VM_SMART_BRANCH_FALSE();
  5258. ZVAL_FALSE(EX_VAR(opline->result.var));
  5259. ZEND_VM_NEXT_OPCODE();
  5260. }
  5261. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  5262. d1 = (double)Z_LVAL_P(op1);
  5263. d2 = Z_DVAL_P(op2);
  5264. goto is_smaller_or_equal_double;
  5265. }
  5266. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  5267. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  5268. d1 = Z_DVAL_P(op1);
  5269. d2 = Z_DVAL_P(op2);
  5270. is_smaller_or_equal_double:
  5271. if (d1 <= d2) {
  5272. goto is_smaller_or_equal_true;
  5273. } else {
  5274. goto is_smaller_or_equal_false;
  5275. }
  5276. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5277. d1 = Z_DVAL_P(op1);
  5278. d2 = (double)Z_LVAL_P(op2);
  5279. goto is_smaller_or_equal_double;
  5280. }
  5281. }
  5282. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5283. }
  5284. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5285. {
  5286. USE_OPLINE
  5287. zval *op1, *op2;
  5288. SAVE_OPLINE();
  5289. op1 = RT_CONSTANT(opline, opline->op1);
  5290. op2 = RT_CONSTANT(opline, opline->op2);
  5291. compare_function(EX_VAR(opline->result.var), op1, op2);
  5292. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5293. }
  5294. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5295. {
  5296. USE_OPLINE
  5297. zval *op1, *op2;
  5298. op1 = RT_CONSTANT(opline, opline->op1);
  5299. op2 = RT_CONSTANT(opline, opline->op2);
  5300. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  5301. /* pass */
  5302. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  5303. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5304. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
  5305. ZEND_VM_NEXT_OPCODE();
  5306. }
  5307. ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5308. }
  5309. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5310. {
  5311. USE_OPLINE
  5312. zval *op1, *op2;
  5313. op1 = RT_CONSTANT(opline, opline->op1);
  5314. op2 = RT_CONSTANT(opline, opline->op2);
  5315. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  5316. /* pass */
  5317. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  5318. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5319. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
  5320. ZEND_VM_NEXT_OPCODE();
  5321. }
  5322. ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5323. }
  5324. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5325. {
  5326. USE_OPLINE
  5327. zval *op1, *op2;
  5328. op1 = RT_CONSTANT(opline, opline->op1);
  5329. op2 = RT_CONSTANT(opline, opline->op2);
  5330. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  5331. /* pass */
  5332. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  5333. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5334. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
  5335. ZEND_VM_NEXT_OPCODE();
  5336. }
  5337. ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5338. }
  5339. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5340. {
  5341. USE_OPLINE
  5342. zval *op1, *op2;
  5343. SAVE_OPLINE();
  5344. op1 = RT_CONSTANT(opline, opline->op1);
  5345. op2 = RT_CONSTANT(opline, opline->op2);
  5346. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  5347. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5348. }
  5349. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5350. {
  5351. USE_OPLINE
  5352. zval *container, *dim, *value;
  5353. SAVE_OPLINE();
  5354. container = RT_CONSTANT(opline, opline->op1);
  5355. dim = RT_CONSTANT(opline, opline->op2);
  5356. if (IS_CONST != IS_CONST) {
  5357. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  5358. fetch_dim_r_array:
  5359. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
  5360. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  5361. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  5362. container = Z_REFVAL_P(container);
  5363. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  5364. goto fetch_dim_r_array;
  5365. } else {
  5366. goto fetch_dim_r_slow;
  5367. }
  5368. } else {
  5369. fetch_dim_r_slow:
  5370. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  5371. dim++;
  5372. }
  5373. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  5374. }
  5375. } else {
  5376. zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  5377. }
  5378. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5379. }
  5380. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5381. {
  5382. USE_OPLINE
  5383. zval *container;
  5384. SAVE_OPLINE();
  5385. container = RT_CONSTANT(opline, opline->op1);
  5386. zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  5387. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5388. }
  5389. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5390. {
  5391. #if 0
  5392. USE_OPLINE
  5393. #endif
  5394. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  5395. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  5396. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5397. }
  5398. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5399. } else {
  5400. if (IS_CONST == IS_UNUSED) {
  5401. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5402. }
  5403. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5404. }
  5405. }
  5406. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5407. {
  5408. USE_OPLINE
  5409. zval *container;
  5410. void **cache_slot = NULL;
  5411. SAVE_OPLINE();
  5412. container = RT_CONSTANT(opline, opline->op1);
  5413. if (IS_CONST == IS_CONST ||
  5414. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  5415. do {
  5416. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  5417. container = Z_REFVAL_P(container);
  5418. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  5419. break;
  5420. }
  5421. }
  5422. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  5423. ZVAL_UNDEFINED_OP1();
  5424. }
  5425. zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
  5426. ZVAL_NULL(EX_VAR(opline->result.var));
  5427. goto fetch_obj_r_finish;
  5428. } while (0);
  5429. }
  5430. /* here we are sure we are dealing with an object */
  5431. do {
  5432. zend_object *zobj = Z_OBJ_P(container);
  5433. zend_string *name, *tmp_name;
  5434. zval *retval;
  5435. if (IS_CONST == IS_CONST) {
  5436. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  5437. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  5438. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  5439. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  5440. retval = OBJ_PROP(zobj, prop_offset);
  5441. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  5442. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  5443. goto fetch_obj_r_copy;
  5444. } else {
  5445. fetch_obj_r_fast_copy:
  5446. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  5447. ZEND_VM_NEXT_OPCODE();
  5448. }
  5449. }
  5450. } else if (EXPECTED(zobj->properties != NULL)) {
  5451. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  5452. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  5453. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  5454. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  5455. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  5456. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  5457. (EXPECTED(p->key == name) ||
  5458. (EXPECTED(p->h == ZSTR_H(name)) &&
  5459. EXPECTED(p->key != NULL) &&
  5460. EXPECTED(zend_string_equal_content(p->key, name))))) {
  5461. retval = &p->val;
  5462. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  5463. goto fetch_obj_r_copy;
  5464. } else {
  5465. goto fetch_obj_r_fast_copy;
  5466. }
  5467. }
  5468. }
  5469. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  5470. }
  5471. retval = zend_hash_find_known_hash(zobj->properties, name);
  5472. if (EXPECTED(retval)) {
  5473. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  5474. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  5475. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  5476. goto fetch_obj_r_copy;
  5477. } else {
  5478. goto fetch_obj_r_fast_copy;
  5479. }
  5480. }
  5481. }
  5482. }
  5483. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  5484. } else {
  5485. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  5486. if (UNEXPECTED(!name)) {
  5487. ZVAL_UNDEF(EX_VAR(opline->result.var));
  5488. break;
  5489. }
  5490. }
  5491. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  5492. #if ZEND_DEBUG
  5493. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  5494. zend_verify_internal_read_property_type(zobj, name, retval);
  5495. }
  5496. #endif
  5497. if (IS_CONST != IS_CONST) {
  5498. zend_tmp_string_release(tmp_name);
  5499. }
  5500. if (retval != EX_VAR(opline->result.var)) {
  5501. fetch_obj_r_copy:
  5502. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  5503. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  5504. zend_unwrap_reference(retval);
  5505. }
  5506. } while (0);
  5507. fetch_obj_r_finish:
  5508. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5509. }
  5510. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5511. {
  5512. USE_OPLINE
  5513. zval *container;
  5514. void **cache_slot = NULL;
  5515. SAVE_OPLINE();
  5516. container = RT_CONSTANT(opline, opline->op1);
  5517. if (IS_CONST == IS_CONST ||
  5518. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  5519. do {
  5520. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  5521. container = Z_REFVAL_P(container);
  5522. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  5523. break;
  5524. }
  5525. }
  5526. if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  5527. ZVAL_UNDEFINED_OP2();
  5528. }
  5529. ZVAL_NULL(EX_VAR(opline->result.var));
  5530. goto fetch_obj_is_finish;
  5531. } while (0);
  5532. }
  5533. /* here we are sure we are dealing with an object */
  5534. do {
  5535. zend_object *zobj = Z_OBJ_P(container);
  5536. zend_string *name, *tmp_name;
  5537. zval *retval;
  5538. if (IS_CONST == IS_CONST) {
  5539. cache_slot = CACHE_ADDR(opline->extended_value);
  5540. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  5541. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  5542. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  5543. retval = OBJ_PROP(zobj, prop_offset);
  5544. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  5545. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  5546. goto fetch_obj_is_copy;
  5547. } else {
  5548. fetch_obj_is_fast_copy:
  5549. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  5550. ZEND_VM_NEXT_OPCODE();
  5551. }
  5552. }
  5553. } else if (EXPECTED(zobj->properties != NULL)) {
  5554. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  5555. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  5556. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  5557. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  5558. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  5559. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  5560. (EXPECTED(p->key == name) ||
  5561. (EXPECTED(p->h == ZSTR_H(name)) &&
  5562. EXPECTED(p->key != NULL) &&
  5563. EXPECTED(zend_string_equal_content(p->key, name))))) {
  5564. retval = &p->val;
  5565. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  5566. goto fetch_obj_is_copy;
  5567. } else {
  5568. goto fetch_obj_is_fast_copy;
  5569. }
  5570. }
  5571. }
  5572. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  5573. }
  5574. retval = zend_hash_find_known_hash(zobj->properties, name);
  5575. if (EXPECTED(retval)) {
  5576. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  5577. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  5578. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  5579. goto fetch_obj_is_copy;
  5580. } else {
  5581. goto fetch_obj_is_fast_copy;
  5582. }
  5583. }
  5584. }
  5585. }
  5586. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  5587. } else {
  5588. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  5589. if (UNEXPECTED(!name)) {
  5590. ZVAL_UNDEF(EX_VAR(opline->result.var));
  5591. break;
  5592. }
  5593. }
  5594. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  5595. if (IS_CONST != IS_CONST) {
  5596. zend_tmp_string_release(tmp_name);
  5597. }
  5598. if (retval != EX_VAR(opline->result.var)) {
  5599. fetch_obj_is_copy:
  5600. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  5601. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  5602. zend_unwrap_reference(retval);
  5603. }
  5604. } while (0);
  5605. fetch_obj_is_finish:
  5606. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5607. }
  5608. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5609. {
  5610. #if 0
  5611. USE_OPLINE
  5612. #endif
  5613. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  5614. /* Behave like FETCH_OBJ_W */
  5615. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  5616. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5617. }
  5618. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5619. } else {
  5620. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5621. }
  5622. }
  5623. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5624. {
  5625. USE_OPLINE
  5626. zval *container;
  5627. SAVE_OPLINE();
  5628. container = RT_CONSTANT(opline, opline->op1);
  5629. zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  5630. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5631. }
  5632. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5633. {
  5634. USE_OPLINE
  5635. zval *op1, *op2;
  5636. zend_string *op1_str, *op2_str, *str;
  5637. op1 = RT_CONSTANT(opline, opline->op1);
  5638. op2 = RT_CONSTANT(opline, opline->op2);
  5639. if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  5640. (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  5641. zend_string *op1_str = Z_STR_P(op1);
  5642. zend_string *op2_str = Z_STR_P(op2);
  5643. zend_string *str;
  5644. if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  5645. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  5646. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  5647. } else {
  5648. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  5649. }
  5650. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5651. zend_string_release_ex(op1_str, 0);
  5652. }
  5653. } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  5654. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  5655. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  5656. } else {
  5657. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  5658. }
  5659. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5660. zend_string_release_ex(op2_str, 0);
  5661. }
  5662. } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
  5663. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  5664. size_t len = ZSTR_LEN(op1_str);
  5665. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  5666. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  5667. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  5668. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5669. zend_string_release_ex(op2_str, 0);
  5670. }
  5671. } else {
  5672. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  5673. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  5674. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  5675. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  5676. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5677. zend_string_release_ex(op1_str, 0);
  5678. }
  5679. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5680. zend_string_release_ex(op2_str, 0);
  5681. }
  5682. }
  5683. ZEND_VM_NEXT_OPCODE();
  5684. }
  5685. SAVE_OPLINE();
  5686. if (IS_CONST == IS_CONST) {
  5687. op1_str = Z_STR_P(op1);
  5688. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  5689. op1_str = zend_string_copy(Z_STR_P(op1));
  5690. } else {
  5691. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  5692. ZVAL_UNDEFINED_OP1();
  5693. }
  5694. op1_str = zval_get_string_func(op1);
  5695. }
  5696. if (IS_CONST == IS_CONST) {
  5697. op2_str = Z_STR_P(op2);
  5698. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  5699. op2_str = zend_string_copy(Z_STR_P(op2));
  5700. } else {
  5701. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  5702. ZVAL_UNDEFINED_OP2();
  5703. }
  5704. op2_str = zval_get_string_func(op2);
  5705. }
  5706. do {
  5707. if (IS_CONST != IS_CONST) {
  5708. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  5709. if (IS_CONST == IS_CONST) {
  5710. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  5711. GC_ADDREF(op2_str);
  5712. }
  5713. }
  5714. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  5715. zend_string_release_ex(op1_str, 0);
  5716. break;
  5717. }
  5718. }
  5719. if (IS_CONST != IS_CONST) {
  5720. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  5721. if (IS_CONST == IS_CONST) {
  5722. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  5723. GC_ADDREF(op1_str);
  5724. }
  5725. }
  5726. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  5727. zend_string_release_ex(op2_str, 0);
  5728. break;
  5729. }
  5730. }
  5731. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  5732. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  5733. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  5734. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  5735. if (IS_CONST != IS_CONST) {
  5736. zend_string_release_ex(op1_str, 0);
  5737. }
  5738. if (IS_CONST != IS_CONST) {
  5739. zend_string_release_ex(op2_str, 0);
  5740. }
  5741. } while (0);
  5742. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5743. }
  5744. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5745. {
  5746. USE_OPLINE
  5747. zval *function_name;
  5748. zval *object;
  5749. zend_function *fbc;
  5750. zend_class_entry *called_scope;
  5751. zend_object *obj;
  5752. zend_execute_data *call;
  5753. uint32_t call_info;
  5754. SAVE_OPLINE();
  5755. object = RT_CONSTANT(opline, opline->op1);
  5756. if (IS_CONST != IS_CONST) {
  5757. function_name = RT_CONSTANT(opline, opline->op2);
  5758. }
  5759. if (IS_CONST != IS_CONST &&
  5760. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  5761. do {
  5762. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  5763. function_name = Z_REFVAL_P(function_name);
  5764. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  5765. break;
  5766. }
  5767. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  5768. ZVAL_UNDEFINED_OP2();
  5769. if (UNEXPECTED(EG(exception) != NULL)) {
  5770. HANDLE_EXCEPTION();
  5771. }
  5772. }
  5773. zend_throw_error(NULL, "Method name must be a string");
  5774. HANDLE_EXCEPTION();
  5775. } while (0);
  5776. }
  5777. if (IS_CONST == IS_UNUSED) {
  5778. obj = Z_OBJ_P(object);
  5779. } else {
  5780. do {
  5781. if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  5782. obj = Z_OBJ_P(object);
  5783. } else {
  5784. if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  5785. zend_reference *ref = Z_REF_P(object);
  5786. object = &ref->val;
  5787. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  5788. obj = Z_OBJ_P(object);
  5789. if (IS_CONST & IS_VAR) {
  5790. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  5791. efree_size(ref, sizeof(zend_reference));
  5792. } else {
  5793. Z_ADDREF_P(object);
  5794. }
  5795. }
  5796. break;
  5797. }
  5798. }
  5799. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  5800. object = ZVAL_UNDEFINED_OP1();
  5801. if (UNEXPECTED(EG(exception) != NULL)) {
  5802. if (IS_CONST != IS_CONST) {
  5803. }
  5804. HANDLE_EXCEPTION();
  5805. }
  5806. }
  5807. if (IS_CONST == IS_CONST) {
  5808. function_name = RT_CONSTANT(opline, opline->op2);
  5809. }
  5810. zend_invalid_method_call(object, function_name);
  5811. HANDLE_EXCEPTION();
  5812. }
  5813. } while (0);
  5814. }
  5815. called_scope = obj->ce;
  5816. if (IS_CONST == IS_CONST &&
  5817. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  5818. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  5819. } else {
  5820. zend_object *orig_obj = obj;
  5821. if (IS_CONST == IS_CONST) {
  5822. function_name = RT_CONSTANT(opline, opline->op2);
  5823. }
  5824. /* First, locate the function. */
  5825. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  5826. if (UNEXPECTED(fbc == NULL)) {
  5827. if (EXPECTED(!EG(exception))) {
  5828. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  5829. }
  5830. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  5831. zend_objects_store_del(orig_obj);
  5832. }
  5833. HANDLE_EXCEPTION();
  5834. }
  5835. if (IS_CONST == IS_CONST &&
  5836. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  5837. EXPECTED(obj == orig_obj)) {
  5838. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  5839. }
  5840. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  5841. GC_ADDREF(obj); /* For $this pointer */
  5842. if (GC_DELREF(orig_obj) == 0) {
  5843. zend_objects_store_del(orig_obj);
  5844. }
  5845. }
  5846. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  5847. init_func_run_time_cache(&fbc->op_array);
  5848. }
  5849. }
  5850. if (IS_CONST != IS_CONST) {
  5851. }
  5852. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  5853. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  5854. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  5855. zend_objects_store_del(obj);
  5856. if (UNEXPECTED(EG(exception))) {
  5857. HANDLE_EXCEPTION();
  5858. }
  5859. }
  5860. /* call static method */
  5861. obj = (zend_object*)called_scope;
  5862. call_info = ZEND_CALL_NESTED_FUNCTION;
  5863. } else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  5864. if (IS_CONST == IS_CV) {
  5865. GC_ADDREF(obj); /* For $this pointer */
  5866. }
  5867. /* CV may be changed indirectly (e.g. when it's a reference) */
  5868. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  5869. }
  5870. call = zend_vm_stack_push_call_frame(call_info,
  5871. fbc, opline->extended_value, obj);
  5872. call->prev_execute_data = EX(call);
  5873. EX(call) = call;
  5874. ZEND_VM_NEXT_OPCODE();
  5875. }
  5876. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5877. {
  5878. USE_OPLINE
  5879. zval *function_name;
  5880. zend_class_entry *ce;
  5881. uint32_t call_info;
  5882. zend_function *fbc;
  5883. zend_execute_data *call;
  5884. SAVE_OPLINE();
  5885. if (IS_CONST == IS_CONST) {
  5886. /* no function found. try a static method in class */
  5887. ce = CACHED_PTR(opline->result.num);
  5888. if (UNEXPECTED(ce == NULL)) {
  5889. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  5890. if (UNEXPECTED(ce == NULL)) {
  5891. HANDLE_EXCEPTION();
  5892. }
  5893. if (IS_CONST != IS_CONST) {
  5894. CACHE_PTR(opline->result.num, ce);
  5895. }
  5896. }
  5897. } else if (IS_CONST == IS_UNUSED) {
  5898. ce = zend_fetch_class(NULL, opline->op1.num);
  5899. if (UNEXPECTED(ce == NULL)) {
  5900. HANDLE_EXCEPTION();
  5901. }
  5902. } else {
  5903. ce = Z_CE_P(EX_VAR(opline->op1.var));
  5904. }
  5905. if (IS_CONST == IS_CONST &&
  5906. IS_CONST == IS_CONST &&
  5907. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  5908. /* nothing to do */
  5909. } else if (IS_CONST != IS_CONST &&
  5910. IS_CONST == IS_CONST &&
  5911. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  5912. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  5913. } else if (IS_CONST != IS_UNUSED) {
  5914. function_name = RT_CONSTANT(opline, opline->op2);
  5915. if (IS_CONST != IS_CONST) {
  5916. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  5917. do {
  5918. if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  5919. function_name = Z_REFVAL_P(function_name);
  5920. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  5921. break;
  5922. }
  5923. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  5924. ZVAL_UNDEFINED_OP2();
  5925. if (UNEXPECTED(EG(exception) != NULL)) {
  5926. HANDLE_EXCEPTION();
  5927. }
  5928. }
  5929. zend_throw_error(NULL, "Method name must be a string");
  5930. HANDLE_EXCEPTION();
  5931. } while (0);
  5932. }
  5933. }
  5934. if (ce->get_static_method) {
  5935. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  5936. } else {
  5937. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  5938. }
  5939. if (UNEXPECTED(fbc == NULL)) {
  5940. if (EXPECTED(!EG(exception))) {
  5941. zend_undefined_method(ce, Z_STR_P(function_name));
  5942. }
  5943. HANDLE_EXCEPTION();
  5944. }
  5945. if (IS_CONST == IS_CONST &&
  5946. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  5947. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  5948. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  5949. }
  5950. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  5951. init_func_run_time_cache(&fbc->op_array);
  5952. }
  5953. if (IS_CONST != IS_CONST) {
  5954. }
  5955. } else {
  5956. if (UNEXPECTED(ce->constructor == NULL)) {
  5957. zend_throw_error(NULL, "Cannot call constructor");
  5958. HANDLE_EXCEPTION();
  5959. }
  5960. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  5961. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  5962. HANDLE_EXCEPTION();
  5963. }
  5964. fbc = ce->constructor;
  5965. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  5966. init_func_run_time_cache(&fbc->op_array);
  5967. }
  5968. }
  5969. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  5970. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  5971. ce = (zend_class_entry*)Z_OBJ(EX(This));
  5972. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  5973. } else {
  5974. zend_non_static_method_call(fbc);
  5975. HANDLE_EXCEPTION();
  5976. }
  5977. } else {
  5978. /* previous opcode is ZEND_FETCH_CLASS */
  5979. if (IS_CONST == IS_UNUSED
  5980. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  5981. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  5982. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  5983. ce = Z_OBJCE(EX(This));
  5984. } else {
  5985. ce = Z_CE(EX(This));
  5986. }
  5987. }
  5988. call_info = ZEND_CALL_NESTED_FUNCTION;
  5989. }
  5990. call = zend_vm_stack_push_call_frame(call_info,
  5991. fbc, opline->extended_value, ce);
  5992. call->prev_execute_data = EX(call);
  5993. EX(call) = call;
  5994. ZEND_VM_NEXT_OPCODE();
  5995. }
  5996. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5997. {
  5998. USE_OPLINE
  5999. zval *function_name;
  6000. zend_fcall_info_cache fcc;
  6001. char *error = NULL;
  6002. zend_function *func;
  6003. void *object_or_called_scope;
  6004. zend_execute_data *call;
  6005. uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
  6006. SAVE_OPLINE();
  6007. function_name = RT_CONSTANT(opline, opline->op2);
  6008. if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
  6009. ZEND_ASSERT(!error);
  6010. func = fcc.function_handler;
  6011. object_or_called_scope = fcc.called_scope;
  6012. if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
  6013. /* Delay closure destruction until its invocation */
  6014. GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
  6015. call_info |= ZEND_CALL_CLOSURE;
  6016. if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
  6017. call_info |= ZEND_CALL_FAKE_CLOSURE;
  6018. }
  6019. if (fcc.object) {
  6020. object_or_called_scope = fcc.object;
  6021. call_info |= ZEND_CALL_HAS_THIS;
  6022. }
  6023. } else if (fcc.object) {
  6024. GC_ADDREF(fcc.object); /* For $this pointer */
  6025. object_or_called_scope = fcc.object;
  6026. call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
  6027. }
  6028. if ((IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
  6029. if (call_info & ZEND_CALL_CLOSURE) {
  6030. zend_object_release(ZEND_CLOSURE_OBJECT(func));
  6031. } else if (call_info & ZEND_CALL_RELEASE_THIS) {
  6032. zend_object_release(fcc.object);
  6033. }
  6034. HANDLE_EXCEPTION();
  6035. }
  6036. if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
  6037. init_func_run_time_cache(&func->op_array);
  6038. }
  6039. } else {
  6040. zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
  6041. efree(error);
  6042. HANDLE_EXCEPTION();
  6043. }
  6044. call = zend_vm_stack_push_call_frame(call_info,
  6045. func, opline->extended_value, object_or_called_scope);
  6046. call->prev_execute_data = EX(call);
  6047. EX(call) = call;
  6048. ZEND_VM_NEXT_OPCODE();
  6049. }
  6050. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6051. {
  6052. USE_OPLINE
  6053. zval *value, *arg;
  6054. if (IS_CONST == IS_CONST) {
  6055. SAVE_OPLINE();
  6056. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  6057. uint32_t arg_num;
  6058. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  6059. if (UNEXPECTED(!arg)) {
  6060. HANDLE_EXCEPTION();
  6061. }
  6062. } else {
  6063. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  6064. }
  6065. value = RT_CONSTANT(opline, opline->op1);
  6066. ZVAL_COPY_VALUE(arg, value);
  6067. if (IS_CONST == IS_CONST) {
  6068. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  6069. Z_ADDREF_P(arg);
  6070. }
  6071. }
  6072. ZEND_VM_NEXT_OPCODE();
  6073. }
  6074. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6075. {
  6076. USE_OPLINE
  6077. zval *value, *arg;
  6078. uint32_t arg_num;
  6079. if (IS_CONST == IS_CONST) {
  6080. SAVE_OPLINE();
  6081. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  6082. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  6083. if (UNEXPECTED(!arg)) {
  6084. HANDLE_EXCEPTION();
  6085. }
  6086. } else {
  6087. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  6088. arg_num = opline->op2.num;
  6089. }
  6090. if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
  6091. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  6092. goto send_val_by_ref;
  6093. }
  6094. } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  6095. send_val_by_ref:
  6096. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6097. }
  6098. value = RT_CONSTANT(opline, opline->op1);
  6099. ZVAL_COPY_VALUE(arg, value);
  6100. if (IS_CONST == IS_CONST) {
  6101. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  6102. Z_ADDREF_P(arg);
  6103. }
  6104. }
  6105. ZEND_VM_NEXT_OPCODE();
  6106. }
  6107. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6108. {
  6109. zend_class_entry *ce, *scope;
  6110. zend_class_constant *c;
  6111. zval *value, *zv;
  6112. USE_OPLINE
  6113. SAVE_OPLINE();
  6114. do {
  6115. if (IS_CONST == IS_CONST) {
  6116. if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
  6117. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  6118. break;
  6119. } else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
  6120. ce = CACHED_PTR(opline->extended_value);
  6121. } else {
  6122. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  6123. if (UNEXPECTED(ce == NULL)) {
  6124. ZVAL_UNDEF(EX_VAR(opline->result.var));
  6125. HANDLE_EXCEPTION();
  6126. }
  6127. }
  6128. } else {
  6129. if (IS_CONST == IS_UNUSED) {
  6130. ce = zend_fetch_class(NULL, opline->op1.num);
  6131. if (UNEXPECTED(ce == NULL)) {
  6132. ZVAL_UNDEF(EX_VAR(opline->result.var));
  6133. HANDLE_EXCEPTION();
  6134. }
  6135. } else {
  6136. ce = Z_CE_P(EX_VAR(opline->op1.var));
  6137. }
  6138. if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  6139. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  6140. break;
  6141. }
  6142. }
  6143. zv = zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), Z_STR_P(RT_CONSTANT(opline, opline->op2)));
  6144. if (EXPECTED(zv != NULL)) {
  6145. c = Z_PTR_P(zv);
  6146. scope = EX(func)->op_array.scope;
  6147. if (!zend_verify_const_access(c, scope)) {
  6148. zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
  6149. ZVAL_UNDEF(EX_VAR(opline->result.var));
  6150. HANDLE_EXCEPTION();
  6151. }
  6152. value = &c->value;
  6153. if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
  6154. zval_update_constant_ex(value, c->ce);
  6155. if (UNEXPECTED(EG(exception) != NULL)) {
  6156. ZVAL_UNDEF(EX_VAR(opline->result.var));
  6157. HANDLE_EXCEPTION();
  6158. }
  6159. }
  6160. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
  6161. } else {
  6162. zend_throw_error(NULL, "Undefined constant %s::%s",
  6163. ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
  6164. ZVAL_UNDEF(EX_VAR(opline->result.var));
  6165. HANDLE_EXCEPTION();
  6166. }
  6167. } while (0);
  6168. ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
  6169. ZEND_VM_NEXT_OPCODE();
  6170. }
  6171. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6172. {
  6173. USE_OPLINE
  6174. zval *expr_ptr, new_expr;
  6175. SAVE_OPLINE();
  6176. if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
  6177. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  6178. expr_ptr = NULL;
  6179. if (Z_ISREF_P(expr_ptr)) {
  6180. Z_ADDREF_P(expr_ptr);
  6181. } else {
  6182. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  6183. }
  6184. } else {
  6185. expr_ptr = RT_CONSTANT(opline, opline->op1);
  6186. if (IS_CONST == IS_TMP_VAR) {
  6187. /* pass */
  6188. } else if (IS_CONST == IS_CONST) {
  6189. Z_TRY_ADDREF_P(expr_ptr);
  6190. } else if (IS_CONST == IS_CV) {
  6191. ZVAL_DEREF(expr_ptr);
  6192. Z_TRY_ADDREF_P(expr_ptr);
  6193. } else /* if (IS_CONST == IS_VAR) */ {
  6194. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  6195. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  6196. expr_ptr = Z_REFVAL_P(expr_ptr);
  6197. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  6198. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  6199. expr_ptr = &new_expr;
  6200. efree_size(ref, sizeof(zend_reference));
  6201. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  6202. Z_ADDREF_P(expr_ptr);
  6203. }
  6204. }
  6205. }
  6206. }
  6207. if (IS_CONST != IS_UNUSED) {
  6208. zval *offset = RT_CONSTANT(opline, opline->op2);
  6209. zend_string *str;
  6210. zend_ulong hval;
  6211. add_again:
  6212. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  6213. str = Z_STR_P(offset);
  6214. if (IS_CONST != IS_CONST) {
  6215. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  6216. goto num_index;
  6217. }
  6218. }
  6219. str_index:
  6220. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  6221. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  6222. hval = Z_LVAL_P(offset);
  6223. num_index:
  6224. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  6225. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  6226. offset = Z_REFVAL_P(offset);
  6227. goto add_again;
  6228. } else if (Z_TYPE_P(offset) == IS_NULL) {
  6229. str = ZSTR_EMPTY_ALLOC();
  6230. goto str_index;
  6231. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  6232. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  6233. goto num_index;
  6234. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  6235. hval = 0;
  6236. goto num_index;
  6237. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  6238. hval = 1;
  6239. goto num_index;
  6240. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  6241. zend_use_resource_as_offset(offset);
  6242. hval = Z_RES_HANDLE_P(offset);
  6243. goto num_index;
  6244. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  6245. ZVAL_UNDEFINED_OP2();
  6246. str = ZSTR_EMPTY_ALLOC();
  6247. goto str_index;
  6248. } else {
  6249. zend_illegal_offset();
  6250. zval_ptr_dtor_nogc(expr_ptr);
  6251. }
  6252. } else {
  6253. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  6254. zend_cannot_add_element();
  6255. zval_ptr_dtor_nogc(expr_ptr);
  6256. }
  6257. }
  6258. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  6259. }
  6260. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6261. {
  6262. zval *array;
  6263. uint32_t size;
  6264. USE_OPLINE
  6265. array = EX_VAR(opline->result.var);
  6266. if (IS_CONST != IS_UNUSED) {
  6267. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  6268. ZVAL_ARR(array, zend_new_array(size));
  6269. /* Explicitly initialize array as not-packed if flag is set */
  6270. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  6271. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  6272. }
  6273. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  6274. } else {
  6275. ZVAL_ARR(array, zend_new_array(0));
  6276. ZEND_VM_NEXT_OPCODE();
  6277. }
  6278. }
  6279. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6280. {
  6281. USE_OPLINE
  6282. zval *container;
  6283. bool result;
  6284. zend_ulong hval;
  6285. zval *offset;
  6286. SAVE_OPLINE();
  6287. container = RT_CONSTANT(opline, opline->op1);
  6288. offset = RT_CONSTANT(opline, opline->op2);
  6289. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  6290. HashTable *ht;
  6291. zval *value;
  6292. zend_string *str;
  6293. isset_dim_obj_array:
  6294. ht = Z_ARRVAL_P(container);
  6295. isset_again:
  6296. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  6297. str = Z_STR_P(offset);
  6298. if (IS_CONST != IS_CONST) {
  6299. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  6300. goto num_index_prop;
  6301. }
  6302. }
  6303. value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
  6304. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  6305. hval = Z_LVAL_P(offset);
  6306. num_index_prop:
  6307. value = zend_hash_index_find(ht, hval);
  6308. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  6309. offset = Z_REFVAL_P(offset);
  6310. goto isset_again;
  6311. } else {
  6312. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  6313. if (UNEXPECTED(EG(exception))) {
  6314. result = 0;
  6315. goto isset_dim_obj_exit;
  6316. }
  6317. }
  6318. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  6319. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  6320. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  6321. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  6322. if (IS_CONST & (IS_CONST|IS_CV)) {
  6323. /* avoid exception check */
  6324. ZEND_VM_SMART_BRANCH(result, 0);
  6325. }
  6326. } else {
  6327. result = (value == NULL || !i_zend_is_true(value));
  6328. }
  6329. goto isset_dim_obj_exit;
  6330. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  6331. container = Z_REFVAL_P(container);
  6332. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  6333. goto isset_dim_obj_array;
  6334. }
  6335. }
  6336. if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  6337. offset++;
  6338. }
  6339. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  6340. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  6341. } else {
  6342. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  6343. }
  6344. isset_dim_obj_exit:
  6345. ZEND_VM_SMART_BRANCH(result, 1);
  6346. }
  6347. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6348. {
  6349. USE_OPLINE
  6350. zval *container;
  6351. int result;
  6352. zval *offset;
  6353. zend_string *name, *tmp_name;
  6354. SAVE_OPLINE();
  6355. container = RT_CONSTANT(opline, opline->op1);
  6356. offset = RT_CONSTANT(opline, opline->op2);
  6357. if (IS_CONST == IS_CONST ||
  6358. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  6359. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  6360. container = Z_REFVAL_P(container);
  6361. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  6362. result = (opline->extended_value & ZEND_ISEMPTY);
  6363. goto isset_object_finish;
  6364. }
  6365. } else {
  6366. result = (opline->extended_value & ZEND_ISEMPTY);
  6367. goto isset_object_finish;
  6368. }
  6369. }
  6370. if (IS_CONST == IS_CONST) {
  6371. name = Z_STR_P(offset);
  6372. } else {
  6373. name = zval_try_get_tmp_string(offset, &tmp_name);
  6374. if (UNEXPECTED(!name)) {
  6375. result = 0;
  6376. goto isset_object_finish;
  6377. }
  6378. }
  6379. result =
  6380. (opline->extended_value & ZEND_ISEMPTY) ^
  6381. Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  6382. if (IS_CONST != IS_CONST) {
  6383. zend_tmp_string_release(tmp_name);
  6384. }
  6385. isset_object_finish:
  6386. ZEND_VM_SMART_BRANCH(result, 1);
  6387. }
  6388. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6389. {
  6390. USE_OPLINE
  6391. zval *key, *subject;
  6392. HashTable *ht;
  6393. bool result;
  6394. SAVE_OPLINE();
  6395. key = RT_CONSTANT(opline, opline->op1);
  6396. subject = RT_CONSTANT(opline, opline->op2);
  6397. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  6398. array_key_exists_array:
  6399. ht = Z_ARRVAL_P(subject);
  6400. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  6401. } else {
  6402. if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  6403. subject = Z_REFVAL_P(subject);
  6404. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  6405. goto array_key_exists_array;
  6406. }
  6407. }
  6408. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  6409. result = 0;
  6410. }
  6411. ZEND_VM_SMART_BRANCH(result, 1);
  6412. }
  6413. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  6414. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6415. {
  6416. USE_OPLINE
  6417. zend_class_entry *ce = CACHED_PTR(opline->extended_value);
  6418. if (ce == NULL) {
  6419. zval *lcname = RT_CONSTANT(opline, opline->op1);
  6420. zval *zv = zend_hash_find_known_hash(EG(class_table), Z_STR_P(lcname + 1));
  6421. if (zv) {
  6422. SAVE_OPLINE();
  6423. ce = zend_bind_class_in_slot(zv, lcname, Z_STR_P(RT_CONSTANT(opline, opline->op2)));
  6424. if (!ce) {
  6425. HANDLE_EXCEPTION();
  6426. }
  6427. }
  6428. CACHE_PTR(opline->extended_value, ce);
  6429. }
  6430. ZEND_VM_NEXT_OPCODE();
  6431. }
  6432. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6433. {
  6434. USE_OPLINE
  6435. zval *name;
  6436. zval *val;
  6437. zend_constant c;
  6438. SAVE_OPLINE();
  6439. name = RT_CONSTANT(opline, opline->op1);
  6440. val = RT_CONSTANT(opline, opline->op2);
  6441. ZVAL_COPY(&c.value, val);
  6442. if (Z_OPT_CONSTANT(c.value)) {
  6443. if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) {
  6444. zval_ptr_dtor_nogc(&c.value);
  6445. HANDLE_EXCEPTION();
  6446. }
  6447. }
  6448. /* non persistent, case sensitive */
  6449. ZEND_CONSTANT_SET_FLAGS(&c, CONST_CS, PHP_USER_CONSTANT);
  6450. c.name = zend_string_copy(Z_STR_P(name));
  6451. if (zend_register_constant(&c) == FAILURE) {
  6452. }
  6453. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  6454. }
  6455. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6456. {
  6457. USE_OPLINE
  6458. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  6459. SAVE_OPLINE();
  6460. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  6461. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  6462. }
  6463. /* Destroy the previously yielded value */
  6464. zval_ptr_dtor(&generator->value);
  6465. /* Destroy the previously yielded key */
  6466. zval_ptr_dtor(&generator->key);
  6467. /* Set the new yielded value */
  6468. if (IS_CONST != IS_UNUSED) {
  6469. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  6470. /* Constants and temporary variables aren't yieldable by reference,
  6471. * but we still allow them with a notice. */
  6472. if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
  6473. zval *value;
  6474. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  6475. value = RT_CONSTANT(opline, opline->op1);
  6476. ZVAL_COPY_VALUE(&generator->value, value);
  6477. if (IS_CONST == IS_CONST) {
  6478. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  6479. Z_ADDREF(generator->value);
  6480. }
  6481. }
  6482. } else {
  6483. zval *value_ptr = NULL;
  6484. /* If a function call result is yielded and the function did
  6485. * not return by reference we throw a notice. */
  6486. do {
  6487. if (IS_CONST == IS_VAR) {
  6488. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  6489. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  6490. && !Z_ISREF_P(value_ptr)) {
  6491. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  6492. ZVAL_COPY(&generator->value, value_ptr);
  6493. break;
  6494. }
  6495. }
  6496. if (Z_ISREF_P(value_ptr)) {
  6497. Z_ADDREF_P(value_ptr);
  6498. } else {
  6499. ZVAL_MAKE_REF_EX(value_ptr, 2);
  6500. }
  6501. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  6502. } while (0);
  6503. }
  6504. } else {
  6505. zval *value = RT_CONSTANT(opline, opline->op1);
  6506. /* Consts, temporary variables and references need copying */
  6507. if (IS_CONST == IS_CONST) {
  6508. ZVAL_COPY_VALUE(&generator->value, value);
  6509. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  6510. Z_ADDREF(generator->value);
  6511. }
  6512. } else if (IS_CONST == IS_TMP_VAR) {
  6513. ZVAL_COPY_VALUE(&generator->value, value);
  6514. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  6515. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  6516. } else {
  6517. ZVAL_COPY_VALUE(&generator->value, value);
  6518. if (IS_CONST == IS_CV) {
  6519. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  6520. }
  6521. }
  6522. }
  6523. } else {
  6524. /* If no value was specified yield null */
  6525. ZVAL_NULL(&generator->value);
  6526. }
  6527. /* Set the new yielded key */
  6528. if (IS_CONST != IS_UNUSED) {
  6529. zval *key = RT_CONSTANT(opline, opline->op2);
  6530. if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  6531. key = Z_REFVAL_P(key);
  6532. }
  6533. ZVAL_COPY(&generator->key, key);
  6534. if (Z_TYPE(generator->key) == IS_LONG
  6535. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  6536. ) {
  6537. generator->largest_used_integer_key = Z_LVAL(generator->key);
  6538. }
  6539. } else {
  6540. /* If no key was specified we use auto-increment keys */
  6541. generator->largest_used_integer_key++;
  6542. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  6543. }
  6544. if (RETURN_VALUE_USED(opline)) {
  6545. /* If the return value of yield is used set the send
  6546. * target and initialize it to NULL */
  6547. generator->send_target = EX_VAR(opline->result.var);
  6548. ZVAL_NULL(generator->send_target);
  6549. } else {
  6550. generator->send_target = NULL;
  6551. }
  6552. /* We increment to the next op, so we are at the correct position when the
  6553. * generator is resumed. */
  6554. ZEND_VM_INC_OPCODE();
  6555. /* The GOTO VM uses a local opline variable. We need to set the opline
  6556. * variable in execute_data so we don't resume at an old position. */
  6557. SAVE_OPLINE();
  6558. ZEND_VM_RETURN();
  6559. }
  6560. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6561. {
  6562. USE_OPLINE
  6563. zval *op, *jump_zv;
  6564. HashTable *jumptable;
  6565. op = RT_CONSTANT(opline, opline->op1);
  6566. if (Z_TYPE_P(op) != IS_LONG) {
  6567. ZVAL_DEREF(op);
  6568. if (Z_TYPE_P(op) != IS_LONG) {
  6569. /* Wrong type, fall back to ZEND_CASE chain */
  6570. ZEND_VM_NEXT_OPCODE();
  6571. }
  6572. }
  6573. jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  6574. jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
  6575. if (jump_zv != NULL) {
  6576. ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
  6577. ZEND_VM_CONTINUE();
  6578. } else {
  6579. /* default */
  6580. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  6581. ZEND_VM_CONTINUE();
  6582. }
  6583. }
  6584. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6585. {
  6586. USE_OPLINE
  6587. zval *op, *jump_zv;
  6588. HashTable *jumptable;
  6589. op = RT_CONSTANT(opline, opline->op1);
  6590. if (Z_TYPE_P(op) != IS_STRING) {
  6591. if (IS_CONST == IS_CONST) {
  6592. /* Wrong type, fall back to ZEND_CASE chain */
  6593. ZEND_VM_NEXT_OPCODE();
  6594. } else {
  6595. ZVAL_DEREF(op);
  6596. if (Z_TYPE_P(op) != IS_STRING) {
  6597. /* Wrong type, fall back to ZEND_CASE chain */
  6598. ZEND_VM_NEXT_OPCODE();
  6599. }
  6600. }
  6601. }
  6602. jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  6603. jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
  6604. if (jump_zv != NULL) {
  6605. ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
  6606. ZEND_VM_CONTINUE();
  6607. } else {
  6608. /* default */
  6609. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  6610. ZEND_VM_CONTINUE();
  6611. }
  6612. }
  6613. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6614. {
  6615. USE_OPLINE
  6616. zval *op, *jump_zv;
  6617. HashTable *jumptable;
  6618. op = RT_CONSTANT(opline, opline->op1);
  6619. jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  6620. match_try_again:
  6621. if (Z_TYPE_P(op) == IS_LONG) {
  6622. jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
  6623. } else if (Z_TYPE_P(op) == IS_STRING) {
  6624. jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
  6625. } else if (Z_TYPE_P(op) == IS_REFERENCE) {
  6626. op = Z_REFVAL_P(op);
  6627. goto match_try_again;
  6628. } else {
  6629. if (UNEXPECTED((IS_CONST & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) {
  6630. SAVE_OPLINE();
  6631. op = ZVAL_UNDEFINED_OP1();
  6632. if (UNEXPECTED(EG(exception))) {
  6633. HANDLE_EXCEPTION();
  6634. }
  6635. goto match_try_again;
  6636. }
  6637. goto default_branch;
  6638. }
  6639. if (jump_zv != NULL) {
  6640. ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
  6641. ZEND_VM_CONTINUE();
  6642. } else {
  6643. default_branch:
  6644. /* default */
  6645. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  6646. ZEND_VM_CONTINUE();
  6647. }
  6648. }
  6649. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6650. {
  6651. USE_OPLINE
  6652. zval *op1;
  6653. HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  6654. zval *result;
  6655. op1 = RT_CONSTANT(opline, opline->op1);
  6656. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  6657. result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CONST == IS_CONST);
  6658. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  6659. zval_ptr_dtor_str(op1);
  6660. }
  6661. ZEND_VM_SMART_BRANCH(result, 0);
  6662. }
  6663. if (opline->extended_value) {
  6664. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  6665. result = zend_hash_index_find(ht, Z_LVAL_P(op1));
  6666. ZEND_VM_SMART_BRANCH(result, 0);
  6667. }
  6668. SAVE_OPLINE();
  6669. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
  6670. op1 = Z_REFVAL_P(op1);
  6671. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  6672. result = zend_hash_find(ht, Z_STR_P(op1));
  6673. ZEND_VM_SMART_BRANCH(result, 0);
  6674. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  6675. result = zend_hash_index_find(ht, Z_LVAL_P(op1));
  6676. ZEND_VM_SMART_BRANCH(result, 0);
  6677. }
  6678. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  6679. ZVAL_UNDEFINED_OP1();
  6680. }
  6681. } else if (Z_TYPE_P(op1) <= IS_FALSE) {
  6682. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  6683. SAVE_OPLINE();
  6684. ZVAL_UNDEFINED_OP1();
  6685. if (UNEXPECTED(EG(exception) != NULL)) {
  6686. HANDLE_EXCEPTION();
  6687. }
  6688. }
  6689. result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
  6690. ZEND_VM_SMART_BRANCH(result, 0);
  6691. } else {
  6692. zend_string *key;
  6693. zval key_tmp;
  6694. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
  6695. op1 = Z_REFVAL_P(op1);
  6696. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  6697. result = zend_hash_find(ht, Z_STR_P(op1));
  6698. ZEND_VM_SMART_BRANCH(result, 0);
  6699. }
  6700. }
  6701. SAVE_OPLINE();
  6702. ZEND_HASH_FOREACH_STR_KEY(ht, key) {
  6703. ZVAL_STR(&key_tmp, key);
  6704. if (zend_compare(op1, &key_tmp) == 0) {
  6705. ZEND_VM_SMART_BRANCH(1, 1);
  6706. }
  6707. } ZEND_HASH_FOREACH_END();
  6708. }
  6709. ZEND_VM_SMART_BRANCH(0, 1);
  6710. }
  6711. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6712. {
  6713. USE_OPLINE
  6714. zval *op1, *op2, *result;
  6715. double d1, d2;
  6716. op1 = RT_CONSTANT(opline, opline->op1);
  6717. op2 = EX_VAR(opline->op2.var);
  6718. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6719. /* pass */
  6720. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  6721. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6722. result = EX_VAR(opline->result.var);
  6723. fast_long_add_function(result, op1, op2);
  6724. ZEND_VM_NEXT_OPCODE();
  6725. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6726. d1 = (double)Z_LVAL_P(op1);
  6727. d2 = Z_DVAL_P(op2);
  6728. goto add_double;
  6729. }
  6730. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  6731. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6732. d1 = Z_DVAL_P(op1);
  6733. d2 = Z_DVAL_P(op2);
  6734. add_double:
  6735. result = EX_VAR(opline->result.var);
  6736. ZVAL_DOUBLE(result, d1 + d2);
  6737. ZEND_VM_NEXT_OPCODE();
  6738. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6739. d1 = Z_DVAL_P(op1);
  6740. d2 = (double)Z_LVAL_P(op2);
  6741. goto add_double;
  6742. }
  6743. }
  6744. ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6745. }
  6746. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6747. {
  6748. USE_OPLINE
  6749. zval *op1, *op2, *result;
  6750. double d1, d2;
  6751. op1 = RT_CONSTANT(opline, opline->op1);
  6752. op2 = EX_VAR(opline->op2.var);
  6753. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6754. /* pass */
  6755. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  6756. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6757. result = EX_VAR(opline->result.var);
  6758. fast_long_sub_function(result, op1, op2);
  6759. ZEND_VM_NEXT_OPCODE();
  6760. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6761. d1 = (double)Z_LVAL_P(op1);
  6762. d2 = Z_DVAL_P(op2);
  6763. goto sub_double;
  6764. }
  6765. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  6766. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6767. d1 = Z_DVAL_P(op1);
  6768. d2 = Z_DVAL_P(op2);
  6769. sub_double:
  6770. result = EX_VAR(opline->result.var);
  6771. ZVAL_DOUBLE(result, d1 - d2);
  6772. ZEND_VM_NEXT_OPCODE();
  6773. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6774. d1 = Z_DVAL_P(op1);
  6775. d2 = (double)Z_LVAL_P(op2);
  6776. goto sub_double;
  6777. }
  6778. }
  6779. ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6780. }
  6781. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6782. {
  6783. USE_OPLINE
  6784. zval *op1, *op2, *result;
  6785. op1 = RT_CONSTANT(opline, opline->op1);
  6786. op2 = EX_VAR(opline->op2.var);
  6787. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6788. /* pass */
  6789. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  6790. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6791. result = EX_VAR(opline->result.var);
  6792. if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
  6793. ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  6794. } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
  6795. /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
  6796. ZVAL_LONG(result, 0);
  6797. } else {
  6798. ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
  6799. }
  6800. ZEND_VM_NEXT_OPCODE();
  6801. }
  6802. }
  6803. ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6804. }
  6805. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6806. {
  6807. USE_OPLINE
  6808. zval *op1, *op2;
  6809. op1 = RT_CONSTANT(opline, opline->op1);
  6810. op2 = EX_VAR(opline->op2.var);
  6811. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6812. /* pass */
  6813. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  6814. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  6815. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  6816. /* Perform shift on unsigned numbers to get well-defined wrap behavior. */
  6817. ZVAL_LONG(EX_VAR(opline->result.var),
  6818. (zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
  6819. ZEND_VM_NEXT_OPCODE();
  6820. }
  6821. ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6822. }
  6823. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6824. {
  6825. USE_OPLINE
  6826. zval *op1, *op2;
  6827. op1 = RT_CONSTANT(opline, opline->op1);
  6828. op2 = EX_VAR(opline->op2.var);
  6829. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6830. /* pass */
  6831. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  6832. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  6833. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  6834. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
  6835. ZEND_VM_NEXT_OPCODE();
  6836. }
  6837. ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6838. }
  6839. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6840. {
  6841. USE_OPLINE
  6842. zval *op1, *op2;
  6843. double d1, d2;
  6844. op1 = RT_CONSTANT(opline, opline->op1);
  6845. op2 = EX_VAR(opline->op2.var);
  6846. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6847. /* pass */
  6848. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  6849. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6850. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  6851. is_smaller_true:
  6852. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  6853. } else {
  6854. is_smaller_false:
  6855. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  6856. }
  6857. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6858. d1 = (double)Z_LVAL_P(op1);
  6859. d2 = Z_DVAL_P(op2);
  6860. goto is_smaller_double;
  6861. }
  6862. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  6863. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6864. d1 = Z_DVAL_P(op1);
  6865. d2 = Z_DVAL_P(op2);
  6866. is_smaller_double:
  6867. if (d1 < d2) {
  6868. goto is_smaller_true;
  6869. } else {
  6870. goto is_smaller_false;
  6871. }
  6872. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6873. d1 = Z_DVAL_P(op1);
  6874. d2 = (double)Z_LVAL_P(op2);
  6875. goto is_smaller_double;
  6876. }
  6877. }
  6878. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6879. }
  6880. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6881. {
  6882. USE_OPLINE
  6883. zval *op1, *op2;
  6884. double d1, d2;
  6885. op1 = RT_CONSTANT(opline, opline->op1);
  6886. op2 = EX_VAR(opline->op2.var);
  6887. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6888. /* pass */
  6889. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  6890. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6891. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  6892. is_smaller_true:
  6893. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  6894. } else {
  6895. is_smaller_false:
  6896. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  6897. }
  6898. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6899. d1 = (double)Z_LVAL_P(op1);
  6900. d2 = Z_DVAL_P(op2);
  6901. goto is_smaller_double;
  6902. }
  6903. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  6904. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6905. d1 = Z_DVAL_P(op1);
  6906. d2 = Z_DVAL_P(op2);
  6907. is_smaller_double:
  6908. if (d1 < d2) {
  6909. goto is_smaller_true;
  6910. } else {
  6911. goto is_smaller_false;
  6912. }
  6913. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6914. d1 = Z_DVAL_P(op1);
  6915. d2 = (double)Z_LVAL_P(op2);
  6916. goto is_smaller_double;
  6917. }
  6918. }
  6919. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6920. }
  6921. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6922. {
  6923. USE_OPLINE
  6924. zval *op1, *op2;
  6925. double d1, d2;
  6926. op1 = RT_CONSTANT(opline, opline->op1);
  6927. op2 = EX_VAR(opline->op2.var);
  6928. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6929. /* pass */
  6930. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  6931. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6932. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  6933. is_smaller_true:
  6934. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  6935. } else {
  6936. is_smaller_false:
  6937. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  6938. }
  6939. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6940. d1 = (double)Z_LVAL_P(op1);
  6941. d2 = Z_DVAL_P(op2);
  6942. goto is_smaller_double;
  6943. }
  6944. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  6945. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6946. d1 = Z_DVAL_P(op1);
  6947. d2 = Z_DVAL_P(op2);
  6948. is_smaller_double:
  6949. if (d1 < d2) {
  6950. goto is_smaller_true;
  6951. } else {
  6952. goto is_smaller_false;
  6953. }
  6954. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6955. d1 = Z_DVAL_P(op1);
  6956. d2 = (double)Z_LVAL_P(op2);
  6957. goto is_smaller_double;
  6958. }
  6959. }
  6960. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6961. }
  6962. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6963. {
  6964. USE_OPLINE
  6965. zval *op1, *op2;
  6966. double d1, d2;
  6967. op1 = RT_CONSTANT(opline, opline->op1);
  6968. op2 = EX_VAR(opline->op2.var);
  6969. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6970. /* pass */
  6971. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  6972. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6973. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  6974. is_smaller_or_equal_true:
  6975. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  6976. ZVAL_TRUE(EX_VAR(opline->result.var));
  6977. ZEND_VM_NEXT_OPCODE();
  6978. } else {
  6979. is_smaller_or_equal_false:
  6980. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  6981. ZVAL_FALSE(EX_VAR(opline->result.var));
  6982. ZEND_VM_NEXT_OPCODE();
  6983. }
  6984. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6985. d1 = (double)Z_LVAL_P(op1);
  6986. d2 = Z_DVAL_P(op2);
  6987. goto is_smaller_or_equal_double;
  6988. }
  6989. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  6990. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6991. d1 = Z_DVAL_P(op1);
  6992. d2 = Z_DVAL_P(op2);
  6993. is_smaller_or_equal_double:
  6994. if (d1 <= d2) {
  6995. goto is_smaller_or_equal_true;
  6996. } else {
  6997. goto is_smaller_or_equal_false;
  6998. }
  6999. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  7000. d1 = Z_DVAL_P(op1);
  7001. d2 = (double)Z_LVAL_P(op2);
  7002. goto is_smaller_or_equal_double;
  7003. }
  7004. }
  7005. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  7006. }
  7007. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7008. {
  7009. USE_OPLINE
  7010. zval *op1, *op2;
  7011. double d1, d2;
  7012. op1 = RT_CONSTANT(opline, opline->op1);
  7013. op2 = EX_VAR(opline->op2.var);
  7014. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  7015. /* pass */
  7016. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  7017. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  7018. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  7019. is_smaller_or_equal_true:
  7020. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  7021. ZVAL_TRUE(EX_VAR(opline->result.var));
  7022. ZEND_VM_NEXT_OPCODE();
  7023. } else {
  7024. is_smaller_or_equal_false:
  7025. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  7026. ZVAL_FALSE(EX_VAR(opline->result.var));
  7027. ZEND_VM_NEXT_OPCODE();
  7028. }
  7029. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  7030. d1 = (double)Z_LVAL_P(op1);
  7031. d2 = Z_DVAL_P(op2);
  7032. goto is_smaller_or_equal_double;
  7033. }
  7034. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  7035. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  7036. d1 = Z_DVAL_P(op1);
  7037. d2 = Z_DVAL_P(op2);
  7038. is_smaller_or_equal_double:
  7039. if (d1 <= d2) {
  7040. goto is_smaller_or_equal_true;
  7041. } else {
  7042. goto is_smaller_or_equal_false;
  7043. }
  7044. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  7045. d1 = Z_DVAL_P(op1);
  7046. d2 = (double)Z_LVAL_P(op2);
  7047. goto is_smaller_or_equal_double;
  7048. }
  7049. }
  7050. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  7051. }
  7052. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7053. {
  7054. USE_OPLINE
  7055. zval *op1, *op2;
  7056. double d1, d2;
  7057. op1 = RT_CONSTANT(opline, opline->op1);
  7058. op2 = EX_VAR(opline->op2.var);
  7059. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  7060. /* pass */
  7061. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  7062. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  7063. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  7064. is_smaller_or_equal_true:
  7065. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  7066. ZVAL_TRUE(EX_VAR(opline->result.var));
  7067. ZEND_VM_NEXT_OPCODE();
  7068. } else {
  7069. is_smaller_or_equal_false:
  7070. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  7071. ZVAL_FALSE(EX_VAR(opline->result.var));
  7072. ZEND_VM_NEXT_OPCODE();
  7073. }
  7074. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  7075. d1 = (double)Z_LVAL_P(op1);
  7076. d2 = Z_DVAL_P(op2);
  7077. goto is_smaller_or_equal_double;
  7078. }
  7079. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  7080. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  7081. d1 = Z_DVAL_P(op1);
  7082. d2 = Z_DVAL_P(op2);
  7083. is_smaller_or_equal_double:
  7084. if (d1 <= d2) {
  7085. goto is_smaller_or_equal_true;
  7086. } else {
  7087. goto is_smaller_or_equal_false;
  7088. }
  7089. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  7090. d1 = Z_DVAL_P(op1);
  7091. d2 = (double)Z_LVAL_P(op2);
  7092. goto is_smaller_or_equal_double;
  7093. }
  7094. }
  7095. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  7096. }
  7097. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7098. {
  7099. USE_OPLINE
  7100. zval *op1, *op2, *result;
  7101. op1 = RT_CONSTANT(opline, opline->op1);
  7102. op2 = EX_VAR(opline->op2.var);
  7103. result = EX_VAR(opline->result.var);
  7104. ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
  7105. ZEND_VM_NEXT_OPCODE();
  7106. }
  7107. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7108. {
  7109. USE_OPLINE
  7110. zval *op1, *op2, *result;
  7111. op1 = RT_CONSTANT(opline, opline->op1);
  7112. op2 = EX_VAR(opline->op2.var);
  7113. result = EX_VAR(opline->result.var);
  7114. fast_long_sub_function(result, op1, op2);
  7115. ZEND_VM_NEXT_OPCODE();
  7116. }
  7117. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7118. {
  7119. USE_OPLINE
  7120. zval *op1, *op2, *result;
  7121. op1 = RT_CONSTANT(opline, opline->op1);
  7122. op2 = EX_VAR(opline->op2.var);
  7123. result = EX_VAR(opline->result.var);
  7124. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  7125. ZEND_VM_NEXT_OPCODE();
  7126. }
  7127. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7128. {
  7129. USE_OPLINE
  7130. zval *op1, *op2;
  7131. bool result;
  7132. op1 = RT_CONSTANT(opline, opline->op1);
  7133. op2 = EX_VAR(opline->op2.var);
  7134. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  7135. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  7136. }
  7137. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7138. {
  7139. USE_OPLINE
  7140. zval *op1, *op2;
  7141. bool result;
  7142. op1 = RT_CONSTANT(opline, opline->op1);
  7143. op2 = EX_VAR(opline->op2.var);
  7144. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  7145. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  7146. }
  7147. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7148. {
  7149. USE_OPLINE
  7150. zval *op1, *op2;
  7151. bool result;
  7152. op1 = RT_CONSTANT(opline, opline->op1);
  7153. op2 = EX_VAR(opline->op2.var);
  7154. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  7155. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  7156. }
  7157. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7158. {
  7159. USE_OPLINE
  7160. zval *op1, *op2;
  7161. bool result;
  7162. op1 = RT_CONSTANT(opline, opline->op1);
  7163. op2 = EX_VAR(opline->op2.var);
  7164. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  7165. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  7166. }
  7167. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7168. {
  7169. USE_OPLINE
  7170. zval *op1, *op2;
  7171. bool result;
  7172. op1 = RT_CONSTANT(opline, opline->op1);
  7173. op2 = EX_VAR(opline->op2.var);
  7174. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  7175. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  7176. }
  7177. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7178. {
  7179. USE_OPLINE
  7180. zval *op1, *op2;
  7181. bool result;
  7182. op1 = RT_CONSTANT(opline, opline->op1);
  7183. op2 = EX_VAR(opline->op2.var);
  7184. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  7185. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  7186. }
  7187. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7188. {
  7189. USE_OPLINE
  7190. zval *op1, *op2;
  7191. bool result;
  7192. op1 = RT_CONSTANT(opline, opline->op1);
  7193. op2 = EX_VAR(opline->op2.var);
  7194. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  7195. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  7196. }
  7197. 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)
  7198. {
  7199. USE_OPLINE
  7200. zval *op1, *op2;
  7201. bool result;
  7202. op1 = RT_CONSTANT(opline, opline->op1);
  7203. op2 = EX_VAR(opline->op2.var);
  7204. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  7205. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  7206. }
  7207. 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)
  7208. {
  7209. USE_OPLINE
  7210. zval *op1, *op2;
  7211. bool result;
  7212. op1 = RT_CONSTANT(opline, opline->op1);
  7213. op2 = EX_VAR(opline->op2.var);
  7214. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  7215. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  7216. }
  7217. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7218. {
  7219. USE_OPLINE
  7220. zval *op1, *op2;
  7221. bool result;
  7222. op1 = RT_CONSTANT(opline, opline->op1);
  7223. op2 = EX_VAR(opline->op2.var);
  7224. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  7225. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  7226. }
  7227. 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)
  7228. {
  7229. USE_OPLINE
  7230. zval *op1, *op2;
  7231. bool result;
  7232. op1 = RT_CONSTANT(opline, opline->op1);
  7233. op2 = EX_VAR(opline->op2.var);
  7234. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  7235. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  7236. }
  7237. 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)
  7238. {
  7239. USE_OPLINE
  7240. zval *op1, *op2;
  7241. bool result;
  7242. op1 = RT_CONSTANT(opline, opline->op1);
  7243. op2 = EX_VAR(opline->op2.var);
  7244. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  7245. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  7246. }
  7247. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7248. {
  7249. USE_OPLINE
  7250. zval *container, *dim, *value;
  7251. zend_long offset;
  7252. HashTable *ht;
  7253. container = RT_CONSTANT(opline, opline->op1);
  7254. dim = EX_VAR(opline->op2.var);
  7255. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  7256. fetch_dim_r_index_array:
  7257. if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
  7258. offset = Z_LVAL_P(dim);
  7259. } else {
  7260. SAVE_OPLINE();
  7261. zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);
  7262. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7263. }
  7264. ht = Z_ARRVAL_P(container);
  7265. ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
  7266. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  7267. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  7268. SAVE_OPLINE();
  7269. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7270. } else {
  7271. ZEND_VM_NEXT_OPCODE();
  7272. }
  7273. } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  7274. container = Z_REFVAL_P(container);
  7275. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  7276. goto fetch_dim_r_index_array;
  7277. } else {
  7278. goto fetch_dim_r_index_slow;
  7279. }
  7280. } else {
  7281. fetch_dim_r_index_slow:
  7282. SAVE_OPLINE();
  7283. if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  7284. dim++;
  7285. }
  7286. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  7287. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7288. }
  7289. fetch_dim_r_index_undef:
  7290. ZVAL_NULL(EX_VAR(opline->result.var));
  7291. SAVE_OPLINE();
  7292. zend_undefined_offset(offset);
  7293. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7294. }
  7295. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7296. {
  7297. USE_OPLINE
  7298. zval *op1, *op2;
  7299. SAVE_OPLINE();
  7300. op1 = RT_CONSTANT(opline, opline->op1);
  7301. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7302. div_function(EX_VAR(opline->result.var), op1, op2);
  7303. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7304. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7305. }
  7306. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7307. {
  7308. USE_OPLINE
  7309. zval *op1, *op2;
  7310. SAVE_OPLINE();
  7311. op1 = RT_CONSTANT(opline, opline->op1);
  7312. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7313. pow_function(EX_VAR(opline->result.var), op1, op2);
  7314. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7315. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7316. }
  7317. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7318. {
  7319. USE_OPLINE
  7320. zval *op1, *op2;
  7321. op1 = RT_CONSTANT(opline, opline->op1);
  7322. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7323. if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  7324. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  7325. zend_string *op1_str = Z_STR_P(op1);
  7326. zend_string *op2_str = Z_STR_P(op2);
  7327. zend_string *str;
  7328. if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  7329. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  7330. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  7331. } else {
  7332. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  7333. }
  7334. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  7335. zend_string_release_ex(op1_str, 0);
  7336. }
  7337. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  7338. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  7339. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  7340. } else {
  7341. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  7342. }
  7343. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  7344. zend_string_release_ex(op2_str, 0);
  7345. }
  7346. } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
  7347. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  7348. size_t len = ZSTR_LEN(op1_str);
  7349. if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
  7350. zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
  7351. }
  7352. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  7353. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  7354. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  7355. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  7356. zend_string_release_ex(op2_str, 0);
  7357. }
  7358. } else {
  7359. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  7360. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  7361. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  7362. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  7363. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  7364. zend_string_release_ex(op1_str, 0);
  7365. }
  7366. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  7367. zend_string_release_ex(op2_str, 0);
  7368. }
  7369. }
  7370. ZEND_VM_NEXT_OPCODE();
  7371. } else {
  7372. SAVE_OPLINE();
  7373. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  7374. op1 = ZVAL_UNDEFINED_OP1();
  7375. }
  7376. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  7377. op2 = ZVAL_UNDEFINED_OP2();
  7378. }
  7379. concat_function(EX_VAR(opline->result.var), op1, op2);
  7380. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7381. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7382. }
  7383. }
  7384. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7385. {
  7386. USE_OPLINE
  7387. zval *op1, *op2;
  7388. SAVE_OPLINE();
  7389. op1 = RT_CONSTANT(opline, opline->op1);
  7390. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7391. compare_function(EX_VAR(opline->result.var), op1, op2);
  7392. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7393. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7394. }
  7395. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7396. {
  7397. USE_OPLINE
  7398. zval *container, *dim, *value;
  7399. SAVE_OPLINE();
  7400. container = RT_CONSTANT(opline, opline->op1);
  7401. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7402. if (IS_CONST != IS_CONST) {
  7403. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  7404. fetch_dim_r_array:
  7405. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
  7406. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  7407. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  7408. container = Z_REFVAL_P(container);
  7409. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  7410. goto fetch_dim_r_array;
  7411. } else {
  7412. goto fetch_dim_r_slow;
  7413. }
  7414. } else {
  7415. fetch_dim_r_slow:
  7416. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  7417. dim++;
  7418. }
  7419. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  7420. }
  7421. } else {
  7422. zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  7423. }
  7424. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7425. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7426. }
  7427. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7428. {
  7429. USE_OPLINE
  7430. zval *container;
  7431. SAVE_OPLINE();
  7432. container = RT_CONSTANT(opline, opline->op1);
  7433. zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  7434. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7435. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7436. }
  7437. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7438. {
  7439. #if 0
  7440. USE_OPLINE
  7441. #endif
  7442. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  7443. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  7444. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7445. }
  7446. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7447. } else {
  7448. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  7449. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7450. }
  7451. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7452. }
  7453. }
  7454. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7455. {
  7456. USE_OPLINE
  7457. zval *container;
  7458. void **cache_slot = NULL;
  7459. SAVE_OPLINE();
  7460. container = RT_CONSTANT(opline, opline->op1);
  7461. if (IS_CONST == IS_CONST ||
  7462. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  7463. do {
  7464. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  7465. container = Z_REFVAL_P(container);
  7466. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  7467. break;
  7468. }
  7469. }
  7470. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  7471. ZVAL_UNDEFINED_OP1();
  7472. }
  7473. zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  7474. ZVAL_NULL(EX_VAR(opline->result.var));
  7475. goto fetch_obj_r_finish;
  7476. } while (0);
  7477. }
  7478. /* here we are sure we are dealing with an object */
  7479. do {
  7480. zend_object *zobj = Z_OBJ_P(container);
  7481. zend_string *name, *tmp_name;
  7482. zval *retval;
  7483. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  7484. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  7485. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  7486. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  7487. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  7488. retval = OBJ_PROP(zobj, prop_offset);
  7489. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  7490. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  7491. goto fetch_obj_r_copy;
  7492. } else {
  7493. fetch_obj_r_fast_copy:
  7494. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  7495. ZEND_VM_NEXT_OPCODE();
  7496. }
  7497. }
  7498. } else if (EXPECTED(zobj->properties != NULL)) {
  7499. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  7500. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  7501. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  7502. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  7503. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  7504. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  7505. (EXPECTED(p->key == name) ||
  7506. (EXPECTED(p->h == ZSTR_H(name)) &&
  7507. EXPECTED(p->key != NULL) &&
  7508. EXPECTED(zend_string_equal_content(p->key, name))))) {
  7509. retval = &p->val;
  7510. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  7511. goto fetch_obj_r_copy;
  7512. } else {
  7513. goto fetch_obj_r_fast_copy;
  7514. }
  7515. }
  7516. }
  7517. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  7518. }
  7519. retval = zend_hash_find_known_hash(zobj->properties, name);
  7520. if (EXPECTED(retval)) {
  7521. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  7522. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  7523. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  7524. goto fetch_obj_r_copy;
  7525. } else {
  7526. goto fetch_obj_r_fast_copy;
  7527. }
  7528. }
  7529. }
  7530. }
  7531. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  7532. } else {
  7533. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  7534. if (UNEXPECTED(!name)) {
  7535. ZVAL_UNDEF(EX_VAR(opline->result.var));
  7536. break;
  7537. }
  7538. }
  7539. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  7540. #if ZEND_DEBUG
  7541. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  7542. zend_verify_internal_read_property_type(zobj, name, retval);
  7543. }
  7544. #endif
  7545. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7546. zend_tmp_string_release(tmp_name);
  7547. }
  7548. if (retval != EX_VAR(opline->result.var)) {
  7549. fetch_obj_r_copy:
  7550. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  7551. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  7552. zend_unwrap_reference(retval);
  7553. }
  7554. } while (0);
  7555. fetch_obj_r_finish:
  7556. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7557. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7558. }
  7559. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7560. {
  7561. USE_OPLINE
  7562. zval *container;
  7563. void **cache_slot = NULL;
  7564. SAVE_OPLINE();
  7565. container = RT_CONSTANT(opline, opline->op1);
  7566. if (IS_CONST == IS_CONST ||
  7567. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  7568. do {
  7569. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  7570. container = Z_REFVAL_P(container);
  7571. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  7572. break;
  7573. }
  7574. }
  7575. if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  7576. ZVAL_UNDEFINED_OP2();
  7577. }
  7578. ZVAL_NULL(EX_VAR(opline->result.var));
  7579. goto fetch_obj_is_finish;
  7580. } while (0);
  7581. }
  7582. /* here we are sure we are dealing with an object */
  7583. do {
  7584. zend_object *zobj = Z_OBJ_P(container);
  7585. zend_string *name, *tmp_name;
  7586. zval *retval;
  7587. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  7588. cache_slot = CACHE_ADDR(opline->extended_value);
  7589. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  7590. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  7591. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  7592. retval = OBJ_PROP(zobj, prop_offset);
  7593. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  7594. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  7595. goto fetch_obj_is_copy;
  7596. } else {
  7597. fetch_obj_is_fast_copy:
  7598. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  7599. ZEND_VM_NEXT_OPCODE();
  7600. }
  7601. }
  7602. } else if (EXPECTED(zobj->properties != NULL)) {
  7603. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  7604. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  7605. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  7606. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  7607. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  7608. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  7609. (EXPECTED(p->key == name) ||
  7610. (EXPECTED(p->h == ZSTR_H(name)) &&
  7611. EXPECTED(p->key != NULL) &&
  7612. EXPECTED(zend_string_equal_content(p->key, name))))) {
  7613. retval = &p->val;
  7614. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  7615. goto fetch_obj_is_copy;
  7616. } else {
  7617. goto fetch_obj_is_fast_copy;
  7618. }
  7619. }
  7620. }
  7621. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  7622. }
  7623. retval = zend_hash_find_known_hash(zobj->properties, name);
  7624. if (EXPECTED(retval)) {
  7625. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  7626. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  7627. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  7628. goto fetch_obj_is_copy;
  7629. } else {
  7630. goto fetch_obj_is_fast_copy;
  7631. }
  7632. }
  7633. }
  7634. }
  7635. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  7636. } else {
  7637. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  7638. if (UNEXPECTED(!name)) {
  7639. ZVAL_UNDEF(EX_VAR(opline->result.var));
  7640. break;
  7641. }
  7642. }
  7643. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  7644. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7645. zend_tmp_string_release(tmp_name);
  7646. }
  7647. if (retval != EX_VAR(opline->result.var)) {
  7648. fetch_obj_is_copy:
  7649. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  7650. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  7651. zend_unwrap_reference(retval);
  7652. }
  7653. } while (0);
  7654. fetch_obj_is_finish:
  7655. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7656. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7657. }
  7658. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7659. {
  7660. #if 0
  7661. USE_OPLINE
  7662. #endif
  7663. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  7664. /* Behave like FETCH_OBJ_W */
  7665. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  7666. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7667. }
  7668. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7669. } else {
  7670. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7671. }
  7672. }
  7673. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7674. {
  7675. USE_OPLINE
  7676. zval *container;
  7677. SAVE_OPLINE();
  7678. container = RT_CONSTANT(opline, opline->op1);
  7679. zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  7680. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7681. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7682. }
  7683. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7684. {
  7685. USE_OPLINE
  7686. zval *op1, *op2;
  7687. zend_string *op1_str, *op2_str, *str;
  7688. op1 = RT_CONSTANT(opline, opline->op1);
  7689. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7690. if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  7691. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  7692. zend_string *op1_str = Z_STR_P(op1);
  7693. zend_string *op2_str = Z_STR_P(op2);
  7694. zend_string *str;
  7695. if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  7696. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  7697. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  7698. } else {
  7699. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  7700. }
  7701. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  7702. zend_string_release_ex(op1_str, 0);
  7703. }
  7704. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  7705. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  7706. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  7707. } else {
  7708. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  7709. }
  7710. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  7711. zend_string_release_ex(op2_str, 0);
  7712. }
  7713. } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
  7714. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  7715. size_t len = ZSTR_LEN(op1_str);
  7716. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  7717. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  7718. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  7719. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  7720. zend_string_release_ex(op2_str, 0);
  7721. }
  7722. } else {
  7723. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  7724. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  7725. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  7726. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  7727. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  7728. zend_string_release_ex(op1_str, 0);
  7729. }
  7730. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  7731. zend_string_release_ex(op2_str, 0);
  7732. }
  7733. }
  7734. ZEND_VM_NEXT_OPCODE();
  7735. }
  7736. SAVE_OPLINE();
  7737. if (IS_CONST == IS_CONST) {
  7738. op1_str = Z_STR_P(op1);
  7739. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  7740. op1_str = zend_string_copy(Z_STR_P(op1));
  7741. } else {
  7742. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  7743. ZVAL_UNDEFINED_OP1();
  7744. }
  7745. op1_str = zval_get_string_func(op1);
  7746. }
  7747. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  7748. op2_str = Z_STR_P(op2);
  7749. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  7750. op2_str = zend_string_copy(Z_STR_P(op2));
  7751. } else {
  7752. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  7753. ZVAL_UNDEFINED_OP2();
  7754. }
  7755. op2_str = zval_get_string_func(op2);
  7756. }
  7757. do {
  7758. if (IS_CONST != IS_CONST) {
  7759. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  7760. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  7761. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  7762. GC_ADDREF(op2_str);
  7763. }
  7764. }
  7765. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  7766. zend_string_release_ex(op1_str, 0);
  7767. break;
  7768. }
  7769. }
  7770. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7771. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  7772. if (IS_CONST == IS_CONST) {
  7773. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  7774. GC_ADDREF(op1_str);
  7775. }
  7776. }
  7777. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  7778. zend_string_release_ex(op2_str, 0);
  7779. break;
  7780. }
  7781. }
  7782. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  7783. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  7784. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  7785. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  7786. if (IS_CONST != IS_CONST) {
  7787. zend_string_release_ex(op1_str, 0);
  7788. }
  7789. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7790. zend_string_release_ex(op2_str, 0);
  7791. }
  7792. } while (0);
  7793. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7794. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7795. }
  7796. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7797. {
  7798. USE_OPLINE
  7799. zval *function_name;
  7800. zval *object;
  7801. zend_function *fbc;
  7802. zend_class_entry *called_scope;
  7803. zend_object *obj;
  7804. zend_execute_data *call;
  7805. uint32_t call_info;
  7806. SAVE_OPLINE();
  7807. object = RT_CONSTANT(opline, opline->op1);
  7808. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7809. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7810. }
  7811. if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
  7812. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  7813. do {
  7814. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  7815. function_name = Z_REFVAL_P(function_name);
  7816. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  7817. break;
  7818. }
  7819. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  7820. ZVAL_UNDEFINED_OP2();
  7821. if (UNEXPECTED(EG(exception) != NULL)) {
  7822. HANDLE_EXCEPTION();
  7823. }
  7824. }
  7825. zend_throw_error(NULL, "Method name must be a string");
  7826. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7827. HANDLE_EXCEPTION();
  7828. } while (0);
  7829. }
  7830. if (IS_CONST == IS_UNUSED) {
  7831. obj = Z_OBJ_P(object);
  7832. } else {
  7833. do {
  7834. if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  7835. obj = Z_OBJ_P(object);
  7836. } else {
  7837. if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  7838. zend_reference *ref = Z_REF_P(object);
  7839. object = &ref->val;
  7840. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  7841. obj = Z_OBJ_P(object);
  7842. if (IS_CONST & IS_VAR) {
  7843. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  7844. efree_size(ref, sizeof(zend_reference));
  7845. } else {
  7846. Z_ADDREF_P(object);
  7847. }
  7848. }
  7849. break;
  7850. }
  7851. }
  7852. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  7853. object = ZVAL_UNDEFINED_OP1();
  7854. if (UNEXPECTED(EG(exception) != NULL)) {
  7855. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7856. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7857. }
  7858. HANDLE_EXCEPTION();
  7859. }
  7860. }
  7861. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  7862. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7863. }
  7864. zend_invalid_method_call(object, function_name);
  7865. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7866. HANDLE_EXCEPTION();
  7867. }
  7868. } while (0);
  7869. }
  7870. called_scope = obj->ce;
  7871. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  7872. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  7873. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  7874. } else {
  7875. zend_object *orig_obj = obj;
  7876. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  7877. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7878. }
  7879. /* First, locate the function. */
  7880. 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));
  7881. if (UNEXPECTED(fbc == NULL)) {
  7882. if (EXPECTED(!EG(exception))) {
  7883. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  7884. }
  7885. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7886. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  7887. zend_objects_store_del(orig_obj);
  7888. }
  7889. HANDLE_EXCEPTION();
  7890. }
  7891. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  7892. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  7893. EXPECTED(obj == orig_obj)) {
  7894. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  7895. }
  7896. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  7897. GC_ADDREF(obj); /* For $this pointer */
  7898. if (GC_DELREF(orig_obj) == 0) {
  7899. zend_objects_store_del(orig_obj);
  7900. }
  7901. }
  7902. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  7903. init_func_run_time_cache(&fbc->op_array);
  7904. }
  7905. }
  7906. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7907. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7908. }
  7909. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  7910. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  7911. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  7912. zend_objects_store_del(obj);
  7913. if (UNEXPECTED(EG(exception))) {
  7914. HANDLE_EXCEPTION();
  7915. }
  7916. }
  7917. /* call static method */
  7918. obj = (zend_object*)called_scope;
  7919. call_info = ZEND_CALL_NESTED_FUNCTION;
  7920. } else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  7921. if (IS_CONST == IS_CV) {
  7922. GC_ADDREF(obj); /* For $this pointer */
  7923. }
  7924. /* CV may be changed indirectly (e.g. when it's a reference) */
  7925. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  7926. }
  7927. call = zend_vm_stack_push_call_frame(call_info,
  7928. fbc, opline->extended_value, obj);
  7929. call->prev_execute_data = EX(call);
  7930. EX(call) = call;
  7931. ZEND_VM_NEXT_OPCODE();
  7932. }
  7933. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7934. {
  7935. USE_OPLINE
  7936. zval *function_name;
  7937. zend_class_entry *ce;
  7938. uint32_t call_info;
  7939. zend_function *fbc;
  7940. zend_execute_data *call;
  7941. SAVE_OPLINE();
  7942. if (IS_CONST == IS_CONST) {
  7943. /* no function found. try a static method in class */
  7944. ce = CACHED_PTR(opline->result.num);
  7945. if (UNEXPECTED(ce == NULL)) {
  7946. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  7947. if (UNEXPECTED(ce == NULL)) {
  7948. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7949. HANDLE_EXCEPTION();
  7950. }
  7951. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7952. CACHE_PTR(opline->result.num, ce);
  7953. }
  7954. }
  7955. } else if (IS_CONST == IS_UNUSED) {
  7956. ce = zend_fetch_class(NULL, opline->op1.num);
  7957. if (UNEXPECTED(ce == NULL)) {
  7958. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7959. HANDLE_EXCEPTION();
  7960. }
  7961. } else {
  7962. ce = Z_CE_P(EX_VAR(opline->op1.var));
  7963. }
  7964. if (IS_CONST == IS_CONST &&
  7965. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  7966. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  7967. /* nothing to do */
  7968. } else if (IS_CONST != IS_CONST &&
  7969. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  7970. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  7971. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  7972. } else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  7973. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7974. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7975. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  7976. do {
  7977. if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  7978. function_name = Z_REFVAL_P(function_name);
  7979. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  7980. break;
  7981. }
  7982. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  7983. ZVAL_UNDEFINED_OP2();
  7984. if (UNEXPECTED(EG(exception) != NULL)) {
  7985. HANDLE_EXCEPTION();
  7986. }
  7987. }
  7988. zend_throw_error(NULL, "Method name must be a string");
  7989. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7990. HANDLE_EXCEPTION();
  7991. } while (0);
  7992. }
  7993. }
  7994. if (ce->get_static_method) {
  7995. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  7996. } else {
  7997. 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));
  7998. }
  7999. if (UNEXPECTED(fbc == NULL)) {
  8000. if (EXPECTED(!EG(exception))) {
  8001. zend_undefined_method(ce, Z_STR_P(function_name));
  8002. }
  8003. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8004. HANDLE_EXCEPTION();
  8005. }
  8006. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  8007. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  8008. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  8009. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  8010. }
  8011. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  8012. init_func_run_time_cache(&fbc->op_array);
  8013. }
  8014. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  8015. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8016. }
  8017. } else {
  8018. if (UNEXPECTED(ce->constructor == NULL)) {
  8019. zend_throw_error(NULL, "Cannot call constructor");
  8020. HANDLE_EXCEPTION();
  8021. }
  8022. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  8023. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  8024. HANDLE_EXCEPTION();
  8025. }
  8026. fbc = ce->constructor;
  8027. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  8028. init_func_run_time_cache(&fbc->op_array);
  8029. }
  8030. }
  8031. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  8032. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  8033. ce = (zend_class_entry*)Z_OBJ(EX(This));
  8034. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  8035. } else {
  8036. zend_non_static_method_call(fbc);
  8037. HANDLE_EXCEPTION();
  8038. }
  8039. } else {
  8040. /* previous opcode is ZEND_FETCH_CLASS */
  8041. if (IS_CONST == IS_UNUSED
  8042. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  8043. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  8044. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  8045. ce = Z_OBJCE(EX(This));
  8046. } else {
  8047. ce = Z_CE(EX(This));
  8048. }
  8049. }
  8050. call_info = ZEND_CALL_NESTED_FUNCTION;
  8051. }
  8052. call = zend_vm_stack_push_call_frame(call_info,
  8053. fbc, opline->extended_value, ce);
  8054. call->prev_execute_data = EX(call);
  8055. EX(call) = call;
  8056. ZEND_VM_NEXT_OPCODE();
  8057. }
  8058. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8059. {
  8060. USE_OPLINE
  8061. zval *function_name;
  8062. zend_fcall_info_cache fcc;
  8063. char *error = NULL;
  8064. zend_function *func;
  8065. void *object_or_called_scope;
  8066. zend_execute_data *call;
  8067. uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
  8068. SAVE_OPLINE();
  8069. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  8070. if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
  8071. ZEND_ASSERT(!error);
  8072. func = fcc.function_handler;
  8073. object_or_called_scope = fcc.called_scope;
  8074. if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
  8075. /* Delay closure destruction until its invocation */
  8076. GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
  8077. call_info |= ZEND_CALL_CLOSURE;
  8078. if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
  8079. call_info |= ZEND_CALL_FAKE_CLOSURE;
  8080. }
  8081. if (fcc.object) {
  8082. object_or_called_scope = fcc.object;
  8083. call_info |= ZEND_CALL_HAS_THIS;
  8084. }
  8085. } else if (fcc.object) {
  8086. GC_ADDREF(fcc.object); /* For $this pointer */
  8087. object_or_called_scope = fcc.object;
  8088. call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
  8089. }
  8090. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8091. if (((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
  8092. if (call_info & ZEND_CALL_CLOSURE) {
  8093. zend_object_release(ZEND_CLOSURE_OBJECT(func));
  8094. } else if (call_info & ZEND_CALL_RELEASE_THIS) {
  8095. zend_object_release(fcc.object);
  8096. }
  8097. HANDLE_EXCEPTION();
  8098. }
  8099. if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
  8100. init_func_run_time_cache(&func->op_array);
  8101. }
  8102. } else {
  8103. zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
  8104. efree(error);
  8105. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8106. HANDLE_EXCEPTION();
  8107. }
  8108. call = zend_vm_stack_push_call_frame(call_info,
  8109. func, opline->extended_value, object_or_called_scope);
  8110. call->prev_execute_data = EX(call);
  8111. EX(call) = call;
  8112. ZEND_VM_NEXT_OPCODE();
  8113. }
  8114. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8115. {
  8116. USE_OPLINE
  8117. zval *expr_ptr, new_expr;
  8118. SAVE_OPLINE();
  8119. if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
  8120. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  8121. expr_ptr = NULL;
  8122. if (Z_ISREF_P(expr_ptr)) {
  8123. Z_ADDREF_P(expr_ptr);
  8124. } else {
  8125. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  8126. }
  8127. } else {
  8128. expr_ptr = RT_CONSTANT(opline, opline->op1);
  8129. if (IS_CONST == IS_TMP_VAR) {
  8130. /* pass */
  8131. } else if (IS_CONST == IS_CONST) {
  8132. Z_TRY_ADDREF_P(expr_ptr);
  8133. } else if (IS_CONST == IS_CV) {
  8134. ZVAL_DEREF(expr_ptr);
  8135. Z_TRY_ADDREF_P(expr_ptr);
  8136. } else /* if (IS_CONST == IS_VAR) */ {
  8137. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  8138. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  8139. expr_ptr = Z_REFVAL_P(expr_ptr);
  8140. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  8141. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  8142. expr_ptr = &new_expr;
  8143. efree_size(ref, sizeof(zend_reference));
  8144. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  8145. Z_ADDREF_P(expr_ptr);
  8146. }
  8147. }
  8148. }
  8149. }
  8150. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  8151. zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  8152. zend_string *str;
  8153. zend_ulong hval;
  8154. add_again:
  8155. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  8156. str = Z_STR_P(offset);
  8157. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  8158. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  8159. goto num_index;
  8160. }
  8161. }
  8162. str_index:
  8163. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  8164. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  8165. hval = Z_LVAL_P(offset);
  8166. num_index:
  8167. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  8168. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  8169. offset = Z_REFVAL_P(offset);
  8170. goto add_again;
  8171. } else if (Z_TYPE_P(offset) == IS_NULL) {
  8172. str = ZSTR_EMPTY_ALLOC();
  8173. goto str_index;
  8174. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  8175. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  8176. goto num_index;
  8177. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  8178. hval = 0;
  8179. goto num_index;
  8180. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  8181. hval = 1;
  8182. goto num_index;
  8183. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  8184. zend_use_resource_as_offset(offset);
  8185. hval = Z_RES_HANDLE_P(offset);
  8186. goto num_index;
  8187. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  8188. ZVAL_UNDEFINED_OP2();
  8189. str = ZSTR_EMPTY_ALLOC();
  8190. goto str_index;
  8191. } else {
  8192. zend_illegal_offset();
  8193. zval_ptr_dtor_nogc(expr_ptr);
  8194. }
  8195. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8196. } else {
  8197. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  8198. zend_cannot_add_element();
  8199. zval_ptr_dtor_nogc(expr_ptr);
  8200. }
  8201. }
  8202. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8203. }
  8204. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8205. {
  8206. zval *array;
  8207. uint32_t size;
  8208. USE_OPLINE
  8209. array = EX_VAR(opline->result.var);
  8210. if (IS_CONST != IS_UNUSED) {
  8211. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  8212. ZVAL_ARR(array, zend_new_array(size));
  8213. /* Explicitly initialize array as not-packed if flag is set */
  8214. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  8215. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  8216. }
  8217. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8218. } else {
  8219. ZVAL_ARR(array, zend_new_array(0));
  8220. ZEND_VM_NEXT_OPCODE();
  8221. }
  8222. }
  8223. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8224. {
  8225. USE_OPLINE
  8226. zval *container;
  8227. bool result;
  8228. zend_ulong hval;
  8229. zval *offset;
  8230. SAVE_OPLINE();
  8231. container = RT_CONSTANT(opline, opline->op1);
  8232. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  8233. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  8234. HashTable *ht;
  8235. zval *value;
  8236. zend_string *str;
  8237. isset_dim_obj_array:
  8238. ht = Z_ARRVAL_P(container);
  8239. isset_again:
  8240. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  8241. str = Z_STR_P(offset);
  8242. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  8243. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  8244. goto num_index_prop;
  8245. }
  8246. }
  8247. value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
  8248. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  8249. hval = Z_LVAL_P(offset);
  8250. num_index_prop:
  8251. value = zend_hash_index_find(ht, hval);
  8252. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  8253. offset = Z_REFVAL_P(offset);
  8254. goto isset_again;
  8255. } else {
  8256. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  8257. if (UNEXPECTED(EG(exception))) {
  8258. result = 0;
  8259. goto isset_dim_obj_exit;
  8260. }
  8261. }
  8262. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  8263. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  8264. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  8265. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  8266. if (IS_CONST & (IS_CONST|IS_CV)) {
  8267. /* avoid exception check */
  8268. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8269. ZEND_VM_SMART_BRANCH(result, 0);
  8270. }
  8271. } else {
  8272. result = (value == NULL || !i_zend_is_true(value));
  8273. }
  8274. goto isset_dim_obj_exit;
  8275. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  8276. container = Z_REFVAL_P(container);
  8277. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  8278. goto isset_dim_obj_array;
  8279. }
  8280. }
  8281. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  8282. offset++;
  8283. }
  8284. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  8285. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  8286. } else {
  8287. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  8288. }
  8289. isset_dim_obj_exit:
  8290. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8291. ZEND_VM_SMART_BRANCH(result, 1);
  8292. }
  8293. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8294. {
  8295. USE_OPLINE
  8296. zval *container;
  8297. int result;
  8298. zval *offset;
  8299. zend_string *name, *tmp_name;
  8300. SAVE_OPLINE();
  8301. container = RT_CONSTANT(opline, opline->op1);
  8302. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  8303. if (IS_CONST == IS_CONST ||
  8304. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  8305. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  8306. container = Z_REFVAL_P(container);
  8307. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  8308. result = (opline->extended_value & ZEND_ISEMPTY);
  8309. goto isset_object_finish;
  8310. }
  8311. } else {
  8312. result = (opline->extended_value & ZEND_ISEMPTY);
  8313. goto isset_object_finish;
  8314. }
  8315. }
  8316. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  8317. name = Z_STR_P(offset);
  8318. } else {
  8319. name = zval_try_get_tmp_string(offset, &tmp_name);
  8320. if (UNEXPECTED(!name)) {
  8321. result = 0;
  8322. goto isset_object_finish;
  8323. }
  8324. }
  8325. result =
  8326. (opline->extended_value & ZEND_ISEMPTY) ^
  8327. Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  8328. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  8329. zend_tmp_string_release(tmp_name);
  8330. }
  8331. isset_object_finish:
  8332. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8333. ZEND_VM_SMART_BRANCH(result, 1);
  8334. }
  8335. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8336. {
  8337. USE_OPLINE
  8338. zval *key, *subject;
  8339. HashTable *ht;
  8340. bool result;
  8341. SAVE_OPLINE();
  8342. key = RT_CONSTANT(opline, opline->op1);
  8343. subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  8344. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  8345. array_key_exists_array:
  8346. ht = Z_ARRVAL_P(subject);
  8347. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  8348. } else {
  8349. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  8350. subject = Z_REFVAL_P(subject);
  8351. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  8352. goto array_key_exists_array;
  8353. }
  8354. }
  8355. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  8356. result = 0;
  8357. }
  8358. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8359. ZEND_VM_SMART_BRANCH(result, 1);
  8360. }
  8361. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  8362. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8363. {
  8364. USE_OPLINE
  8365. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  8366. SAVE_OPLINE();
  8367. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  8368. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8369. }
  8370. /* Destroy the previously yielded value */
  8371. zval_ptr_dtor(&generator->value);
  8372. /* Destroy the previously yielded key */
  8373. zval_ptr_dtor(&generator->key);
  8374. /* Set the new yielded value */
  8375. if (IS_CONST != IS_UNUSED) {
  8376. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  8377. /* Constants and temporary variables aren't yieldable by reference,
  8378. * but we still allow them with a notice. */
  8379. if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
  8380. zval *value;
  8381. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  8382. value = RT_CONSTANT(opline, opline->op1);
  8383. ZVAL_COPY_VALUE(&generator->value, value);
  8384. if (IS_CONST == IS_CONST) {
  8385. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  8386. Z_ADDREF(generator->value);
  8387. }
  8388. }
  8389. } else {
  8390. zval *value_ptr = NULL;
  8391. /* If a function call result is yielded and the function did
  8392. * not return by reference we throw a notice. */
  8393. do {
  8394. if (IS_CONST == IS_VAR) {
  8395. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  8396. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  8397. && !Z_ISREF_P(value_ptr)) {
  8398. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  8399. ZVAL_COPY(&generator->value, value_ptr);
  8400. break;
  8401. }
  8402. }
  8403. if (Z_ISREF_P(value_ptr)) {
  8404. Z_ADDREF_P(value_ptr);
  8405. } else {
  8406. ZVAL_MAKE_REF_EX(value_ptr, 2);
  8407. }
  8408. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  8409. } while (0);
  8410. }
  8411. } else {
  8412. zval *value = RT_CONSTANT(opline, opline->op1);
  8413. /* Consts, temporary variables and references need copying */
  8414. if (IS_CONST == IS_CONST) {
  8415. ZVAL_COPY_VALUE(&generator->value, value);
  8416. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  8417. Z_ADDREF(generator->value);
  8418. }
  8419. } else if (IS_CONST == IS_TMP_VAR) {
  8420. ZVAL_COPY_VALUE(&generator->value, value);
  8421. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  8422. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  8423. } else {
  8424. ZVAL_COPY_VALUE(&generator->value, value);
  8425. if (IS_CONST == IS_CV) {
  8426. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  8427. }
  8428. }
  8429. }
  8430. } else {
  8431. /* If no value was specified yield null */
  8432. ZVAL_NULL(&generator->value);
  8433. }
  8434. /* Set the new yielded key */
  8435. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  8436. zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  8437. if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  8438. key = Z_REFVAL_P(key);
  8439. }
  8440. ZVAL_COPY(&generator->key, key);
  8441. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8442. if (Z_TYPE(generator->key) == IS_LONG
  8443. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  8444. ) {
  8445. generator->largest_used_integer_key = Z_LVAL(generator->key);
  8446. }
  8447. } else {
  8448. /* If no key was specified we use auto-increment keys */
  8449. generator->largest_used_integer_key++;
  8450. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  8451. }
  8452. if (RETURN_VALUE_USED(opline)) {
  8453. /* If the return value of yield is used set the send
  8454. * target and initialize it to NULL */
  8455. generator->send_target = EX_VAR(opline->result.var);
  8456. ZVAL_NULL(generator->send_target);
  8457. } else {
  8458. generator->send_target = NULL;
  8459. }
  8460. /* We increment to the next op, so we are at the correct position when the
  8461. * generator is resumed. */
  8462. ZEND_VM_INC_OPCODE();
  8463. /* The GOTO VM uses a local opline variable. We need to set the opline
  8464. * variable in execute_data so we don't resume at an old position. */
  8465. SAVE_OPLINE();
  8466. ZEND_VM_RETURN();
  8467. }
  8468. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
  8469. {
  8470. USE_OPLINE
  8471. zval *varname;
  8472. zval *retval;
  8473. zend_string *name, *tmp_name;
  8474. HashTable *target_symbol_table;
  8475. SAVE_OPLINE();
  8476. varname = RT_CONSTANT(opline, opline->op1);
  8477. if (IS_CONST == IS_CONST) {
  8478. name = Z_STR_P(varname);
  8479. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  8480. name = Z_STR_P(varname);
  8481. tmp_name = NULL;
  8482. } else {
  8483. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  8484. ZVAL_UNDEFINED_OP1();
  8485. }
  8486. name = zval_try_get_tmp_string(varname, &tmp_name);
  8487. if (UNEXPECTED(!name)) {
  8488. if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
  8489. }
  8490. ZVAL_UNDEF(EX_VAR(opline->result.var));
  8491. HANDLE_EXCEPTION();
  8492. }
  8493. }
  8494. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  8495. retval = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
  8496. if (retval == NULL) {
  8497. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  8498. fetch_this:
  8499. zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
  8500. if (IS_CONST != IS_CONST) {
  8501. zend_tmp_string_release(tmp_name);
  8502. }
  8503. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8504. }
  8505. if (type == BP_VAR_W) {
  8506. retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
  8507. } else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
  8508. retval = &EG(uninitialized_zval);
  8509. } else {
  8510. zend_error(E_WARNING, "Undefined %svariable $%s",
  8511. (opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
  8512. if (type == BP_VAR_RW && !EG(exception)) {
  8513. retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
  8514. } else {
  8515. retval = &EG(uninitialized_zval);
  8516. }
  8517. }
  8518. /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
  8519. } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
  8520. retval = Z_INDIRECT_P(retval);
  8521. if (Z_TYPE_P(retval) == IS_UNDEF) {
  8522. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  8523. goto fetch_this;
  8524. }
  8525. if (type == BP_VAR_W) {
  8526. ZVAL_NULL(retval);
  8527. } else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
  8528. retval = &EG(uninitialized_zval);
  8529. } else {
  8530. zend_error(E_WARNING, "Undefined %svariable $%s",
  8531. (opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
  8532. if (type == BP_VAR_RW && !EG(exception)) {
  8533. ZVAL_NULL(retval);
  8534. } else {
  8535. retval = &EG(uninitialized_zval);
  8536. }
  8537. }
  8538. }
  8539. }
  8540. if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
  8541. }
  8542. if (IS_CONST != IS_CONST) {
  8543. zend_tmp_string_release(tmp_name);
  8544. }
  8545. ZEND_ASSERT(retval != NULL);
  8546. if (type == BP_VAR_R || type == BP_VAR_IS) {
  8547. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  8548. } else {
  8549. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  8550. }
  8551. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8552. }
  8553. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8554. {
  8555. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  8556. }
  8557. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8558. {
  8559. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  8560. }
  8561. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8562. {
  8563. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  8564. }
  8565. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8566. {
  8567. int fetch_type =
  8568. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  8569. BP_VAR_W : BP_VAR_R;
  8570. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  8571. }
  8572. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8573. {
  8574. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  8575. }
  8576. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8577. {
  8578. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  8579. }
  8580. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  8581. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8582. {
  8583. #if 0
  8584. USE_OPLINE
  8585. #endif
  8586. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  8587. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  8588. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8589. }
  8590. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8591. } else {
  8592. if (IS_UNUSED == IS_UNUSED) {
  8593. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8594. }
  8595. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8596. }
  8597. }
  8598. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8599. {
  8600. USE_OPLINE
  8601. zval *function_name;
  8602. zend_class_entry *ce;
  8603. uint32_t call_info;
  8604. zend_function *fbc;
  8605. zend_execute_data *call;
  8606. SAVE_OPLINE();
  8607. if (IS_CONST == IS_CONST) {
  8608. /* no function found. try a static method in class */
  8609. ce = CACHED_PTR(opline->result.num);
  8610. if (UNEXPECTED(ce == NULL)) {
  8611. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  8612. if (UNEXPECTED(ce == NULL)) {
  8613. HANDLE_EXCEPTION();
  8614. }
  8615. if (IS_UNUSED != IS_CONST) {
  8616. CACHE_PTR(opline->result.num, ce);
  8617. }
  8618. }
  8619. } else if (IS_CONST == IS_UNUSED) {
  8620. ce = zend_fetch_class(NULL, opline->op1.num);
  8621. if (UNEXPECTED(ce == NULL)) {
  8622. HANDLE_EXCEPTION();
  8623. }
  8624. } else {
  8625. ce = Z_CE_P(EX_VAR(opline->op1.var));
  8626. }
  8627. if (IS_CONST == IS_CONST &&
  8628. IS_UNUSED == IS_CONST &&
  8629. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  8630. /* nothing to do */
  8631. } else if (IS_CONST != IS_CONST &&
  8632. IS_UNUSED == IS_CONST &&
  8633. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  8634. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  8635. } else if (IS_UNUSED != IS_UNUSED) {
  8636. function_name = NULL;
  8637. if (IS_UNUSED != IS_CONST) {
  8638. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  8639. do {
  8640. if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  8641. function_name = Z_REFVAL_P(function_name);
  8642. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  8643. break;
  8644. }
  8645. } else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  8646. ZVAL_UNDEFINED_OP2();
  8647. if (UNEXPECTED(EG(exception) != NULL)) {
  8648. HANDLE_EXCEPTION();
  8649. }
  8650. }
  8651. zend_throw_error(NULL, "Method name must be a string");
  8652. HANDLE_EXCEPTION();
  8653. } while (0);
  8654. }
  8655. }
  8656. if (ce->get_static_method) {
  8657. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  8658. } else {
  8659. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  8660. }
  8661. if (UNEXPECTED(fbc == NULL)) {
  8662. if (EXPECTED(!EG(exception))) {
  8663. zend_undefined_method(ce, Z_STR_P(function_name));
  8664. }
  8665. HANDLE_EXCEPTION();
  8666. }
  8667. if (IS_UNUSED == IS_CONST &&
  8668. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  8669. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  8670. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  8671. }
  8672. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  8673. init_func_run_time_cache(&fbc->op_array);
  8674. }
  8675. if (IS_UNUSED != IS_CONST) {
  8676. }
  8677. } else {
  8678. if (UNEXPECTED(ce->constructor == NULL)) {
  8679. zend_throw_error(NULL, "Cannot call constructor");
  8680. HANDLE_EXCEPTION();
  8681. }
  8682. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  8683. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  8684. HANDLE_EXCEPTION();
  8685. }
  8686. fbc = ce->constructor;
  8687. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  8688. init_func_run_time_cache(&fbc->op_array);
  8689. }
  8690. }
  8691. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  8692. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  8693. ce = (zend_class_entry*)Z_OBJ(EX(This));
  8694. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  8695. } else {
  8696. zend_non_static_method_call(fbc);
  8697. HANDLE_EXCEPTION();
  8698. }
  8699. } else {
  8700. /* previous opcode is ZEND_FETCH_CLASS */
  8701. if (IS_CONST == IS_UNUSED
  8702. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  8703. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  8704. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  8705. ce = Z_OBJCE(EX(This));
  8706. } else {
  8707. ce = Z_CE(EX(This));
  8708. }
  8709. }
  8710. call_info = ZEND_CALL_NESTED_FUNCTION;
  8711. }
  8712. call = zend_vm_stack_push_call_frame(call_info,
  8713. fbc, opline->extended_value, ce);
  8714. call->prev_execute_data = EX(call);
  8715. EX(call) = call;
  8716. ZEND_VM_NEXT_OPCODE();
  8717. }
  8718. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8719. {
  8720. if (IS_CONST == IS_UNUSED) {
  8721. SAVE_OPLINE();
  8722. zend_verify_missing_return_type(EX(func));
  8723. HANDLE_EXCEPTION();
  8724. } else {
  8725. /* prevents "undefined variable opline" errors */
  8726. #if 0 || (IS_CONST != IS_UNUSED)
  8727. USE_OPLINE
  8728. zval *retval_ref, *retval_ptr;
  8729. zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
  8730. retval_ref = retval_ptr = RT_CONSTANT(opline, opline->op1);
  8731. if (IS_CONST == IS_CONST) {
  8732. ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
  8733. retval_ref = retval_ptr = EX_VAR(opline->result.var);
  8734. } else if (IS_CONST == IS_VAR) {
  8735. if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
  8736. retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
  8737. }
  8738. ZVAL_DEREF(retval_ptr);
  8739. } else if (IS_CONST == IS_CV) {
  8740. ZVAL_DEREF(retval_ptr);
  8741. }
  8742. if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
  8743. ZEND_VM_NEXT_OPCODE();
  8744. }
  8745. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
  8746. SAVE_OPLINE();
  8747. retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
  8748. if (UNEXPECTED(EG(exception))) {
  8749. HANDLE_EXCEPTION();
  8750. }
  8751. if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
  8752. ZEND_VM_NEXT_OPCODE();
  8753. }
  8754. }
  8755. zend_reference *ref = NULL;
  8756. void *cache_slot = CACHE_ADDR(opline->op2.num);
  8757. if (UNEXPECTED(retval_ref != retval_ptr)) {
  8758. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  8759. ref = Z_REF_P(retval_ref);
  8760. } else {
  8761. /* A cast might happen - unwrap the reference if this is a by-value return */
  8762. if (Z_REFCOUNT_P(retval_ref) == 1) {
  8763. ZVAL_UNREF(retval_ref);
  8764. } else {
  8765. Z_DELREF_P(retval_ref);
  8766. ZVAL_COPY(retval_ref, retval_ptr);
  8767. }
  8768. retval_ptr = retval_ref;
  8769. }
  8770. }
  8771. SAVE_OPLINE();
  8772. if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
  8773. zend_verify_return_error(EX(func), retval_ptr);
  8774. HANDLE_EXCEPTION();
  8775. }
  8776. ZEND_VM_NEXT_OPCODE();
  8777. #endif
  8778. }
  8779. }
  8780. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8781. {
  8782. USE_OPLINE
  8783. zval *value, *arg;
  8784. if (IS_UNUSED == IS_CONST) {
  8785. SAVE_OPLINE();
  8786. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  8787. uint32_t arg_num;
  8788. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  8789. if (UNEXPECTED(!arg)) {
  8790. HANDLE_EXCEPTION();
  8791. }
  8792. } else {
  8793. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  8794. }
  8795. value = RT_CONSTANT(opline, opline->op1);
  8796. ZVAL_COPY_VALUE(arg, value);
  8797. if (IS_CONST == IS_CONST) {
  8798. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  8799. Z_ADDREF_P(arg);
  8800. }
  8801. }
  8802. ZEND_VM_NEXT_OPCODE();
  8803. }
  8804. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8805. {
  8806. USE_OPLINE
  8807. zval *value, *arg;
  8808. uint32_t arg_num;
  8809. if (IS_UNUSED == IS_CONST) {
  8810. SAVE_OPLINE();
  8811. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  8812. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  8813. if (UNEXPECTED(!arg)) {
  8814. HANDLE_EXCEPTION();
  8815. }
  8816. } else {
  8817. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  8818. arg_num = opline->op2.num;
  8819. }
  8820. if (EXPECTED(0)) {
  8821. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  8822. goto send_val_by_ref;
  8823. }
  8824. } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  8825. send_val_by_ref:
  8826. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  8827. }
  8828. value = RT_CONSTANT(opline, opline->op1);
  8829. ZVAL_COPY_VALUE(arg, value);
  8830. if (IS_CONST == IS_CONST) {
  8831. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  8832. Z_ADDREF_P(arg);
  8833. }
  8834. }
  8835. ZEND_VM_NEXT_OPCODE();
  8836. }
  8837. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8838. {
  8839. USE_OPLINE
  8840. zval *value, *arg;
  8841. uint32_t arg_num;
  8842. if (IS_UNUSED == IS_CONST) {
  8843. SAVE_OPLINE();
  8844. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  8845. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  8846. if (UNEXPECTED(!arg)) {
  8847. HANDLE_EXCEPTION();
  8848. }
  8849. } else {
  8850. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  8851. arg_num = opline->op2.num;
  8852. }
  8853. if (EXPECTED(1)) {
  8854. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  8855. goto send_val_by_ref;
  8856. }
  8857. } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  8858. send_val_by_ref:
  8859. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  8860. }
  8861. value = RT_CONSTANT(opline, opline->op1);
  8862. ZVAL_COPY_VALUE(arg, value);
  8863. if (IS_CONST == IS_CONST) {
  8864. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  8865. Z_ADDREF_P(arg);
  8866. }
  8867. }
  8868. ZEND_VM_NEXT_OPCODE();
  8869. }
  8870. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8871. {
  8872. USE_OPLINE
  8873. zval *result;
  8874. zend_function *constructor;
  8875. zend_class_entry *ce;
  8876. zend_execute_data *call;
  8877. SAVE_OPLINE();
  8878. if (IS_CONST == IS_CONST) {
  8879. ce = CACHED_PTR(opline->op2.num);
  8880. if (UNEXPECTED(ce == NULL)) {
  8881. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  8882. if (UNEXPECTED(ce == NULL)) {
  8883. ZVAL_UNDEF(EX_VAR(opline->result.var));
  8884. HANDLE_EXCEPTION();
  8885. }
  8886. CACHE_PTR(opline->op2.num, ce);
  8887. }
  8888. } else if (IS_CONST == IS_UNUSED) {
  8889. ce = zend_fetch_class(NULL, opline->op1.num);
  8890. if (UNEXPECTED(ce == NULL)) {
  8891. ZVAL_UNDEF(EX_VAR(opline->result.var));
  8892. HANDLE_EXCEPTION();
  8893. }
  8894. } else {
  8895. ce = Z_CE_P(EX_VAR(opline->op1.var));
  8896. }
  8897. result = EX_VAR(opline->result.var);
  8898. if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
  8899. ZVAL_UNDEF(result);
  8900. HANDLE_EXCEPTION();
  8901. }
  8902. constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
  8903. if (constructor == NULL) {
  8904. if (UNEXPECTED(EG(exception))) {
  8905. HANDLE_EXCEPTION();
  8906. }
  8907. /* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
  8908. * opcode is DO_FCALL in case EXT instructions are used. */
  8909. if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
  8910. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  8911. }
  8912. /* Perform a dummy function call */
  8913. call = zend_vm_stack_push_call_frame(
  8914. ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
  8915. opline->extended_value, NULL);
  8916. } else {
  8917. if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
  8918. init_func_run_time_cache(&constructor->op_array);
  8919. }
  8920. /* We are not handling overloaded classes right now */
  8921. call = zend_vm_stack_push_call_frame(
  8922. ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
  8923. constructor,
  8924. opline->extended_value,
  8925. Z_OBJ_P(result));
  8926. Z_ADDREF_P(result);
  8927. }
  8928. call->prev_execute_data = EX(call);
  8929. EX(call) = call;
  8930. ZEND_VM_NEXT_OPCODE();
  8931. }
  8932. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8933. {
  8934. USE_OPLINE
  8935. zval *expr_ptr, new_expr;
  8936. SAVE_OPLINE();
  8937. if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
  8938. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  8939. expr_ptr = NULL;
  8940. if (Z_ISREF_P(expr_ptr)) {
  8941. Z_ADDREF_P(expr_ptr);
  8942. } else {
  8943. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  8944. }
  8945. } else {
  8946. expr_ptr = RT_CONSTANT(opline, opline->op1);
  8947. if (IS_CONST == IS_TMP_VAR) {
  8948. /* pass */
  8949. } else if (IS_CONST == IS_CONST) {
  8950. Z_TRY_ADDREF_P(expr_ptr);
  8951. } else if (IS_CONST == IS_CV) {
  8952. ZVAL_DEREF(expr_ptr);
  8953. Z_TRY_ADDREF_P(expr_ptr);
  8954. } else /* if (IS_CONST == IS_VAR) */ {
  8955. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  8956. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  8957. expr_ptr = Z_REFVAL_P(expr_ptr);
  8958. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  8959. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  8960. expr_ptr = &new_expr;
  8961. efree_size(ref, sizeof(zend_reference));
  8962. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  8963. Z_ADDREF_P(expr_ptr);
  8964. }
  8965. }
  8966. }
  8967. }
  8968. if (IS_UNUSED != IS_UNUSED) {
  8969. zval *offset = NULL;
  8970. zend_string *str;
  8971. zend_ulong hval;
  8972. add_again:
  8973. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  8974. str = Z_STR_P(offset);
  8975. if (IS_UNUSED != IS_CONST) {
  8976. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  8977. goto num_index;
  8978. }
  8979. }
  8980. str_index:
  8981. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  8982. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  8983. hval = Z_LVAL_P(offset);
  8984. num_index:
  8985. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  8986. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  8987. offset = Z_REFVAL_P(offset);
  8988. goto add_again;
  8989. } else if (Z_TYPE_P(offset) == IS_NULL) {
  8990. str = ZSTR_EMPTY_ALLOC();
  8991. goto str_index;
  8992. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  8993. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  8994. goto num_index;
  8995. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  8996. hval = 0;
  8997. goto num_index;
  8998. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  8999. hval = 1;
  9000. goto num_index;
  9001. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  9002. zend_use_resource_as_offset(offset);
  9003. hval = Z_RES_HANDLE_P(offset);
  9004. goto num_index;
  9005. } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  9006. ZVAL_UNDEFINED_OP2();
  9007. str = ZSTR_EMPTY_ALLOC();
  9008. goto str_index;
  9009. } else {
  9010. zend_illegal_offset();
  9011. zval_ptr_dtor_nogc(expr_ptr);
  9012. }
  9013. } else {
  9014. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  9015. zend_cannot_add_element();
  9016. zval_ptr_dtor_nogc(expr_ptr);
  9017. }
  9018. }
  9019. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9020. }
  9021. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9022. {
  9023. zval *array;
  9024. uint32_t size;
  9025. USE_OPLINE
  9026. array = EX_VAR(opline->result.var);
  9027. if (IS_CONST != IS_UNUSED) {
  9028. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  9029. ZVAL_ARR(array, zend_new_array(size));
  9030. /* Explicitly initialize array as not-packed if flag is set */
  9031. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  9032. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  9033. }
  9034. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9035. } else {
  9036. ZVAL_ARR(array, zend_new_array(0));
  9037. ZEND_VM_NEXT_OPCODE();
  9038. }
  9039. }
  9040. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9041. {
  9042. USE_OPLINE
  9043. zval *varname;
  9044. zend_string *name, *tmp_name;
  9045. HashTable *target_symbol_table;
  9046. SAVE_OPLINE();
  9047. varname = RT_CONSTANT(opline, opline->op1);
  9048. if (IS_CONST == IS_CONST) {
  9049. name = Z_STR_P(varname);
  9050. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  9051. name = Z_STR_P(varname);
  9052. tmp_name = NULL;
  9053. } else {
  9054. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  9055. varname = ZVAL_UNDEFINED_OP1();
  9056. }
  9057. name = zval_try_get_tmp_string(varname, &tmp_name);
  9058. if (UNEXPECTED(!name)) {
  9059. HANDLE_EXCEPTION();
  9060. }
  9061. }
  9062. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  9063. zend_hash_del_ind(target_symbol_table, name);
  9064. if (IS_CONST != IS_CONST) {
  9065. zend_tmp_string_release(tmp_name);
  9066. }
  9067. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9068. }
  9069. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  9070. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9071. {
  9072. USE_OPLINE
  9073. zval *value;
  9074. /* Should be bool result? as below got: result = (opline->extended_value & ZEND_ISEMPTY) */
  9075. int result;
  9076. zval *varname;
  9077. zend_string *name, *tmp_name;
  9078. HashTable *target_symbol_table;
  9079. SAVE_OPLINE();
  9080. varname = RT_CONSTANT(opline, opline->op1);
  9081. if (IS_CONST == IS_CONST) {
  9082. name = Z_STR_P(varname);
  9083. } else {
  9084. name = zval_get_tmp_string(varname, &tmp_name);
  9085. }
  9086. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  9087. value = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
  9088. if (IS_CONST != IS_CONST) {
  9089. zend_tmp_string_release(tmp_name);
  9090. }
  9091. if (!value) {
  9092. result = (opline->extended_value & ZEND_ISEMPTY);
  9093. } else {
  9094. if (Z_TYPE_P(value) == IS_INDIRECT) {
  9095. value = Z_INDIRECT_P(value);
  9096. }
  9097. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  9098. if (Z_ISREF_P(value)) {
  9099. value = Z_REFVAL_P(value);
  9100. }
  9101. result = Z_TYPE_P(value) > IS_NULL;
  9102. } else {
  9103. result = !i_zend_is_true(value);
  9104. }
  9105. }
  9106. ZEND_VM_SMART_BRANCH(result, 1);
  9107. }
  9108. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  9109. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9110. {
  9111. USE_OPLINE
  9112. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  9113. SAVE_OPLINE();
  9114. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  9115. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9116. }
  9117. /* Destroy the previously yielded value */
  9118. zval_ptr_dtor(&generator->value);
  9119. /* Destroy the previously yielded key */
  9120. zval_ptr_dtor(&generator->key);
  9121. /* Set the new yielded value */
  9122. if (IS_CONST != IS_UNUSED) {
  9123. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  9124. /* Constants and temporary variables aren't yieldable by reference,
  9125. * but we still allow them with a notice. */
  9126. if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
  9127. zval *value;
  9128. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  9129. value = RT_CONSTANT(opline, opline->op1);
  9130. ZVAL_COPY_VALUE(&generator->value, value);
  9131. if (IS_CONST == IS_CONST) {
  9132. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  9133. Z_ADDREF(generator->value);
  9134. }
  9135. }
  9136. } else {
  9137. zval *value_ptr = NULL;
  9138. /* If a function call result is yielded and the function did
  9139. * not return by reference we throw a notice. */
  9140. do {
  9141. if (IS_CONST == IS_VAR) {
  9142. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  9143. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  9144. && !Z_ISREF_P(value_ptr)) {
  9145. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  9146. ZVAL_COPY(&generator->value, value_ptr);
  9147. break;
  9148. }
  9149. }
  9150. if (Z_ISREF_P(value_ptr)) {
  9151. Z_ADDREF_P(value_ptr);
  9152. } else {
  9153. ZVAL_MAKE_REF_EX(value_ptr, 2);
  9154. }
  9155. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  9156. } while (0);
  9157. }
  9158. } else {
  9159. zval *value = RT_CONSTANT(opline, opline->op1);
  9160. /* Consts, temporary variables and references need copying */
  9161. if (IS_CONST == IS_CONST) {
  9162. ZVAL_COPY_VALUE(&generator->value, value);
  9163. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  9164. Z_ADDREF(generator->value);
  9165. }
  9166. } else if (IS_CONST == IS_TMP_VAR) {
  9167. ZVAL_COPY_VALUE(&generator->value, value);
  9168. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  9169. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  9170. } else {
  9171. ZVAL_COPY_VALUE(&generator->value, value);
  9172. if (IS_CONST == IS_CV) {
  9173. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  9174. }
  9175. }
  9176. }
  9177. } else {
  9178. /* If no value was specified yield null */
  9179. ZVAL_NULL(&generator->value);
  9180. }
  9181. /* Set the new yielded key */
  9182. if (IS_UNUSED != IS_UNUSED) {
  9183. zval *key = NULL;
  9184. if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  9185. key = Z_REFVAL_P(key);
  9186. }
  9187. ZVAL_COPY(&generator->key, key);
  9188. if (Z_TYPE(generator->key) == IS_LONG
  9189. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  9190. ) {
  9191. generator->largest_used_integer_key = Z_LVAL(generator->key);
  9192. }
  9193. } else {
  9194. /* If no key was specified we use auto-increment keys */
  9195. generator->largest_used_integer_key++;
  9196. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  9197. }
  9198. if (RETURN_VALUE_USED(opline)) {
  9199. /* If the return value of yield is used set the send
  9200. * target and initialize it to NULL */
  9201. generator->send_target = EX_VAR(opline->result.var);
  9202. ZVAL_NULL(generator->send_target);
  9203. } else {
  9204. generator->send_target = NULL;
  9205. }
  9206. /* We increment to the next op, so we are at the correct position when the
  9207. * generator is resumed. */
  9208. ZEND_VM_INC_OPCODE();
  9209. /* The GOTO VM uses a local opline variable. We need to set the opline
  9210. * variable in execute_data so we don't resume at an old position. */
  9211. SAVE_OPLINE();
  9212. ZEND_VM_RETURN();
  9213. }
  9214. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9215. {
  9216. USE_OPLINE
  9217. zval *op;
  9218. SAVE_OPLINE();
  9219. op = RT_CONSTANT(opline, opline->op1);
  9220. zend_match_unhandled_error(op);
  9221. HANDLE_EXCEPTION();
  9222. }
  9223. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9224. {
  9225. USE_OPLINE
  9226. zval *op1;
  9227. zend_long count;
  9228. SAVE_OPLINE();
  9229. op1 = RT_CONSTANT(opline, opline->op1);
  9230. while (1) {
  9231. if (Z_TYPE_P(op1) == IS_ARRAY) {
  9232. count = zend_hash_num_elements(Z_ARRVAL_P(op1));
  9233. break;
  9234. } else if (Z_TYPE_P(op1) == IS_OBJECT) {
  9235. zend_object *zobj = Z_OBJ_P(op1);
  9236. /* first, we check if the handler is defined */
  9237. if (zobj->handlers->count_elements) {
  9238. if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
  9239. break;
  9240. }
  9241. if (UNEXPECTED(EG(exception))) {
  9242. count = 0;
  9243. break;
  9244. }
  9245. }
  9246. /* if not and the object implements Countable we call its count() method */
  9247. if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
  9248. zval retval;
  9249. zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
  9250. count = zval_get_long(&retval);
  9251. zval_ptr_dtor(&retval);
  9252. break;
  9253. }
  9254. /* If There's no handler and it doesn't implement Countable then emit a TypeError */
  9255. } else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
  9256. op1 = Z_REFVAL_P(op1);
  9257. continue;
  9258. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  9259. ZVAL_UNDEFINED_OP1();
  9260. }
  9261. count = 0;
  9262. zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_type_name(op1));
  9263. break;
  9264. }
  9265. ZVAL_LONG(EX_VAR(opline->result.var), count);
  9266. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9267. }
  9268. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9269. {
  9270. USE_OPLINE
  9271. if (IS_CONST == IS_UNUSED) {
  9272. if (UNEXPECTED(!EX(func)->common.scope)) {
  9273. SAVE_OPLINE();
  9274. zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
  9275. ZVAL_UNDEF(EX_VAR(opline->result.var));
  9276. HANDLE_EXCEPTION();
  9277. } else {
  9278. ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
  9279. ZEND_VM_NEXT_OPCODE();
  9280. }
  9281. } else {
  9282. zval *op1;
  9283. SAVE_OPLINE();
  9284. op1 = RT_CONSTANT(opline, opline->op1);
  9285. while (1) {
  9286. if (Z_TYPE_P(op1) == IS_OBJECT) {
  9287. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
  9288. } else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
  9289. op1 = Z_REFVAL_P(op1);
  9290. continue;
  9291. } else {
  9292. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  9293. ZVAL_UNDEFINED_OP1();
  9294. }
  9295. zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_type_name(op1));
  9296. ZVAL_UNDEF(EX_VAR(opline->result.var));
  9297. }
  9298. break;
  9299. }
  9300. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9301. }
  9302. }
  9303. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9304. {
  9305. USE_OPLINE
  9306. zval *op1;
  9307. zend_string *type;
  9308. SAVE_OPLINE();
  9309. op1 = RT_CONSTANT(opline, opline->op1);
  9310. type = zend_zval_get_legacy_type(op1);
  9311. if (EXPECTED(type)) {
  9312. ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
  9313. } else {
  9314. ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
  9315. }
  9316. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9317. }
  9318. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9319. {
  9320. USE_OPLINE
  9321. zend_array *ht;
  9322. uint32_t arg_count, result_size, skip;
  9323. arg_count = EX_NUM_ARGS();
  9324. if (IS_CONST == IS_CONST) {
  9325. skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
  9326. if (arg_count < skip) {
  9327. result_size = 0;
  9328. } else {
  9329. result_size = arg_count - skip;
  9330. }
  9331. } else {
  9332. skip = 0;
  9333. result_size = arg_count;
  9334. }
  9335. if (result_size) {
  9336. uint32_t first_extra_arg = EX(func)->op_array.num_args;
  9337. ht = zend_new_array(result_size);
  9338. ZVAL_ARR(EX_VAR(opline->result.var), ht);
  9339. zend_hash_real_init_packed(ht);
  9340. ZEND_HASH_FILL_PACKED(ht) {
  9341. zval *p, *q;
  9342. uint32_t i = skip;
  9343. p = EX_VAR_NUM(i);
  9344. if (arg_count > first_extra_arg) {
  9345. while (i < first_extra_arg) {
  9346. q = p;
  9347. if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
  9348. ZVAL_DEREF(q);
  9349. if (Z_OPT_REFCOUNTED_P(q)) {
  9350. Z_ADDREF_P(q);
  9351. }
  9352. ZEND_HASH_FILL_SET(q);
  9353. } else {
  9354. ZEND_HASH_FILL_SET_NULL();
  9355. }
  9356. ZEND_HASH_FILL_NEXT();
  9357. p++;
  9358. i++;
  9359. }
  9360. if (skip < first_extra_arg) {
  9361. skip = 0;
  9362. } else {
  9363. skip -= first_extra_arg;
  9364. }
  9365. p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
  9366. }
  9367. while (i < arg_count) {
  9368. q = p;
  9369. if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
  9370. ZVAL_DEREF(q);
  9371. if (Z_OPT_REFCOUNTED_P(q)) {
  9372. Z_ADDREF_P(q);
  9373. }
  9374. ZEND_HASH_FILL_SET(q);
  9375. } else {
  9376. ZEND_HASH_FILL_SET_NULL();
  9377. }
  9378. ZEND_HASH_FILL_NEXT();
  9379. p++;
  9380. i++;
  9381. }
  9382. } ZEND_HASH_FILL_END();
  9383. ht->nNumOfElements = result_size;
  9384. } else {
  9385. ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
  9386. }
  9387. ZEND_VM_NEXT_OPCODE();
  9388. }
  9389. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9390. {
  9391. USE_OPLINE
  9392. zval *op1, *op2;
  9393. SAVE_OPLINE();
  9394. op1 = RT_CONSTANT(opline, opline->op1);
  9395. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  9396. div_function(EX_VAR(opline->result.var), op1, op2);
  9397. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9398. }
  9399. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9400. {
  9401. USE_OPLINE
  9402. zval *op1, *op2;
  9403. SAVE_OPLINE();
  9404. op1 = RT_CONSTANT(opline, opline->op1);
  9405. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  9406. pow_function(EX_VAR(opline->result.var), op1, op2);
  9407. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9408. }
  9409. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9410. {
  9411. USE_OPLINE
  9412. zval *op1, *op2;
  9413. op1 = RT_CONSTANT(opline, opline->op1);
  9414. op2 = EX_VAR(opline->op2.var);
  9415. if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  9416. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  9417. zend_string *op1_str = Z_STR_P(op1);
  9418. zend_string *op2_str = Z_STR_P(op2);
  9419. zend_string *str;
  9420. if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  9421. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  9422. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  9423. } else {
  9424. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  9425. }
  9426. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  9427. zend_string_release_ex(op1_str, 0);
  9428. }
  9429. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  9430. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  9431. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  9432. } else {
  9433. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  9434. }
  9435. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  9436. zend_string_release_ex(op2_str, 0);
  9437. }
  9438. } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
  9439. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  9440. size_t len = ZSTR_LEN(op1_str);
  9441. if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
  9442. zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
  9443. }
  9444. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  9445. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  9446. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  9447. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  9448. zend_string_release_ex(op2_str, 0);
  9449. }
  9450. } else {
  9451. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  9452. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  9453. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  9454. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  9455. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  9456. zend_string_release_ex(op1_str, 0);
  9457. }
  9458. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  9459. zend_string_release_ex(op2_str, 0);
  9460. }
  9461. }
  9462. ZEND_VM_NEXT_OPCODE();
  9463. } else {
  9464. SAVE_OPLINE();
  9465. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  9466. op1 = ZVAL_UNDEFINED_OP1();
  9467. }
  9468. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  9469. op2 = ZVAL_UNDEFINED_OP2();
  9470. }
  9471. concat_function(EX_VAR(opline->result.var), op1, op2);
  9472. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9473. }
  9474. }
  9475. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9476. {
  9477. USE_OPLINE
  9478. zval *op1, *op2;
  9479. SAVE_OPLINE();
  9480. op1 = RT_CONSTANT(opline, opline->op1);
  9481. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  9482. compare_function(EX_VAR(opline->result.var), op1, op2);
  9483. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9484. }
  9485. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9486. {
  9487. USE_OPLINE
  9488. zval *container, *dim, *value;
  9489. SAVE_OPLINE();
  9490. container = RT_CONSTANT(opline, opline->op1);
  9491. dim = EX_VAR(opline->op2.var);
  9492. if (IS_CONST != IS_CONST) {
  9493. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  9494. fetch_dim_r_array:
  9495. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
  9496. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  9497. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  9498. container = Z_REFVAL_P(container);
  9499. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  9500. goto fetch_dim_r_array;
  9501. } else {
  9502. goto fetch_dim_r_slow;
  9503. }
  9504. } else {
  9505. fetch_dim_r_slow:
  9506. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  9507. dim++;
  9508. }
  9509. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  9510. }
  9511. } else {
  9512. zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
  9513. }
  9514. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9515. }
  9516. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9517. {
  9518. USE_OPLINE
  9519. zval *container;
  9520. SAVE_OPLINE();
  9521. container = RT_CONSTANT(opline, opline->op1);
  9522. zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  9523. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9524. }
  9525. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9526. {
  9527. #if 0
  9528. USE_OPLINE
  9529. #endif
  9530. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  9531. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  9532. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9533. }
  9534. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9535. } else {
  9536. if (IS_CV == IS_UNUSED) {
  9537. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9538. }
  9539. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9540. }
  9541. }
  9542. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9543. {
  9544. USE_OPLINE
  9545. zval *container;
  9546. void **cache_slot = NULL;
  9547. SAVE_OPLINE();
  9548. container = RT_CONSTANT(opline, opline->op1);
  9549. if (IS_CONST == IS_CONST ||
  9550. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  9551. do {
  9552. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  9553. container = Z_REFVAL_P(container);
  9554. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  9555. break;
  9556. }
  9557. }
  9558. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  9559. ZVAL_UNDEFINED_OP1();
  9560. }
  9561. zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  9562. ZVAL_NULL(EX_VAR(opline->result.var));
  9563. goto fetch_obj_r_finish;
  9564. } while (0);
  9565. }
  9566. /* here we are sure we are dealing with an object */
  9567. do {
  9568. zend_object *zobj = Z_OBJ_P(container);
  9569. zend_string *name, *tmp_name;
  9570. zval *retval;
  9571. if (IS_CV == IS_CONST) {
  9572. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  9573. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  9574. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  9575. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  9576. retval = OBJ_PROP(zobj, prop_offset);
  9577. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  9578. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  9579. goto fetch_obj_r_copy;
  9580. } else {
  9581. fetch_obj_r_fast_copy:
  9582. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  9583. ZEND_VM_NEXT_OPCODE();
  9584. }
  9585. }
  9586. } else if (EXPECTED(zobj->properties != NULL)) {
  9587. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  9588. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  9589. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  9590. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  9591. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  9592. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  9593. (EXPECTED(p->key == name) ||
  9594. (EXPECTED(p->h == ZSTR_H(name)) &&
  9595. EXPECTED(p->key != NULL) &&
  9596. EXPECTED(zend_string_equal_content(p->key, name))))) {
  9597. retval = &p->val;
  9598. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  9599. goto fetch_obj_r_copy;
  9600. } else {
  9601. goto fetch_obj_r_fast_copy;
  9602. }
  9603. }
  9604. }
  9605. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  9606. }
  9607. retval = zend_hash_find_known_hash(zobj->properties, name);
  9608. if (EXPECTED(retval)) {
  9609. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  9610. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  9611. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  9612. goto fetch_obj_r_copy;
  9613. } else {
  9614. goto fetch_obj_r_fast_copy;
  9615. }
  9616. }
  9617. }
  9618. }
  9619. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  9620. } else {
  9621. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  9622. if (UNEXPECTED(!name)) {
  9623. ZVAL_UNDEF(EX_VAR(opline->result.var));
  9624. break;
  9625. }
  9626. }
  9627. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  9628. #if ZEND_DEBUG
  9629. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  9630. zend_verify_internal_read_property_type(zobj, name, retval);
  9631. }
  9632. #endif
  9633. if (IS_CV != IS_CONST) {
  9634. zend_tmp_string_release(tmp_name);
  9635. }
  9636. if (retval != EX_VAR(opline->result.var)) {
  9637. fetch_obj_r_copy:
  9638. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  9639. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  9640. zend_unwrap_reference(retval);
  9641. }
  9642. } while (0);
  9643. fetch_obj_r_finish:
  9644. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9645. }
  9646. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9647. {
  9648. USE_OPLINE
  9649. zval *container;
  9650. void **cache_slot = NULL;
  9651. SAVE_OPLINE();
  9652. container = RT_CONSTANT(opline, opline->op1);
  9653. if (IS_CONST == IS_CONST ||
  9654. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  9655. do {
  9656. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  9657. container = Z_REFVAL_P(container);
  9658. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  9659. break;
  9660. }
  9661. }
  9662. if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  9663. ZVAL_UNDEFINED_OP2();
  9664. }
  9665. ZVAL_NULL(EX_VAR(opline->result.var));
  9666. goto fetch_obj_is_finish;
  9667. } while (0);
  9668. }
  9669. /* here we are sure we are dealing with an object */
  9670. do {
  9671. zend_object *zobj = Z_OBJ_P(container);
  9672. zend_string *name, *tmp_name;
  9673. zval *retval;
  9674. if (IS_CV == IS_CONST) {
  9675. cache_slot = CACHE_ADDR(opline->extended_value);
  9676. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  9677. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  9678. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  9679. retval = OBJ_PROP(zobj, prop_offset);
  9680. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  9681. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  9682. goto fetch_obj_is_copy;
  9683. } else {
  9684. fetch_obj_is_fast_copy:
  9685. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  9686. ZEND_VM_NEXT_OPCODE();
  9687. }
  9688. }
  9689. } else if (EXPECTED(zobj->properties != NULL)) {
  9690. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  9691. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  9692. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  9693. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  9694. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  9695. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  9696. (EXPECTED(p->key == name) ||
  9697. (EXPECTED(p->h == ZSTR_H(name)) &&
  9698. EXPECTED(p->key != NULL) &&
  9699. EXPECTED(zend_string_equal_content(p->key, name))))) {
  9700. retval = &p->val;
  9701. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  9702. goto fetch_obj_is_copy;
  9703. } else {
  9704. goto fetch_obj_is_fast_copy;
  9705. }
  9706. }
  9707. }
  9708. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  9709. }
  9710. retval = zend_hash_find_known_hash(zobj->properties, name);
  9711. if (EXPECTED(retval)) {
  9712. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  9713. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  9714. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  9715. goto fetch_obj_is_copy;
  9716. } else {
  9717. goto fetch_obj_is_fast_copy;
  9718. }
  9719. }
  9720. }
  9721. }
  9722. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  9723. } else {
  9724. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  9725. if (UNEXPECTED(!name)) {
  9726. ZVAL_UNDEF(EX_VAR(opline->result.var));
  9727. break;
  9728. }
  9729. }
  9730. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  9731. if (IS_CV != IS_CONST) {
  9732. zend_tmp_string_release(tmp_name);
  9733. }
  9734. if (retval != EX_VAR(opline->result.var)) {
  9735. fetch_obj_is_copy:
  9736. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  9737. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  9738. zend_unwrap_reference(retval);
  9739. }
  9740. } while (0);
  9741. fetch_obj_is_finish:
  9742. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9743. }
  9744. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9745. {
  9746. #if 0
  9747. USE_OPLINE
  9748. #endif
  9749. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  9750. /* Behave like FETCH_OBJ_W */
  9751. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  9752. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9753. }
  9754. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9755. } else {
  9756. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9757. }
  9758. }
  9759. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9760. {
  9761. USE_OPLINE
  9762. zval *container;
  9763. SAVE_OPLINE();
  9764. container = RT_CONSTANT(opline, opline->op1);
  9765. zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  9766. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9767. }
  9768. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9769. {
  9770. USE_OPLINE
  9771. zval *op1, *op2;
  9772. zend_string *op1_str, *op2_str, *str;
  9773. op1 = RT_CONSTANT(opline, opline->op1);
  9774. op2 = EX_VAR(opline->op2.var);
  9775. if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  9776. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  9777. zend_string *op1_str = Z_STR_P(op1);
  9778. zend_string *op2_str = Z_STR_P(op2);
  9779. zend_string *str;
  9780. if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  9781. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  9782. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  9783. } else {
  9784. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  9785. }
  9786. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  9787. zend_string_release_ex(op1_str, 0);
  9788. }
  9789. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  9790. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  9791. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  9792. } else {
  9793. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  9794. }
  9795. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  9796. zend_string_release_ex(op2_str, 0);
  9797. }
  9798. } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
  9799. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  9800. size_t len = ZSTR_LEN(op1_str);
  9801. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  9802. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  9803. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  9804. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  9805. zend_string_release_ex(op2_str, 0);
  9806. }
  9807. } else {
  9808. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  9809. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  9810. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  9811. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  9812. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  9813. zend_string_release_ex(op1_str, 0);
  9814. }
  9815. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  9816. zend_string_release_ex(op2_str, 0);
  9817. }
  9818. }
  9819. ZEND_VM_NEXT_OPCODE();
  9820. }
  9821. SAVE_OPLINE();
  9822. if (IS_CONST == IS_CONST) {
  9823. op1_str = Z_STR_P(op1);
  9824. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  9825. op1_str = zend_string_copy(Z_STR_P(op1));
  9826. } else {
  9827. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  9828. ZVAL_UNDEFINED_OP1();
  9829. }
  9830. op1_str = zval_get_string_func(op1);
  9831. }
  9832. if (IS_CV == IS_CONST) {
  9833. op2_str = Z_STR_P(op2);
  9834. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  9835. op2_str = zend_string_copy(Z_STR_P(op2));
  9836. } else {
  9837. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  9838. ZVAL_UNDEFINED_OP2();
  9839. }
  9840. op2_str = zval_get_string_func(op2);
  9841. }
  9842. do {
  9843. if (IS_CONST != IS_CONST) {
  9844. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  9845. if (IS_CV == IS_CONST) {
  9846. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  9847. GC_ADDREF(op2_str);
  9848. }
  9849. }
  9850. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  9851. zend_string_release_ex(op1_str, 0);
  9852. break;
  9853. }
  9854. }
  9855. if (IS_CV != IS_CONST) {
  9856. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  9857. if (IS_CONST == IS_CONST) {
  9858. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  9859. GC_ADDREF(op1_str);
  9860. }
  9861. }
  9862. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  9863. zend_string_release_ex(op2_str, 0);
  9864. break;
  9865. }
  9866. }
  9867. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  9868. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  9869. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  9870. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  9871. if (IS_CONST != IS_CONST) {
  9872. zend_string_release_ex(op1_str, 0);
  9873. }
  9874. if (IS_CV != IS_CONST) {
  9875. zend_string_release_ex(op2_str, 0);
  9876. }
  9877. } while (0);
  9878. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9879. }
  9880. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9881. {
  9882. USE_OPLINE
  9883. zval *function_name;
  9884. zval *object;
  9885. zend_function *fbc;
  9886. zend_class_entry *called_scope;
  9887. zend_object *obj;
  9888. zend_execute_data *call;
  9889. uint32_t call_info;
  9890. SAVE_OPLINE();
  9891. object = RT_CONSTANT(opline, opline->op1);
  9892. if (IS_CV != IS_CONST) {
  9893. function_name = EX_VAR(opline->op2.var);
  9894. }
  9895. if (IS_CV != IS_CONST &&
  9896. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  9897. do {
  9898. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  9899. function_name = Z_REFVAL_P(function_name);
  9900. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  9901. break;
  9902. }
  9903. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  9904. ZVAL_UNDEFINED_OP2();
  9905. if (UNEXPECTED(EG(exception) != NULL)) {
  9906. HANDLE_EXCEPTION();
  9907. }
  9908. }
  9909. zend_throw_error(NULL, "Method name must be a string");
  9910. HANDLE_EXCEPTION();
  9911. } while (0);
  9912. }
  9913. if (IS_CONST == IS_UNUSED) {
  9914. obj = Z_OBJ_P(object);
  9915. } else {
  9916. do {
  9917. if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  9918. obj = Z_OBJ_P(object);
  9919. } else {
  9920. if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  9921. zend_reference *ref = Z_REF_P(object);
  9922. object = &ref->val;
  9923. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  9924. obj = Z_OBJ_P(object);
  9925. if (IS_CONST & IS_VAR) {
  9926. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  9927. efree_size(ref, sizeof(zend_reference));
  9928. } else {
  9929. Z_ADDREF_P(object);
  9930. }
  9931. }
  9932. break;
  9933. }
  9934. }
  9935. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  9936. object = ZVAL_UNDEFINED_OP1();
  9937. if (UNEXPECTED(EG(exception) != NULL)) {
  9938. if (IS_CV != IS_CONST) {
  9939. }
  9940. HANDLE_EXCEPTION();
  9941. }
  9942. }
  9943. if (IS_CV == IS_CONST) {
  9944. function_name = EX_VAR(opline->op2.var);
  9945. }
  9946. zend_invalid_method_call(object, function_name);
  9947. HANDLE_EXCEPTION();
  9948. }
  9949. } while (0);
  9950. }
  9951. called_scope = obj->ce;
  9952. if (IS_CV == IS_CONST &&
  9953. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  9954. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  9955. } else {
  9956. zend_object *orig_obj = obj;
  9957. if (IS_CV == IS_CONST) {
  9958. function_name = EX_VAR(opline->op2.var);
  9959. }
  9960. /* First, locate the function. */
  9961. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  9962. if (UNEXPECTED(fbc == NULL)) {
  9963. if (EXPECTED(!EG(exception))) {
  9964. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  9965. }
  9966. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  9967. zend_objects_store_del(orig_obj);
  9968. }
  9969. HANDLE_EXCEPTION();
  9970. }
  9971. if (IS_CV == IS_CONST &&
  9972. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  9973. EXPECTED(obj == orig_obj)) {
  9974. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  9975. }
  9976. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  9977. GC_ADDREF(obj); /* For $this pointer */
  9978. if (GC_DELREF(orig_obj) == 0) {
  9979. zend_objects_store_del(orig_obj);
  9980. }
  9981. }
  9982. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  9983. init_func_run_time_cache(&fbc->op_array);
  9984. }
  9985. }
  9986. if (IS_CV != IS_CONST) {
  9987. }
  9988. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  9989. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  9990. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  9991. zend_objects_store_del(obj);
  9992. if (UNEXPECTED(EG(exception))) {
  9993. HANDLE_EXCEPTION();
  9994. }
  9995. }
  9996. /* call static method */
  9997. obj = (zend_object*)called_scope;
  9998. call_info = ZEND_CALL_NESTED_FUNCTION;
  9999. } else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  10000. if (IS_CONST == IS_CV) {
  10001. GC_ADDREF(obj); /* For $this pointer */
  10002. }
  10003. /* CV may be changed indirectly (e.g. when it's a reference) */
  10004. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  10005. }
  10006. call = zend_vm_stack_push_call_frame(call_info,
  10007. fbc, opline->extended_value, obj);
  10008. call->prev_execute_data = EX(call);
  10009. EX(call) = call;
  10010. ZEND_VM_NEXT_OPCODE();
  10011. }
  10012. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10013. {
  10014. USE_OPLINE
  10015. zval *function_name;
  10016. zend_class_entry *ce;
  10017. uint32_t call_info;
  10018. zend_function *fbc;
  10019. zend_execute_data *call;
  10020. SAVE_OPLINE();
  10021. if (IS_CONST == IS_CONST) {
  10022. /* no function found. try a static method in class */
  10023. ce = CACHED_PTR(opline->result.num);
  10024. if (UNEXPECTED(ce == NULL)) {
  10025. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  10026. if (UNEXPECTED(ce == NULL)) {
  10027. HANDLE_EXCEPTION();
  10028. }
  10029. if (IS_CV != IS_CONST) {
  10030. CACHE_PTR(opline->result.num, ce);
  10031. }
  10032. }
  10033. } else if (IS_CONST == IS_UNUSED) {
  10034. ce = zend_fetch_class(NULL, opline->op1.num);
  10035. if (UNEXPECTED(ce == NULL)) {
  10036. HANDLE_EXCEPTION();
  10037. }
  10038. } else {
  10039. ce = Z_CE_P(EX_VAR(opline->op1.var));
  10040. }
  10041. if (IS_CONST == IS_CONST &&
  10042. IS_CV == IS_CONST &&
  10043. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  10044. /* nothing to do */
  10045. } else if (IS_CONST != IS_CONST &&
  10046. IS_CV == IS_CONST &&
  10047. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  10048. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  10049. } else if (IS_CV != IS_UNUSED) {
  10050. function_name = EX_VAR(opline->op2.var);
  10051. if (IS_CV != IS_CONST) {
  10052. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  10053. do {
  10054. if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  10055. function_name = Z_REFVAL_P(function_name);
  10056. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  10057. break;
  10058. }
  10059. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  10060. ZVAL_UNDEFINED_OP2();
  10061. if (UNEXPECTED(EG(exception) != NULL)) {
  10062. HANDLE_EXCEPTION();
  10063. }
  10064. }
  10065. zend_throw_error(NULL, "Method name must be a string");
  10066. HANDLE_EXCEPTION();
  10067. } while (0);
  10068. }
  10069. }
  10070. if (ce->get_static_method) {
  10071. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  10072. } else {
  10073. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  10074. }
  10075. if (UNEXPECTED(fbc == NULL)) {
  10076. if (EXPECTED(!EG(exception))) {
  10077. zend_undefined_method(ce, Z_STR_P(function_name));
  10078. }
  10079. HANDLE_EXCEPTION();
  10080. }
  10081. if (IS_CV == IS_CONST &&
  10082. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  10083. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  10084. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  10085. }
  10086. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  10087. init_func_run_time_cache(&fbc->op_array);
  10088. }
  10089. if (IS_CV != IS_CONST) {
  10090. }
  10091. } else {
  10092. if (UNEXPECTED(ce->constructor == NULL)) {
  10093. zend_throw_error(NULL, "Cannot call constructor");
  10094. HANDLE_EXCEPTION();
  10095. }
  10096. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  10097. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  10098. HANDLE_EXCEPTION();
  10099. }
  10100. fbc = ce->constructor;
  10101. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  10102. init_func_run_time_cache(&fbc->op_array);
  10103. }
  10104. }
  10105. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  10106. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  10107. ce = (zend_class_entry*)Z_OBJ(EX(This));
  10108. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  10109. } else {
  10110. zend_non_static_method_call(fbc);
  10111. HANDLE_EXCEPTION();
  10112. }
  10113. } else {
  10114. /* previous opcode is ZEND_FETCH_CLASS */
  10115. if (IS_CONST == IS_UNUSED
  10116. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  10117. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  10118. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  10119. ce = Z_OBJCE(EX(This));
  10120. } else {
  10121. ce = Z_CE(EX(This));
  10122. }
  10123. }
  10124. call_info = ZEND_CALL_NESTED_FUNCTION;
  10125. }
  10126. call = zend_vm_stack_push_call_frame(call_info,
  10127. fbc, opline->extended_value, ce);
  10128. call->prev_execute_data = EX(call);
  10129. EX(call) = call;
  10130. ZEND_VM_NEXT_OPCODE();
  10131. }
  10132. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10133. {
  10134. USE_OPLINE
  10135. zval *function_name;
  10136. zend_fcall_info_cache fcc;
  10137. char *error = NULL;
  10138. zend_function *func;
  10139. void *object_or_called_scope;
  10140. zend_execute_data *call;
  10141. uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
  10142. SAVE_OPLINE();
  10143. function_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  10144. if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
  10145. ZEND_ASSERT(!error);
  10146. func = fcc.function_handler;
  10147. object_or_called_scope = fcc.called_scope;
  10148. if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
  10149. /* Delay closure destruction until its invocation */
  10150. GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
  10151. call_info |= ZEND_CALL_CLOSURE;
  10152. if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
  10153. call_info |= ZEND_CALL_FAKE_CLOSURE;
  10154. }
  10155. if (fcc.object) {
  10156. object_or_called_scope = fcc.object;
  10157. call_info |= ZEND_CALL_HAS_THIS;
  10158. }
  10159. } else if (fcc.object) {
  10160. GC_ADDREF(fcc.object); /* For $this pointer */
  10161. object_or_called_scope = fcc.object;
  10162. call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
  10163. }
  10164. if ((IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
  10165. if (call_info & ZEND_CALL_CLOSURE) {
  10166. zend_object_release(ZEND_CLOSURE_OBJECT(func));
  10167. } else if (call_info & ZEND_CALL_RELEASE_THIS) {
  10168. zend_object_release(fcc.object);
  10169. }
  10170. HANDLE_EXCEPTION();
  10171. }
  10172. if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
  10173. init_func_run_time_cache(&func->op_array);
  10174. }
  10175. } else {
  10176. zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
  10177. efree(error);
  10178. HANDLE_EXCEPTION();
  10179. }
  10180. call = zend_vm_stack_push_call_frame(call_info,
  10181. func, opline->extended_value, object_or_called_scope);
  10182. call->prev_execute_data = EX(call);
  10183. EX(call) = call;
  10184. ZEND_VM_NEXT_OPCODE();
  10185. }
  10186. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10187. {
  10188. USE_OPLINE
  10189. zval *expr_ptr, new_expr;
  10190. SAVE_OPLINE();
  10191. if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
  10192. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  10193. expr_ptr = NULL;
  10194. if (Z_ISREF_P(expr_ptr)) {
  10195. Z_ADDREF_P(expr_ptr);
  10196. } else {
  10197. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  10198. }
  10199. } else {
  10200. expr_ptr = RT_CONSTANT(opline, opline->op1);
  10201. if (IS_CONST == IS_TMP_VAR) {
  10202. /* pass */
  10203. } else if (IS_CONST == IS_CONST) {
  10204. Z_TRY_ADDREF_P(expr_ptr);
  10205. } else if (IS_CONST == IS_CV) {
  10206. ZVAL_DEREF(expr_ptr);
  10207. Z_TRY_ADDREF_P(expr_ptr);
  10208. } else /* if (IS_CONST == IS_VAR) */ {
  10209. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  10210. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  10211. expr_ptr = Z_REFVAL_P(expr_ptr);
  10212. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  10213. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  10214. expr_ptr = &new_expr;
  10215. efree_size(ref, sizeof(zend_reference));
  10216. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  10217. Z_ADDREF_P(expr_ptr);
  10218. }
  10219. }
  10220. }
  10221. }
  10222. if (IS_CV != IS_UNUSED) {
  10223. zval *offset = EX_VAR(opline->op2.var);
  10224. zend_string *str;
  10225. zend_ulong hval;
  10226. add_again:
  10227. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  10228. str = Z_STR_P(offset);
  10229. if (IS_CV != IS_CONST) {
  10230. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  10231. goto num_index;
  10232. }
  10233. }
  10234. str_index:
  10235. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  10236. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  10237. hval = Z_LVAL_P(offset);
  10238. num_index:
  10239. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  10240. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  10241. offset = Z_REFVAL_P(offset);
  10242. goto add_again;
  10243. } else if (Z_TYPE_P(offset) == IS_NULL) {
  10244. str = ZSTR_EMPTY_ALLOC();
  10245. goto str_index;
  10246. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  10247. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  10248. goto num_index;
  10249. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  10250. hval = 0;
  10251. goto num_index;
  10252. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  10253. hval = 1;
  10254. goto num_index;
  10255. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  10256. zend_use_resource_as_offset(offset);
  10257. hval = Z_RES_HANDLE_P(offset);
  10258. goto num_index;
  10259. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  10260. ZVAL_UNDEFINED_OP2();
  10261. str = ZSTR_EMPTY_ALLOC();
  10262. goto str_index;
  10263. } else {
  10264. zend_illegal_offset();
  10265. zval_ptr_dtor_nogc(expr_ptr);
  10266. }
  10267. } else {
  10268. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  10269. zend_cannot_add_element();
  10270. zval_ptr_dtor_nogc(expr_ptr);
  10271. }
  10272. }
  10273. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10274. }
  10275. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10276. {
  10277. zval *array;
  10278. uint32_t size;
  10279. USE_OPLINE
  10280. array = EX_VAR(opline->result.var);
  10281. if (IS_CONST != IS_UNUSED) {
  10282. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  10283. ZVAL_ARR(array, zend_new_array(size));
  10284. /* Explicitly initialize array as not-packed if flag is set */
  10285. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  10286. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  10287. }
  10288. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  10289. } else {
  10290. ZVAL_ARR(array, zend_new_array(0));
  10291. ZEND_VM_NEXT_OPCODE();
  10292. }
  10293. }
  10294. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10295. {
  10296. USE_OPLINE
  10297. zval *container;
  10298. bool result;
  10299. zend_ulong hval;
  10300. zval *offset;
  10301. SAVE_OPLINE();
  10302. container = RT_CONSTANT(opline, opline->op1);
  10303. offset = EX_VAR(opline->op2.var);
  10304. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  10305. HashTable *ht;
  10306. zval *value;
  10307. zend_string *str;
  10308. isset_dim_obj_array:
  10309. ht = Z_ARRVAL_P(container);
  10310. isset_again:
  10311. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  10312. str = Z_STR_P(offset);
  10313. if (IS_CV != IS_CONST) {
  10314. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  10315. goto num_index_prop;
  10316. }
  10317. }
  10318. value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
  10319. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  10320. hval = Z_LVAL_P(offset);
  10321. num_index_prop:
  10322. value = zend_hash_index_find(ht, hval);
  10323. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  10324. offset = Z_REFVAL_P(offset);
  10325. goto isset_again;
  10326. } else {
  10327. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  10328. if (UNEXPECTED(EG(exception))) {
  10329. result = 0;
  10330. goto isset_dim_obj_exit;
  10331. }
  10332. }
  10333. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  10334. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  10335. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  10336. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  10337. if (IS_CONST & (IS_CONST|IS_CV)) {
  10338. /* avoid exception check */
  10339. ZEND_VM_SMART_BRANCH(result, 0);
  10340. }
  10341. } else {
  10342. result = (value == NULL || !i_zend_is_true(value));
  10343. }
  10344. goto isset_dim_obj_exit;
  10345. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  10346. container = Z_REFVAL_P(container);
  10347. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  10348. goto isset_dim_obj_array;
  10349. }
  10350. }
  10351. if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  10352. offset++;
  10353. }
  10354. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  10355. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  10356. } else {
  10357. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  10358. }
  10359. isset_dim_obj_exit:
  10360. ZEND_VM_SMART_BRANCH(result, 1);
  10361. }
  10362. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10363. {
  10364. USE_OPLINE
  10365. zval *container;
  10366. int result;
  10367. zval *offset;
  10368. zend_string *name, *tmp_name;
  10369. SAVE_OPLINE();
  10370. container = RT_CONSTANT(opline, opline->op1);
  10371. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  10372. if (IS_CONST == IS_CONST ||
  10373. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  10374. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  10375. container = Z_REFVAL_P(container);
  10376. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  10377. result = (opline->extended_value & ZEND_ISEMPTY);
  10378. goto isset_object_finish;
  10379. }
  10380. } else {
  10381. result = (opline->extended_value & ZEND_ISEMPTY);
  10382. goto isset_object_finish;
  10383. }
  10384. }
  10385. if (IS_CV == IS_CONST) {
  10386. name = Z_STR_P(offset);
  10387. } else {
  10388. name = zval_try_get_tmp_string(offset, &tmp_name);
  10389. if (UNEXPECTED(!name)) {
  10390. result = 0;
  10391. goto isset_object_finish;
  10392. }
  10393. }
  10394. result =
  10395. (opline->extended_value & ZEND_ISEMPTY) ^
  10396. Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  10397. if (IS_CV != IS_CONST) {
  10398. zend_tmp_string_release(tmp_name);
  10399. }
  10400. isset_object_finish:
  10401. ZEND_VM_SMART_BRANCH(result, 1);
  10402. }
  10403. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10404. {
  10405. USE_OPLINE
  10406. zval *key, *subject;
  10407. HashTable *ht;
  10408. bool result;
  10409. SAVE_OPLINE();
  10410. key = RT_CONSTANT(opline, opline->op1);
  10411. subject = EX_VAR(opline->op2.var);
  10412. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  10413. array_key_exists_array:
  10414. ht = Z_ARRVAL_P(subject);
  10415. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  10416. } else {
  10417. if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  10418. subject = Z_REFVAL_P(subject);
  10419. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  10420. goto array_key_exists_array;
  10421. }
  10422. }
  10423. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  10424. result = 0;
  10425. }
  10426. ZEND_VM_SMART_BRANCH(result, 1);
  10427. }
  10428. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  10429. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10430. {
  10431. USE_OPLINE
  10432. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  10433. SAVE_OPLINE();
  10434. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  10435. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  10436. }
  10437. /* Destroy the previously yielded value */
  10438. zval_ptr_dtor(&generator->value);
  10439. /* Destroy the previously yielded key */
  10440. zval_ptr_dtor(&generator->key);
  10441. /* Set the new yielded value */
  10442. if (IS_CONST != IS_UNUSED) {
  10443. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  10444. /* Constants and temporary variables aren't yieldable by reference,
  10445. * but we still allow them with a notice. */
  10446. if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
  10447. zval *value;
  10448. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  10449. value = RT_CONSTANT(opline, opline->op1);
  10450. ZVAL_COPY_VALUE(&generator->value, value);
  10451. if (IS_CONST == IS_CONST) {
  10452. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  10453. Z_ADDREF(generator->value);
  10454. }
  10455. }
  10456. } else {
  10457. zval *value_ptr = NULL;
  10458. /* If a function call result is yielded and the function did
  10459. * not return by reference we throw a notice. */
  10460. do {
  10461. if (IS_CONST == IS_VAR) {
  10462. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  10463. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  10464. && !Z_ISREF_P(value_ptr)) {
  10465. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  10466. ZVAL_COPY(&generator->value, value_ptr);
  10467. break;
  10468. }
  10469. }
  10470. if (Z_ISREF_P(value_ptr)) {
  10471. Z_ADDREF_P(value_ptr);
  10472. } else {
  10473. ZVAL_MAKE_REF_EX(value_ptr, 2);
  10474. }
  10475. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  10476. } while (0);
  10477. }
  10478. } else {
  10479. zval *value = RT_CONSTANT(opline, opline->op1);
  10480. /* Consts, temporary variables and references need copying */
  10481. if (IS_CONST == IS_CONST) {
  10482. ZVAL_COPY_VALUE(&generator->value, value);
  10483. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  10484. Z_ADDREF(generator->value);
  10485. }
  10486. } else if (IS_CONST == IS_TMP_VAR) {
  10487. ZVAL_COPY_VALUE(&generator->value, value);
  10488. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  10489. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  10490. } else {
  10491. ZVAL_COPY_VALUE(&generator->value, value);
  10492. if (IS_CONST == IS_CV) {
  10493. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  10494. }
  10495. }
  10496. }
  10497. } else {
  10498. /* If no value was specified yield null */
  10499. ZVAL_NULL(&generator->value);
  10500. }
  10501. /* Set the new yielded key */
  10502. if (IS_CV != IS_UNUSED) {
  10503. zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  10504. if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  10505. key = Z_REFVAL_P(key);
  10506. }
  10507. ZVAL_COPY(&generator->key, key);
  10508. if (Z_TYPE(generator->key) == IS_LONG
  10509. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  10510. ) {
  10511. generator->largest_used_integer_key = Z_LVAL(generator->key);
  10512. }
  10513. } else {
  10514. /* If no key was specified we use auto-increment keys */
  10515. generator->largest_used_integer_key++;
  10516. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  10517. }
  10518. if (RETURN_VALUE_USED(opline)) {
  10519. /* If the return value of yield is used set the send
  10520. * target and initialize it to NULL */
  10521. generator->send_target = EX_VAR(opline->result.var);
  10522. ZVAL_NULL(generator->send_target);
  10523. } else {
  10524. generator->send_target = NULL;
  10525. }
  10526. /* We increment to the next op, so we are at the correct position when the
  10527. * generator is resumed. */
  10528. ZEND_VM_INC_OPCODE();
  10529. /* The GOTO VM uses a local opline variable. We need to set the opline
  10530. * variable in execute_data so we don't resume at an old position. */
  10531. SAVE_OPLINE();
  10532. ZEND_VM_RETURN();
  10533. }
  10534. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10535. {
  10536. USE_OPLINE
  10537. zval *op1;
  10538. op1 = EX_VAR(opline->op1.var);
  10539. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10540. ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
  10541. ZEND_VM_NEXT_OPCODE();
  10542. }
  10543. ZEND_VM_TAIL_CALL(zend_bw_not_helper_SPEC(op1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10544. }
  10545. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10546. {
  10547. USE_OPLINE
  10548. zval *value;
  10549. value = EX_VAR(opline->op1.var);
  10550. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
  10551. ZEND_VM_NEXT_OPCODE();
  10552. }
  10553. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10554. {
  10555. USE_OPLINE
  10556. zval *value;
  10557. value = EX_VAR(opline->op1.var);
  10558. ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
  10559. ZEND_VM_NEXT_OPCODE();
  10560. }
  10561. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10562. {
  10563. USE_OPLINE
  10564. zval *value;
  10565. value = EX_VAR(opline->op1.var);
  10566. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
  10567. ZEND_VM_NEXT_OPCODE();
  10568. }
  10569. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10570. {
  10571. USE_OPLINE
  10572. zval *op1, *op2, *result;
  10573. double d1, d2;
  10574. op1 = EX_VAR(opline->op1.var);
  10575. op2 = RT_CONSTANT(opline, opline->op2);
  10576. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10577. /* pass */
  10578. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10579. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10580. result = EX_VAR(opline->result.var);
  10581. fast_long_add_function(result, op1, op2);
  10582. ZEND_VM_NEXT_OPCODE();
  10583. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10584. d1 = (double)Z_LVAL_P(op1);
  10585. d2 = Z_DVAL_P(op2);
  10586. goto add_double;
  10587. }
  10588. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10589. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10590. d1 = Z_DVAL_P(op1);
  10591. d2 = Z_DVAL_P(op2);
  10592. add_double:
  10593. result = EX_VAR(opline->result.var);
  10594. ZVAL_DOUBLE(result, d1 + d2);
  10595. ZEND_VM_NEXT_OPCODE();
  10596. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10597. d1 = Z_DVAL_P(op1);
  10598. d2 = (double)Z_LVAL_P(op2);
  10599. goto add_double;
  10600. }
  10601. }
  10602. ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10603. }
  10604. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10605. {
  10606. USE_OPLINE
  10607. zval *op1, *op2, *result;
  10608. double d1, d2;
  10609. op1 = EX_VAR(opline->op1.var);
  10610. op2 = RT_CONSTANT(opline, opline->op2);
  10611. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10612. /* pass */
  10613. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10614. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10615. result = EX_VAR(opline->result.var);
  10616. fast_long_sub_function(result, op1, op2);
  10617. ZEND_VM_NEXT_OPCODE();
  10618. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10619. d1 = (double)Z_LVAL_P(op1);
  10620. d2 = Z_DVAL_P(op2);
  10621. goto sub_double;
  10622. }
  10623. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10624. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10625. d1 = Z_DVAL_P(op1);
  10626. d2 = Z_DVAL_P(op2);
  10627. sub_double:
  10628. result = EX_VAR(opline->result.var);
  10629. ZVAL_DOUBLE(result, d1 - d2);
  10630. ZEND_VM_NEXT_OPCODE();
  10631. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10632. d1 = Z_DVAL_P(op1);
  10633. d2 = (double)Z_LVAL_P(op2);
  10634. goto sub_double;
  10635. }
  10636. }
  10637. ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10638. }
  10639. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10640. {
  10641. USE_OPLINE
  10642. zval *op1, *op2, *result;
  10643. double d1, d2;
  10644. op1 = EX_VAR(opline->op1.var);
  10645. op2 = RT_CONSTANT(opline, opline->op2);
  10646. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10647. /* pass */
  10648. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10649. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10650. zend_long overflow;
  10651. result = EX_VAR(opline->result.var);
  10652. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  10653. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  10654. ZEND_VM_NEXT_OPCODE();
  10655. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10656. d1 = (double)Z_LVAL_P(op1);
  10657. d2 = Z_DVAL_P(op2);
  10658. goto mul_double;
  10659. }
  10660. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10661. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10662. d1 = Z_DVAL_P(op1);
  10663. d2 = Z_DVAL_P(op2);
  10664. mul_double:
  10665. result = EX_VAR(opline->result.var);
  10666. ZVAL_DOUBLE(result, d1 * d2);
  10667. ZEND_VM_NEXT_OPCODE();
  10668. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10669. d1 = Z_DVAL_P(op1);
  10670. d2 = (double)Z_LVAL_P(op2);
  10671. goto mul_double;
  10672. }
  10673. }
  10674. ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10675. }
  10676. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10677. {
  10678. USE_OPLINE
  10679. zval *op1, *op2, *result;
  10680. op1 = EX_VAR(opline->op1.var);
  10681. op2 = RT_CONSTANT(opline, opline->op2);
  10682. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10683. /* pass */
  10684. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10685. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10686. result = EX_VAR(opline->result.var);
  10687. if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
  10688. ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  10689. } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
  10690. /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
  10691. ZVAL_LONG(result, 0);
  10692. } else {
  10693. ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
  10694. }
  10695. ZEND_VM_NEXT_OPCODE();
  10696. }
  10697. }
  10698. ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10699. }
  10700. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10701. {
  10702. USE_OPLINE
  10703. zval *op1, *op2;
  10704. op1 = EX_VAR(opline->op1.var);
  10705. op2 = RT_CONSTANT(opline, opline->op2);
  10706. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10707. /* pass */
  10708. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  10709. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  10710. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  10711. /* Perform shift on unsigned numbers to get well-defined wrap behavior. */
  10712. ZVAL_LONG(EX_VAR(opline->result.var),
  10713. (zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
  10714. ZEND_VM_NEXT_OPCODE();
  10715. }
  10716. ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10717. }
  10718. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10719. {
  10720. USE_OPLINE
  10721. zval *op1, *op2;
  10722. op1 = EX_VAR(opline->op1.var);
  10723. op2 = RT_CONSTANT(opline, opline->op2);
  10724. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10725. /* pass */
  10726. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  10727. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  10728. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  10729. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
  10730. ZEND_VM_NEXT_OPCODE();
  10731. }
  10732. ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10733. }
  10734. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10735. {
  10736. USE_OPLINE
  10737. zval *op1, *op2;
  10738. double d1, d2;
  10739. op1 = EX_VAR(opline->op1.var);
  10740. op2 = RT_CONSTANT(opline, opline->op2);
  10741. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10742. /* pass */
  10743. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10744. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10745. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  10746. is_smaller_true:
  10747. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  10748. } else {
  10749. is_smaller_false:
  10750. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  10751. }
  10752. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10753. d1 = (double)Z_LVAL_P(op1);
  10754. d2 = Z_DVAL_P(op2);
  10755. goto is_smaller_double;
  10756. }
  10757. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10758. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10759. d1 = Z_DVAL_P(op1);
  10760. d2 = Z_DVAL_P(op2);
  10761. is_smaller_double:
  10762. if (d1 < d2) {
  10763. goto is_smaller_true;
  10764. } else {
  10765. goto is_smaller_false;
  10766. }
  10767. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10768. d1 = Z_DVAL_P(op1);
  10769. d2 = (double)Z_LVAL_P(op2);
  10770. goto is_smaller_double;
  10771. }
  10772. }
  10773. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10774. }
  10775. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10776. {
  10777. USE_OPLINE
  10778. zval *op1, *op2;
  10779. double d1, d2;
  10780. op1 = EX_VAR(opline->op1.var);
  10781. op2 = RT_CONSTANT(opline, opline->op2);
  10782. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10783. /* pass */
  10784. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10785. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10786. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  10787. is_smaller_true:
  10788. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  10789. } else {
  10790. is_smaller_false:
  10791. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  10792. }
  10793. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10794. d1 = (double)Z_LVAL_P(op1);
  10795. d2 = Z_DVAL_P(op2);
  10796. goto is_smaller_double;
  10797. }
  10798. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10799. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10800. d1 = Z_DVAL_P(op1);
  10801. d2 = Z_DVAL_P(op2);
  10802. is_smaller_double:
  10803. if (d1 < d2) {
  10804. goto is_smaller_true;
  10805. } else {
  10806. goto is_smaller_false;
  10807. }
  10808. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10809. d1 = Z_DVAL_P(op1);
  10810. d2 = (double)Z_LVAL_P(op2);
  10811. goto is_smaller_double;
  10812. }
  10813. }
  10814. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10815. }
  10816. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10817. {
  10818. USE_OPLINE
  10819. zval *op1, *op2;
  10820. double d1, d2;
  10821. op1 = EX_VAR(opline->op1.var);
  10822. op2 = RT_CONSTANT(opline, opline->op2);
  10823. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10824. /* pass */
  10825. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10826. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10827. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  10828. is_smaller_true:
  10829. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  10830. } else {
  10831. is_smaller_false:
  10832. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  10833. }
  10834. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10835. d1 = (double)Z_LVAL_P(op1);
  10836. d2 = Z_DVAL_P(op2);
  10837. goto is_smaller_double;
  10838. }
  10839. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10840. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10841. d1 = Z_DVAL_P(op1);
  10842. d2 = Z_DVAL_P(op2);
  10843. is_smaller_double:
  10844. if (d1 < d2) {
  10845. goto is_smaller_true;
  10846. } else {
  10847. goto is_smaller_false;
  10848. }
  10849. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10850. d1 = Z_DVAL_P(op1);
  10851. d2 = (double)Z_LVAL_P(op2);
  10852. goto is_smaller_double;
  10853. }
  10854. }
  10855. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10856. }
  10857. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10858. {
  10859. USE_OPLINE
  10860. zval *op1, *op2;
  10861. double d1, d2;
  10862. op1 = EX_VAR(opline->op1.var);
  10863. op2 = RT_CONSTANT(opline, opline->op2);
  10864. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10865. /* pass */
  10866. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10867. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10868. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  10869. is_smaller_or_equal_true:
  10870. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  10871. ZVAL_TRUE(EX_VAR(opline->result.var));
  10872. ZEND_VM_NEXT_OPCODE();
  10873. } else {
  10874. is_smaller_or_equal_false:
  10875. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  10876. ZVAL_FALSE(EX_VAR(opline->result.var));
  10877. ZEND_VM_NEXT_OPCODE();
  10878. }
  10879. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10880. d1 = (double)Z_LVAL_P(op1);
  10881. d2 = Z_DVAL_P(op2);
  10882. goto is_smaller_or_equal_double;
  10883. }
  10884. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10885. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10886. d1 = Z_DVAL_P(op1);
  10887. d2 = Z_DVAL_P(op2);
  10888. is_smaller_or_equal_double:
  10889. if (d1 <= d2) {
  10890. goto is_smaller_or_equal_true;
  10891. } else {
  10892. goto is_smaller_or_equal_false;
  10893. }
  10894. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10895. d1 = Z_DVAL_P(op1);
  10896. d2 = (double)Z_LVAL_P(op2);
  10897. goto is_smaller_or_equal_double;
  10898. }
  10899. }
  10900. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10901. }
  10902. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10903. {
  10904. USE_OPLINE
  10905. zval *op1, *op2;
  10906. double d1, d2;
  10907. op1 = EX_VAR(opline->op1.var);
  10908. op2 = RT_CONSTANT(opline, opline->op2);
  10909. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10910. /* pass */
  10911. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10912. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10913. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  10914. is_smaller_or_equal_true:
  10915. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  10916. ZVAL_TRUE(EX_VAR(opline->result.var));
  10917. ZEND_VM_NEXT_OPCODE();
  10918. } else {
  10919. is_smaller_or_equal_false:
  10920. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  10921. ZVAL_FALSE(EX_VAR(opline->result.var));
  10922. ZEND_VM_NEXT_OPCODE();
  10923. }
  10924. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10925. d1 = (double)Z_LVAL_P(op1);
  10926. d2 = Z_DVAL_P(op2);
  10927. goto is_smaller_or_equal_double;
  10928. }
  10929. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10930. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10931. d1 = Z_DVAL_P(op1);
  10932. d2 = Z_DVAL_P(op2);
  10933. is_smaller_or_equal_double:
  10934. if (d1 <= d2) {
  10935. goto is_smaller_or_equal_true;
  10936. } else {
  10937. goto is_smaller_or_equal_false;
  10938. }
  10939. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10940. d1 = Z_DVAL_P(op1);
  10941. d2 = (double)Z_LVAL_P(op2);
  10942. goto is_smaller_or_equal_double;
  10943. }
  10944. }
  10945. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10946. }
  10947. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10948. {
  10949. USE_OPLINE
  10950. zval *op1, *op2;
  10951. double d1, d2;
  10952. op1 = EX_VAR(opline->op1.var);
  10953. op2 = RT_CONSTANT(opline, opline->op2);
  10954. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10955. /* pass */
  10956. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10957. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10958. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  10959. is_smaller_or_equal_true:
  10960. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  10961. ZVAL_TRUE(EX_VAR(opline->result.var));
  10962. ZEND_VM_NEXT_OPCODE();
  10963. } else {
  10964. is_smaller_or_equal_false:
  10965. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  10966. ZVAL_FALSE(EX_VAR(opline->result.var));
  10967. ZEND_VM_NEXT_OPCODE();
  10968. }
  10969. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10970. d1 = (double)Z_LVAL_P(op1);
  10971. d2 = Z_DVAL_P(op2);
  10972. goto is_smaller_or_equal_double;
  10973. }
  10974. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10975. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10976. d1 = Z_DVAL_P(op1);
  10977. d2 = Z_DVAL_P(op2);
  10978. is_smaller_or_equal_double:
  10979. if (d1 <= d2) {
  10980. goto is_smaller_or_equal_true;
  10981. } else {
  10982. goto is_smaller_or_equal_false;
  10983. }
  10984. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10985. d1 = Z_DVAL_P(op1);
  10986. d2 = (double)Z_LVAL_P(op2);
  10987. goto is_smaller_or_equal_double;
  10988. }
  10989. }
  10990. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10991. }
  10992. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10993. {
  10994. USE_OPLINE
  10995. zval *op1, *op2;
  10996. op1 = EX_VAR(opline->op1.var);
  10997. op2 = RT_CONSTANT(opline, opline->op2);
  10998. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10999. /* pass */
  11000. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  11001. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11002. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
  11003. ZEND_VM_NEXT_OPCODE();
  11004. }
  11005. ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11006. }
  11007. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11008. {
  11009. USE_OPLINE
  11010. zval *op1, *op2;
  11011. op1 = EX_VAR(opline->op1.var);
  11012. op2 = RT_CONSTANT(opline, opline->op2);
  11013. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  11014. /* pass */
  11015. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  11016. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11017. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
  11018. ZEND_VM_NEXT_OPCODE();
  11019. }
  11020. ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11021. }
  11022. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11023. {
  11024. USE_OPLINE
  11025. zval *op1, *op2;
  11026. op1 = EX_VAR(opline->op1.var);
  11027. op2 = RT_CONSTANT(opline, opline->op2);
  11028. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  11029. /* pass */
  11030. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  11031. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11032. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
  11033. ZEND_VM_NEXT_OPCODE();
  11034. }
  11035. ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11036. }
  11037. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11038. {
  11039. USE_OPLINE
  11040. zval *container;
  11041. SAVE_OPLINE();
  11042. container = EX_VAR(opline->op1.var);
  11043. zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  11044. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11045. }
  11046. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11047. {
  11048. USE_OPLINE
  11049. zval *op, *jump_zv;
  11050. HashTable *jumptable;
  11051. op = EX_VAR(opline->op1.var);
  11052. if (Z_TYPE_P(op) != IS_LONG) {
  11053. ZVAL_DEREF(op);
  11054. if (Z_TYPE_P(op) != IS_LONG) {
  11055. /* Wrong type, fall back to ZEND_CASE chain */
  11056. ZEND_VM_NEXT_OPCODE();
  11057. }
  11058. }
  11059. jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  11060. jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
  11061. if (jump_zv != NULL) {
  11062. ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
  11063. ZEND_VM_CONTINUE();
  11064. } else {
  11065. /* default */
  11066. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  11067. ZEND_VM_CONTINUE();
  11068. }
  11069. }
  11070. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11071. {
  11072. USE_OPLINE
  11073. zval *op, *jump_zv;
  11074. HashTable *jumptable;
  11075. op = EX_VAR(opline->op1.var);
  11076. if (Z_TYPE_P(op) != IS_STRING) {
  11077. if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11078. /* Wrong type, fall back to ZEND_CASE chain */
  11079. ZEND_VM_NEXT_OPCODE();
  11080. } else {
  11081. ZVAL_DEREF(op);
  11082. if (Z_TYPE_P(op) != IS_STRING) {
  11083. /* Wrong type, fall back to ZEND_CASE chain */
  11084. ZEND_VM_NEXT_OPCODE();
  11085. }
  11086. }
  11087. }
  11088. jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  11089. jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
  11090. if (jump_zv != NULL) {
  11091. ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
  11092. ZEND_VM_CONTINUE();
  11093. } else {
  11094. /* default */
  11095. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  11096. ZEND_VM_CONTINUE();
  11097. }
  11098. }
  11099. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11100. {
  11101. USE_OPLINE
  11102. zval *op, *jump_zv;
  11103. HashTable *jumptable;
  11104. op = EX_VAR(opline->op1.var);
  11105. jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  11106. match_try_again:
  11107. if (Z_TYPE_P(op) == IS_LONG) {
  11108. jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
  11109. } else if (Z_TYPE_P(op) == IS_STRING) {
  11110. jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
  11111. } else if (Z_TYPE_P(op) == IS_REFERENCE) {
  11112. op = Z_REFVAL_P(op);
  11113. goto match_try_again;
  11114. } else {
  11115. if (UNEXPECTED(((IS_TMP_VAR|IS_VAR|IS_CV) & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) {
  11116. SAVE_OPLINE();
  11117. op = ZVAL_UNDEFINED_OP1();
  11118. if (UNEXPECTED(EG(exception))) {
  11119. HANDLE_EXCEPTION();
  11120. }
  11121. goto match_try_again;
  11122. }
  11123. goto default_branch;
  11124. }
  11125. if (jump_zv != NULL) {
  11126. ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
  11127. ZEND_VM_CONTINUE();
  11128. } else {
  11129. default_branch:
  11130. /* default */
  11131. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  11132. ZEND_VM_CONTINUE();
  11133. }
  11134. }
  11135. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11136. {
  11137. USE_OPLINE
  11138. zval *op1, *op2, *result;
  11139. op1 = EX_VAR(opline->op1.var);
  11140. op2 = RT_CONSTANT(opline, opline->op2);
  11141. result = EX_VAR(opline->result.var);
  11142. ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
  11143. ZEND_VM_NEXT_OPCODE();
  11144. }
  11145. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11146. {
  11147. USE_OPLINE
  11148. zval *op1, *op2, *result;
  11149. op1 = EX_VAR(opline->op1.var);
  11150. op2 = RT_CONSTANT(opline, opline->op2);
  11151. result = EX_VAR(opline->result.var);
  11152. fast_long_add_function(result, op1, op2);
  11153. ZEND_VM_NEXT_OPCODE();
  11154. }
  11155. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11156. {
  11157. USE_OPLINE
  11158. zval *op1, *op2, *result;
  11159. op1 = EX_VAR(opline->op1.var);
  11160. op2 = RT_CONSTANT(opline, opline->op2);
  11161. result = EX_VAR(opline->result.var);
  11162. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
  11163. ZEND_VM_NEXT_OPCODE();
  11164. }
  11165. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11166. {
  11167. USE_OPLINE
  11168. zval *op1, *op2, *result;
  11169. op1 = EX_VAR(opline->op1.var);
  11170. op2 = RT_CONSTANT(opline, opline->op2);
  11171. result = EX_VAR(opline->result.var);
  11172. ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
  11173. ZEND_VM_NEXT_OPCODE();
  11174. }
  11175. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11176. {
  11177. USE_OPLINE
  11178. zval *op1, *op2, *result;
  11179. op1 = EX_VAR(opline->op1.var);
  11180. op2 = RT_CONSTANT(opline, opline->op2);
  11181. result = EX_VAR(opline->result.var);
  11182. fast_long_sub_function(result, op1, op2);
  11183. ZEND_VM_NEXT_OPCODE();
  11184. }
  11185. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11186. {
  11187. USE_OPLINE
  11188. zval *op1, *op2, *result;
  11189. op1 = EX_VAR(opline->op1.var);
  11190. op2 = RT_CONSTANT(opline, opline->op2);
  11191. result = EX_VAR(opline->result.var);
  11192. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  11193. ZEND_VM_NEXT_OPCODE();
  11194. }
  11195. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11196. {
  11197. USE_OPLINE
  11198. zval *op1, *op2, *result;
  11199. op1 = EX_VAR(opline->op1.var);
  11200. op2 = RT_CONSTANT(opline, opline->op2);
  11201. result = EX_VAR(opline->result.var);
  11202. ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
  11203. ZEND_VM_NEXT_OPCODE();
  11204. }
  11205. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11206. {
  11207. USE_OPLINE
  11208. zval *op1, *op2, *result;
  11209. zend_long overflow;
  11210. op1 = EX_VAR(opline->op1.var);
  11211. op2 = RT_CONSTANT(opline, opline->op2);
  11212. result = EX_VAR(opline->result.var);
  11213. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  11214. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  11215. ZEND_VM_NEXT_OPCODE();
  11216. }
  11217. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11218. {
  11219. USE_OPLINE
  11220. zval *op1, *op2, *result;
  11221. op1 = EX_VAR(opline->op1.var);
  11222. op2 = RT_CONSTANT(opline, opline->op2);
  11223. result = EX_VAR(opline->result.var);
  11224. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
  11225. ZEND_VM_NEXT_OPCODE();
  11226. }
  11227. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11228. {
  11229. USE_OPLINE
  11230. zval *op1, *op2;
  11231. bool result;
  11232. op1 = EX_VAR(opline->op1.var);
  11233. op2 = RT_CONSTANT(opline, opline->op2);
  11234. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  11235. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  11236. }
  11237. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11238. {
  11239. USE_OPLINE
  11240. zval *op1, *op2;
  11241. bool result;
  11242. op1 = EX_VAR(opline->op1.var);
  11243. op2 = RT_CONSTANT(opline, opline->op2);
  11244. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  11245. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  11246. }
  11247. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11248. {
  11249. USE_OPLINE
  11250. zval *op1, *op2;
  11251. bool result;
  11252. op1 = EX_VAR(opline->op1.var);
  11253. op2 = RT_CONSTANT(opline, opline->op2);
  11254. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  11255. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  11256. }
  11257. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11258. {
  11259. USE_OPLINE
  11260. zval *op1, *op2;
  11261. bool result;
  11262. op1 = EX_VAR(opline->op1.var);
  11263. op2 = RT_CONSTANT(opline, opline->op2);
  11264. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  11265. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  11266. }
  11267. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11268. {
  11269. USE_OPLINE
  11270. zval *op1, *op2;
  11271. bool result;
  11272. op1 = EX_VAR(opline->op1.var);
  11273. op2 = RT_CONSTANT(opline, opline->op2);
  11274. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  11275. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  11276. }
  11277. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11278. {
  11279. USE_OPLINE
  11280. zval *op1, *op2;
  11281. bool result;
  11282. op1 = EX_VAR(opline->op1.var);
  11283. op2 = RT_CONSTANT(opline, opline->op2);
  11284. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  11285. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  11286. }
  11287. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11288. {
  11289. USE_OPLINE
  11290. zval *op1, *op2;
  11291. bool result;
  11292. op1 = EX_VAR(opline->op1.var);
  11293. op2 = RT_CONSTANT(opline, opline->op2);
  11294. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  11295. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  11296. }
  11297. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11298. {
  11299. USE_OPLINE
  11300. zval *op1, *op2;
  11301. bool result;
  11302. op1 = EX_VAR(opline->op1.var);
  11303. op2 = RT_CONSTANT(opline, opline->op2);
  11304. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  11305. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  11306. }
  11307. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11308. {
  11309. USE_OPLINE
  11310. zval *op1, *op2;
  11311. bool result;
  11312. op1 = EX_VAR(opline->op1.var);
  11313. op2 = RT_CONSTANT(opline, opline->op2);
  11314. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  11315. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  11316. }
  11317. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11318. {
  11319. USE_OPLINE
  11320. zval *op1, *op2;
  11321. bool result;
  11322. op1 = EX_VAR(opline->op1.var);
  11323. op2 = RT_CONSTANT(opline, opline->op2);
  11324. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  11325. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  11326. }
  11327. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11328. {
  11329. USE_OPLINE
  11330. zval *op1, *op2;
  11331. bool result;
  11332. op1 = EX_VAR(opline->op1.var);
  11333. op2 = RT_CONSTANT(opline, opline->op2);
  11334. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  11335. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  11336. }
  11337. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11338. {
  11339. USE_OPLINE
  11340. zval *op1, *op2;
  11341. bool result;
  11342. op1 = EX_VAR(opline->op1.var);
  11343. op2 = RT_CONSTANT(opline, opline->op2);
  11344. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  11345. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  11346. }
  11347. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11348. {
  11349. USE_OPLINE
  11350. zval *op1, *op2;
  11351. bool result;
  11352. op1 = EX_VAR(opline->op1.var);
  11353. op2 = RT_CONSTANT(opline, opline->op2);
  11354. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  11355. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  11356. }
  11357. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11358. {
  11359. USE_OPLINE
  11360. zval *op1, *op2;
  11361. bool result;
  11362. op1 = EX_VAR(opline->op1.var);
  11363. op2 = RT_CONSTANT(opline, opline->op2);
  11364. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  11365. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  11366. }
  11367. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11368. {
  11369. USE_OPLINE
  11370. zval *op1, *op2;
  11371. bool result;
  11372. op1 = EX_VAR(opline->op1.var);
  11373. op2 = RT_CONSTANT(opline, opline->op2);
  11374. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  11375. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  11376. }
  11377. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11378. {
  11379. USE_OPLINE
  11380. zval *op1, *op2;
  11381. bool result;
  11382. op1 = EX_VAR(opline->op1.var);
  11383. op2 = RT_CONSTANT(opline, opline->op2);
  11384. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  11385. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  11386. }
  11387. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11388. {
  11389. USE_OPLINE
  11390. zval *op1, *op2;
  11391. bool result;
  11392. op1 = EX_VAR(opline->op1.var);
  11393. op2 = RT_CONSTANT(opline, opline->op2);
  11394. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  11395. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  11396. }
  11397. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11398. {
  11399. USE_OPLINE
  11400. zval *op1, *op2;
  11401. bool result;
  11402. op1 = EX_VAR(opline->op1.var);
  11403. op2 = RT_CONSTANT(opline, opline->op2);
  11404. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  11405. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  11406. }
  11407. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11408. {
  11409. USE_OPLINE
  11410. zval *op1, *op2;
  11411. bool result;
  11412. op1 = EX_VAR(opline->op1.var);
  11413. op2 = RT_CONSTANT(opline, opline->op2);
  11414. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  11415. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  11416. }
  11417. 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)
  11418. {
  11419. USE_OPLINE
  11420. zval *op1, *op2;
  11421. bool result;
  11422. op1 = EX_VAR(opline->op1.var);
  11423. op2 = RT_CONSTANT(opline, opline->op2);
  11424. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  11425. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  11426. }
  11427. 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)
  11428. {
  11429. USE_OPLINE
  11430. zval *op1, *op2;
  11431. bool result;
  11432. op1 = EX_VAR(opline->op1.var);
  11433. op2 = RT_CONSTANT(opline, opline->op2);
  11434. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  11435. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  11436. }
  11437. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11438. {
  11439. USE_OPLINE
  11440. zval *op1, *op2;
  11441. bool result;
  11442. op1 = EX_VAR(opline->op1.var);
  11443. op2 = RT_CONSTANT(opline, opline->op2);
  11444. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  11445. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  11446. }
  11447. 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)
  11448. {
  11449. USE_OPLINE
  11450. zval *op1, *op2;
  11451. bool result;
  11452. op1 = EX_VAR(opline->op1.var);
  11453. op2 = RT_CONSTANT(opline, opline->op2);
  11454. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  11455. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  11456. }
  11457. 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)
  11458. {
  11459. USE_OPLINE
  11460. zval *op1, *op2;
  11461. bool result;
  11462. op1 = EX_VAR(opline->op1.var);
  11463. op2 = RT_CONSTANT(opline, opline->op2);
  11464. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  11465. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  11466. }
  11467. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11468. {
  11469. USE_OPLINE
  11470. zval *op1, *op2, *result;
  11471. double d1, d2;
  11472. op1 = EX_VAR(opline->op1.var);
  11473. op2 = EX_VAR(opline->op2.var);
  11474. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11475. /* pass */
  11476. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11477. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11478. result = EX_VAR(opline->result.var);
  11479. fast_long_add_function(result, op1, op2);
  11480. ZEND_VM_NEXT_OPCODE();
  11481. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11482. d1 = (double)Z_LVAL_P(op1);
  11483. d2 = Z_DVAL_P(op2);
  11484. goto add_double;
  11485. }
  11486. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11487. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11488. d1 = Z_DVAL_P(op1);
  11489. d2 = Z_DVAL_P(op2);
  11490. add_double:
  11491. result = EX_VAR(opline->result.var);
  11492. ZVAL_DOUBLE(result, d1 + d2);
  11493. ZEND_VM_NEXT_OPCODE();
  11494. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11495. d1 = Z_DVAL_P(op1);
  11496. d2 = (double)Z_LVAL_P(op2);
  11497. goto add_double;
  11498. }
  11499. }
  11500. ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11501. }
  11502. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11503. {
  11504. USE_OPLINE
  11505. zval *op1, *op2, *result;
  11506. double d1, d2;
  11507. op1 = EX_VAR(opline->op1.var);
  11508. op2 = EX_VAR(opline->op2.var);
  11509. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11510. /* pass */
  11511. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11512. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11513. result = EX_VAR(opline->result.var);
  11514. fast_long_sub_function(result, op1, op2);
  11515. ZEND_VM_NEXT_OPCODE();
  11516. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11517. d1 = (double)Z_LVAL_P(op1);
  11518. d2 = Z_DVAL_P(op2);
  11519. goto sub_double;
  11520. }
  11521. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11522. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11523. d1 = Z_DVAL_P(op1);
  11524. d2 = Z_DVAL_P(op2);
  11525. sub_double:
  11526. result = EX_VAR(opline->result.var);
  11527. ZVAL_DOUBLE(result, d1 - d2);
  11528. ZEND_VM_NEXT_OPCODE();
  11529. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11530. d1 = Z_DVAL_P(op1);
  11531. d2 = (double)Z_LVAL_P(op2);
  11532. goto sub_double;
  11533. }
  11534. }
  11535. ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11536. }
  11537. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11538. {
  11539. USE_OPLINE
  11540. zval *op1, *op2, *result;
  11541. double d1, d2;
  11542. op1 = EX_VAR(opline->op1.var);
  11543. op2 = EX_VAR(opline->op2.var);
  11544. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11545. /* pass */
  11546. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11547. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11548. zend_long overflow;
  11549. result = EX_VAR(opline->result.var);
  11550. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  11551. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  11552. ZEND_VM_NEXT_OPCODE();
  11553. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11554. d1 = (double)Z_LVAL_P(op1);
  11555. d2 = Z_DVAL_P(op2);
  11556. goto mul_double;
  11557. }
  11558. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11559. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11560. d1 = Z_DVAL_P(op1);
  11561. d2 = Z_DVAL_P(op2);
  11562. mul_double:
  11563. result = EX_VAR(opline->result.var);
  11564. ZVAL_DOUBLE(result, d1 * d2);
  11565. ZEND_VM_NEXT_OPCODE();
  11566. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11567. d1 = Z_DVAL_P(op1);
  11568. d2 = (double)Z_LVAL_P(op2);
  11569. goto mul_double;
  11570. }
  11571. }
  11572. ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11573. }
  11574. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11575. {
  11576. USE_OPLINE
  11577. zval *op1, *op2, *result;
  11578. op1 = EX_VAR(opline->op1.var);
  11579. op2 = EX_VAR(opline->op2.var);
  11580. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11581. /* pass */
  11582. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11583. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11584. result = EX_VAR(opline->result.var);
  11585. if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
  11586. ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  11587. } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
  11588. /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
  11589. ZVAL_LONG(result, 0);
  11590. } else {
  11591. ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
  11592. }
  11593. ZEND_VM_NEXT_OPCODE();
  11594. }
  11595. }
  11596. ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11597. }
  11598. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11599. {
  11600. USE_OPLINE
  11601. zval *op1, *op2;
  11602. op1 = EX_VAR(opline->op1.var);
  11603. op2 = EX_VAR(opline->op2.var);
  11604. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11605. /* pass */
  11606. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  11607. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  11608. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  11609. /* Perform shift on unsigned numbers to get well-defined wrap behavior. */
  11610. ZVAL_LONG(EX_VAR(opline->result.var),
  11611. (zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
  11612. ZEND_VM_NEXT_OPCODE();
  11613. }
  11614. ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11615. }
  11616. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11617. {
  11618. USE_OPLINE
  11619. zval *op1, *op2;
  11620. op1 = EX_VAR(opline->op1.var);
  11621. op2 = EX_VAR(opline->op2.var);
  11622. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11623. /* pass */
  11624. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  11625. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  11626. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  11627. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
  11628. ZEND_VM_NEXT_OPCODE();
  11629. }
  11630. ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11631. }
  11632. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11633. {
  11634. USE_OPLINE
  11635. zval *op1, *op2;
  11636. double d1, d2;
  11637. op1 = EX_VAR(opline->op1.var);
  11638. op2 = EX_VAR(opline->op2.var);
  11639. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11640. /* pass */
  11641. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11642. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11643. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  11644. is_smaller_true:
  11645. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  11646. } else {
  11647. is_smaller_false:
  11648. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  11649. }
  11650. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11651. d1 = (double)Z_LVAL_P(op1);
  11652. d2 = Z_DVAL_P(op2);
  11653. goto is_smaller_double;
  11654. }
  11655. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11656. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11657. d1 = Z_DVAL_P(op1);
  11658. d2 = Z_DVAL_P(op2);
  11659. is_smaller_double:
  11660. if (d1 < d2) {
  11661. goto is_smaller_true;
  11662. } else {
  11663. goto is_smaller_false;
  11664. }
  11665. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11666. d1 = Z_DVAL_P(op1);
  11667. d2 = (double)Z_LVAL_P(op2);
  11668. goto is_smaller_double;
  11669. }
  11670. }
  11671. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11672. }
  11673. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11674. {
  11675. USE_OPLINE
  11676. zval *op1, *op2;
  11677. double d1, d2;
  11678. op1 = EX_VAR(opline->op1.var);
  11679. op2 = EX_VAR(opline->op2.var);
  11680. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11681. /* pass */
  11682. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11683. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11684. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  11685. is_smaller_true:
  11686. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  11687. } else {
  11688. is_smaller_false:
  11689. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  11690. }
  11691. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11692. d1 = (double)Z_LVAL_P(op1);
  11693. d2 = Z_DVAL_P(op2);
  11694. goto is_smaller_double;
  11695. }
  11696. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11697. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11698. d1 = Z_DVAL_P(op1);
  11699. d2 = Z_DVAL_P(op2);
  11700. is_smaller_double:
  11701. if (d1 < d2) {
  11702. goto is_smaller_true;
  11703. } else {
  11704. goto is_smaller_false;
  11705. }
  11706. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11707. d1 = Z_DVAL_P(op1);
  11708. d2 = (double)Z_LVAL_P(op2);
  11709. goto is_smaller_double;
  11710. }
  11711. }
  11712. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11713. }
  11714. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11715. {
  11716. USE_OPLINE
  11717. zval *op1, *op2;
  11718. double d1, d2;
  11719. op1 = EX_VAR(opline->op1.var);
  11720. op2 = EX_VAR(opline->op2.var);
  11721. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11722. /* pass */
  11723. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11724. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11725. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  11726. is_smaller_true:
  11727. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  11728. } else {
  11729. is_smaller_false:
  11730. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  11731. }
  11732. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11733. d1 = (double)Z_LVAL_P(op1);
  11734. d2 = Z_DVAL_P(op2);
  11735. goto is_smaller_double;
  11736. }
  11737. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11738. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11739. d1 = Z_DVAL_P(op1);
  11740. d2 = Z_DVAL_P(op2);
  11741. is_smaller_double:
  11742. if (d1 < d2) {
  11743. goto is_smaller_true;
  11744. } else {
  11745. goto is_smaller_false;
  11746. }
  11747. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11748. d1 = Z_DVAL_P(op1);
  11749. d2 = (double)Z_LVAL_P(op2);
  11750. goto is_smaller_double;
  11751. }
  11752. }
  11753. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11754. }
  11755. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11756. {
  11757. USE_OPLINE
  11758. zval *op1, *op2;
  11759. double d1, d2;
  11760. op1 = EX_VAR(opline->op1.var);
  11761. op2 = EX_VAR(opline->op2.var);
  11762. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11763. /* pass */
  11764. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11765. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11766. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  11767. is_smaller_or_equal_true:
  11768. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  11769. ZVAL_TRUE(EX_VAR(opline->result.var));
  11770. ZEND_VM_NEXT_OPCODE();
  11771. } else {
  11772. is_smaller_or_equal_false:
  11773. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  11774. ZVAL_FALSE(EX_VAR(opline->result.var));
  11775. ZEND_VM_NEXT_OPCODE();
  11776. }
  11777. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11778. d1 = (double)Z_LVAL_P(op1);
  11779. d2 = Z_DVAL_P(op2);
  11780. goto is_smaller_or_equal_double;
  11781. }
  11782. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11783. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11784. d1 = Z_DVAL_P(op1);
  11785. d2 = Z_DVAL_P(op2);
  11786. is_smaller_or_equal_double:
  11787. if (d1 <= d2) {
  11788. goto is_smaller_or_equal_true;
  11789. } else {
  11790. goto is_smaller_or_equal_false;
  11791. }
  11792. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11793. d1 = Z_DVAL_P(op1);
  11794. d2 = (double)Z_LVAL_P(op2);
  11795. goto is_smaller_or_equal_double;
  11796. }
  11797. }
  11798. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11799. }
  11800. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11801. {
  11802. USE_OPLINE
  11803. zval *op1, *op2;
  11804. double d1, d2;
  11805. op1 = EX_VAR(opline->op1.var);
  11806. op2 = EX_VAR(opline->op2.var);
  11807. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11808. /* pass */
  11809. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11810. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11811. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  11812. is_smaller_or_equal_true:
  11813. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  11814. ZVAL_TRUE(EX_VAR(opline->result.var));
  11815. ZEND_VM_NEXT_OPCODE();
  11816. } else {
  11817. is_smaller_or_equal_false:
  11818. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  11819. ZVAL_FALSE(EX_VAR(opline->result.var));
  11820. ZEND_VM_NEXT_OPCODE();
  11821. }
  11822. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11823. d1 = (double)Z_LVAL_P(op1);
  11824. d2 = Z_DVAL_P(op2);
  11825. goto is_smaller_or_equal_double;
  11826. }
  11827. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11828. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11829. d1 = Z_DVAL_P(op1);
  11830. d2 = Z_DVAL_P(op2);
  11831. is_smaller_or_equal_double:
  11832. if (d1 <= d2) {
  11833. goto is_smaller_or_equal_true;
  11834. } else {
  11835. goto is_smaller_or_equal_false;
  11836. }
  11837. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11838. d1 = Z_DVAL_P(op1);
  11839. d2 = (double)Z_LVAL_P(op2);
  11840. goto is_smaller_or_equal_double;
  11841. }
  11842. }
  11843. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11844. }
  11845. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11846. {
  11847. USE_OPLINE
  11848. zval *op1, *op2;
  11849. double d1, d2;
  11850. op1 = EX_VAR(opline->op1.var);
  11851. op2 = EX_VAR(opline->op2.var);
  11852. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11853. /* pass */
  11854. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11855. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11856. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  11857. is_smaller_or_equal_true:
  11858. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  11859. ZVAL_TRUE(EX_VAR(opline->result.var));
  11860. ZEND_VM_NEXT_OPCODE();
  11861. } else {
  11862. is_smaller_or_equal_false:
  11863. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  11864. ZVAL_FALSE(EX_VAR(opline->result.var));
  11865. ZEND_VM_NEXT_OPCODE();
  11866. }
  11867. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11868. d1 = (double)Z_LVAL_P(op1);
  11869. d2 = Z_DVAL_P(op2);
  11870. goto is_smaller_or_equal_double;
  11871. }
  11872. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11873. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11874. d1 = Z_DVAL_P(op1);
  11875. d2 = Z_DVAL_P(op2);
  11876. is_smaller_or_equal_double:
  11877. if (d1 <= d2) {
  11878. goto is_smaller_or_equal_true;
  11879. } else {
  11880. goto is_smaller_or_equal_false;
  11881. }
  11882. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11883. d1 = Z_DVAL_P(op1);
  11884. d2 = (double)Z_LVAL_P(op2);
  11885. goto is_smaller_or_equal_double;
  11886. }
  11887. }
  11888. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11889. }
  11890. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11891. {
  11892. USE_OPLINE
  11893. zval *op1, *op2;
  11894. op1 = EX_VAR(opline->op1.var);
  11895. op2 = EX_VAR(opline->op2.var);
  11896. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11897. /* pass */
  11898. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  11899. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11900. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
  11901. ZEND_VM_NEXT_OPCODE();
  11902. }
  11903. ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11904. }
  11905. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11906. {
  11907. USE_OPLINE
  11908. zval *op1, *op2;
  11909. op1 = EX_VAR(opline->op1.var);
  11910. op2 = EX_VAR(opline->op2.var);
  11911. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11912. /* pass */
  11913. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  11914. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11915. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
  11916. ZEND_VM_NEXT_OPCODE();
  11917. }
  11918. ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11919. }
  11920. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11921. {
  11922. USE_OPLINE
  11923. zval *op1, *op2;
  11924. op1 = EX_VAR(opline->op1.var);
  11925. op2 = EX_VAR(opline->op2.var);
  11926. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11927. /* pass */
  11928. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  11929. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11930. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
  11931. ZEND_VM_NEXT_OPCODE();
  11932. }
  11933. ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11934. }
  11935. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11936. {
  11937. USE_OPLINE
  11938. zval *op1, *op2, *result;
  11939. op1 = EX_VAR(opline->op1.var);
  11940. op2 = EX_VAR(opline->op2.var);
  11941. result = EX_VAR(opline->result.var);
  11942. ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
  11943. ZEND_VM_NEXT_OPCODE();
  11944. }
  11945. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11946. {
  11947. USE_OPLINE
  11948. zval *op1, *op2, *result;
  11949. op1 = EX_VAR(opline->op1.var);
  11950. op2 = EX_VAR(opline->op2.var);
  11951. result = EX_VAR(opline->result.var);
  11952. fast_long_add_function(result, op1, op2);
  11953. ZEND_VM_NEXT_OPCODE();
  11954. }
  11955. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11956. {
  11957. USE_OPLINE
  11958. zval *op1, *op2, *result;
  11959. op1 = EX_VAR(opline->op1.var);
  11960. op2 = EX_VAR(opline->op2.var);
  11961. result = EX_VAR(opline->result.var);
  11962. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
  11963. ZEND_VM_NEXT_OPCODE();
  11964. }
  11965. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11966. {
  11967. USE_OPLINE
  11968. zval *op1, *op2, *result;
  11969. op1 = EX_VAR(opline->op1.var);
  11970. op2 = EX_VAR(opline->op2.var);
  11971. result = EX_VAR(opline->result.var);
  11972. ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
  11973. ZEND_VM_NEXT_OPCODE();
  11974. }
  11975. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11976. {
  11977. USE_OPLINE
  11978. zval *op1, *op2, *result;
  11979. op1 = EX_VAR(opline->op1.var);
  11980. op2 = EX_VAR(opline->op2.var);
  11981. result = EX_VAR(opline->result.var);
  11982. fast_long_sub_function(result, op1, op2);
  11983. ZEND_VM_NEXT_OPCODE();
  11984. }
  11985. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11986. {
  11987. USE_OPLINE
  11988. zval *op1, *op2, *result;
  11989. op1 = EX_VAR(opline->op1.var);
  11990. op2 = EX_VAR(opline->op2.var);
  11991. result = EX_VAR(opline->result.var);
  11992. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  11993. ZEND_VM_NEXT_OPCODE();
  11994. }
  11995. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11996. {
  11997. USE_OPLINE
  11998. zval *op1, *op2, *result;
  11999. op1 = EX_VAR(opline->op1.var);
  12000. op2 = EX_VAR(opline->op2.var);
  12001. result = EX_VAR(opline->result.var);
  12002. ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
  12003. ZEND_VM_NEXT_OPCODE();
  12004. }
  12005. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12006. {
  12007. USE_OPLINE
  12008. zval *op1, *op2, *result;
  12009. zend_long overflow;
  12010. op1 = EX_VAR(opline->op1.var);
  12011. op2 = EX_VAR(opline->op2.var);
  12012. result = EX_VAR(opline->result.var);
  12013. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  12014. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  12015. ZEND_VM_NEXT_OPCODE();
  12016. }
  12017. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12018. {
  12019. USE_OPLINE
  12020. zval *op1, *op2, *result;
  12021. op1 = EX_VAR(opline->op1.var);
  12022. op2 = EX_VAR(opline->op2.var);
  12023. result = EX_VAR(opline->result.var);
  12024. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
  12025. ZEND_VM_NEXT_OPCODE();
  12026. }
  12027. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12028. {
  12029. USE_OPLINE
  12030. zval *op1, *op2;
  12031. bool result;
  12032. op1 = EX_VAR(opline->op1.var);
  12033. op2 = EX_VAR(opline->op2.var);
  12034. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  12035. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  12036. }
  12037. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12038. {
  12039. USE_OPLINE
  12040. zval *op1, *op2;
  12041. bool result;
  12042. op1 = EX_VAR(opline->op1.var);
  12043. op2 = EX_VAR(opline->op2.var);
  12044. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  12045. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  12046. }
  12047. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12048. {
  12049. USE_OPLINE
  12050. zval *op1, *op2;
  12051. bool result;
  12052. op1 = EX_VAR(opline->op1.var);
  12053. op2 = EX_VAR(opline->op2.var);
  12054. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  12055. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  12056. }
  12057. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12058. {
  12059. USE_OPLINE
  12060. zval *op1, *op2;
  12061. bool result;
  12062. op1 = EX_VAR(opline->op1.var);
  12063. op2 = EX_VAR(opline->op2.var);
  12064. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  12065. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  12066. }
  12067. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12068. {
  12069. USE_OPLINE
  12070. zval *op1, *op2;
  12071. bool result;
  12072. op1 = EX_VAR(opline->op1.var);
  12073. op2 = EX_VAR(opline->op2.var);
  12074. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  12075. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  12076. }
  12077. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12078. {
  12079. USE_OPLINE
  12080. zval *op1, *op2;
  12081. bool result;
  12082. op1 = EX_VAR(opline->op1.var);
  12083. op2 = EX_VAR(opline->op2.var);
  12084. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  12085. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  12086. }
  12087. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12088. {
  12089. USE_OPLINE
  12090. zval *op1, *op2;
  12091. bool result;
  12092. op1 = EX_VAR(opline->op1.var);
  12093. op2 = EX_VAR(opline->op2.var);
  12094. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  12095. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  12096. }
  12097. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12098. {
  12099. USE_OPLINE
  12100. zval *op1, *op2;
  12101. bool result;
  12102. op1 = EX_VAR(opline->op1.var);
  12103. op2 = EX_VAR(opline->op2.var);
  12104. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  12105. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  12106. }
  12107. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12108. {
  12109. USE_OPLINE
  12110. zval *op1, *op2;
  12111. bool result;
  12112. op1 = EX_VAR(opline->op1.var);
  12113. op2 = EX_VAR(opline->op2.var);
  12114. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  12115. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  12116. }
  12117. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12118. {
  12119. USE_OPLINE
  12120. zval *op1, *op2;
  12121. bool result;
  12122. op1 = EX_VAR(opline->op1.var);
  12123. op2 = EX_VAR(opline->op2.var);
  12124. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  12125. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  12126. }
  12127. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12128. {
  12129. USE_OPLINE
  12130. zval *op1, *op2;
  12131. bool result;
  12132. op1 = EX_VAR(opline->op1.var);
  12133. op2 = EX_VAR(opline->op2.var);
  12134. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  12135. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  12136. }
  12137. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12138. {
  12139. USE_OPLINE
  12140. zval *op1, *op2;
  12141. bool result;
  12142. op1 = EX_VAR(opline->op1.var);
  12143. op2 = EX_VAR(opline->op2.var);
  12144. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  12145. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  12146. }
  12147. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12148. {
  12149. USE_OPLINE
  12150. zval *op1, *op2;
  12151. bool result;
  12152. op1 = EX_VAR(opline->op1.var);
  12153. op2 = EX_VAR(opline->op2.var);
  12154. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  12155. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  12156. }
  12157. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12158. {
  12159. USE_OPLINE
  12160. zval *op1, *op2;
  12161. bool result;
  12162. op1 = EX_VAR(opline->op1.var);
  12163. op2 = EX_VAR(opline->op2.var);
  12164. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  12165. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  12166. }
  12167. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12168. {
  12169. USE_OPLINE
  12170. zval *op1, *op2;
  12171. bool result;
  12172. op1 = EX_VAR(opline->op1.var);
  12173. op2 = EX_VAR(opline->op2.var);
  12174. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  12175. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  12176. }
  12177. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12178. {
  12179. USE_OPLINE
  12180. zval *op1, *op2;
  12181. bool result;
  12182. op1 = EX_VAR(opline->op1.var);
  12183. op2 = EX_VAR(opline->op2.var);
  12184. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  12185. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  12186. }
  12187. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12188. {
  12189. USE_OPLINE
  12190. zval *op1, *op2;
  12191. bool result;
  12192. op1 = EX_VAR(opline->op1.var);
  12193. op2 = EX_VAR(opline->op2.var);
  12194. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  12195. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  12196. }
  12197. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12198. {
  12199. USE_OPLINE
  12200. zval *op1, *op2;
  12201. bool result;
  12202. op1 = EX_VAR(opline->op1.var);
  12203. op2 = EX_VAR(opline->op2.var);
  12204. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  12205. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  12206. }
  12207. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12208. {
  12209. USE_OPLINE
  12210. zval *op1, *op2;
  12211. bool result;
  12212. op1 = EX_VAR(opline->op1.var);
  12213. op2 = EX_VAR(opline->op2.var);
  12214. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  12215. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  12216. }
  12217. 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)
  12218. {
  12219. USE_OPLINE
  12220. zval *op1, *op2;
  12221. bool result;
  12222. op1 = EX_VAR(opline->op1.var);
  12223. op2 = EX_VAR(opline->op2.var);
  12224. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  12225. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  12226. }
  12227. 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)
  12228. {
  12229. USE_OPLINE
  12230. zval *op1, *op2;
  12231. bool result;
  12232. op1 = EX_VAR(opline->op1.var);
  12233. op2 = EX_VAR(opline->op2.var);
  12234. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  12235. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  12236. }
  12237. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12238. {
  12239. USE_OPLINE
  12240. zval *op1, *op2;
  12241. bool result;
  12242. op1 = EX_VAR(opline->op1.var);
  12243. op2 = EX_VAR(opline->op2.var);
  12244. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  12245. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  12246. }
  12247. 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)
  12248. {
  12249. USE_OPLINE
  12250. zval *op1, *op2;
  12251. bool result;
  12252. op1 = EX_VAR(opline->op1.var);
  12253. op2 = EX_VAR(opline->op2.var);
  12254. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  12255. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  12256. }
  12257. 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)
  12258. {
  12259. USE_OPLINE
  12260. zval *op1, *op2;
  12261. bool result;
  12262. op1 = EX_VAR(opline->op1.var);
  12263. op2 = EX_VAR(opline->op2.var);
  12264. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  12265. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  12266. }
  12267. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12268. {
  12269. USE_OPLINE
  12270. zval *container;
  12271. SAVE_OPLINE();
  12272. container = EX_VAR(opline->op1.var);
  12273. zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  12274. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  12275. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12276. }
  12277. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12278. {
  12279. USE_OPLINE
  12280. zval *op;
  12281. SAVE_OPLINE();
  12282. op = EX_VAR(opline->op1.var);
  12283. zend_match_unhandled_error(op);
  12284. HANDLE_EXCEPTION();
  12285. }
  12286. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12287. {
  12288. USE_OPLINE
  12289. zval *container;
  12290. SAVE_OPLINE();
  12291. container = EX_VAR(opline->op1.var);
  12292. zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  12293. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12294. }
  12295. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12296. {
  12297. USE_OPLINE
  12298. zval *val;
  12299. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12300. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  12301. ZVAL_FALSE(EX_VAR(opline->result.var));
  12302. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  12303. /* The result and op1 can be the same cv zval */
  12304. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  12305. ZVAL_TRUE(EX_VAR(opline->result.var));
  12306. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  12307. SAVE_OPLINE();
  12308. ZVAL_UNDEFINED_OP1();
  12309. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12310. }
  12311. } else {
  12312. SAVE_OPLINE();
  12313. ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
  12314. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12315. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12316. }
  12317. ZEND_VM_NEXT_OPCODE();
  12318. }
  12319. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12320. {
  12321. USE_OPLINE
  12322. zval *z;
  12323. SAVE_OPLINE();
  12324. z = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12325. if (Z_TYPE_P(z) == IS_STRING) {
  12326. zend_string *str = Z_STR_P(z);
  12327. if (ZSTR_LEN(str) != 0) {
  12328. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  12329. }
  12330. } else {
  12331. zend_string *str = zval_get_string_func(z);
  12332. if (ZSTR_LEN(str) != 0) {
  12333. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  12334. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
  12335. ZVAL_UNDEFINED_OP1();
  12336. }
  12337. zend_string_release_ex(str, 0);
  12338. }
  12339. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12340. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12341. }
  12342. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12343. {
  12344. USE_OPLINE
  12345. zval *val;
  12346. zend_uchar op1_type;
  12347. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12348. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  12349. ZEND_VM_NEXT_OPCODE();
  12350. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  12351. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  12352. SAVE_OPLINE();
  12353. ZVAL_UNDEFINED_OP1();
  12354. if (UNEXPECTED(EG(exception))) {
  12355. HANDLE_EXCEPTION();
  12356. }
  12357. }
  12358. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  12359. }
  12360. SAVE_OPLINE();
  12361. op1_type = (IS_TMP_VAR|IS_VAR);
  12362. if (i_zend_is_true(val)) {
  12363. opline++;
  12364. } else {
  12365. opline = OP_JMP_ADDR(opline, opline->op2);
  12366. }
  12367. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  12368. zval_ptr_dtor_nogc(val);
  12369. }
  12370. ZEND_VM_JMP(opline);
  12371. }
  12372. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12373. {
  12374. USE_OPLINE
  12375. zval *val;
  12376. zend_uchar op1_type;
  12377. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12378. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  12379. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  12380. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  12381. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  12382. SAVE_OPLINE();
  12383. ZVAL_UNDEFINED_OP1();
  12384. if (UNEXPECTED(EG(exception))) {
  12385. HANDLE_EXCEPTION();
  12386. }
  12387. }
  12388. ZEND_VM_NEXT_OPCODE();
  12389. }
  12390. SAVE_OPLINE();
  12391. op1_type = (IS_TMP_VAR|IS_VAR);
  12392. if (i_zend_is_true(val)) {
  12393. opline = OP_JMP_ADDR(opline, opline->op2);
  12394. } else {
  12395. opline++;
  12396. }
  12397. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  12398. zval_ptr_dtor_nogc(val);
  12399. }
  12400. ZEND_VM_JMP(opline);
  12401. }
  12402. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12403. {
  12404. USE_OPLINE
  12405. zval *val;
  12406. zend_uchar op1_type;
  12407. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12408. if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
  12409. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  12410. ZEND_VM_CONTINUE();
  12411. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  12412. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  12413. SAVE_OPLINE();
  12414. ZVAL_UNDEFINED_OP1();
  12415. if (UNEXPECTED(EG(exception))) {
  12416. HANDLE_EXCEPTION();
  12417. }
  12418. }
  12419. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  12420. }
  12421. SAVE_OPLINE();
  12422. op1_type = (IS_TMP_VAR|IS_VAR);
  12423. if (i_zend_is_true(val)) {
  12424. opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
  12425. } else {
  12426. opline = OP_JMP_ADDR(opline, opline->op2);
  12427. }
  12428. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  12429. zval_ptr_dtor_nogc(val);
  12430. }
  12431. ZEND_VM_JMP(opline);
  12432. }
  12433. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12434. {
  12435. USE_OPLINE
  12436. zval *val;
  12437. bool ret;
  12438. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12439. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  12440. ZVAL_TRUE(EX_VAR(opline->result.var));
  12441. ZEND_VM_NEXT_OPCODE();
  12442. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  12443. ZVAL_FALSE(EX_VAR(opline->result.var));
  12444. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  12445. SAVE_OPLINE();
  12446. ZVAL_UNDEFINED_OP1();
  12447. if (UNEXPECTED(EG(exception))) {
  12448. HANDLE_EXCEPTION();
  12449. }
  12450. }
  12451. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  12452. }
  12453. SAVE_OPLINE();
  12454. ret = i_zend_is_true(val);
  12455. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12456. if (ret) {
  12457. ZVAL_TRUE(EX_VAR(opline->result.var));
  12458. opline++;
  12459. } else {
  12460. ZVAL_FALSE(EX_VAR(opline->result.var));
  12461. opline = OP_JMP_ADDR(opline, opline->op2);
  12462. }
  12463. ZEND_VM_JMP(opline);
  12464. }
  12465. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12466. {
  12467. USE_OPLINE
  12468. zval *val;
  12469. bool ret;
  12470. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12471. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  12472. ZVAL_TRUE(EX_VAR(opline->result.var));
  12473. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  12474. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  12475. ZVAL_FALSE(EX_VAR(opline->result.var));
  12476. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  12477. SAVE_OPLINE();
  12478. ZVAL_UNDEFINED_OP1();
  12479. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12480. } else {
  12481. ZEND_VM_NEXT_OPCODE();
  12482. }
  12483. }
  12484. SAVE_OPLINE();
  12485. ret = i_zend_is_true(val);
  12486. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12487. if (ret) {
  12488. ZVAL_TRUE(EX_VAR(opline->result.var));
  12489. opline = OP_JMP_ADDR(opline, opline->op2);
  12490. } else {
  12491. ZVAL_FALSE(EX_VAR(opline->result.var));
  12492. opline++;
  12493. }
  12494. ZEND_VM_JMP(opline);
  12495. }
  12496. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12497. {
  12498. USE_OPLINE
  12499. SAVE_OPLINE();
  12500. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12501. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12502. }
  12503. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12504. {
  12505. zval *var;
  12506. USE_OPLINE
  12507. var = EX_VAR(opline->op1.var);
  12508. if (Z_TYPE_P(var) != IS_ARRAY) {
  12509. SAVE_OPLINE();
  12510. if (Z_FE_ITER_P(var) != (uint32_t)-1) {
  12511. zend_hash_iterator_del(Z_FE_ITER_P(var));
  12512. }
  12513. zval_ptr_dtor_nogc(var);
  12514. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12515. }
  12516. /* This is freeing an array. Use an inlined version of zval_ptr_dtor_nogc. */
  12517. /* PHP only needs to save the opline and check for an exception if the last reference to the array was garbage collected (destructors of elements in the array could throw an exception) */
  12518. if (Z_REFCOUNTED_P(var) && !Z_DELREF_P(var)) {
  12519. SAVE_OPLINE();
  12520. rc_dtor_func(Z_COUNTED_P(var));
  12521. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12522. }
  12523. ZEND_VM_NEXT_OPCODE();
  12524. }
  12525. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12526. {
  12527. USE_OPLINE
  12528. zval *value;
  12529. SAVE_OPLINE();
  12530. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12531. do {
  12532. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
  12533. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  12534. value = Z_REFVAL_P(value);
  12535. if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
  12536. break;
  12537. }
  12538. }
  12539. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  12540. ZVAL_UNDEFINED_OP1();
  12541. if (UNEXPECTED(EG(exception) != NULL)) {
  12542. HANDLE_EXCEPTION();
  12543. }
  12544. }
  12545. zend_throw_error(NULL, "Can only throw objects");
  12546. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12547. HANDLE_EXCEPTION();
  12548. }
  12549. } while (0);
  12550. zend_exception_save();
  12551. Z_TRY_ADDREF_P(value);
  12552. zend_throw_exception_object(value);
  12553. zend_exception_restore();
  12554. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12555. HANDLE_EXCEPTION();
  12556. }
  12557. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12558. {
  12559. USE_OPLINE
  12560. zval *val;
  12561. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12562. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  12563. ZVAL_TRUE(EX_VAR(opline->result.var));
  12564. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  12565. /* The result and op1 can be the same cv zval */
  12566. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  12567. ZVAL_FALSE(EX_VAR(opline->result.var));
  12568. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  12569. SAVE_OPLINE();
  12570. ZVAL_UNDEFINED_OP1();
  12571. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12572. }
  12573. } else {
  12574. SAVE_OPLINE();
  12575. ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
  12576. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12577. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12578. }
  12579. ZEND_VM_NEXT_OPCODE();
  12580. }
  12581. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12582. {
  12583. USE_OPLINE
  12584. zval *obj;
  12585. zend_object *zobj;
  12586. zend_class_entry *ce, *scope;
  12587. zend_function *clone;
  12588. zend_object_clone_obj_t clone_call;
  12589. SAVE_OPLINE();
  12590. obj = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12591. do {
  12592. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  12593. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
  12594. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
  12595. obj = Z_REFVAL_P(obj);
  12596. if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
  12597. break;
  12598. }
  12599. }
  12600. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12601. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
  12602. ZVAL_UNDEFINED_OP1();
  12603. if (UNEXPECTED(EG(exception) != NULL)) {
  12604. HANDLE_EXCEPTION();
  12605. }
  12606. }
  12607. zend_throw_error(NULL, "__clone method called on non-object");
  12608. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12609. HANDLE_EXCEPTION();
  12610. }
  12611. } while (0);
  12612. zobj = Z_OBJ_P(obj);
  12613. ce = zobj->ce;
  12614. clone = ce->clone;
  12615. clone_call = zobj->handlers->clone_obj;
  12616. if (UNEXPECTED(clone_call == NULL)) {
  12617. zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
  12618. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12619. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12620. HANDLE_EXCEPTION();
  12621. }
  12622. if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
  12623. scope = EX(func)->op_array.scope;
  12624. if (clone->common.scope != scope) {
  12625. if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
  12626. || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
  12627. zend_wrong_clone_call(clone, scope);
  12628. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12629. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12630. HANDLE_EXCEPTION();
  12631. }
  12632. }
  12633. }
  12634. ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
  12635. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12636. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12637. }
  12638. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12639. {
  12640. USE_OPLINE
  12641. zend_op_array *new_op_array;
  12642. zval *inc_filename;
  12643. SAVE_OPLINE();
  12644. inc_filename = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12645. new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
  12646. if (UNEXPECTED(EG(exception) != NULL)) {
  12647. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12648. if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
  12649. destroy_op_array(new_op_array);
  12650. efree_size(new_op_array, sizeof(zend_op_array));
  12651. }
  12652. UNDEF_RESULT();
  12653. HANDLE_EXCEPTION();
  12654. } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
  12655. if (RETURN_VALUE_USED(opline)) {
  12656. ZVAL_TRUE(EX_VAR(opline->result.var));
  12657. }
  12658. } else if (EXPECTED(new_op_array != NULL)) {
  12659. zval *return_value = NULL;
  12660. zend_execute_data *call;
  12661. if (RETURN_VALUE_USED(opline)) {
  12662. return_value = EX_VAR(opline->result.var);
  12663. }
  12664. new_op_array->scope = EX(func)->op_array.scope;
  12665. call = zend_vm_stack_push_call_frame(
  12666. (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
  12667. (zend_function*)new_op_array, 0,
  12668. Z_PTR(EX(This)));
  12669. if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
  12670. call->symbol_table = EX(symbol_table);
  12671. } else {
  12672. call->symbol_table = zend_rebuild_symbol_table();
  12673. }
  12674. call->prev_execute_data = execute_data;
  12675. i_init_code_execute_data(call, new_op_array, return_value);
  12676. if (EXPECTED(zend_execute_ex == execute_ex)) {
  12677. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12678. ZEND_VM_ENTER();
  12679. } else {
  12680. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  12681. zend_execute_ex(call);
  12682. zend_vm_stack_free_call_frame(call);
  12683. }
  12684. zend_destroy_static_vars(new_op_array);
  12685. destroy_op_array(new_op_array);
  12686. efree_size(new_op_array, sizeof(zend_op_array));
  12687. if (UNEXPECTED(EG(exception) != NULL)) {
  12688. zend_rethrow_exception(execute_data);
  12689. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12690. UNDEF_RESULT();
  12691. HANDLE_EXCEPTION();
  12692. }
  12693. } else if (RETURN_VALUE_USED(opline)) {
  12694. ZVAL_FALSE(EX_VAR(opline->result.var));
  12695. }
  12696. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12697. ZEND_VM_NEXT_OPCODE();
  12698. }
  12699. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12700. {
  12701. USE_OPLINE
  12702. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  12703. zval *val;
  12704. SAVE_OPLINE();
  12705. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12706. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  12707. zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
  12708. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12709. UNDEF_RESULT();
  12710. HANDLE_EXCEPTION();
  12711. }
  12712. yield_from_try_again:
  12713. if (Z_TYPE_P(val) == IS_ARRAY) {
  12714. ZVAL_COPY_VALUE(&generator->values, val);
  12715. if (Z_OPT_REFCOUNTED_P(val)) {
  12716. Z_ADDREF_P(val);
  12717. }
  12718. Z_FE_POS(generator->values) = 0;
  12719. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12720. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
  12721. zend_class_entry *ce = Z_OBJCE_P(val);
  12722. if (ce == zend_ce_generator) {
  12723. zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
  12724. Z_ADDREF_P(val);
  12725. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12726. if (UNEXPECTED(new_gen->execute_data == NULL)) {
  12727. zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
  12728. zval_ptr_dtor(val);
  12729. UNDEF_RESULT();
  12730. HANDLE_EXCEPTION();
  12731. } else if (Z_ISUNDEF(new_gen->retval)) {
  12732. if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
  12733. zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
  12734. zval_ptr_dtor(val);
  12735. UNDEF_RESULT();
  12736. HANDLE_EXCEPTION();
  12737. } else {
  12738. zend_generator_yield_from(generator, new_gen);
  12739. }
  12740. } else {
  12741. if (RETURN_VALUE_USED(opline)) {
  12742. ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
  12743. }
  12744. ZEND_VM_NEXT_OPCODE();
  12745. }
  12746. } else {
  12747. zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
  12748. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12749. if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
  12750. if (!EG(exception)) {
  12751. zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
  12752. }
  12753. UNDEF_RESULT();
  12754. HANDLE_EXCEPTION();
  12755. }
  12756. iter->index = 0;
  12757. if (iter->funcs->rewind) {
  12758. iter->funcs->rewind(iter);
  12759. if (UNEXPECTED(EG(exception) != NULL)) {
  12760. OBJ_RELEASE(&iter->std);
  12761. UNDEF_RESULT();
  12762. HANDLE_EXCEPTION();
  12763. }
  12764. }
  12765. ZVAL_OBJ(&generator->values, &iter->std);
  12766. }
  12767. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
  12768. val = Z_REFVAL_P(val);
  12769. goto yield_from_try_again;
  12770. } else {
  12771. zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
  12772. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12773. UNDEF_RESULT();
  12774. HANDLE_EXCEPTION();
  12775. }
  12776. /* This is the default return value
  12777. * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
  12778. if (RETURN_VALUE_USED(opline)) {
  12779. ZVAL_NULL(EX_VAR(opline->result.var));
  12780. }
  12781. /* This generator has no send target (though the generator we delegate to might have one) */
  12782. generator->send_target = NULL;
  12783. /* We increment to the next op, so we are at the correct position when the
  12784. * generator is resumed. */
  12785. ZEND_VM_INC_OPCODE();
  12786. /* The GOTO VM uses a local opline variable. We need to set the opline
  12787. * variable in execute_data so we don't resume at an old position. */
  12788. SAVE_OPLINE();
  12789. ZEND_VM_RETURN();
  12790. }
  12791. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12792. {
  12793. USE_OPLINE
  12794. zval *value;
  12795. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12796. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  12797. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  12798. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  12799. zval_ptr_dtor_str(value);
  12800. }
  12801. ZEND_VM_NEXT_OPCODE();
  12802. } else {
  12803. bool strict;
  12804. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
  12805. value = Z_REFVAL_P(value);
  12806. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  12807. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  12808. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12809. ZEND_VM_NEXT_OPCODE();
  12810. }
  12811. }
  12812. SAVE_OPLINE();
  12813. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  12814. value = ZVAL_UNDEFINED_OP1();
  12815. }
  12816. strict = EX_USES_STRICT_TYPES();
  12817. do {
  12818. if (EXPECTED(!strict)) {
  12819. zend_string *str;
  12820. zval tmp;
  12821. if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
  12822. zend_error(E_DEPRECATED,
  12823. "strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
  12824. ZVAL_LONG(EX_VAR(opline->result.var), 0);
  12825. if (UNEXPECTED(EG(exception))) {
  12826. HANDLE_EXCEPTION();
  12827. }
  12828. break;
  12829. }
  12830. ZVAL_COPY(&tmp, value);
  12831. if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
  12832. ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
  12833. zval_ptr_dtor(&tmp);
  12834. break;
  12835. }
  12836. zval_ptr_dtor(&tmp);
  12837. }
  12838. if (!EG(exception)) {
  12839. zend_type_error("strlen(): Argument #1 ($str) must be of type string, %s given", zend_zval_type_name(value));
  12840. }
  12841. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12842. } while (0);
  12843. }
  12844. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12845. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12846. }
  12847. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12848. {
  12849. USE_OPLINE
  12850. zval *value;
  12851. int result = 0;
  12852. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12853. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  12854. type_check_resource:
  12855. if (opline->extended_value != MAY_BE_RESOURCE
  12856. || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
  12857. result = 1;
  12858. }
  12859. } else if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
  12860. value = Z_REFVAL_P(value);
  12861. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  12862. goto type_check_resource;
  12863. }
  12864. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  12865. result = ((1 << IS_NULL) & opline->extended_value) != 0;
  12866. SAVE_OPLINE();
  12867. ZVAL_UNDEFINED_OP1();
  12868. if (UNEXPECTED(EG(exception))) {
  12869. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12870. HANDLE_EXCEPTION();
  12871. }
  12872. }
  12873. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  12874. SAVE_OPLINE();
  12875. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12876. ZEND_VM_SMART_BRANCH(result, 1);
  12877. } else {
  12878. ZEND_VM_SMART_BRANCH(result, 0);
  12879. }
  12880. }
  12881. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12882. {
  12883. uint32_t fetch_type;
  12884. zend_class_entry *called_scope, *scope;
  12885. USE_OPLINE
  12886. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  12887. SAVE_OPLINE();
  12888. zval *op = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12889. if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
  12890. ZVAL_DEREF(op);
  12891. if (Z_TYPE_P(op) != IS_OBJECT) {
  12892. zend_type_error("Cannot use \"::class\" on value of type %s", zend_zval_type_name(op));
  12893. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12894. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12895. HANDLE_EXCEPTION();
  12896. }
  12897. }
  12898. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
  12899. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12900. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12901. }
  12902. fetch_type = opline->op1.num;
  12903. scope = EX(func)->op_array.scope;
  12904. if (UNEXPECTED(scope == NULL)) {
  12905. SAVE_OPLINE();
  12906. zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
  12907. fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
  12908. fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
  12909. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12910. HANDLE_EXCEPTION();
  12911. }
  12912. switch (fetch_type) {
  12913. case ZEND_FETCH_CLASS_SELF:
  12914. ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
  12915. break;
  12916. case ZEND_FETCH_CLASS_PARENT:
  12917. if (UNEXPECTED(scope->parent == NULL)) {
  12918. SAVE_OPLINE();
  12919. zend_throw_error(NULL,
  12920. "Cannot use \"parent\" when current class scope has no parent");
  12921. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12922. HANDLE_EXCEPTION();
  12923. }
  12924. ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
  12925. break;
  12926. case ZEND_FETCH_CLASS_STATIC:
  12927. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  12928. called_scope = Z_OBJCE(EX(This));
  12929. } else {
  12930. called_scope = Z_CE(EX(This));
  12931. }
  12932. ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
  12933. break;
  12934. EMPTY_SWITCH_DEFAULT_CASE()
  12935. }
  12936. ZEND_VM_NEXT_OPCODE();
  12937. }
  12938. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12939. {
  12940. USE_OPLINE
  12941. zval *op1, *op2;
  12942. SAVE_OPLINE();
  12943. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12944. op2 = RT_CONSTANT(opline, opline->op2);
  12945. div_function(EX_VAR(opline->result.var), op1, op2);
  12946. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12947. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12948. }
  12949. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12950. {
  12951. USE_OPLINE
  12952. zval *op1, *op2;
  12953. SAVE_OPLINE();
  12954. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12955. op2 = RT_CONSTANT(opline, opline->op2);
  12956. pow_function(EX_VAR(opline->result.var), op1, op2);
  12957. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12958. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12959. }
  12960. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12961. {
  12962. USE_OPLINE
  12963. zval *op1, *op2;
  12964. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12965. op2 = RT_CONSTANT(opline, opline->op2);
  12966. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  12967. (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  12968. zend_string *op1_str = Z_STR_P(op1);
  12969. zend_string *op2_str = Z_STR_P(op2);
  12970. zend_string *str;
  12971. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  12972. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  12973. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  12974. } else {
  12975. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  12976. }
  12977. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  12978. zend_string_release_ex(op1_str, 0);
  12979. }
  12980. } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  12981. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  12982. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  12983. } else {
  12984. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  12985. }
  12986. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  12987. zend_string_release_ex(op2_str, 0);
  12988. }
  12989. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  12990. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  12991. size_t len = ZSTR_LEN(op1_str);
  12992. if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
  12993. zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
  12994. }
  12995. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  12996. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  12997. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  12998. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  12999. zend_string_release_ex(op2_str, 0);
  13000. }
  13001. } else {
  13002. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  13003. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  13004. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  13005. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  13006. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  13007. zend_string_release_ex(op1_str, 0);
  13008. }
  13009. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13010. zend_string_release_ex(op2_str, 0);
  13011. }
  13012. }
  13013. ZEND_VM_NEXT_OPCODE();
  13014. } else {
  13015. SAVE_OPLINE();
  13016. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  13017. op1 = ZVAL_UNDEFINED_OP1();
  13018. }
  13019. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  13020. op2 = ZVAL_UNDEFINED_OP2();
  13021. }
  13022. concat_function(EX_VAR(opline->result.var), op1, op2);
  13023. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13024. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13025. }
  13026. }
  13027. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13028. {
  13029. USE_OPLINE
  13030. zval *op1, *op2;
  13031. double d1, d2;
  13032. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13033. op2 = RT_CONSTANT(opline, opline->op2);
  13034. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
  13035. /* pass */
  13036. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  13037. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13038. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  13039. is_equal_true:
  13040. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  13041. } else {
  13042. is_equal_false:
  13043. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  13044. }
  13045. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13046. d1 = (double)Z_LVAL_P(op1);
  13047. d2 = Z_DVAL_P(op2);
  13048. goto is_equal_double;
  13049. }
  13050. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  13051. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13052. d1 = Z_DVAL_P(op1);
  13053. d2 = Z_DVAL_P(op2);
  13054. is_equal_double:
  13055. if (d1 == d2) {
  13056. goto is_equal_true;
  13057. } else {
  13058. goto is_equal_false;
  13059. }
  13060. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13061. d1 = Z_DVAL_P(op1);
  13062. d2 = (double)Z_LVAL_P(op2);
  13063. goto is_equal_double;
  13064. }
  13065. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13066. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13067. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  13068. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  13069. zval_ptr_dtor_str(op1);
  13070. }
  13071. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13072. zval_ptr_dtor_str(op2);
  13073. }
  13074. if (result) {
  13075. goto is_equal_true;
  13076. } else {
  13077. goto is_equal_false;
  13078. }
  13079. }
  13080. }
  13081. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13082. }
  13083. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13084. {
  13085. USE_OPLINE
  13086. zval *op1, *op2;
  13087. double d1, d2;
  13088. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13089. op2 = RT_CONSTANT(opline, opline->op2);
  13090. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
  13091. /* pass */
  13092. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  13093. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13094. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  13095. is_equal_true:
  13096. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  13097. } else {
  13098. is_equal_false:
  13099. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  13100. }
  13101. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13102. d1 = (double)Z_LVAL_P(op1);
  13103. d2 = Z_DVAL_P(op2);
  13104. goto is_equal_double;
  13105. }
  13106. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  13107. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13108. d1 = Z_DVAL_P(op1);
  13109. d2 = Z_DVAL_P(op2);
  13110. is_equal_double:
  13111. if (d1 == d2) {
  13112. goto is_equal_true;
  13113. } else {
  13114. goto is_equal_false;
  13115. }
  13116. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13117. d1 = Z_DVAL_P(op1);
  13118. d2 = (double)Z_LVAL_P(op2);
  13119. goto is_equal_double;
  13120. }
  13121. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13122. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13123. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  13124. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  13125. zval_ptr_dtor_str(op1);
  13126. }
  13127. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13128. zval_ptr_dtor_str(op2);
  13129. }
  13130. if (result) {
  13131. goto is_equal_true;
  13132. } else {
  13133. goto is_equal_false;
  13134. }
  13135. }
  13136. }
  13137. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13138. }
  13139. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13140. {
  13141. USE_OPLINE
  13142. zval *op1, *op2;
  13143. double d1, d2;
  13144. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13145. op2 = RT_CONSTANT(opline, opline->op2);
  13146. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
  13147. /* pass */
  13148. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  13149. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13150. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  13151. is_equal_true:
  13152. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  13153. } else {
  13154. is_equal_false:
  13155. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  13156. }
  13157. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13158. d1 = (double)Z_LVAL_P(op1);
  13159. d2 = Z_DVAL_P(op2);
  13160. goto is_equal_double;
  13161. }
  13162. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  13163. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13164. d1 = Z_DVAL_P(op1);
  13165. d2 = Z_DVAL_P(op2);
  13166. is_equal_double:
  13167. if (d1 == d2) {
  13168. goto is_equal_true;
  13169. } else {
  13170. goto is_equal_false;
  13171. }
  13172. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13173. d1 = Z_DVAL_P(op1);
  13174. d2 = (double)Z_LVAL_P(op2);
  13175. goto is_equal_double;
  13176. }
  13177. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13178. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13179. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  13180. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  13181. zval_ptr_dtor_str(op1);
  13182. }
  13183. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13184. zval_ptr_dtor_str(op2);
  13185. }
  13186. if (result) {
  13187. goto is_equal_true;
  13188. } else {
  13189. goto is_equal_false;
  13190. }
  13191. }
  13192. }
  13193. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13194. }
  13195. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13196. {
  13197. USE_OPLINE
  13198. zval *op1, *op2;
  13199. double d1, d2;
  13200. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13201. op2 = RT_CONSTANT(opline, opline->op2);
  13202. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
  13203. /* pass */
  13204. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  13205. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13206. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  13207. is_not_equal_true:
  13208. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  13209. } else {
  13210. is_not_equal_false:
  13211. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  13212. }
  13213. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13214. d1 = (double)Z_LVAL_P(op1);
  13215. d2 = Z_DVAL_P(op2);
  13216. goto is_not_equal_double;
  13217. }
  13218. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  13219. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13220. d1 = Z_DVAL_P(op1);
  13221. d2 = Z_DVAL_P(op2);
  13222. is_not_equal_double:
  13223. if (d1 != d2) {
  13224. goto is_not_equal_true;
  13225. } else {
  13226. goto is_not_equal_false;
  13227. }
  13228. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13229. d1 = Z_DVAL_P(op1);
  13230. d2 = (double)Z_LVAL_P(op2);
  13231. goto is_not_equal_double;
  13232. }
  13233. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13234. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13235. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  13236. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  13237. zval_ptr_dtor_str(op1);
  13238. }
  13239. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13240. zval_ptr_dtor_str(op2);
  13241. }
  13242. if (!result) {
  13243. goto is_not_equal_true;
  13244. } else {
  13245. goto is_not_equal_false;
  13246. }
  13247. }
  13248. }
  13249. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13250. }
  13251. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13252. {
  13253. USE_OPLINE
  13254. zval *op1, *op2;
  13255. double d1, d2;
  13256. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13257. op2 = RT_CONSTANT(opline, opline->op2);
  13258. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
  13259. /* pass */
  13260. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  13261. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13262. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  13263. is_not_equal_true:
  13264. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  13265. } else {
  13266. is_not_equal_false:
  13267. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  13268. }
  13269. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13270. d1 = (double)Z_LVAL_P(op1);
  13271. d2 = Z_DVAL_P(op2);
  13272. goto is_not_equal_double;
  13273. }
  13274. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  13275. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13276. d1 = Z_DVAL_P(op1);
  13277. d2 = Z_DVAL_P(op2);
  13278. is_not_equal_double:
  13279. if (d1 != d2) {
  13280. goto is_not_equal_true;
  13281. } else {
  13282. goto is_not_equal_false;
  13283. }
  13284. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13285. d1 = Z_DVAL_P(op1);
  13286. d2 = (double)Z_LVAL_P(op2);
  13287. goto is_not_equal_double;
  13288. }
  13289. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13290. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13291. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  13292. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  13293. zval_ptr_dtor_str(op1);
  13294. }
  13295. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13296. zval_ptr_dtor_str(op2);
  13297. }
  13298. if (!result) {
  13299. goto is_not_equal_true;
  13300. } else {
  13301. goto is_not_equal_false;
  13302. }
  13303. }
  13304. }
  13305. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13306. }
  13307. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13308. {
  13309. USE_OPLINE
  13310. zval *op1, *op2;
  13311. double d1, d2;
  13312. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13313. op2 = RT_CONSTANT(opline, opline->op2);
  13314. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
  13315. /* pass */
  13316. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  13317. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13318. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  13319. is_not_equal_true:
  13320. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  13321. } else {
  13322. is_not_equal_false:
  13323. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  13324. }
  13325. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13326. d1 = (double)Z_LVAL_P(op1);
  13327. d2 = Z_DVAL_P(op2);
  13328. goto is_not_equal_double;
  13329. }
  13330. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  13331. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13332. d1 = Z_DVAL_P(op1);
  13333. d2 = Z_DVAL_P(op2);
  13334. is_not_equal_double:
  13335. if (d1 != d2) {
  13336. goto is_not_equal_true;
  13337. } else {
  13338. goto is_not_equal_false;
  13339. }
  13340. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13341. d1 = Z_DVAL_P(op1);
  13342. d2 = (double)Z_LVAL_P(op2);
  13343. goto is_not_equal_double;
  13344. }
  13345. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13346. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13347. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  13348. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  13349. zval_ptr_dtor_str(op1);
  13350. }
  13351. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13352. zval_ptr_dtor_str(op2);
  13353. }
  13354. if (!result) {
  13355. goto is_not_equal_true;
  13356. } else {
  13357. goto is_not_equal_false;
  13358. }
  13359. }
  13360. }
  13361. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13362. }
  13363. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13364. {
  13365. USE_OPLINE
  13366. zval *op1, *op2;
  13367. SAVE_OPLINE();
  13368. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13369. op2 = RT_CONSTANT(opline, opline->op2);
  13370. compare_function(EX_VAR(opline->result.var), op1, op2);
  13371. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13372. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13373. }
  13374. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13375. {
  13376. USE_OPLINE
  13377. zval *op1, *op2;
  13378. SAVE_OPLINE();
  13379. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13380. op2 = RT_CONSTANT(opline, opline->op2);
  13381. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  13382. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13383. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13384. }
  13385. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13386. {
  13387. USE_OPLINE
  13388. zval *container, *dim, *value;
  13389. SAVE_OPLINE();
  13390. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13391. dim = RT_CONSTANT(opline, opline->op2);
  13392. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13393. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  13394. fetch_dim_r_array:
  13395. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
  13396. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  13397. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  13398. container = Z_REFVAL_P(container);
  13399. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  13400. goto fetch_dim_r_array;
  13401. } else {
  13402. goto fetch_dim_r_slow;
  13403. }
  13404. } else {
  13405. fetch_dim_r_slow:
  13406. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  13407. dim++;
  13408. }
  13409. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  13410. }
  13411. } else {
  13412. zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  13413. }
  13414. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13415. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13416. }
  13417. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13418. {
  13419. USE_OPLINE
  13420. zval *container;
  13421. SAVE_OPLINE();
  13422. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13423. zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  13424. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13425. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13426. }
  13427. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13428. {
  13429. USE_OPLINE
  13430. zval *container;
  13431. void **cache_slot = NULL;
  13432. SAVE_OPLINE();
  13433. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13434. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  13435. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  13436. do {
  13437. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  13438. container = Z_REFVAL_P(container);
  13439. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  13440. break;
  13441. }
  13442. }
  13443. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  13444. ZVAL_UNDEFINED_OP1();
  13445. }
  13446. zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
  13447. ZVAL_NULL(EX_VAR(opline->result.var));
  13448. goto fetch_obj_r_finish;
  13449. } while (0);
  13450. }
  13451. /* here we are sure we are dealing with an object */
  13452. do {
  13453. zend_object *zobj = Z_OBJ_P(container);
  13454. zend_string *name, *tmp_name;
  13455. zval *retval;
  13456. if (IS_CONST == IS_CONST) {
  13457. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  13458. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  13459. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  13460. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  13461. retval = OBJ_PROP(zobj, prop_offset);
  13462. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  13463. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  13464. goto fetch_obj_r_copy;
  13465. } else {
  13466. fetch_obj_r_fast_copy:
  13467. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  13468. ZEND_VM_NEXT_OPCODE();
  13469. }
  13470. }
  13471. } else if (EXPECTED(zobj->properties != NULL)) {
  13472. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  13473. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  13474. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  13475. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  13476. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  13477. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  13478. (EXPECTED(p->key == name) ||
  13479. (EXPECTED(p->h == ZSTR_H(name)) &&
  13480. EXPECTED(p->key != NULL) &&
  13481. EXPECTED(zend_string_equal_content(p->key, name))))) {
  13482. retval = &p->val;
  13483. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  13484. goto fetch_obj_r_copy;
  13485. } else {
  13486. goto fetch_obj_r_fast_copy;
  13487. }
  13488. }
  13489. }
  13490. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  13491. }
  13492. retval = zend_hash_find_known_hash(zobj->properties, name);
  13493. if (EXPECTED(retval)) {
  13494. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  13495. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  13496. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  13497. goto fetch_obj_r_copy;
  13498. } else {
  13499. goto fetch_obj_r_fast_copy;
  13500. }
  13501. }
  13502. }
  13503. }
  13504. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  13505. } else {
  13506. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  13507. if (UNEXPECTED(!name)) {
  13508. ZVAL_UNDEF(EX_VAR(opline->result.var));
  13509. break;
  13510. }
  13511. }
  13512. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  13513. #if ZEND_DEBUG
  13514. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  13515. zend_verify_internal_read_property_type(zobj, name, retval);
  13516. }
  13517. #endif
  13518. if (IS_CONST != IS_CONST) {
  13519. zend_tmp_string_release(tmp_name);
  13520. }
  13521. if (retval != EX_VAR(opline->result.var)) {
  13522. fetch_obj_r_copy:
  13523. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  13524. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  13525. zend_unwrap_reference(retval);
  13526. }
  13527. } while (0);
  13528. fetch_obj_r_finish:
  13529. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13530. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13531. }
  13532. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13533. {
  13534. USE_OPLINE
  13535. zval *container;
  13536. void **cache_slot = NULL;
  13537. SAVE_OPLINE();
  13538. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13539. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  13540. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  13541. do {
  13542. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  13543. container = Z_REFVAL_P(container);
  13544. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  13545. break;
  13546. }
  13547. }
  13548. if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  13549. ZVAL_UNDEFINED_OP2();
  13550. }
  13551. ZVAL_NULL(EX_VAR(opline->result.var));
  13552. goto fetch_obj_is_finish;
  13553. } while (0);
  13554. }
  13555. /* here we are sure we are dealing with an object */
  13556. do {
  13557. zend_object *zobj = Z_OBJ_P(container);
  13558. zend_string *name, *tmp_name;
  13559. zval *retval;
  13560. if (IS_CONST == IS_CONST) {
  13561. cache_slot = CACHE_ADDR(opline->extended_value);
  13562. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  13563. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  13564. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  13565. retval = OBJ_PROP(zobj, prop_offset);
  13566. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  13567. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  13568. goto fetch_obj_is_copy;
  13569. } else {
  13570. fetch_obj_is_fast_copy:
  13571. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  13572. ZEND_VM_NEXT_OPCODE();
  13573. }
  13574. }
  13575. } else if (EXPECTED(zobj->properties != NULL)) {
  13576. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  13577. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  13578. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  13579. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  13580. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  13581. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  13582. (EXPECTED(p->key == name) ||
  13583. (EXPECTED(p->h == ZSTR_H(name)) &&
  13584. EXPECTED(p->key != NULL) &&
  13585. EXPECTED(zend_string_equal_content(p->key, name))))) {
  13586. retval = &p->val;
  13587. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  13588. goto fetch_obj_is_copy;
  13589. } else {
  13590. goto fetch_obj_is_fast_copy;
  13591. }
  13592. }
  13593. }
  13594. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  13595. }
  13596. retval = zend_hash_find_known_hash(zobj->properties, name);
  13597. if (EXPECTED(retval)) {
  13598. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  13599. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  13600. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  13601. goto fetch_obj_is_copy;
  13602. } else {
  13603. goto fetch_obj_is_fast_copy;
  13604. }
  13605. }
  13606. }
  13607. }
  13608. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  13609. } else {
  13610. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  13611. if (UNEXPECTED(!name)) {
  13612. ZVAL_UNDEF(EX_VAR(opline->result.var));
  13613. break;
  13614. }
  13615. }
  13616. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  13617. if (IS_CONST != IS_CONST) {
  13618. zend_tmp_string_release(tmp_name);
  13619. }
  13620. if (retval != EX_VAR(opline->result.var)) {
  13621. fetch_obj_is_copy:
  13622. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  13623. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  13624. zend_unwrap_reference(retval);
  13625. }
  13626. } while (0);
  13627. fetch_obj_is_finish:
  13628. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13629. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13630. }
  13631. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13632. {
  13633. USE_OPLINE
  13634. zval *op1, *op2;
  13635. zend_string *op1_str, *op2_str, *str;
  13636. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13637. op2 = RT_CONSTANT(opline, opline->op2);
  13638. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  13639. (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  13640. zend_string *op1_str = Z_STR_P(op1);
  13641. zend_string *op2_str = Z_STR_P(op2);
  13642. zend_string *str;
  13643. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  13644. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  13645. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  13646. } else {
  13647. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  13648. }
  13649. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  13650. zend_string_release_ex(op1_str, 0);
  13651. }
  13652. } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  13653. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  13654. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  13655. } else {
  13656. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  13657. }
  13658. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13659. zend_string_release_ex(op2_str, 0);
  13660. }
  13661. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  13662. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  13663. size_t len = ZSTR_LEN(op1_str);
  13664. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  13665. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  13666. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  13667. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13668. zend_string_release_ex(op2_str, 0);
  13669. }
  13670. } else {
  13671. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  13672. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  13673. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  13674. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  13675. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  13676. zend_string_release_ex(op1_str, 0);
  13677. }
  13678. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13679. zend_string_release_ex(op2_str, 0);
  13680. }
  13681. }
  13682. ZEND_VM_NEXT_OPCODE();
  13683. }
  13684. SAVE_OPLINE();
  13685. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13686. op1_str = Z_STR_P(op1);
  13687. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13688. op1_str = zend_string_copy(Z_STR_P(op1));
  13689. } else {
  13690. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  13691. ZVAL_UNDEFINED_OP1();
  13692. }
  13693. op1_str = zval_get_string_func(op1);
  13694. }
  13695. if (IS_CONST == IS_CONST) {
  13696. op2_str = Z_STR_P(op2);
  13697. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13698. op2_str = zend_string_copy(Z_STR_P(op2));
  13699. } else {
  13700. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  13701. ZVAL_UNDEFINED_OP2();
  13702. }
  13703. op2_str = zval_get_string_func(op2);
  13704. }
  13705. do {
  13706. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13707. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  13708. if (IS_CONST == IS_CONST) {
  13709. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  13710. GC_ADDREF(op2_str);
  13711. }
  13712. }
  13713. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  13714. zend_string_release_ex(op1_str, 0);
  13715. break;
  13716. }
  13717. }
  13718. if (IS_CONST != IS_CONST) {
  13719. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  13720. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13721. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  13722. GC_ADDREF(op1_str);
  13723. }
  13724. }
  13725. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  13726. zend_string_release_ex(op2_str, 0);
  13727. break;
  13728. }
  13729. }
  13730. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  13731. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  13732. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  13733. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  13734. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13735. zend_string_release_ex(op1_str, 0);
  13736. }
  13737. if (IS_CONST != IS_CONST) {
  13738. zend_string_release_ex(op2_str, 0);
  13739. }
  13740. } while (0);
  13741. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13742. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13743. }
  13744. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13745. {
  13746. USE_OPLINE
  13747. zval *function_name;
  13748. zval *object;
  13749. zend_function *fbc;
  13750. zend_class_entry *called_scope;
  13751. zend_object *obj;
  13752. zend_execute_data *call;
  13753. uint32_t call_info;
  13754. SAVE_OPLINE();
  13755. object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13756. if (IS_CONST != IS_CONST) {
  13757. function_name = RT_CONSTANT(opline, opline->op2);
  13758. }
  13759. if (IS_CONST != IS_CONST &&
  13760. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  13761. do {
  13762. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  13763. function_name = Z_REFVAL_P(function_name);
  13764. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  13765. break;
  13766. }
  13767. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  13768. ZVAL_UNDEFINED_OP2();
  13769. if (UNEXPECTED(EG(exception) != NULL)) {
  13770. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13771. HANDLE_EXCEPTION();
  13772. }
  13773. }
  13774. zend_throw_error(NULL, "Method name must be a string");
  13775. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13776. HANDLE_EXCEPTION();
  13777. } while (0);
  13778. }
  13779. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  13780. obj = Z_OBJ_P(object);
  13781. } else {
  13782. do {
  13783. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  13784. obj = Z_OBJ_P(object);
  13785. } else {
  13786. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  13787. zend_reference *ref = Z_REF_P(object);
  13788. object = &ref->val;
  13789. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  13790. obj = Z_OBJ_P(object);
  13791. if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
  13792. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  13793. efree_size(ref, sizeof(zend_reference));
  13794. } else {
  13795. Z_ADDREF_P(object);
  13796. }
  13797. }
  13798. break;
  13799. }
  13800. }
  13801. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  13802. object = ZVAL_UNDEFINED_OP1();
  13803. if (UNEXPECTED(EG(exception) != NULL)) {
  13804. if (IS_CONST != IS_CONST) {
  13805. }
  13806. HANDLE_EXCEPTION();
  13807. }
  13808. }
  13809. if (IS_CONST == IS_CONST) {
  13810. function_name = RT_CONSTANT(opline, opline->op2);
  13811. }
  13812. zend_invalid_method_call(object, function_name);
  13813. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13814. HANDLE_EXCEPTION();
  13815. }
  13816. } while (0);
  13817. }
  13818. called_scope = obj->ce;
  13819. if (IS_CONST == IS_CONST &&
  13820. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  13821. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  13822. } else {
  13823. zend_object *orig_obj = obj;
  13824. if (IS_CONST == IS_CONST) {
  13825. function_name = RT_CONSTANT(opline, opline->op2);
  13826. }
  13827. /* First, locate the function. */
  13828. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  13829. if (UNEXPECTED(fbc == NULL)) {
  13830. if (EXPECTED(!EG(exception))) {
  13831. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  13832. }
  13833. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  13834. zend_objects_store_del(orig_obj);
  13835. }
  13836. HANDLE_EXCEPTION();
  13837. }
  13838. if (IS_CONST == IS_CONST &&
  13839. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  13840. EXPECTED(obj == orig_obj)) {
  13841. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  13842. }
  13843. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  13844. GC_ADDREF(obj); /* For $this pointer */
  13845. if (GC_DELREF(orig_obj) == 0) {
  13846. zend_objects_store_del(orig_obj);
  13847. }
  13848. }
  13849. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  13850. init_func_run_time_cache(&fbc->op_array);
  13851. }
  13852. }
  13853. if (IS_CONST != IS_CONST) {
  13854. }
  13855. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  13856. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  13857. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  13858. zend_objects_store_del(obj);
  13859. if (UNEXPECTED(EG(exception))) {
  13860. HANDLE_EXCEPTION();
  13861. }
  13862. }
  13863. /* call static method */
  13864. obj = (zend_object*)called_scope;
  13865. call_info = ZEND_CALL_NESTED_FUNCTION;
  13866. } else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  13867. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  13868. GC_ADDREF(obj); /* For $this pointer */
  13869. }
  13870. /* CV may be changed indirectly (e.g. when it's a reference) */
  13871. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  13872. }
  13873. call = zend_vm_stack_push_call_frame(call_info,
  13874. fbc, opline->extended_value, obj);
  13875. call->prev_execute_data = EX(call);
  13876. EX(call) = call;
  13877. ZEND_VM_NEXT_OPCODE();
  13878. }
  13879. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13880. {
  13881. USE_OPLINE
  13882. zval *value, *arg;
  13883. if (IS_CONST == IS_CONST) {
  13884. SAVE_OPLINE();
  13885. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  13886. uint32_t arg_num;
  13887. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  13888. if (UNEXPECTED(!arg)) {
  13889. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13890. HANDLE_EXCEPTION();
  13891. }
  13892. } else {
  13893. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  13894. }
  13895. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13896. ZVAL_COPY_VALUE(arg, value);
  13897. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13898. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  13899. Z_ADDREF_P(arg);
  13900. }
  13901. }
  13902. ZEND_VM_NEXT_OPCODE();
  13903. }
  13904. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13905. {
  13906. USE_OPLINE
  13907. zval *op1, *op2;
  13908. double d1, d2;
  13909. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13910. op2 = RT_CONSTANT(opline, opline->op2);
  13911. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  13912. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13913. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  13914. case_true:
  13915. ZEND_VM_SMART_BRANCH_TRUE();
  13916. } else {
  13917. case_false:
  13918. ZEND_VM_SMART_BRANCH_FALSE();
  13919. }
  13920. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13921. d1 = (double)Z_LVAL_P(op1);
  13922. d2 = Z_DVAL_P(op2);
  13923. goto case_double;
  13924. }
  13925. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  13926. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13927. d1 = Z_DVAL_P(op1);
  13928. d2 = Z_DVAL_P(op2);
  13929. case_double:
  13930. if (d1 == d2) {
  13931. goto case_true;
  13932. } else {
  13933. goto case_false;
  13934. }
  13935. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13936. d1 = Z_DVAL_P(op1);
  13937. d2 = (double)Z_LVAL_P(op2);
  13938. goto case_double;
  13939. }
  13940. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13941. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13942. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  13943. if (result) {
  13944. goto case_true;
  13945. } else {
  13946. goto case_false;
  13947. }
  13948. }
  13949. }
  13950. ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13951. }
  13952. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13953. {
  13954. USE_OPLINE
  13955. zval *container;
  13956. bool result;
  13957. zend_ulong hval;
  13958. zval *offset;
  13959. SAVE_OPLINE();
  13960. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13961. offset = RT_CONSTANT(opline, opline->op2);
  13962. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  13963. HashTable *ht;
  13964. zval *value;
  13965. zend_string *str;
  13966. isset_dim_obj_array:
  13967. ht = Z_ARRVAL_P(container);
  13968. isset_again:
  13969. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  13970. str = Z_STR_P(offset);
  13971. if (IS_CONST != IS_CONST) {
  13972. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  13973. goto num_index_prop;
  13974. }
  13975. }
  13976. value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
  13977. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  13978. hval = Z_LVAL_P(offset);
  13979. num_index_prop:
  13980. value = zend_hash_index_find(ht, hval);
  13981. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  13982. offset = Z_REFVAL_P(offset);
  13983. goto isset_again;
  13984. } else {
  13985. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  13986. if (UNEXPECTED(EG(exception))) {
  13987. result = 0;
  13988. goto isset_dim_obj_exit;
  13989. }
  13990. }
  13991. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  13992. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  13993. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  13994. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  13995. if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
  13996. /* avoid exception check */
  13997. ZEND_VM_SMART_BRANCH(result, 0);
  13998. }
  13999. } else {
  14000. result = (value == NULL || !i_zend_is_true(value));
  14001. }
  14002. goto isset_dim_obj_exit;
  14003. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  14004. container = Z_REFVAL_P(container);
  14005. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  14006. goto isset_dim_obj_array;
  14007. }
  14008. }
  14009. if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  14010. offset++;
  14011. }
  14012. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  14013. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  14014. } else {
  14015. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  14016. }
  14017. isset_dim_obj_exit:
  14018. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14019. ZEND_VM_SMART_BRANCH(result, 1);
  14020. }
  14021. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14022. {
  14023. USE_OPLINE
  14024. zval *container;
  14025. int result;
  14026. zval *offset;
  14027. zend_string *name, *tmp_name;
  14028. SAVE_OPLINE();
  14029. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14030. offset = RT_CONSTANT(opline, opline->op2);
  14031. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  14032. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  14033. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  14034. container = Z_REFVAL_P(container);
  14035. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  14036. result = (opline->extended_value & ZEND_ISEMPTY);
  14037. goto isset_object_finish;
  14038. }
  14039. } else {
  14040. result = (opline->extended_value & ZEND_ISEMPTY);
  14041. goto isset_object_finish;
  14042. }
  14043. }
  14044. if (IS_CONST == IS_CONST) {
  14045. name = Z_STR_P(offset);
  14046. } else {
  14047. name = zval_try_get_tmp_string(offset, &tmp_name);
  14048. if (UNEXPECTED(!name)) {
  14049. result = 0;
  14050. goto isset_object_finish;
  14051. }
  14052. }
  14053. result =
  14054. (opline->extended_value & ZEND_ISEMPTY) ^
  14055. Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  14056. if (IS_CONST != IS_CONST) {
  14057. zend_tmp_string_release(tmp_name);
  14058. }
  14059. isset_object_finish:
  14060. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14061. ZEND_VM_SMART_BRANCH(result, 1);
  14062. }
  14063. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14064. {
  14065. USE_OPLINE
  14066. zval *key, *subject;
  14067. HashTable *ht;
  14068. bool result;
  14069. SAVE_OPLINE();
  14070. key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14071. subject = RT_CONSTANT(opline, opline->op2);
  14072. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  14073. array_key_exists_array:
  14074. ht = Z_ARRVAL_P(subject);
  14075. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  14076. } else {
  14077. if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  14078. subject = Z_REFVAL_P(subject);
  14079. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  14080. goto array_key_exists_array;
  14081. }
  14082. }
  14083. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  14084. result = 0;
  14085. }
  14086. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14087. ZEND_VM_SMART_BRANCH(result, 1);
  14088. }
  14089. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  14090. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14091. {
  14092. USE_OPLINE
  14093. zval *expr;
  14094. bool result;
  14095. SAVE_OPLINE();
  14096. expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14097. try_instanceof:
  14098. if (Z_TYPE_P(expr) == IS_OBJECT) {
  14099. zend_class_entry *ce;
  14100. if (IS_CONST == IS_CONST) {
  14101. ce = CACHED_PTR(opline->extended_value);
  14102. if (UNEXPECTED(ce == NULL)) {
  14103. ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
  14104. if (EXPECTED(ce)) {
  14105. CACHE_PTR(opline->extended_value, ce);
  14106. }
  14107. }
  14108. } else if (IS_CONST == IS_UNUSED) {
  14109. ce = zend_fetch_class(NULL, opline->op2.num);
  14110. if (UNEXPECTED(ce == NULL)) {
  14111. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14112. ZVAL_UNDEF(EX_VAR(opline->result.var));
  14113. HANDLE_EXCEPTION();
  14114. }
  14115. } else {
  14116. ce = Z_CE_P(EX_VAR(opline->op2.var));
  14117. }
  14118. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  14119. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  14120. expr = Z_REFVAL_P(expr);
  14121. goto try_instanceof;
  14122. } else {
  14123. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  14124. ZVAL_UNDEFINED_OP1();
  14125. }
  14126. result = 0;
  14127. }
  14128. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14129. ZEND_VM_SMART_BRANCH(result, 1);
  14130. }
  14131. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14132. {
  14133. USE_OPLINE
  14134. zval *container, *dim, *value;
  14135. zend_long offset;
  14136. HashTable *ht;
  14137. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14138. dim = RT_CONSTANT(opline, opline->op2);
  14139. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  14140. fetch_dim_r_index_array:
  14141. if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
  14142. offset = Z_LVAL_P(dim);
  14143. } else {
  14144. SAVE_OPLINE();
  14145. zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  14146. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14147. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14148. }
  14149. ht = Z_ARRVAL_P(container);
  14150. ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
  14151. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  14152. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14153. SAVE_OPLINE();
  14154. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14155. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14156. } else {
  14157. ZEND_VM_NEXT_OPCODE();
  14158. }
  14159. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  14160. container = Z_REFVAL_P(container);
  14161. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  14162. goto fetch_dim_r_index_array;
  14163. } else {
  14164. goto fetch_dim_r_index_slow;
  14165. }
  14166. } else {
  14167. fetch_dim_r_index_slow:
  14168. SAVE_OPLINE();
  14169. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  14170. dim++;
  14171. }
  14172. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  14173. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14174. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14175. }
  14176. fetch_dim_r_index_undef:
  14177. ZVAL_NULL(EX_VAR(opline->result.var));
  14178. SAVE_OPLINE();
  14179. zend_undefined_offset(offset);
  14180. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14181. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14182. }
  14183. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14184. {
  14185. USE_OPLINE
  14186. zval *container, *dim, *value;
  14187. zend_long offset;
  14188. HashTable *ht;
  14189. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14190. dim = EX_VAR(opline->op2.var);
  14191. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  14192. fetch_dim_r_index_array:
  14193. if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
  14194. offset = Z_LVAL_P(dim);
  14195. } else {
  14196. SAVE_OPLINE();
  14197. zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);
  14198. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14199. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14200. }
  14201. ht = Z_ARRVAL_P(container);
  14202. ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
  14203. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  14204. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14205. SAVE_OPLINE();
  14206. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14207. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14208. } else {
  14209. ZEND_VM_NEXT_OPCODE();
  14210. }
  14211. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  14212. container = Z_REFVAL_P(container);
  14213. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  14214. goto fetch_dim_r_index_array;
  14215. } else {
  14216. goto fetch_dim_r_index_slow;
  14217. }
  14218. } else {
  14219. fetch_dim_r_index_slow:
  14220. SAVE_OPLINE();
  14221. if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  14222. dim++;
  14223. }
  14224. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  14225. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14226. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14227. }
  14228. fetch_dim_r_index_undef:
  14229. ZVAL_NULL(EX_VAR(opline->result.var));
  14230. SAVE_OPLINE();
  14231. zend_undefined_offset(offset);
  14232. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14233. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14234. }
  14235. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14236. {
  14237. USE_OPLINE
  14238. zval *op1, *op2;
  14239. SAVE_OPLINE();
  14240. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14241. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14242. div_function(EX_VAR(opline->result.var), op1, op2);
  14243. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14244. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14245. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14246. }
  14247. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14248. {
  14249. USE_OPLINE
  14250. zval *op1, *op2;
  14251. SAVE_OPLINE();
  14252. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14253. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14254. pow_function(EX_VAR(opline->result.var), op1, op2);
  14255. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14256. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14257. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14258. }
  14259. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14260. {
  14261. USE_OPLINE
  14262. zval *op1, *op2;
  14263. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14264. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14265. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  14266. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  14267. zend_string *op1_str = Z_STR_P(op1);
  14268. zend_string *op2_str = Z_STR_P(op2);
  14269. zend_string *str;
  14270. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  14271. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  14272. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  14273. } else {
  14274. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  14275. }
  14276. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14277. zend_string_release_ex(op1_str, 0);
  14278. }
  14279. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  14280. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  14281. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  14282. } else {
  14283. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  14284. }
  14285. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14286. zend_string_release_ex(op2_str, 0);
  14287. }
  14288. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  14289. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  14290. size_t len = ZSTR_LEN(op1_str);
  14291. if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
  14292. zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
  14293. }
  14294. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  14295. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  14296. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  14297. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14298. zend_string_release_ex(op2_str, 0);
  14299. }
  14300. } else {
  14301. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  14302. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  14303. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  14304. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  14305. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14306. zend_string_release_ex(op1_str, 0);
  14307. }
  14308. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14309. zend_string_release_ex(op2_str, 0);
  14310. }
  14311. }
  14312. ZEND_VM_NEXT_OPCODE();
  14313. } else {
  14314. SAVE_OPLINE();
  14315. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  14316. op1 = ZVAL_UNDEFINED_OP1();
  14317. }
  14318. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  14319. op2 = ZVAL_UNDEFINED_OP2();
  14320. }
  14321. concat_function(EX_VAR(opline->result.var), op1, op2);
  14322. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14323. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14324. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14325. }
  14326. }
  14327. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14328. {
  14329. USE_OPLINE
  14330. zval *op1, *op2;
  14331. double d1, d2;
  14332. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14333. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14334. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14335. /* pass */
  14336. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  14337. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14338. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  14339. is_equal_true:
  14340. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  14341. } else {
  14342. is_equal_false:
  14343. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  14344. }
  14345. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14346. d1 = (double)Z_LVAL_P(op1);
  14347. d2 = Z_DVAL_P(op2);
  14348. goto is_equal_double;
  14349. }
  14350. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  14351. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14352. d1 = Z_DVAL_P(op1);
  14353. d2 = Z_DVAL_P(op2);
  14354. is_equal_double:
  14355. if (d1 == d2) {
  14356. goto is_equal_true;
  14357. } else {
  14358. goto is_equal_false;
  14359. }
  14360. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14361. d1 = Z_DVAL_P(op1);
  14362. d2 = (double)Z_LVAL_P(op2);
  14363. goto is_equal_double;
  14364. }
  14365. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  14366. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  14367. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  14368. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14369. zval_ptr_dtor_str(op1);
  14370. }
  14371. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14372. zval_ptr_dtor_str(op2);
  14373. }
  14374. if (result) {
  14375. goto is_equal_true;
  14376. } else {
  14377. goto is_equal_false;
  14378. }
  14379. }
  14380. }
  14381. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14382. }
  14383. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14384. {
  14385. USE_OPLINE
  14386. zval *op1, *op2;
  14387. double d1, d2;
  14388. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14389. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14390. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14391. /* pass */
  14392. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  14393. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14394. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  14395. is_equal_true:
  14396. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  14397. } else {
  14398. is_equal_false:
  14399. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  14400. }
  14401. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14402. d1 = (double)Z_LVAL_P(op1);
  14403. d2 = Z_DVAL_P(op2);
  14404. goto is_equal_double;
  14405. }
  14406. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  14407. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14408. d1 = Z_DVAL_P(op1);
  14409. d2 = Z_DVAL_P(op2);
  14410. is_equal_double:
  14411. if (d1 == d2) {
  14412. goto is_equal_true;
  14413. } else {
  14414. goto is_equal_false;
  14415. }
  14416. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14417. d1 = Z_DVAL_P(op1);
  14418. d2 = (double)Z_LVAL_P(op2);
  14419. goto is_equal_double;
  14420. }
  14421. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  14422. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  14423. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  14424. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14425. zval_ptr_dtor_str(op1);
  14426. }
  14427. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14428. zval_ptr_dtor_str(op2);
  14429. }
  14430. if (result) {
  14431. goto is_equal_true;
  14432. } else {
  14433. goto is_equal_false;
  14434. }
  14435. }
  14436. }
  14437. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14438. }
  14439. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14440. {
  14441. USE_OPLINE
  14442. zval *op1, *op2;
  14443. double d1, d2;
  14444. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14445. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14446. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14447. /* pass */
  14448. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  14449. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14450. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  14451. is_equal_true:
  14452. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  14453. } else {
  14454. is_equal_false:
  14455. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  14456. }
  14457. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14458. d1 = (double)Z_LVAL_P(op1);
  14459. d2 = Z_DVAL_P(op2);
  14460. goto is_equal_double;
  14461. }
  14462. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  14463. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14464. d1 = Z_DVAL_P(op1);
  14465. d2 = Z_DVAL_P(op2);
  14466. is_equal_double:
  14467. if (d1 == d2) {
  14468. goto is_equal_true;
  14469. } else {
  14470. goto is_equal_false;
  14471. }
  14472. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14473. d1 = Z_DVAL_P(op1);
  14474. d2 = (double)Z_LVAL_P(op2);
  14475. goto is_equal_double;
  14476. }
  14477. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  14478. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  14479. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  14480. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14481. zval_ptr_dtor_str(op1);
  14482. }
  14483. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14484. zval_ptr_dtor_str(op2);
  14485. }
  14486. if (result) {
  14487. goto is_equal_true;
  14488. } else {
  14489. goto is_equal_false;
  14490. }
  14491. }
  14492. }
  14493. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14494. }
  14495. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14496. {
  14497. USE_OPLINE
  14498. zval *op1, *op2;
  14499. double d1, d2;
  14500. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14501. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14502. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14503. /* pass */
  14504. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  14505. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14506. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  14507. is_not_equal_true:
  14508. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  14509. } else {
  14510. is_not_equal_false:
  14511. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  14512. }
  14513. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14514. d1 = (double)Z_LVAL_P(op1);
  14515. d2 = Z_DVAL_P(op2);
  14516. goto is_not_equal_double;
  14517. }
  14518. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  14519. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14520. d1 = Z_DVAL_P(op1);
  14521. d2 = Z_DVAL_P(op2);
  14522. is_not_equal_double:
  14523. if (d1 != d2) {
  14524. goto is_not_equal_true;
  14525. } else {
  14526. goto is_not_equal_false;
  14527. }
  14528. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14529. d1 = Z_DVAL_P(op1);
  14530. d2 = (double)Z_LVAL_P(op2);
  14531. goto is_not_equal_double;
  14532. }
  14533. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  14534. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  14535. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  14536. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14537. zval_ptr_dtor_str(op1);
  14538. }
  14539. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14540. zval_ptr_dtor_str(op2);
  14541. }
  14542. if (!result) {
  14543. goto is_not_equal_true;
  14544. } else {
  14545. goto is_not_equal_false;
  14546. }
  14547. }
  14548. }
  14549. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14550. }
  14551. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14552. {
  14553. USE_OPLINE
  14554. zval *op1, *op2;
  14555. double d1, d2;
  14556. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14557. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14558. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14559. /* pass */
  14560. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  14561. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14562. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  14563. is_not_equal_true:
  14564. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  14565. } else {
  14566. is_not_equal_false:
  14567. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  14568. }
  14569. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14570. d1 = (double)Z_LVAL_P(op1);
  14571. d2 = Z_DVAL_P(op2);
  14572. goto is_not_equal_double;
  14573. }
  14574. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  14575. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14576. d1 = Z_DVAL_P(op1);
  14577. d2 = Z_DVAL_P(op2);
  14578. is_not_equal_double:
  14579. if (d1 != d2) {
  14580. goto is_not_equal_true;
  14581. } else {
  14582. goto is_not_equal_false;
  14583. }
  14584. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14585. d1 = Z_DVAL_P(op1);
  14586. d2 = (double)Z_LVAL_P(op2);
  14587. goto is_not_equal_double;
  14588. }
  14589. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  14590. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  14591. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  14592. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14593. zval_ptr_dtor_str(op1);
  14594. }
  14595. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14596. zval_ptr_dtor_str(op2);
  14597. }
  14598. if (!result) {
  14599. goto is_not_equal_true;
  14600. } else {
  14601. goto is_not_equal_false;
  14602. }
  14603. }
  14604. }
  14605. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14606. }
  14607. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14608. {
  14609. USE_OPLINE
  14610. zval *op1, *op2;
  14611. double d1, d2;
  14612. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14613. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14614. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14615. /* pass */
  14616. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  14617. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14618. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  14619. is_not_equal_true:
  14620. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  14621. } else {
  14622. is_not_equal_false:
  14623. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  14624. }
  14625. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14626. d1 = (double)Z_LVAL_P(op1);
  14627. d2 = Z_DVAL_P(op2);
  14628. goto is_not_equal_double;
  14629. }
  14630. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  14631. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14632. d1 = Z_DVAL_P(op1);
  14633. d2 = Z_DVAL_P(op2);
  14634. is_not_equal_double:
  14635. if (d1 != d2) {
  14636. goto is_not_equal_true;
  14637. } else {
  14638. goto is_not_equal_false;
  14639. }
  14640. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14641. d1 = Z_DVAL_P(op1);
  14642. d2 = (double)Z_LVAL_P(op2);
  14643. goto is_not_equal_double;
  14644. }
  14645. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  14646. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  14647. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  14648. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14649. zval_ptr_dtor_str(op1);
  14650. }
  14651. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14652. zval_ptr_dtor_str(op2);
  14653. }
  14654. if (!result) {
  14655. goto is_not_equal_true;
  14656. } else {
  14657. goto is_not_equal_false;
  14658. }
  14659. }
  14660. }
  14661. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14662. }
  14663. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14664. {
  14665. USE_OPLINE
  14666. zval *op1, *op2;
  14667. SAVE_OPLINE();
  14668. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14669. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14670. compare_function(EX_VAR(opline->result.var), op1, op2);
  14671. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14672. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14673. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14674. }
  14675. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14676. {
  14677. USE_OPLINE
  14678. zval *op1, *op2;
  14679. SAVE_OPLINE();
  14680. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14681. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14682. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  14683. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14684. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14685. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14686. }
  14687. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14688. {
  14689. USE_OPLINE
  14690. zval *container, *dim, *value;
  14691. SAVE_OPLINE();
  14692. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14693. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14694. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  14695. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  14696. fetch_dim_r_array:
  14697. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
  14698. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  14699. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  14700. container = Z_REFVAL_P(container);
  14701. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  14702. goto fetch_dim_r_array;
  14703. } else {
  14704. goto fetch_dim_r_slow;
  14705. }
  14706. } else {
  14707. fetch_dim_r_slow:
  14708. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  14709. dim++;
  14710. }
  14711. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  14712. }
  14713. } else {
  14714. zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  14715. }
  14716. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14717. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14718. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14719. }
  14720. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14721. {
  14722. USE_OPLINE
  14723. zval *container;
  14724. SAVE_OPLINE();
  14725. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14726. zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  14727. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14728. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14729. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14730. }
  14731. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14732. {
  14733. USE_OPLINE
  14734. zval *container;
  14735. void **cache_slot = NULL;
  14736. SAVE_OPLINE();
  14737. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14738. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  14739. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  14740. do {
  14741. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  14742. container = Z_REFVAL_P(container);
  14743. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  14744. break;
  14745. }
  14746. }
  14747. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  14748. ZVAL_UNDEFINED_OP1();
  14749. }
  14750. zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  14751. ZVAL_NULL(EX_VAR(opline->result.var));
  14752. goto fetch_obj_r_finish;
  14753. } while (0);
  14754. }
  14755. /* here we are sure we are dealing with an object */
  14756. do {
  14757. zend_object *zobj = Z_OBJ_P(container);
  14758. zend_string *name, *tmp_name;
  14759. zval *retval;
  14760. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14761. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  14762. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  14763. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  14764. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  14765. retval = OBJ_PROP(zobj, prop_offset);
  14766. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  14767. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  14768. goto fetch_obj_r_copy;
  14769. } else {
  14770. fetch_obj_r_fast_copy:
  14771. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  14772. ZEND_VM_NEXT_OPCODE();
  14773. }
  14774. }
  14775. } else if (EXPECTED(zobj->properties != NULL)) {
  14776. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  14777. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  14778. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  14779. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  14780. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  14781. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  14782. (EXPECTED(p->key == name) ||
  14783. (EXPECTED(p->h == ZSTR_H(name)) &&
  14784. EXPECTED(p->key != NULL) &&
  14785. EXPECTED(zend_string_equal_content(p->key, name))))) {
  14786. retval = &p->val;
  14787. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  14788. goto fetch_obj_r_copy;
  14789. } else {
  14790. goto fetch_obj_r_fast_copy;
  14791. }
  14792. }
  14793. }
  14794. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  14795. }
  14796. retval = zend_hash_find_known_hash(zobj->properties, name);
  14797. if (EXPECTED(retval)) {
  14798. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  14799. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  14800. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  14801. goto fetch_obj_r_copy;
  14802. } else {
  14803. goto fetch_obj_r_fast_copy;
  14804. }
  14805. }
  14806. }
  14807. }
  14808. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  14809. } else {
  14810. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  14811. if (UNEXPECTED(!name)) {
  14812. ZVAL_UNDEF(EX_VAR(opline->result.var));
  14813. break;
  14814. }
  14815. }
  14816. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  14817. #if ZEND_DEBUG
  14818. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  14819. zend_verify_internal_read_property_type(zobj, name, retval);
  14820. }
  14821. #endif
  14822. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  14823. zend_tmp_string_release(tmp_name);
  14824. }
  14825. if (retval != EX_VAR(opline->result.var)) {
  14826. fetch_obj_r_copy:
  14827. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  14828. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  14829. zend_unwrap_reference(retval);
  14830. }
  14831. } while (0);
  14832. fetch_obj_r_finish:
  14833. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14834. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14835. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14836. }
  14837. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14838. {
  14839. USE_OPLINE
  14840. zval *container;
  14841. void **cache_slot = NULL;
  14842. SAVE_OPLINE();
  14843. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14844. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  14845. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  14846. do {
  14847. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  14848. container = Z_REFVAL_P(container);
  14849. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  14850. break;
  14851. }
  14852. }
  14853. if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  14854. ZVAL_UNDEFINED_OP2();
  14855. }
  14856. ZVAL_NULL(EX_VAR(opline->result.var));
  14857. goto fetch_obj_is_finish;
  14858. } while (0);
  14859. }
  14860. /* here we are sure we are dealing with an object */
  14861. do {
  14862. zend_object *zobj = Z_OBJ_P(container);
  14863. zend_string *name, *tmp_name;
  14864. zval *retval;
  14865. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14866. cache_slot = CACHE_ADDR(opline->extended_value);
  14867. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  14868. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  14869. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  14870. retval = OBJ_PROP(zobj, prop_offset);
  14871. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  14872. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  14873. goto fetch_obj_is_copy;
  14874. } else {
  14875. fetch_obj_is_fast_copy:
  14876. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  14877. ZEND_VM_NEXT_OPCODE();
  14878. }
  14879. }
  14880. } else if (EXPECTED(zobj->properties != NULL)) {
  14881. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  14882. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  14883. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  14884. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  14885. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  14886. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  14887. (EXPECTED(p->key == name) ||
  14888. (EXPECTED(p->h == ZSTR_H(name)) &&
  14889. EXPECTED(p->key != NULL) &&
  14890. EXPECTED(zend_string_equal_content(p->key, name))))) {
  14891. retval = &p->val;
  14892. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  14893. goto fetch_obj_is_copy;
  14894. } else {
  14895. goto fetch_obj_is_fast_copy;
  14896. }
  14897. }
  14898. }
  14899. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  14900. }
  14901. retval = zend_hash_find_known_hash(zobj->properties, name);
  14902. if (EXPECTED(retval)) {
  14903. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  14904. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  14905. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  14906. goto fetch_obj_is_copy;
  14907. } else {
  14908. goto fetch_obj_is_fast_copy;
  14909. }
  14910. }
  14911. }
  14912. }
  14913. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  14914. } else {
  14915. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  14916. if (UNEXPECTED(!name)) {
  14917. ZVAL_UNDEF(EX_VAR(opline->result.var));
  14918. break;
  14919. }
  14920. }
  14921. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  14922. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  14923. zend_tmp_string_release(tmp_name);
  14924. }
  14925. if (retval != EX_VAR(opline->result.var)) {
  14926. fetch_obj_is_copy:
  14927. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  14928. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  14929. zend_unwrap_reference(retval);
  14930. }
  14931. } while (0);
  14932. fetch_obj_is_finish:
  14933. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14934. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14935. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14936. }
  14937. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14938. {
  14939. USE_OPLINE
  14940. zval *op1, *op2;
  14941. zend_string *op1_str, *op2_str, *str;
  14942. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14943. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14944. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  14945. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  14946. zend_string *op1_str = Z_STR_P(op1);
  14947. zend_string *op2_str = Z_STR_P(op2);
  14948. zend_string *str;
  14949. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  14950. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  14951. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  14952. } else {
  14953. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  14954. }
  14955. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14956. zend_string_release_ex(op1_str, 0);
  14957. }
  14958. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  14959. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  14960. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  14961. } else {
  14962. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  14963. }
  14964. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14965. zend_string_release_ex(op2_str, 0);
  14966. }
  14967. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  14968. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  14969. size_t len = ZSTR_LEN(op1_str);
  14970. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  14971. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  14972. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  14973. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14974. zend_string_release_ex(op2_str, 0);
  14975. }
  14976. } else {
  14977. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  14978. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  14979. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  14980. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  14981. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14982. zend_string_release_ex(op1_str, 0);
  14983. }
  14984. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14985. zend_string_release_ex(op2_str, 0);
  14986. }
  14987. }
  14988. ZEND_VM_NEXT_OPCODE();
  14989. }
  14990. SAVE_OPLINE();
  14991. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14992. op1_str = Z_STR_P(op1);
  14993. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  14994. op1_str = zend_string_copy(Z_STR_P(op1));
  14995. } else {
  14996. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  14997. ZVAL_UNDEFINED_OP1();
  14998. }
  14999. op1_str = zval_get_string_func(op1);
  15000. }
  15001. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15002. op2_str = Z_STR_P(op2);
  15003. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  15004. op2_str = zend_string_copy(Z_STR_P(op2));
  15005. } else {
  15006. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  15007. ZVAL_UNDEFINED_OP2();
  15008. }
  15009. op2_str = zval_get_string_func(op2);
  15010. }
  15011. do {
  15012. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15013. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  15014. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15015. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  15016. GC_ADDREF(op2_str);
  15017. }
  15018. }
  15019. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  15020. zend_string_release_ex(op1_str, 0);
  15021. break;
  15022. }
  15023. }
  15024. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15025. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  15026. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15027. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  15028. GC_ADDREF(op1_str);
  15029. }
  15030. }
  15031. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  15032. zend_string_release_ex(op2_str, 0);
  15033. break;
  15034. }
  15035. }
  15036. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  15037. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  15038. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  15039. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  15040. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15041. zend_string_release_ex(op1_str, 0);
  15042. }
  15043. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15044. zend_string_release_ex(op2_str, 0);
  15045. }
  15046. } while (0);
  15047. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15048. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15049. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15050. }
  15051. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15052. {
  15053. USE_OPLINE
  15054. zval *function_name;
  15055. zval *object;
  15056. zend_function *fbc;
  15057. zend_class_entry *called_scope;
  15058. zend_object *obj;
  15059. zend_execute_data *call;
  15060. uint32_t call_info;
  15061. SAVE_OPLINE();
  15062. object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15063. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15064. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  15065. }
  15066. if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
  15067. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  15068. do {
  15069. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  15070. function_name = Z_REFVAL_P(function_name);
  15071. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  15072. break;
  15073. }
  15074. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  15075. ZVAL_UNDEFINED_OP2();
  15076. if (UNEXPECTED(EG(exception) != NULL)) {
  15077. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15078. HANDLE_EXCEPTION();
  15079. }
  15080. }
  15081. zend_throw_error(NULL, "Method name must be a string");
  15082. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15083. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15084. HANDLE_EXCEPTION();
  15085. } while (0);
  15086. }
  15087. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  15088. obj = Z_OBJ_P(object);
  15089. } else {
  15090. do {
  15091. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  15092. obj = Z_OBJ_P(object);
  15093. } else {
  15094. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  15095. zend_reference *ref = Z_REF_P(object);
  15096. object = &ref->val;
  15097. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  15098. obj = Z_OBJ_P(object);
  15099. if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
  15100. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  15101. efree_size(ref, sizeof(zend_reference));
  15102. } else {
  15103. Z_ADDREF_P(object);
  15104. }
  15105. }
  15106. break;
  15107. }
  15108. }
  15109. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  15110. object = ZVAL_UNDEFINED_OP1();
  15111. if (UNEXPECTED(EG(exception) != NULL)) {
  15112. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15113. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15114. }
  15115. HANDLE_EXCEPTION();
  15116. }
  15117. }
  15118. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15119. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  15120. }
  15121. zend_invalid_method_call(object, function_name);
  15122. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15123. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15124. HANDLE_EXCEPTION();
  15125. }
  15126. } while (0);
  15127. }
  15128. called_scope = obj->ce;
  15129. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  15130. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  15131. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  15132. } else {
  15133. zend_object *orig_obj = obj;
  15134. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15135. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  15136. }
  15137. /* First, locate the function. */
  15138. 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));
  15139. if (UNEXPECTED(fbc == NULL)) {
  15140. if (EXPECTED(!EG(exception))) {
  15141. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  15142. }
  15143. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15144. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  15145. zend_objects_store_del(orig_obj);
  15146. }
  15147. HANDLE_EXCEPTION();
  15148. }
  15149. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  15150. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  15151. EXPECTED(obj == orig_obj)) {
  15152. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  15153. }
  15154. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  15155. GC_ADDREF(obj); /* For $this pointer */
  15156. if (GC_DELREF(orig_obj) == 0) {
  15157. zend_objects_store_del(orig_obj);
  15158. }
  15159. }
  15160. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  15161. init_func_run_time_cache(&fbc->op_array);
  15162. }
  15163. }
  15164. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15165. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15166. }
  15167. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  15168. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  15169. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  15170. zend_objects_store_del(obj);
  15171. if (UNEXPECTED(EG(exception))) {
  15172. HANDLE_EXCEPTION();
  15173. }
  15174. }
  15175. /* call static method */
  15176. obj = (zend_object*)called_scope;
  15177. call_info = ZEND_CALL_NESTED_FUNCTION;
  15178. } else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  15179. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  15180. GC_ADDREF(obj); /* For $this pointer */
  15181. }
  15182. /* CV may be changed indirectly (e.g. when it's a reference) */
  15183. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  15184. }
  15185. call = zend_vm_stack_push_call_frame(call_info,
  15186. fbc, opline->extended_value, obj);
  15187. call->prev_execute_data = EX(call);
  15188. EX(call) = call;
  15189. ZEND_VM_NEXT_OPCODE();
  15190. }
  15191. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15192. {
  15193. USE_OPLINE
  15194. zval *op1, *op2;
  15195. double d1, d2;
  15196. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15197. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  15198. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  15199. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  15200. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  15201. case_true:
  15202. ZEND_VM_SMART_BRANCH_TRUE();
  15203. } else {
  15204. case_false:
  15205. ZEND_VM_SMART_BRANCH_FALSE();
  15206. }
  15207. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  15208. d1 = (double)Z_LVAL_P(op1);
  15209. d2 = Z_DVAL_P(op2);
  15210. goto case_double;
  15211. }
  15212. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  15213. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  15214. d1 = Z_DVAL_P(op1);
  15215. d2 = Z_DVAL_P(op2);
  15216. case_double:
  15217. if (d1 == d2) {
  15218. goto case_true;
  15219. } else {
  15220. goto case_false;
  15221. }
  15222. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  15223. d1 = Z_DVAL_P(op1);
  15224. d2 = (double)Z_LVAL_P(op2);
  15225. goto case_double;
  15226. }
  15227. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  15228. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  15229. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  15230. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15231. if (result) {
  15232. goto case_true;
  15233. } else {
  15234. goto case_false;
  15235. }
  15236. }
  15237. }
  15238. ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  15239. }
  15240. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15241. {
  15242. USE_OPLINE
  15243. zval *container;
  15244. bool result;
  15245. zend_ulong hval;
  15246. zval *offset;
  15247. SAVE_OPLINE();
  15248. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15249. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  15250. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  15251. HashTable *ht;
  15252. zval *value;
  15253. zend_string *str;
  15254. isset_dim_obj_array:
  15255. ht = Z_ARRVAL_P(container);
  15256. isset_again:
  15257. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  15258. str = Z_STR_P(offset);
  15259. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15260. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  15261. goto num_index_prop;
  15262. }
  15263. }
  15264. value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
  15265. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  15266. hval = Z_LVAL_P(offset);
  15267. num_index_prop:
  15268. value = zend_hash_index_find(ht, hval);
  15269. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  15270. offset = Z_REFVAL_P(offset);
  15271. goto isset_again;
  15272. } else {
  15273. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  15274. if (UNEXPECTED(EG(exception))) {
  15275. result = 0;
  15276. goto isset_dim_obj_exit;
  15277. }
  15278. }
  15279. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  15280. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  15281. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  15282. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  15283. if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
  15284. /* avoid exception check */
  15285. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15286. ZEND_VM_SMART_BRANCH(result, 0);
  15287. }
  15288. } else {
  15289. result = (value == NULL || !i_zend_is_true(value));
  15290. }
  15291. goto isset_dim_obj_exit;
  15292. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  15293. container = Z_REFVAL_P(container);
  15294. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  15295. goto isset_dim_obj_array;
  15296. }
  15297. }
  15298. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  15299. offset++;
  15300. }
  15301. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  15302. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  15303. } else {
  15304. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  15305. }
  15306. isset_dim_obj_exit:
  15307. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15308. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15309. ZEND_VM_SMART_BRANCH(result, 1);
  15310. }
  15311. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15312. {
  15313. USE_OPLINE
  15314. zval *container;
  15315. int result;
  15316. zval *offset;
  15317. zend_string *name, *tmp_name;
  15318. SAVE_OPLINE();
  15319. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15320. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  15321. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  15322. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  15323. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  15324. container = Z_REFVAL_P(container);
  15325. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  15326. result = (opline->extended_value & ZEND_ISEMPTY);
  15327. goto isset_object_finish;
  15328. }
  15329. } else {
  15330. result = (opline->extended_value & ZEND_ISEMPTY);
  15331. goto isset_object_finish;
  15332. }
  15333. }
  15334. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15335. name = Z_STR_P(offset);
  15336. } else {
  15337. name = zval_try_get_tmp_string(offset, &tmp_name);
  15338. if (UNEXPECTED(!name)) {
  15339. result = 0;
  15340. goto isset_object_finish;
  15341. }
  15342. }
  15343. result =
  15344. (opline->extended_value & ZEND_ISEMPTY) ^
  15345. Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  15346. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15347. zend_tmp_string_release(tmp_name);
  15348. }
  15349. isset_object_finish:
  15350. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15351. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15352. ZEND_VM_SMART_BRANCH(result, 1);
  15353. }
  15354. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15355. {
  15356. USE_OPLINE
  15357. zval *key, *subject;
  15358. HashTable *ht;
  15359. bool result;
  15360. SAVE_OPLINE();
  15361. key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15362. subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  15363. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  15364. array_key_exists_array:
  15365. ht = Z_ARRVAL_P(subject);
  15366. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  15367. } else {
  15368. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  15369. subject = Z_REFVAL_P(subject);
  15370. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  15371. goto array_key_exists_array;
  15372. }
  15373. }
  15374. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  15375. result = 0;
  15376. }
  15377. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15378. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15379. ZEND_VM_SMART_BRANCH(result, 1);
  15380. }
  15381. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  15382. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15383. {
  15384. USE_OPLINE
  15385. zval *expr;
  15386. bool result;
  15387. SAVE_OPLINE();
  15388. expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15389. try_instanceof:
  15390. if (Z_TYPE_P(expr) == IS_OBJECT) {
  15391. zend_class_entry *ce;
  15392. if (IS_VAR == IS_CONST) {
  15393. ce = CACHED_PTR(opline->extended_value);
  15394. if (UNEXPECTED(ce == NULL)) {
  15395. ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
  15396. if (EXPECTED(ce)) {
  15397. CACHE_PTR(opline->extended_value, ce);
  15398. }
  15399. }
  15400. } else if (IS_VAR == IS_UNUSED) {
  15401. ce = zend_fetch_class(NULL, opline->op2.num);
  15402. if (UNEXPECTED(ce == NULL)) {
  15403. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15404. ZVAL_UNDEF(EX_VAR(opline->result.var));
  15405. HANDLE_EXCEPTION();
  15406. }
  15407. } else {
  15408. ce = Z_CE_P(EX_VAR(opline->op2.var));
  15409. }
  15410. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  15411. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  15412. expr = Z_REFVAL_P(expr);
  15413. goto try_instanceof;
  15414. } else {
  15415. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  15416. ZVAL_UNDEFINED_OP1();
  15417. }
  15418. result = 0;
  15419. }
  15420. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15421. ZEND_VM_SMART_BRANCH(result, 1);
  15422. }
  15423. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
  15424. {
  15425. USE_OPLINE
  15426. zval *varname;
  15427. zval *retval;
  15428. zend_string *name, *tmp_name;
  15429. HashTable *target_symbol_table;
  15430. SAVE_OPLINE();
  15431. varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15432. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15433. name = Z_STR_P(varname);
  15434. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  15435. name = Z_STR_P(varname);
  15436. tmp_name = NULL;
  15437. } else {
  15438. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  15439. ZVAL_UNDEFINED_OP1();
  15440. }
  15441. name = zval_try_get_tmp_string(varname, &tmp_name);
  15442. if (UNEXPECTED(!name)) {
  15443. if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
  15444. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15445. }
  15446. ZVAL_UNDEF(EX_VAR(opline->result.var));
  15447. HANDLE_EXCEPTION();
  15448. }
  15449. }
  15450. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  15451. retval = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
  15452. if (retval == NULL) {
  15453. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  15454. fetch_this:
  15455. zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
  15456. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15457. zend_tmp_string_release(tmp_name);
  15458. }
  15459. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15460. }
  15461. if (type == BP_VAR_W) {
  15462. retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
  15463. } else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
  15464. retval = &EG(uninitialized_zval);
  15465. } else {
  15466. zend_error(E_WARNING, "Undefined %svariable $%s",
  15467. (opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
  15468. if (type == BP_VAR_RW && !EG(exception)) {
  15469. retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
  15470. } else {
  15471. retval = &EG(uninitialized_zval);
  15472. }
  15473. }
  15474. /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
  15475. } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
  15476. retval = Z_INDIRECT_P(retval);
  15477. if (Z_TYPE_P(retval) == IS_UNDEF) {
  15478. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  15479. goto fetch_this;
  15480. }
  15481. if (type == BP_VAR_W) {
  15482. ZVAL_NULL(retval);
  15483. } else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
  15484. retval = &EG(uninitialized_zval);
  15485. } else {
  15486. zend_error(E_WARNING, "Undefined %svariable $%s",
  15487. (opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
  15488. if (type == BP_VAR_RW && !EG(exception)) {
  15489. ZVAL_NULL(retval);
  15490. } else {
  15491. retval = &EG(uninitialized_zval);
  15492. }
  15493. }
  15494. }
  15495. }
  15496. if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
  15497. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15498. }
  15499. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15500. zend_tmp_string_release(tmp_name);
  15501. }
  15502. ZEND_ASSERT(retval != NULL);
  15503. if (type == BP_VAR_R || type == BP_VAR_IS) {
  15504. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  15505. } else {
  15506. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  15507. }
  15508. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15509. }
  15510. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15511. {
  15512. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  15513. }
  15514. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15515. {
  15516. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  15517. }
  15518. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15519. {
  15520. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  15521. }
  15522. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15523. {
  15524. int fetch_type =
  15525. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  15526. BP_VAR_W : BP_VAR_R;
  15527. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  15528. }
  15529. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15530. {
  15531. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  15532. }
  15533. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15534. {
  15535. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  15536. }
  15537. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  15538. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15539. {
  15540. USE_OPLINE
  15541. zval *value, *arg;
  15542. if (IS_UNUSED == IS_CONST) {
  15543. SAVE_OPLINE();
  15544. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  15545. uint32_t arg_num;
  15546. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  15547. if (UNEXPECTED(!arg)) {
  15548. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15549. HANDLE_EXCEPTION();
  15550. }
  15551. } else {
  15552. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  15553. }
  15554. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15555. ZVAL_COPY_VALUE(arg, value);
  15556. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15557. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  15558. Z_ADDREF_P(arg);
  15559. }
  15560. }
  15561. ZEND_VM_NEXT_OPCODE();
  15562. }
  15563. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15564. {
  15565. USE_OPLINE
  15566. zval *varname;
  15567. zend_string *name, *tmp_name;
  15568. HashTable *target_symbol_table;
  15569. SAVE_OPLINE();
  15570. varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15571. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15572. name = Z_STR_P(varname);
  15573. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  15574. name = Z_STR_P(varname);
  15575. tmp_name = NULL;
  15576. } else {
  15577. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  15578. varname = ZVAL_UNDEFINED_OP1();
  15579. }
  15580. name = zval_try_get_tmp_string(varname, &tmp_name);
  15581. if (UNEXPECTED(!name)) {
  15582. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15583. HANDLE_EXCEPTION();
  15584. }
  15585. }
  15586. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  15587. zend_hash_del_ind(target_symbol_table, name);
  15588. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15589. zend_tmp_string_release(tmp_name);
  15590. }
  15591. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15592. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15593. }
  15594. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  15595. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15596. {
  15597. USE_OPLINE
  15598. zval *value;
  15599. /* Should be bool result? as below got: result = (opline->extended_value & ZEND_ISEMPTY) */
  15600. int result;
  15601. zval *varname;
  15602. zend_string *name, *tmp_name;
  15603. HashTable *target_symbol_table;
  15604. SAVE_OPLINE();
  15605. varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15606. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15607. name = Z_STR_P(varname);
  15608. } else {
  15609. name = zval_get_tmp_string(varname, &tmp_name);
  15610. }
  15611. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  15612. value = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
  15613. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15614. zend_tmp_string_release(tmp_name);
  15615. }
  15616. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15617. if (!value) {
  15618. result = (opline->extended_value & ZEND_ISEMPTY);
  15619. } else {
  15620. if (Z_TYPE_P(value) == IS_INDIRECT) {
  15621. value = Z_INDIRECT_P(value);
  15622. }
  15623. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  15624. if (Z_ISREF_P(value)) {
  15625. value = Z_REFVAL_P(value);
  15626. }
  15627. result = Z_TYPE_P(value) > IS_NULL;
  15628. } else {
  15629. result = !i_zend_is_true(value);
  15630. }
  15631. }
  15632. ZEND_VM_SMART_BRANCH(result, 1);
  15633. }
  15634. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  15635. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15636. {
  15637. USE_OPLINE
  15638. zval *expr;
  15639. bool result;
  15640. SAVE_OPLINE();
  15641. expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15642. try_instanceof:
  15643. if (Z_TYPE_P(expr) == IS_OBJECT) {
  15644. zend_class_entry *ce;
  15645. if (IS_UNUSED == IS_CONST) {
  15646. ce = CACHED_PTR(opline->extended_value);
  15647. if (UNEXPECTED(ce == NULL)) {
  15648. ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
  15649. if (EXPECTED(ce)) {
  15650. CACHE_PTR(opline->extended_value, ce);
  15651. }
  15652. }
  15653. } else if (IS_UNUSED == IS_UNUSED) {
  15654. ce = zend_fetch_class(NULL, opline->op2.num);
  15655. if (UNEXPECTED(ce == NULL)) {
  15656. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15657. ZVAL_UNDEF(EX_VAR(opline->result.var));
  15658. HANDLE_EXCEPTION();
  15659. }
  15660. } else {
  15661. ce = Z_CE_P(EX_VAR(opline->op2.var));
  15662. }
  15663. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  15664. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  15665. expr = Z_REFVAL_P(expr);
  15666. goto try_instanceof;
  15667. } else {
  15668. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  15669. ZVAL_UNDEFINED_OP1();
  15670. }
  15671. result = 0;
  15672. }
  15673. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15674. ZEND_VM_SMART_BRANCH(result, 1);
  15675. }
  15676. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15677. {
  15678. USE_OPLINE
  15679. zval *op1;
  15680. zend_long count;
  15681. SAVE_OPLINE();
  15682. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15683. while (1) {
  15684. if (Z_TYPE_P(op1) == IS_ARRAY) {
  15685. count = zend_hash_num_elements(Z_ARRVAL_P(op1));
  15686. break;
  15687. } else if (Z_TYPE_P(op1) == IS_OBJECT) {
  15688. zend_object *zobj = Z_OBJ_P(op1);
  15689. /* first, we check if the handler is defined */
  15690. if (zobj->handlers->count_elements) {
  15691. if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
  15692. break;
  15693. }
  15694. if (UNEXPECTED(EG(exception))) {
  15695. count = 0;
  15696. break;
  15697. }
  15698. }
  15699. /* if not and the object implements Countable we call its count() method */
  15700. if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
  15701. zval retval;
  15702. zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
  15703. count = zval_get_long(&retval);
  15704. zval_ptr_dtor(&retval);
  15705. break;
  15706. }
  15707. /* If There's no handler and it doesn't implement Countable then emit a TypeError */
  15708. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
  15709. op1 = Z_REFVAL_P(op1);
  15710. continue;
  15711. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  15712. ZVAL_UNDEFINED_OP1();
  15713. }
  15714. count = 0;
  15715. zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_type_name(op1));
  15716. break;
  15717. }
  15718. ZVAL_LONG(EX_VAR(opline->result.var), count);
  15719. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15720. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15721. }
  15722. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15723. {
  15724. USE_OPLINE
  15725. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  15726. if (UNEXPECTED(!EX(func)->common.scope)) {
  15727. SAVE_OPLINE();
  15728. zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
  15729. ZVAL_UNDEF(EX_VAR(opline->result.var));
  15730. HANDLE_EXCEPTION();
  15731. } else {
  15732. ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
  15733. ZEND_VM_NEXT_OPCODE();
  15734. }
  15735. } else {
  15736. zval *op1;
  15737. SAVE_OPLINE();
  15738. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15739. while (1) {
  15740. if (Z_TYPE_P(op1) == IS_OBJECT) {
  15741. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
  15742. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
  15743. op1 = Z_REFVAL_P(op1);
  15744. continue;
  15745. } else {
  15746. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  15747. ZVAL_UNDEFINED_OP1();
  15748. }
  15749. zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_type_name(op1));
  15750. ZVAL_UNDEF(EX_VAR(opline->result.var));
  15751. }
  15752. break;
  15753. }
  15754. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15755. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15756. }
  15757. }
  15758. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15759. {
  15760. USE_OPLINE
  15761. zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15762. zval *result = EX_VAR(opline->result.var);
  15763. ZVAL_COPY(result, value);
  15764. ZEND_VM_NEXT_OPCODE();
  15765. }
  15766. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15767. {
  15768. USE_OPLINE
  15769. zval *op1, *op2;
  15770. SAVE_OPLINE();
  15771. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15772. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  15773. div_function(EX_VAR(opline->result.var), op1, op2);
  15774. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15775. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15776. }
  15777. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15778. {
  15779. USE_OPLINE
  15780. zval *op1, *op2;
  15781. SAVE_OPLINE();
  15782. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15783. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  15784. pow_function(EX_VAR(opline->result.var), op1, op2);
  15785. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15786. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15787. }
  15788. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15789. {
  15790. USE_OPLINE
  15791. zval *op1, *op2;
  15792. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15793. op2 = EX_VAR(opline->op2.var);
  15794. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  15795. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  15796. zend_string *op1_str = Z_STR_P(op1);
  15797. zend_string *op2_str = Z_STR_P(op2);
  15798. zend_string *str;
  15799. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  15800. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  15801. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  15802. } else {
  15803. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  15804. }
  15805. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  15806. zend_string_release_ex(op1_str, 0);
  15807. }
  15808. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  15809. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  15810. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  15811. } else {
  15812. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  15813. }
  15814. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  15815. zend_string_release_ex(op2_str, 0);
  15816. }
  15817. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  15818. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  15819. size_t len = ZSTR_LEN(op1_str);
  15820. if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
  15821. zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
  15822. }
  15823. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  15824. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  15825. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  15826. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  15827. zend_string_release_ex(op2_str, 0);
  15828. }
  15829. } else {
  15830. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  15831. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  15832. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  15833. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  15834. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  15835. zend_string_release_ex(op1_str, 0);
  15836. }
  15837. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  15838. zend_string_release_ex(op2_str, 0);
  15839. }
  15840. }
  15841. ZEND_VM_NEXT_OPCODE();
  15842. } else {
  15843. SAVE_OPLINE();
  15844. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  15845. op1 = ZVAL_UNDEFINED_OP1();
  15846. }
  15847. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  15848. op2 = ZVAL_UNDEFINED_OP2();
  15849. }
  15850. concat_function(EX_VAR(opline->result.var), op1, op2);
  15851. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15852. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15853. }
  15854. }
  15855. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15856. {
  15857. USE_OPLINE
  15858. zval *op1, *op2;
  15859. SAVE_OPLINE();
  15860. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15861. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  15862. compare_function(EX_VAR(opline->result.var), op1, op2);
  15863. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15864. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15865. }
  15866. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15867. {
  15868. USE_OPLINE
  15869. zval *container, *dim, *value;
  15870. SAVE_OPLINE();
  15871. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15872. dim = EX_VAR(opline->op2.var);
  15873. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15874. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  15875. fetch_dim_r_array:
  15876. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
  15877. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  15878. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  15879. container = Z_REFVAL_P(container);
  15880. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  15881. goto fetch_dim_r_array;
  15882. } else {
  15883. goto fetch_dim_r_slow;
  15884. }
  15885. } else {
  15886. fetch_dim_r_slow:
  15887. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  15888. dim++;
  15889. }
  15890. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  15891. }
  15892. } else {
  15893. zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
  15894. }
  15895. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15896. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15897. }
  15898. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15899. {
  15900. USE_OPLINE
  15901. zval *container;
  15902. SAVE_OPLINE();
  15903. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15904. zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  15905. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15906. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15907. }
  15908. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15909. {
  15910. USE_OPLINE
  15911. zval *container;
  15912. void **cache_slot = NULL;
  15913. SAVE_OPLINE();
  15914. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15915. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  15916. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  15917. do {
  15918. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  15919. container = Z_REFVAL_P(container);
  15920. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  15921. break;
  15922. }
  15923. }
  15924. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  15925. ZVAL_UNDEFINED_OP1();
  15926. }
  15927. zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  15928. ZVAL_NULL(EX_VAR(opline->result.var));
  15929. goto fetch_obj_r_finish;
  15930. } while (0);
  15931. }
  15932. /* here we are sure we are dealing with an object */
  15933. do {
  15934. zend_object *zobj = Z_OBJ_P(container);
  15935. zend_string *name, *tmp_name;
  15936. zval *retval;
  15937. if (IS_CV == IS_CONST) {
  15938. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  15939. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  15940. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  15941. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  15942. retval = OBJ_PROP(zobj, prop_offset);
  15943. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  15944. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  15945. goto fetch_obj_r_copy;
  15946. } else {
  15947. fetch_obj_r_fast_copy:
  15948. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  15949. ZEND_VM_NEXT_OPCODE();
  15950. }
  15951. }
  15952. } else if (EXPECTED(zobj->properties != NULL)) {
  15953. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  15954. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  15955. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  15956. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  15957. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  15958. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  15959. (EXPECTED(p->key == name) ||
  15960. (EXPECTED(p->h == ZSTR_H(name)) &&
  15961. EXPECTED(p->key != NULL) &&
  15962. EXPECTED(zend_string_equal_content(p->key, name))))) {
  15963. retval = &p->val;
  15964. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  15965. goto fetch_obj_r_copy;
  15966. } else {
  15967. goto fetch_obj_r_fast_copy;
  15968. }
  15969. }
  15970. }
  15971. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  15972. }
  15973. retval = zend_hash_find_known_hash(zobj->properties, name);
  15974. if (EXPECTED(retval)) {
  15975. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  15976. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  15977. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  15978. goto fetch_obj_r_copy;
  15979. } else {
  15980. goto fetch_obj_r_fast_copy;
  15981. }
  15982. }
  15983. }
  15984. }
  15985. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  15986. } else {
  15987. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  15988. if (UNEXPECTED(!name)) {
  15989. ZVAL_UNDEF(EX_VAR(opline->result.var));
  15990. break;
  15991. }
  15992. }
  15993. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  15994. #if ZEND_DEBUG
  15995. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  15996. zend_verify_internal_read_property_type(zobj, name, retval);
  15997. }
  15998. #endif
  15999. if (IS_CV != IS_CONST) {
  16000. zend_tmp_string_release(tmp_name);
  16001. }
  16002. if (retval != EX_VAR(opline->result.var)) {
  16003. fetch_obj_r_copy:
  16004. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  16005. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  16006. zend_unwrap_reference(retval);
  16007. }
  16008. } while (0);
  16009. fetch_obj_r_finish:
  16010. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16011. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16012. }
  16013. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16014. {
  16015. USE_OPLINE
  16016. zval *container;
  16017. void **cache_slot = NULL;
  16018. SAVE_OPLINE();
  16019. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  16020. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  16021. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  16022. do {
  16023. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  16024. container = Z_REFVAL_P(container);
  16025. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  16026. break;
  16027. }
  16028. }
  16029. if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  16030. ZVAL_UNDEFINED_OP2();
  16031. }
  16032. ZVAL_NULL(EX_VAR(opline->result.var));
  16033. goto fetch_obj_is_finish;
  16034. } while (0);
  16035. }
  16036. /* here we are sure we are dealing with an object */
  16037. do {
  16038. zend_object *zobj = Z_OBJ_P(container);
  16039. zend_string *name, *tmp_name;
  16040. zval *retval;
  16041. if (IS_CV == IS_CONST) {
  16042. cache_slot = CACHE_ADDR(opline->extended_value);
  16043. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  16044. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  16045. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  16046. retval = OBJ_PROP(zobj, prop_offset);
  16047. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  16048. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  16049. goto fetch_obj_is_copy;
  16050. } else {
  16051. fetch_obj_is_fast_copy:
  16052. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  16053. ZEND_VM_NEXT_OPCODE();
  16054. }
  16055. }
  16056. } else if (EXPECTED(zobj->properties != NULL)) {
  16057. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  16058. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  16059. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  16060. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  16061. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  16062. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  16063. (EXPECTED(p->key == name) ||
  16064. (EXPECTED(p->h == ZSTR_H(name)) &&
  16065. EXPECTED(p->key != NULL) &&
  16066. EXPECTED(zend_string_equal_content(p->key, name))))) {
  16067. retval = &p->val;
  16068. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  16069. goto fetch_obj_is_copy;
  16070. } else {
  16071. goto fetch_obj_is_fast_copy;
  16072. }
  16073. }
  16074. }
  16075. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  16076. }
  16077. retval = zend_hash_find_known_hash(zobj->properties, name);
  16078. if (EXPECTED(retval)) {
  16079. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  16080. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  16081. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  16082. goto fetch_obj_is_copy;
  16083. } else {
  16084. goto fetch_obj_is_fast_copy;
  16085. }
  16086. }
  16087. }
  16088. }
  16089. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  16090. } else {
  16091. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  16092. if (UNEXPECTED(!name)) {
  16093. ZVAL_UNDEF(EX_VAR(opline->result.var));
  16094. break;
  16095. }
  16096. }
  16097. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  16098. if (IS_CV != IS_CONST) {
  16099. zend_tmp_string_release(tmp_name);
  16100. }
  16101. if (retval != EX_VAR(opline->result.var)) {
  16102. fetch_obj_is_copy:
  16103. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  16104. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  16105. zend_unwrap_reference(retval);
  16106. }
  16107. } while (0);
  16108. fetch_obj_is_finish:
  16109. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16110. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16111. }
  16112. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16113. {
  16114. USE_OPLINE
  16115. zval *op1, *op2;
  16116. zend_string *op1_str, *op2_str, *str;
  16117. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  16118. op2 = EX_VAR(opline->op2.var);
  16119. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  16120. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  16121. zend_string *op1_str = Z_STR_P(op1);
  16122. zend_string *op2_str = Z_STR_P(op2);
  16123. zend_string *str;
  16124. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  16125. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  16126. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  16127. } else {
  16128. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  16129. }
  16130. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  16131. zend_string_release_ex(op1_str, 0);
  16132. }
  16133. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  16134. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  16135. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  16136. } else {
  16137. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  16138. }
  16139. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  16140. zend_string_release_ex(op2_str, 0);
  16141. }
  16142. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  16143. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  16144. size_t len = ZSTR_LEN(op1_str);
  16145. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  16146. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  16147. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  16148. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  16149. zend_string_release_ex(op2_str, 0);
  16150. }
  16151. } else {
  16152. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  16153. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  16154. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  16155. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  16156. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  16157. zend_string_release_ex(op1_str, 0);
  16158. }
  16159. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  16160. zend_string_release_ex(op2_str, 0);
  16161. }
  16162. }
  16163. ZEND_VM_NEXT_OPCODE();
  16164. }
  16165. SAVE_OPLINE();
  16166. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  16167. op1_str = Z_STR_P(op1);
  16168. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  16169. op1_str = zend_string_copy(Z_STR_P(op1));
  16170. } else {
  16171. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  16172. ZVAL_UNDEFINED_OP1();
  16173. }
  16174. op1_str = zval_get_string_func(op1);
  16175. }
  16176. if (IS_CV == IS_CONST) {
  16177. op2_str = Z_STR_P(op2);
  16178. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  16179. op2_str = zend_string_copy(Z_STR_P(op2));
  16180. } else {
  16181. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  16182. ZVAL_UNDEFINED_OP2();
  16183. }
  16184. op2_str = zval_get_string_func(op2);
  16185. }
  16186. do {
  16187. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  16188. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  16189. if (IS_CV == IS_CONST) {
  16190. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  16191. GC_ADDREF(op2_str);
  16192. }
  16193. }
  16194. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  16195. zend_string_release_ex(op1_str, 0);
  16196. break;
  16197. }
  16198. }
  16199. if (IS_CV != IS_CONST) {
  16200. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  16201. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  16202. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  16203. GC_ADDREF(op1_str);
  16204. }
  16205. }
  16206. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  16207. zend_string_release_ex(op2_str, 0);
  16208. break;
  16209. }
  16210. }
  16211. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  16212. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  16213. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  16214. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  16215. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  16216. zend_string_release_ex(op1_str, 0);
  16217. }
  16218. if (IS_CV != IS_CONST) {
  16219. zend_string_release_ex(op2_str, 0);
  16220. }
  16221. } while (0);
  16222. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16223. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16224. }
  16225. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16226. {
  16227. USE_OPLINE
  16228. zval *function_name;
  16229. zval *object;
  16230. zend_function *fbc;
  16231. zend_class_entry *called_scope;
  16232. zend_object *obj;
  16233. zend_execute_data *call;
  16234. uint32_t call_info;
  16235. SAVE_OPLINE();
  16236. object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  16237. if (IS_CV != IS_CONST) {
  16238. function_name = EX_VAR(opline->op2.var);
  16239. }
  16240. if (IS_CV != IS_CONST &&
  16241. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  16242. do {
  16243. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  16244. function_name = Z_REFVAL_P(function_name);
  16245. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  16246. break;
  16247. }
  16248. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  16249. ZVAL_UNDEFINED_OP2();
  16250. if (UNEXPECTED(EG(exception) != NULL)) {
  16251. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16252. HANDLE_EXCEPTION();
  16253. }
  16254. }
  16255. zend_throw_error(NULL, "Method name must be a string");
  16256. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16257. HANDLE_EXCEPTION();
  16258. } while (0);
  16259. }
  16260. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  16261. obj = Z_OBJ_P(object);
  16262. } else {
  16263. do {
  16264. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  16265. obj = Z_OBJ_P(object);
  16266. } else {
  16267. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  16268. zend_reference *ref = Z_REF_P(object);
  16269. object = &ref->val;
  16270. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  16271. obj = Z_OBJ_P(object);
  16272. if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
  16273. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  16274. efree_size(ref, sizeof(zend_reference));
  16275. } else {
  16276. Z_ADDREF_P(object);
  16277. }
  16278. }
  16279. break;
  16280. }
  16281. }
  16282. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  16283. object = ZVAL_UNDEFINED_OP1();
  16284. if (UNEXPECTED(EG(exception) != NULL)) {
  16285. if (IS_CV != IS_CONST) {
  16286. }
  16287. HANDLE_EXCEPTION();
  16288. }
  16289. }
  16290. if (IS_CV == IS_CONST) {
  16291. function_name = EX_VAR(opline->op2.var);
  16292. }
  16293. zend_invalid_method_call(object, function_name);
  16294. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16295. HANDLE_EXCEPTION();
  16296. }
  16297. } while (0);
  16298. }
  16299. called_scope = obj->ce;
  16300. if (IS_CV == IS_CONST &&
  16301. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  16302. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  16303. } else {
  16304. zend_object *orig_obj = obj;
  16305. if (IS_CV == IS_CONST) {
  16306. function_name = EX_VAR(opline->op2.var);
  16307. }
  16308. /* First, locate the function. */
  16309. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  16310. if (UNEXPECTED(fbc == NULL)) {
  16311. if (EXPECTED(!EG(exception))) {
  16312. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  16313. }
  16314. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  16315. zend_objects_store_del(orig_obj);
  16316. }
  16317. HANDLE_EXCEPTION();
  16318. }
  16319. if (IS_CV == IS_CONST &&
  16320. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  16321. EXPECTED(obj == orig_obj)) {
  16322. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  16323. }
  16324. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  16325. GC_ADDREF(obj); /* For $this pointer */
  16326. if (GC_DELREF(orig_obj) == 0) {
  16327. zend_objects_store_del(orig_obj);
  16328. }
  16329. }
  16330. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  16331. init_func_run_time_cache(&fbc->op_array);
  16332. }
  16333. }
  16334. if (IS_CV != IS_CONST) {
  16335. }
  16336. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  16337. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  16338. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  16339. zend_objects_store_del(obj);
  16340. if (UNEXPECTED(EG(exception))) {
  16341. HANDLE_EXCEPTION();
  16342. }
  16343. }
  16344. /* call static method */
  16345. obj = (zend_object*)called_scope;
  16346. call_info = ZEND_CALL_NESTED_FUNCTION;
  16347. } else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  16348. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  16349. GC_ADDREF(obj); /* For $this pointer */
  16350. }
  16351. /* CV may be changed indirectly (e.g. when it's a reference) */
  16352. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  16353. }
  16354. call = zend_vm_stack_push_call_frame(call_info,
  16355. fbc, opline->extended_value, obj);
  16356. call->prev_execute_data = EX(call);
  16357. EX(call) = call;
  16358. ZEND_VM_NEXT_OPCODE();
  16359. }
  16360. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16361. {
  16362. USE_OPLINE
  16363. zval *op1, *op2;
  16364. double d1, d2;
  16365. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  16366. op2 = EX_VAR(opline->op2.var);
  16367. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  16368. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  16369. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  16370. case_true:
  16371. ZEND_VM_SMART_BRANCH_TRUE();
  16372. } else {
  16373. case_false:
  16374. ZEND_VM_SMART_BRANCH_FALSE();
  16375. }
  16376. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  16377. d1 = (double)Z_LVAL_P(op1);
  16378. d2 = Z_DVAL_P(op2);
  16379. goto case_double;
  16380. }
  16381. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  16382. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  16383. d1 = Z_DVAL_P(op1);
  16384. d2 = Z_DVAL_P(op2);
  16385. case_double:
  16386. if (d1 == d2) {
  16387. goto case_true;
  16388. } else {
  16389. goto case_false;
  16390. }
  16391. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  16392. d1 = Z_DVAL_P(op1);
  16393. d2 = (double)Z_LVAL_P(op2);
  16394. goto case_double;
  16395. }
  16396. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  16397. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  16398. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  16399. if (result) {
  16400. goto case_true;
  16401. } else {
  16402. goto case_false;
  16403. }
  16404. }
  16405. }
  16406. ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  16407. }
  16408. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16409. {
  16410. USE_OPLINE
  16411. zval *container;
  16412. bool result;
  16413. zend_ulong hval;
  16414. zval *offset;
  16415. SAVE_OPLINE();
  16416. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  16417. offset = EX_VAR(opline->op2.var);
  16418. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  16419. HashTable *ht;
  16420. zval *value;
  16421. zend_string *str;
  16422. isset_dim_obj_array:
  16423. ht = Z_ARRVAL_P(container);
  16424. isset_again:
  16425. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  16426. str = Z_STR_P(offset);
  16427. if (IS_CV != IS_CONST) {
  16428. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  16429. goto num_index_prop;
  16430. }
  16431. }
  16432. value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
  16433. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  16434. hval = Z_LVAL_P(offset);
  16435. num_index_prop:
  16436. value = zend_hash_index_find(ht, hval);
  16437. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  16438. offset = Z_REFVAL_P(offset);
  16439. goto isset_again;
  16440. } else {
  16441. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  16442. if (UNEXPECTED(EG(exception))) {
  16443. result = 0;
  16444. goto isset_dim_obj_exit;
  16445. }
  16446. }
  16447. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  16448. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  16449. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  16450. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  16451. if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
  16452. /* avoid exception check */
  16453. ZEND_VM_SMART_BRANCH(result, 0);
  16454. }
  16455. } else {
  16456. result = (value == NULL || !i_zend_is_true(value));
  16457. }
  16458. goto isset_dim_obj_exit;
  16459. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  16460. container = Z_REFVAL_P(container);
  16461. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  16462. goto isset_dim_obj_array;
  16463. }
  16464. }
  16465. if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  16466. offset++;
  16467. }
  16468. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  16469. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  16470. } else {
  16471. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  16472. }
  16473. isset_dim_obj_exit:
  16474. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16475. ZEND_VM_SMART_BRANCH(result, 1);
  16476. }
  16477. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16478. {
  16479. USE_OPLINE
  16480. zval *container;
  16481. int result;
  16482. zval *offset;
  16483. zend_string *name, *tmp_name;
  16484. SAVE_OPLINE();
  16485. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  16486. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  16487. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  16488. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  16489. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  16490. container = Z_REFVAL_P(container);
  16491. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  16492. result = (opline->extended_value & ZEND_ISEMPTY);
  16493. goto isset_object_finish;
  16494. }
  16495. } else {
  16496. result = (opline->extended_value & ZEND_ISEMPTY);
  16497. goto isset_object_finish;
  16498. }
  16499. }
  16500. if (IS_CV == IS_CONST) {
  16501. name = Z_STR_P(offset);
  16502. } else {
  16503. name = zval_try_get_tmp_string(offset, &tmp_name);
  16504. if (UNEXPECTED(!name)) {
  16505. result = 0;
  16506. goto isset_object_finish;
  16507. }
  16508. }
  16509. result =
  16510. (opline->extended_value & ZEND_ISEMPTY) ^
  16511. Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  16512. if (IS_CV != IS_CONST) {
  16513. zend_tmp_string_release(tmp_name);
  16514. }
  16515. isset_object_finish:
  16516. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16517. ZEND_VM_SMART_BRANCH(result, 1);
  16518. }
  16519. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16520. {
  16521. USE_OPLINE
  16522. zval *key, *subject;
  16523. HashTable *ht;
  16524. bool result;
  16525. SAVE_OPLINE();
  16526. key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  16527. subject = EX_VAR(opline->op2.var);
  16528. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  16529. array_key_exists_array:
  16530. ht = Z_ARRVAL_P(subject);
  16531. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  16532. } else {
  16533. if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  16534. subject = Z_REFVAL_P(subject);
  16535. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  16536. goto array_key_exists_array;
  16537. }
  16538. }
  16539. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  16540. result = 0;
  16541. }
  16542. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16543. ZEND_VM_SMART_BRANCH(result, 1);
  16544. }
  16545. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  16546. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16547. {
  16548. USE_OPLINE
  16549. zval *retval_ptr;
  16550. zval *return_value;
  16551. retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  16552. return_value = EX(return_value);
  16553. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  16554. SAVE_OPLINE();
  16555. retval_ptr = ZVAL_UNDEFINED_OP1();
  16556. if (return_value) {
  16557. ZVAL_NULL(return_value);
  16558. }
  16559. } else if (!return_value) {
  16560. if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
  16561. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  16562. SAVE_OPLINE();
  16563. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  16564. }
  16565. }
  16566. } else {
  16567. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  16568. ZVAL_COPY_VALUE(return_value, retval_ptr);
  16569. if (IS_TMP_VAR == IS_CONST) {
  16570. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  16571. Z_ADDREF_P(return_value);
  16572. }
  16573. }
  16574. } else if (IS_TMP_VAR == IS_CV) {
  16575. do {
  16576. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  16577. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  16578. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  16579. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  16580. ZVAL_COPY_VALUE(return_value, retval_ptr);
  16581. if (GC_MAY_LEAK(ref)) {
  16582. SAVE_OPLINE();
  16583. gc_possible_root(ref);
  16584. }
  16585. ZVAL_NULL(retval_ptr);
  16586. break;
  16587. } else {
  16588. Z_ADDREF_P(retval_ptr);
  16589. }
  16590. } else {
  16591. retval_ptr = Z_REFVAL_P(retval_ptr);
  16592. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  16593. Z_ADDREF_P(retval_ptr);
  16594. }
  16595. }
  16596. }
  16597. ZVAL_COPY_VALUE(return_value, retval_ptr);
  16598. } while (0);
  16599. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  16600. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  16601. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  16602. retval_ptr = Z_REFVAL_P(retval_ptr);
  16603. ZVAL_COPY_VALUE(return_value, retval_ptr);
  16604. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  16605. efree_size(ref, sizeof(zend_reference));
  16606. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  16607. Z_ADDREF_P(retval_ptr);
  16608. }
  16609. } else {
  16610. ZVAL_COPY_VALUE(return_value, retval_ptr);
  16611. }
  16612. }
  16613. }
  16614. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16615. }
  16616. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16617. {
  16618. USE_OPLINE
  16619. zval *retval_ptr;
  16620. zval *return_value;
  16621. SAVE_OPLINE();
  16622. return_value = EX(return_value);
  16623. do {
  16624. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) ||
  16625. (IS_TMP_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
  16626. /* Not supposed to happen, but we'll allow it */
  16627. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  16628. retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  16629. if (!return_value) {
  16630. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16631. } else {
  16632. if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  16633. ZVAL_COPY_VALUE(return_value, retval_ptr);
  16634. break;
  16635. }
  16636. ZVAL_NEW_REF(return_value, retval_ptr);
  16637. if (IS_TMP_VAR == IS_CONST) {
  16638. Z_TRY_ADDREF_P(retval_ptr);
  16639. }
  16640. }
  16641. break;
  16642. }
  16643. retval_ptr = NULL;
  16644. if (IS_TMP_VAR == IS_VAR) {
  16645. ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
  16646. if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
  16647. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  16648. if (return_value) {
  16649. ZVAL_NEW_REF(return_value, retval_ptr);
  16650. } else {
  16651. }
  16652. break;
  16653. }
  16654. }
  16655. if (return_value) {
  16656. if (Z_ISREF_P(retval_ptr)) {
  16657. Z_ADDREF_P(retval_ptr);
  16658. } else {
  16659. ZVAL_MAKE_REF_EX(retval_ptr, 2);
  16660. }
  16661. ZVAL_REF(return_value, Z_REF_P(retval_ptr));
  16662. }
  16663. } while (0);
  16664. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16665. }
  16666. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16667. {
  16668. USE_OPLINE
  16669. zval *retval;
  16670. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  16671. SAVE_OPLINE();
  16672. retval = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  16673. /* Copy return value into generator->retval */
  16674. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  16675. ZVAL_COPY_VALUE(&generator->retval, retval);
  16676. if (IS_TMP_VAR == IS_CONST) {
  16677. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
  16678. Z_ADDREF(generator->retval);
  16679. }
  16680. }
  16681. } else if (IS_TMP_VAR == IS_CV) {
  16682. ZVAL_COPY_DEREF(&generator->retval, retval);
  16683. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  16684. if (UNEXPECTED(Z_ISREF_P(retval))) {
  16685. zend_refcounted *ref = Z_COUNTED_P(retval);
  16686. retval = Z_REFVAL_P(retval);
  16687. ZVAL_COPY_VALUE(&generator->retval, retval);
  16688. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  16689. efree_size(ref, sizeof(zend_reference));
  16690. } else if (Z_OPT_REFCOUNTED_P(retval)) {
  16691. Z_ADDREF_P(retval);
  16692. }
  16693. } else {
  16694. ZVAL_COPY_VALUE(&generator->retval, retval);
  16695. }
  16696. }
  16697. /* Close the generator to free up resources */
  16698. zend_generator_close(generator, 1);
  16699. /* Pass execution back to handling code */
  16700. ZEND_VM_RETURN();
  16701. }
  16702. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16703. {
  16704. USE_OPLINE
  16705. zval *arg, *param;
  16706. SAVE_OPLINE();
  16707. arg = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  16708. param = ZEND_CALL_VAR(EX(call), opline->result.var);
  16709. if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
  16710. zend_param_must_be_ref(EX(call)->func, opline->op2.num);
  16711. Z_TRY_ADDREF_P(arg);
  16712. ZVAL_NEW_REF(param, arg);
  16713. } else {
  16714. ZVAL_COPY(param, arg);
  16715. }
  16716. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16717. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16718. }
  16719. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16720. {
  16721. USE_OPLINE
  16722. zval *expr;
  16723. zval *result = EX_VAR(opline->result.var);
  16724. HashTable *ht;
  16725. SAVE_OPLINE();
  16726. expr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  16727. switch (opline->extended_value) {
  16728. case IS_LONG:
  16729. ZVAL_LONG(result, zval_get_long(expr));
  16730. break;
  16731. case IS_DOUBLE:
  16732. ZVAL_DOUBLE(result, zval_get_double(expr));
  16733. break;
  16734. case IS_STRING:
  16735. ZVAL_STR(result, zval_get_string(expr));
  16736. break;
  16737. default:
  16738. ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
  16739. if (IS_TMP_VAR & (IS_VAR|IS_CV)) {
  16740. ZVAL_DEREF(expr);
  16741. }
  16742. /* If value is already of correct type, return it directly */
  16743. if (Z_TYPE_P(expr) == opline->extended_value) {
  16744. ZVAL_COPY_VALUE(result, expr);
  16745. if (IS_TMP_VAR == IS_CONST) {
  16746. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  16747. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  16748. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  16749. }
  16750. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16751. }
  16752. if (opline->extended_value == IS_ARRAY) {
  16753. if (IS_TMP_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
  16754. if (Z_TYPE_P(expr) != IS_NULL) {
  16755. ZVAL_ARR(result, zend_new_array(1));
  16756. expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
  16757. if (IS_TMP_VAR == IS_CONST) {
  16758. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  16759. } else {
  16760. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  16761. }
  16762. } else {
  16763. ZVAL_EMPTY_ARRAY(result);
  16764. }
  16765. } else if (Z_OBJ_P(expr)->properties == NULL
  16766. && Z_OBJ_HT_P(expr)->get_properties_for == NULL
  16767. && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
  16768. /* Optimized version without rebuilding properties HashTable */
  16769. ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
  16770. } else {
  16771. HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
  16772. if (obj_ht) {
  16773. /* fast copy */
  16774. ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
  16775. (Z_OBJCE_P(expr)->default_properties_count ||
  16776. Z_OBJ_P(expr)->handlers != &std_object_handlers ||
  16777. GC_IS_RECURSIVE(obj_ht))));
  16778. zend_release_properties(obj_ht);
  16779. } else {
  16780. ZVAL_EMPTY_ARRAY(result);
  16781. }
  16782. }
  16783. } else {
  16784. ZEND_ASSERT(opline->extended_value == IS_OBJECT);
  16785. ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
  16786. if (Z_TYPE_P(expr) == IS_ARRAY) {
  16787. ht = zend_symtable_to_proptable(Z_ARR_P(expr));
  16788. if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
  16789. /* TODO: try not to duplicate immutable arrays as well ??? */
  16790. ht = zend_array_dup(ht);
  16791. }
  16792. Z_OBJ_P(result)->properties = ht;
  16793. } else if (Z_TYPE_P(expr) != IS_NULL) {
  16794. Z_OBJ_P(result)->properties = ht = zend_new_array(1);
  16795. expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
  16796. if (IS_TMP_VAR == IS_CONST) {
  16797. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  16798. } else {
  16799. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  16800. }
  16801. }
  16802. }
  16803. }
  16804. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16805. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16806. }
  16807. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16808. {
  16809. USE_OPLINE
  16810. zval *array_ptr, *result;
  16811. SAVE_OPLINE();
  16812. array_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  16813. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  16814. result = EX_VAR(opline->result.var);
  16815. ZVAL_COPY_VALUE(result, array_ptr);
  16816. if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
  16817. Z_ADDREF_P(array_ptr);
  16818. }
  16819. Z_FE_POS_P(result) = 0;
  16820. ZEND_VM_NEXT_OPCODE();
  16821. } else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  16822. zend_object *zobj = Z_OBJ_P(array_ptr);
  16823. if (!zobj->ce->get_iterator) {
  16824. HashTable *properties = zobj->properties;
  16825. if (properties) {
  16826. if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
  16827. if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
  16828. GC_DELREF(properties);
  16829. }
  16830. properties = zobj->properties = zend_array_dup(properties);
  16831. }
  16832. } else {
  16833. properties = zobj->handlers->get_properties(zobj);
  16834. }
  16835. result = EX_VAR(opline->result.var);
  16836. ZVAL_COPY_VALUE(result, array_ptr);
  16837. if (IS_TMP_VAR != IS_TMP_VAR) {
  16838. Z_ADDREF_P(array_ptr);
  16839. }
  16840. if (zend_hash_num_elements(properties) == 0) {
  16841. Z_FE_ITER_P(result) = (uint32_t) -1;
  16842. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  16843. }
  16844. Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
  16845. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16846. } else {
  16847. bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
  16848. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16849. if (UNEXPECTED(EG(exception))) {
  16850. HANDLE_EXCEPTION();
  16851. } else if (is_empty) {
  16852. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  16853. } else {
  16854. ZEND_VM_NEXT_OPCODE();
  16855. }
  16856. }
  16857. } else {
  16858. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
  16859. ZVAL_UNDEF(EX_VAR(opline->result.var));
  16860. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  16861. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16862. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  16863. }
  16864. }
  16865. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16866. {
  16867. USE_OPLINE
  16868. zval *array_ptr, *array_ref;
  16869. SAVE_OPLINE();
  16870. if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
  16871. array_ref = array_ptr = NULL;
  16872. if (Z_ISREF_P(array_ref)) {
  16873. array_ptr = Z_REFVAL_P(array_ref);
  16874. }
  16875. } else {
  16876. array_ref = array_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  16877. }
  16878. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  16879. if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
  16880. if (array_ptr == array_ref) {
  16881. ZVAL_NEW_REF(array_ref, array_ref);
  16882. array_ptr = Z_REFVAL_P(array_ref);
  16883. }
  16884. Z_ADDREF_P(array_ref);
  16885. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  16886. } else {
  16887. array_ref = EX_VAR(opline->result.var);
  16888. ZVAL_NEW_REF(array_ref, array_ptr);
  16889. array_ptr = Z_REFVAL_P(array_ref);
  16890. }
  16891. if (IS_TMP_VAR == IS_CONST) {
  16892. ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
  16893. } else {
  16894. SEPARATE_ARRAY(array_ptr);
  16895. }
  16896. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
  16897. if (IS_TMP_VAR == IS_VAR) {
  16898. }
  16899. ZEND_VM_NEXT_OPCODE();
  16900. } else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  16901. if (!Z_OBJCE_P(array_ptr)->get_iterator) {
  16902. HashTable *properties;
  16903. if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
  16904. if (array_ptr == array_ref) {
  16905. ZVAL_NEW_REF(array_ref, array_ref);
  16906. array_ptr = Z_REFVAL_P(array_ref);
  16907. }
  16908. Z_ADDREF_P(array_ref);
  16909. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  16910. } else {
  16911. array_ptr = EX_VAR(opline->result.var);
  16912. ZVAL_COPY_VALUE(array_ptr, array_ref);
  16913. }
  16914. if (Z_OBJ_P(array_ptr)->properties
  16915. && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
  16916. if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
  16917. GC_DELREF(Z_OBJ_P(array_ptr)->properties);
  16918. }
  16919. Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
  16920. }
  16921. properties = Z_OBJPROP_P(array_ptr);
  16922. if (zend_hash_num_elements(properties) == 0) {
  16923. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
  16924. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  16925. }
  16926. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
  16927. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16928. } else {
  16929. bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
  16930. if (IS_TMP_VAR == IS_VAR) {
  16931. } else {
  16932. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16933. }
  16934. if (UNEXPECTED(EG(exception))) {
  16935. HANDLE_EXCEPTION();
  16936. } else if (is_empty) {
  16937. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  16938. } else {
  16939. ZEND_VM_NEXT_OPCODE();
  16940. }
  16941. }
  16942. } else {
  16943. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
  16944. ZVAL_UNDEF(EX_VAR(opline->result.var));
  16945. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  16946. if (IS_TMP_VAR == IS_VAR) {
  16947. } else {
  16948. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16949. }
  16950. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  16951. }
  16952. }
  16953. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16954. {
  16955. USE_OPLINE
  16956. if (E_HAS_ONLY_FATAL_ERRORS(EG(error_reporting))
  16957. && !E_HAS_ONLY_FATAL_ERRORS(Z_LVAL_P(EX_VAR(opline->op1.var)))) {
  16958. EG(error_reporting) = Z_LVAL_P(EX_VAR(opline->op1.var));
  16959. }
  16960. ZEND_VM_NEXT_OPCODE();
  16961. }
  16962. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16963. {
  16964. USE_OPLINE
  16965. zval *value;
  16966. zend_reference *ref = NULL;
  16967. bool ret;
  16968. SAVE_OPLINE();
  16969. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  16970. if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
  16971. if (IS_TMP_VAR == IS_VAR) {
  16972. ref = Z_REF_P(value);
  16973. }
  16974. value = Z_REFVAL_P(value);
  16975. }
  16976. ret = i_zend_is_true(value);
  16977. if (UNEXPECTED(EG(exception))) {
  16978. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16979. ZVAL_UNDEF(EX_VAR(opline->result.var));
  16980. HANDLE_EXCEPTION();
  16981. }
  16982. if (ret) {
  16983. zval *result = EX_VAR(opline->result.var);
  16984. ZVAL_COPY_VALUE(result, value);
  16985. if (IS_TMP_VAR == IS_CONST) {
  16986. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  16987. } else if (IS_TMP_VAR == IS_CV) {
  16988. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  16989. } else if (IS_TMP_VAR == IS_VAR && ref) {
  16990. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  16991. efree_size(ref, sizeof(zend_reference));
  16992. } else if (Z_OPT_REFCOUNTED_P(result)) {
  16993. Z_ADDREF_P(result);
  16994. }
  16995. }
  16996. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  16997. }
  16998. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16999. ZEND_VM_NEXT_OPCODE();
  17000. }
  17001. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17002. {
  17003. USE_OPLINE
  17004. zval *value;
  17005. zend_reference *ref = NULL;
  17006. SAVE_OPLINE();
  17007. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17008. if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  17009. if (IS_TMP_VAR & IS_VAR) {
  17010. ref = Z_REF_P(value);
  17011. }
  17012. value = Z_REFVAL_P(value);
  17013. }
  17014. if (Z_TYPE_P(value) > IS_NULL) {
  17015. zval *result = EX_VAR(opline->result.var);
  17016. ZVAL_COPY_VALUE(result, value);
  17017. if (IS_TMP_VAR == IS_CONST) {
  17018. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  17019. } else if (IS_TMP_VAR == IS_CV) {
  17020. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  17021. } else if ((IS_TMP_VAR & IS_VAR) && ref) {
  17022. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  17023. efree_size(ref, sizeof(zend_reference));
  17024. } else if (Z_OPT_REFCOUNTED_P(result)) {
  17025. Z_ADDREF_P(result);
  17026. }
  17027. }
  17028. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  17029. }
  17030. if ((IS_TMP_VAR & IS_VAR) && ref) {
  17031. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  17032. efree_size(ref, sizeof(zend_reference));
  17033. }
  17034. }
  17035. ZEND_VM_NEXT_OPCODE();
  17036. }
  17037. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17038. {
  17039. USE_OPLINE
  17040. zval *val, *result;
  17041. val = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17042. if (Z_TYPE_P(val) > IS_NULL) {
  17043. do {
  17044. if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
  17045. val = Z_REFVAL_P(val);
  17046. if (Z_TYPE_P(val) <= IS_NULL) {
  17047. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17048. break;
  17049. }
  17050. }
  17051. ZEND_VM_NEXT_OPCODE();
  17052. } while (0);
  17053. }
  17054. result = EX_VAR(opline->result.var);
  17055. if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
  17056. ZVAL_NULL(result);
  17057. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
  17058. SAVE_OPLINE();
  17059. ZVAL_UNDEFINED_OP1();
  17060. if (UNEXPECTED(EG(exception) != NULL)) {
  17061. HANDLE_EXCEPTION();
  17062. }
  17063. }
  17064. } else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
  17065. ZVAL_FALSE(result);
  17066. } else {
  17067. ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
  17068. ZVAL_TRUE(result);
  17069. }
  17070. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  17071. }
  17072. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17073. {
  17074. USE_OPLINE
  17075. zval *value;
  17076. zval *result = EX_VAR(opline->result.var);
  17077. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17078. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  17079. SAVE_OPLINE();
  17080. ZVAL_UNDEFINED_OP1();
  17081. ZVAL_NULL(result);
  17082. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17083. }
  17084. if (IS_TMP_VAR == IS_CV) {
  17085. ZVAL_COPY_DEREF(result, value);
  17086. } else if (IS_TMP_VAR == IS_VAR) {
  17087. if (UNEXPECTED(Z_ISREF_P(value))) {
  17088. ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
  17089. if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
  17090. efree_size(Z_REF_P(value), sizeof(zend_reference));
  17091. } else if (Z_OPT_REFCOUNTED_P(result)) {
  17092. Z_ADDREF_P(result);
  17093. }
  17094. } else {
  17095. ZVAL_COPY_VALUE(result, value);
  17096. }
  17097. } else {
  17098. ZVAL_COPY_VALUE(result, value);
  17099. if (IS_TMP_VAR == IS_CONST) {
  17100. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
  17101. Z_ADDREF_P(result);
  17102. }
  17103. }
  17104. }
  17105. ZEND_VM_NEXT_OPCODE();
  17106. }
  17107. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17108. {
  17109. USE_OPLINE
  17110. zval *op1, *op2;
  17111. bool result;
  17112. SAVE_OPLINE();
  17113. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17114. op2 = RT_CONSTANT(opline, opline->op2);
  17115. result = fast_is_identical_function(op1, op2);
  17116. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17117. ZEND_VM_SMART_BRANCH(result, 1);
  17118. }
  17119. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17120. {
  17121. USE_OPLINE
  17122. zval *op1, *op2;
  17123. bool result;
  17124. SAVE_OPLINE();
  17125. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17126. op2 = RT_CONSTANT(opline, opline->op2);
  17127. result = fast_is_identical_function(op1, op2);
  17128. ZEND_VM_SMART_BRANCH(result, 1);
  17129. }
  17130. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17131. {
  17132. USE_OPLINE
  17133. zval *op1, *op2;
  17134. bool result;
  17135. SAVE_OPLINE();
  17136. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17137. op2 = RT_CONSTANT(opline, opline->op2);
  17138. result = fast_is_not_identical_function(op1, op2);
  17139. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17140. ZEND_VM_SMART_BRANCH(result, 1);
  17141. }
  17142. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17143. {
  17144. #if 0
  17145. USE_OPLINE
  17146. #endif
  17147. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  17148. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  17149. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17150. }
  17151. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17152. } else {
  17153. if (IS_CONST == IS_UNUSED) {
  17154. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17155. }
  17156. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17157. }
  17158. }
  17159. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17160. {
  17161. #if 0
  17162. USE_OPLINE
  17163. #endif
  17164. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  17165. /* Behave like FETCH_OBJ_W */
  17166. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  17167. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17168. }
  17169. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17170. } else {
  17171. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17172. }
  17173. }
  17174. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17175. {
  17176. USE_OPLINE
  17177. zend_string **rope;
  17178. zval *var;
  17179. /* op1 and result are the same */
  17180. rope = (zend_string**)EX_VAR(opline->op1.var);
  17181. if (IS_CONST == IS_CONST) {
  17182. var = RT_CONSTANT(opline, opline->op2);
  17183. rope[opline->extended_value] = Z_STR_P(var);
  17184. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  17185. Z_ADDREF_P(var);
  17186. }
  17187. } else {
  17188. var = RT_CONSTANT(opline, opline->op2);
  17189. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  17190. if (IS_CONST == IS_CV) {
  17191. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  17192. } else {
  17193. rope[opline->extended_value] = Z_STR_P(var);
  17194. }
  17195. } else {
  17196. SAVE_OPLINE();
  17197. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  17198. ZVAL_UNDEFINED_OP2();
  17199. }
  17200. rope[opline->extended_value] = zval_get_string_func(var);
  17201. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17202. }
  17203. }
  17204. ZEND_VM_NEXT_OPCODE();
  17205. }
  17206. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17207. {
  17208. USE_OPLINE
  17209. zend_string **rope;
  17210. zval *var, *ret;
  17211. uint32_t i;
  17212. size_t len = 0;
  17213. char *target;
  17214. rope = (zend_string**)EX_VAR(opline->op1.var);
  17215. if (IS_CONST == IS_CONST) {
  17216. var = RT_CONSTANT(opline, opline->op2);
  17217. rope[opline->extended_value] = Z_STR_P(var);
  17218. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  17219. Z_ADDREF_P(var);
  17220. }
  17221. } else {
  17222. var = RT_CONSTANT(opline, opline->op2);
  17223. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  17224. if (IS_CONST == IS_CV) {
  17225. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  17226. } else {
  17227. rope[opline->extended_value] = Z_STR_P(var);
  17228. }
  17229. } else {
  17230. SAVE_OPLINE();
  17231. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  17232. ZVAL_UNDEFINED_OP2();
  17233. }
  17234. rope[opline->extended_value] = zval_get_string_func(var);
  17235. if (UNEXPECTED(EG(exception))) {
  17236. for (i = 0; i <= opline->extended_value; i++) {
  17237. zend_string_release_ex(rope[i], 0);
  17238. }
  17239. ZVAL_UNDEF(EX_VAR(opline->result.var));
  17240. HANDLE_EXCEPTION();
  17241. }
  17242. }
  17243. }
  17244. for (i = 0; i <= opline->extended_value; i++) {
  17245. len += ZSTR_LEN(rope[i]);
  17246. }
  17247. ret = EX_VAR(opline->result.var);
  17248. ZVAL_STR(ret, zend_string_alloc(len, 0));
  17249. target = Z_STRVAL_P(ret);
  17250. for (i = 0; i <= opline->extended_value; i++) {
  17251. memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
  17252. target += ZSTR_LEN(rope[i]);
  17253. zend_string_release_ex(rope[i], 0);
  17254. }
  17255. *target = '\0';
  17256. ZEND_VM_NEXT_OPCODE();
  17257. }
  17258. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17259. {
  17260. USE_OPLINE
  17261. zval *value, *arg;
  17262. uint32_t arg_num;
  17263. if (IS_CONST == IS_CONST) {
  17264. SAVE_OPLINE();
  17265. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  17266. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  17267. if (UNEXPECTED(!arg)) {
  17268. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17269. HANDLE_EXCEPTION();
  17270. }
  17271. } else {
  17272. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  17273. arg_num = opline->op2.num;
  17274. }
  17275. if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
  17276. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  17277. goto send_val_by_ref;
  17278. }
  17279. } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  17280. send_val_by_ref:
  17281. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  17282. }
  17283. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17284. ZVAL_COPY_VALUE(arg, value);
  17285. if (IS_TMP_VAR == IS_CONST) {
  17286. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  17287. Z_ADDREF_P(arg);
  17288. }
  17289. }
  17290. ZEND_VM_NEXT_OPCODE();
  17291. }
  17292. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17293. {
  17294. USE_OPLINE
  17295. zval *expr_ptr, new_expr;
  17296. SAVE_OPLINE();
  17297. if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
  17298. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  17299. expr_ptr = NULL;
  17300. if (Z_ISREF_P(expr_ptr)) {
  17301. Z_ADDREF_P(expr_ptr);
  17302. } else {
  17303. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  17304. }
  17305. } else {
  17306. expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17307. if (IS_TMP_VAR == IS_TMP_VAR) {
  17308. /* pass */
  17309. } else if (IS_TMP_VAR == IS_CONST) {
  17310. Z_TRY_ADDREF_P(expr_ptr);
  17311. } else if (IS_TMP_VAR == IS_CV) {
  17312. ZVAL_DEREF(expr_ptr);
  17313. Z_TRY_ADDREF_P(expr_ptr);
  17314. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  17315. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  17316. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  17317. expr_ptr = Z_REFVAL_P(expr_ptr);
  17318. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  17319. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  17320. expr_ptr = &new_expr;
  17321. efree_size(ref, sizeof(zend_reference));
  17322. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  17323. Z_ADDREF_P(expr_ptr);
  17324. }
  17325. }
  17326. }
  17327. }
  17328. if (IS_CONST != IS_UNUSED) {
  17329. zval *offset = RT_CONSTANT(opline, opline->op2);
  17330. zend_string *str;
  17331. zend_ulong hval;
  17332. add_again:
  17333. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  17334. str = Z_STR_P(offset);
  17335. if (IS_CONST != IS_CONST) {
  17336. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  17337. goto num_index;
  17338. }
  17339. }
  17340. str_index:
  17341. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  17342. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  17343. hval = Z_LVAL_P(offset);
  17344. num_index:
  17345. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  17346. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  17347. offset = Z_REFVAL_P(offset);
  17348. goto add_again;
  17349. } else if (Z_TYPE_P(offset) == IS_NULL) {
  17350. str = ZSTR_EMPTY_ALLOC();
  17351. goto str_index;
  17352. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  17353. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  17354. goto num_index;
  17355. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  17356. hval = 0;
  17357. goto num_index;
  17358. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  17359. hval = 1;
  17360. goto num_index;
  17361. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  17362. zend_use_resource_as_offset(offset);
  17363. hval = Z_RES_HANDLE_P(offset);
  17364. goto num_index;
  17365. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  17366. ZVAL_UNDEFINED_OP2();
  17367. str = ZSTR_EMPTY_ALLOC();
  17368. goto str_index;
  17369. } else {
  17370. zend_illegal_offset();
  17371. zval_ptr_dtor_nogc(expr_ptr);
  17372. }
  17373. } else {
  17374. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  17375. zend_cannot_add_element();
  17376. zval_ptr_dtor_nogc(expr_ptr);
  17377. }
  17378. }
  17379. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17380. }
  17381. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17382. {
  17383. zval *array;
  17384. uint32_t size;
  17385. USE_OPLINE
  17386. array = EX_VAR(opline->result.var);
  17387. if (IS_TMP_VAR != IS_UNUSED) {
  17388. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  17389. ZVAL_ARR(array, zend_new_array(size));
  17390. /* Explicitly initialize array as not-packed if flag is set */
  17391. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  17392. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  17393. }
  17394. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17395. } else {
  17396. ZVAL_ARR(array, zend_new_array(0));
  17397. ZEND_VM_NEXT_OPCODE();
  17398. }
  17399. }
  17400. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17401. {
  17402. USE_OPLINE
  17403. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  17404. SAVE_OPLINE();
  17405. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  17406. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17407. }
  17408. /* Destroy the previously yielded value */
  17409. zval_ptr_dtor(&generator->value);
  17410. /* Destroy the previously yielded key */
  17411. zval_ptr_dtor(&generator->key);
  17412. /* Set the new yielded value */
  17413. if (IS_TMP_VAR != IS_UNUSED) {
  17414. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  17415. /* Constants and temporary variables aren't yieldable by reference,
  17416. * but we still allow them with a notice. */
  17417. if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
  17418. zval *value;
  17419. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  17420. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17421. ZVAL_COPY_VALUE(&generator->value, value);
  17422. if (IS_TMP_VAR == IS_CONST) {
  17423. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  17424. Z_ADDREF(generator->value);
  17425. }
  17426. }
  17427. } else {
  17428. zval *value_ptr = NULL;
  17429. /* If a function call result is yielded and the function did
  17430. * not return by reference we throw a notice. */
  17431. do {
  17432. if (IS_TMP_VAR == IS_VAR) {
  17433. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  17434. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  17435. && !Z_ISREF_P(value_ptr)) {
  17436. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  17437. ZVAL_COPY(&generator->value, value_ptr);
  17438. break;
  17439. }
  17440. }
  17441. if (Z_ISREF_P(value_ptr)) {
  17442. Z_ADDREF_P(value_ptr);
  17443. } else {
  17444. ZVAL_MAKE_REF_EX(value_ptr, 2);
  17445. }
  17446. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  17447. } while (0);
  17448. }
  17449. } else {
  17450. zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17451. /* Consts, temporary variables and references need copying */
  17452. if (IS_TMP_VAR == IS_CONST) {
  17453. ZVAL_COPY_VALUE(&generator->value, value);
  17454. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  17455. Z_ADDREF(generator->value);
  17456. }
  17457. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  17458. ZVAL_COPY_VALUE(&generator->value, value);
  17459. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  17460. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  17461. } else {
  17462. ZVAL_COPY_VALUE(&generator->value, value);
  17463. if (IS_TMP_VAR == IS_CV) {
  17464. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  17465. }
  17466. }
  17467. }
  17468. } else {
  17469. /* If no value was specified yield null */
  17470. ZVAL_NULL(&generator->value);
  17471. }
  17472. /* Set the new yielded key */
  17473. if (IS_CONST != IS_UNUSED) {
  17474. zval *key = RT_CONSTANT(opline, opline->op2);
  17475. if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  17476. key = Z_REFVAL_P(key);
  17477. }
  17478. ZVAL_COPY(&generator->key, key);
  17479. if (Z_TYPE(generator->key) == IS_LONG
  17480. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  17481. ) {
  17482. generator->largest_used_integer_key = Z_LVAL(generator->key);
  17483. }
  17484. } else {
  17485. /* If no key was specified we use auto-increment keys */
  17486. generator->largest_used_integer_key++;
  17487. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  17488. }
  17489. if (RETURN_VALUE_USED(opline)) {
  17490. /* If the return value of yield is used set the send
  17491. * target and initialize it to NULL */
  17492. generator->send_target = EX_VAR(opline->result.var);
  17493. ZVAL_NULL(generator->send_target);
  17494. } else {
  17495. generator->send_target = NULL;
  17496. }
  17497. /* We increment to the next op, so we are at the correct position when the
  17498. * generator is resumed. */
  17499. ZEND_VM_INC_OPCODE();
  17500. /* The GOTO VM uses a local opline variable. We need to set the opline
  17501. * variable in execute_data so we don't resume at an old position. */
  17502. SAVE_OPLINE();
  17503. ZEND_VM_RETURN();
  17504. }
  17505. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17506. {
  17507. USE_OPLINE
  17508. zval *op1;
  17509. HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  17510. zval *result;
  17511. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17512. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  17513. result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_TMP_VAR == IS_CONST);
  17514. if (IS_TMP_VAR & (IS_TMP_VAR|IS_VAR)) {
  17515. zval_ptr_dtor_str(op1);
  17516. }
  17517. ZEND_VM_SMART_BRANCH(result, 0);
  17518. }
  17519. if (opline->extended_value) {
  17520. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  17521. result = zend_hash_index_find(ht, Z_LVAL_P(op1));
  17522. ZEND_VM_SMART_BRANCH(result, 0);
  17523. }
  17524. SAVE_OPLINE();
  17525. if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
  17526. op1 = Z_REFVAL_P(op1);
  17527. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  17528. result = zend_hash_find(ht, Z_STR_P(op1));
  17529. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17530. ZEND_VM_SMART_BRANCH(result, 0);
  17531. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  17532. result = zend_hash_index_find(ht, Z_LVAL_P(op1));
  17533. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17534. ZEND_VM_SMART_BRANCH(result, 0);
  17535. }
  17536. } else if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  17537. ZVAL_UNDEFINED_OP1();
  17538. }
  17539. } else if (Z_TYPE_P(op1) <= IS_FALSE) {
  17540. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  17541. SAVE_OPLINE();
  17542. ZVAL_UNDEFINED_OP1();
  17543. if (UNEXPECTED(EG(exception) != NULL)) {
  17544. HANDLE_EXCEPTION();
  17545. }
  17546. }
  17547. result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
  17548. ZEND_VM_SMART_BRANCH(result, 0);
  17549. } else {
  17550. zend_string *key;
  17551. zval key_tmp;
  17552. if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
  17553. op1 = Z_REFVAL_P(op1);
  17554. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  17555. result = zend_hash_find(ht, Z_STR_P(op1));
  17556. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17557. ZEND_VM_SMART_BRANCH(result, 0);
  17558. }
  17559. }
  17560. SAVE_OPLINE();
  17561. ZEND_HASH_FOREACH_STR_KEY(ht, key) {
  17562. ZVAL_STR(&key_tmp, key);
  17563. if (zend_compare(op1, &key_tmp) == 0) {
  17564. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17565. ZEND_VM_SMART_BRANCH(1, 1);
  17566. }
  17567. } ZEND_HASH_FOREACH_END();
  17568. }
  17569. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17570. ZEND_VM_SMART_BRANCH(0, 1);
  17571. }
  17572. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17573. {
  17574. #if 0
  17575. USE_OPLINE
  17576. #endif
  17577. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  17578. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  17579. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17580. }
  17581. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17582. } else {
  17583. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  17584. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17585. }
  17586. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17587. }
  17588. }
  17589. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17590. {
  17591. #if 0
  17592. USE_OPLINE
  17593. #endif
  17594. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  17595. /* Behave like FETCH_OBJ_W */
  17596. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  17597. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17598. }
  17599. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17600. } else {
  17601. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17602. }
  17603. }
  17604. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17605. {
  17606. USE_OPLINE
  17607. zend_string **rope;
  17608. zval *var;
  17609. /* op1 and result are the same */
  17610. rope = (zend_string**)EX_VAR(opline->op1.var);
  17611. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  17612. var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  17613. rope[opline->extended_value] = Z_STR_P(var);
  17614. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  17615. Z_ADDREF_P(var);
  17616. }
  17617. } else {
  17618. var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  17619. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  17620. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  17621. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  17622. } else {
  17623. rope[opline->extended_value] = Z_STR_P(var);
  17624. }
  17625. } else {
  17626. SAVE_OPLINE();
  17627. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  17628. ZVAL_UNDEFINED_OP2();
  17629. }
  17630. rope[opline->extended_value] = zval_get_string_func(var);
  17631. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  17632. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17633. }
  17634. }
  17635. ZEND_VM_NEXT_OPCODE();
  17636. }
  17637. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17638. {
  17639. USE_OPLINE
  17640. zend_string **rope;
  17641. zval *var, *ret;
  17642. uint32_t i;
  17643. size_t len = 0;
  17644. char *target;
  17645. rope = (zend_string**)EX_VAR(opline->op1.var);
  17646. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  17647. var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  17648. rope[opline->extended_value] = Z_STR_P(var);
  17649. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  17650. Z_ADDREF_P(var);
  17651. }
  17652. } else {
  17653. var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  17654. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  17655. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  17656. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  17657. } else {
  17658. rope[opline->extended_value] = Z_STR_P(var);
  17659. }
  17660. } else {
  17661. SAVE_OPLINE();
  17662. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  17663. ZVAL_UNDEFINED_OP2();
  17664. }
  17665. rope[opline->extended_value] = zval_get_string_func(var);
  17666. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  17667. if (UNEXPECTED(EG(exception))) {
  17668. for (i = 0; i <= opline->extended_value; i++) {
  17669. zend_string_release_ex(rope[i], 0);
  17670. }
  17671. ZVAL_UNDEF(EX_VAR(opline->result.var));
  17672. HANDLE_EXCEPTION();
  17673. }
  17674. }
  17675. }
  17676. for (i = 0; i <= opline->extended_value; i++) {
  17677. len += ZSTR_LEN(rope[i]);
  17678. }
  17679. ret = EX_VAR(opline->result.var);
  17680. ZVAL_STR(ret, zend_string_alloc(len, 0));
  17681. target = Z_STRVAL_P(ret);
  17682. for (i = 0; i <= opline->extended_value; i++) {
  17683. memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
  17684. target += ZSTR_LEN(rope[i]);
  17685. zend_string_release_ex(rope[i], 0);
  17686. }
  17687. *target = '\0';
  17688. ZEND_VM_NEXT_OPCODE();
  17689. }
  17690. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17691. {
  17692. USE_OPLINE
  17693. zval *expr_ptr, new_expr;
  17694. SAVE_OPLINE();
  17695. if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
  17696. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  17697. expr_ptr = NULL;
  17698. if (Z_ISREF_P(expr_ptr)) {
  17699. Z_ADDREF_P(expr_ptr);
  17700. } else {
  17701. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  17702. }
  17703. } else {
  17704. expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17705. if (IS_TMP_VAR == IS_TMP_VAR) {
  17706. /* pass */
  17707. } else if (IS_TMP_VAR == IS_CONST) {
  17708. Z_TRY_ADDREF_P(expr_ptr);
  17709. } else if (IS_TMP_VAR == IS_CV) {
  17710. ZVAL_DEREF(expr_ptr);
  17711. Z_TRY_ADDREF_P(expr_ptr);
  17712. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  17713. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  17714. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  17715. expr_ptr = Z_REFVAL_P(expr_ptr);
  17716. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  17717. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  17718. expr_ptr = &new_expr;
  17719. efree_size(ref, sizeof(zend_reference));
  17720. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  17721. Z_ADDREF_P(expr_ptr);
  17722. }
  17723. }
  17724. }
  17725. }
  17726. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  17727. zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  17728. zend_string *str;
  17729. zend_ulong hval;
  17730. add_again:
  17731. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  17732. str = Z_STR_P(offset);
  17733. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  17734. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  17735. goto num_index;
  17736. }
  17737. }
  17738. str_index:
  17739. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  17740. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  17741. hval = Z_LVAL_P(offset);
  17742. num_index:
  17743. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  17744. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  17745. offset = Z_REFVAL_P(offset);
  17746. goto add_again;
  17747. } else if (Z_TYPE_P(offset) == IS_NULL) {
  17748. str = ZSTR_EMPTY_ALLOC();
  17749. goto str_index;
  17750. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  17751. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  17752. goto num_index;
  17753. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  17754. hval = 0;
  17755. goto num_index;
  17756. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  17757. hval = 1;
  17758. goto num_index;
  17759. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  17760. zend_use_resource_as_offset(offset);
  17761. hval = Z_RES_HANDLE_P(offset);
  17762. goto num_index;
  17763. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  17764. ZVAL_UNDEFINED_OP2();
  17765. str = ZSTR_EMPTY_ALLOC();
  17766. goto str_index;
  17767. } else {
  17768. zend_illegal_offset();
  17769. zval_ptr_dtor_nogc(expr_ptr);
  17770. }
  17771. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  17772. } else {
  17773. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  17774. zend_cannot_add_element();
  17775. zval_ptr_dtor_nogc(expr_ptr);
  17776. }
  17777. }
  17778. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17779. }
  17780. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17781. {
  17782. zval *array;
  17783. uint32_t size;
  17784. USE_OPLINE
  17785. array = EX_VAR(opline->result.var);
  17786. if (IS_TMP_VAR != IS_UNUSED) {
  17787. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  17788. ZVAL_ARR(array, zend_new_array(size));
  17789. /* Explicitly initialize array as not-packed if flag is set */
  17790. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  17791. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  17792. }
  17793. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17794. } else {
  17795. ZVAL_ARR(array, zend_new_array(0));
  17796. ZEND_VM_NEXT_OPCODE();
  17797. }
  17798. }
  17799. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17800. {
  17801. USE_OPLINE
  17802. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  17803. SAVE_OPLINE();
  17804. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  17805. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17806. }
  17807. /* Destroy the previously yielded value */
  17808. zval_ptr_dtor(&generator->value);
  17809. /* Destroy the previously yielded key */
  17810. zval_ptr_dtor(&generator->key);
  17811. /* Set the new yielded value */
  17812. if (IS_TMP_VAR != IS_UNUSED) {
  17813. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  17814. /* Constants and temporary variables aren't yieldable by reference,
  17815. * but we still allow them with a notice. */
  17816. if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
  17817. zval *value;
  17818. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  17819. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17820. ZVAL_COPY_VALUE(&generator->value, value);
  17821. if (IS_TMP_VAR == IS_CONST) {
  17822. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  17823. Z_ADDREF(generator->value);
  17824. }
  17825. }
  17826. } else {
  17827. zval *value_ptr = NULL;
  17828. /* If a function call result is yielded and the function did
  17829. * not return by reference we throw a notice. */
  17830. do {
  17831. if (IS_TMP_VAR == IS_VAR) {
  17832. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  17833. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  17834. && !Z_ISREF_P(value_ptr)) {
  17835. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  17836. ZVAL_COPY(&generator->value, value_ptr);
  17837. break;
  17838. }
  17839. }
  17840. if (Z_ISREF_P(value_ptr)) {
  17841. Z_ADDREF_P(value_ptr);
  17842. } else {
  17843. ZVAL_MAKE_REF_EX(value_ptr, 2);
  17844. }
  17845. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  17846. } while (0);
  17847. }
  17848. } else {
  17849. zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17850. /* Consts, temporary variables and references need copying */
  17851. if (IS_TMP_VAR == IS_CONST) {
  17852. ZVAL_COPY_VALUE(&generator->value, value);
  17853. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  17854. Z_ADDREF(generator->value);
  17855. }
  17856. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  17857. ZVAL_COPY_VALUE(&generator->value, value);
  17858. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  17859. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  17860. } else {
  17861. ZVAL_COPY_VALUE(&generator->value, value);
  17862. if (IS_TMP_VAR == IS_CV) {
  17863. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  17864. }
  17865. }
  17866. }
  17867. } else {
  17868. /* If no value was specified yield null */
  17869. ZVAL_NULL(&generator->value);
  17870. }
  17871. /* Set the new yielded key */
  17872. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  17873. zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  17874. if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  17875. key = Z_REFVAL_P(key);
  17876. }
  17877. ZVAL_COPY(&generator->key, key);
  17878. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  17879. if (Z_TYPE(generator->key) == IS_LONG
  17880. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  17881. ) {
  17882. generator->largest_used_integer_key = Z_LVAL(generator->key);
  17883. }
  17884. } else {
  17885. /* If no key was specified we use auto-increment keys */
  17886. generator->largest_used_integer_key++;
  17887. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  17888. }
  17889. if (RETURN_VALUE_USED(opline)) {
  17890. /* If the return value of yield is used set the send
  17891. * target and initialize it to NULL */
  17892. generator->send_target = EX_VAR(opline->result.var);
  17893. ZVAL_NULL(generator->send_target);
  17894. } else {
  17895. generator->send_target = NULL;
  17896. }
  17897. /* We increment to the next op, so we are at the correct position when the
  17898. * generator is resumed. */
  17899. ZEND_VM_INC_OPCODE();
  17900. /* The GOTO VM uses a local opline variable. We need to set the opline
  17901. * variable in execute_data so we don't resume at an old position. */
  17902. SAVE_OPLINE();
  17903. ZEND_VM_RETURN();
  17904. }
  17905. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17906. {
  17907. USE_OPLINE
  17908. zval *op1, *op2;
  17909. bool result;
  17910. SAVE_OPLINE();
  17911. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17912. op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  17913. result = fast_is_identical_function(op1, op2);
  17914. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17915. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  17916. ZEND_VM_SMART_BRANCH(result, 1);
  17917. }
  17918. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17919. {
  17920. USE_OPLINE
  17921. zval *op1, *op2;
  17922. bool result;
  17923. SAVE_OPLINE();
  17924. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17925. op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  17926. result = fast_is_identical_function(op1, op2);
  17927. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  17928. ZEND_VM_SMART_BRANCH(result, 1);
  17929. }
  17930. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17931. {
  17932. USE_OPLINE
  17933. zval *op1, *op2;
  17934. bool result;
  17935. SAVE_OPLINE();
  17936. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17937. op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  17938. result = fast_is_not_identical_function(op1, op2);
  17939. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17940. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  17941. ZEND_VM_SMART_BRANCH(result, 1);
  17942. }
  17943. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17944. {
  17945. USE_OPLINE
  17946. zval *op1, *op2;
  17947. bool result;
  17948. SAVE_OPLINE();
  17949. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17950. op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
  17951. result = fast_is_identical_function(op1, op2);
  17952. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  17953. ZEND_VM_SMART_BRANCH(result, 1);
  17954. }
  17955. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17956. {
  17957. #if 0
  17958. USE_OPLINE
  17959. #endif
  17960. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  17961. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  17962. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17963. }
  17964. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17965. } else {
  17966. if (IS_UNUSED == IS_UNUSED) {
  17967. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17968. }
  17969. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17970. }
  17971. }
  17972. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17973. {
  17974. if (IS_TMP_VAR == IS_UNUSED) {
  17975. SAVE_OPLINE();
  17976. zend_verify_missing_return_type(EX(func));
  17977. HANDLE_EXCEPTION();
  17978. } else {
  17979. /* prevents "undefined variable opline" errors */
  17980. #if 0 || (IS_TMP_VAR != IS_UNUSED)
  17981. USE_OPLINE
  17982. zval *retval_ref, *retval_ptr;
  17983. zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
  17984. retval_ref = retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17985. if (IS_TMP_VAR == IS_CONST) {
  17986. ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
  17987. retval_ref = retval_ptr = EX_VAR(opline->result.var);
  17988. } else if (IS_TMP_VAR == IS_VAR) {
  17989. if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
  17990. retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
  17991. }
  17992. ZVAL_DEREF(retval_ptr);
  17993. } else if (IS_TMP_VAR == IS_CV) {
  17994. ZVAL_DEREF(retval_ptr);
  17995. }
  17996. if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
  17997. ZEND_VM_NEXT_OPCODE();
  17998. }
  17999. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
  18000. SAVE_OPLINE();
  18001. retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
  18002. if (UNEXPECTED(EG(exception))) {
  18003. HANDLE_EXCEPTION();
  18004. }
  18005. if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
  18006. ZEND_VM_NEXT_OPCODE();
  18007. }
  18008. }
  18009. zend_reference *ref = NULL;
  18010. void *cache_slot = CACHE_ADDR(opline->op2.num);
  18011. if (UNEXPECTED(retval_ref != retval_ptr)) {
  18012. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  18013. ref = Z_REF_P(retval_ref);
  18014. } else {
  18015. /* A cast might happen - unwrap the reference if this is a by-value return */
  18016. if (Z_REFCOUNT_P(retval_ref) == 1) {
  18017. ZVAL_UNREF(retval_ref);
  18018. } else {
  18019. Z_DELREF_P(retval_ref);
  18020. ZVAL_COPY(retval_ref, retval_ptr);
  18021. }
  18022. retval_ptr = retval_ref;
  18023. }
  18024. }
  18025. SAVE_OPLINE();
  18026. if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
  18027. zend_verify_return_error(EX(func), retval_ptr);
  18028. HANDLE_EXCEPTION();
  18029. }
  18030. ZEND_VM_NEXT_OPCODE();
  18031. #endif
  18032. }
  18033. }
  18034. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18035. {
  18036. USE_OPLINE
  18037. zval *value, *arg;
  18038. uint32_t arg_num;
  18039. if (IS_UNUSED == IS_CONST) {
  18040. SAVE_OPLINE();
  18041. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  18042. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  18043. if (UNEXPECTED(!arg)) {
  18044. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18045. HANDLE_EXCEPTION();
  18046. }
  18047. } else {
  18048. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  18049. arg_num = opline->op2.num;
  18050. }
  18051. if (EXPECTED(0)) {
  18052. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  18053. goto send_val_by_ref;
  18054. }
  18055. } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  18056. send_val_by_ref:
  18057. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  18058. }
  18059. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18060. ZVAL_COPY_VALUE(arg, value);
  18061. if (IS_TMP_VAR == IS_CONST) {
  18062. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  18063. Z_ADDREF_P(arg);
  18064. }
  18065. }
  18066. ZEND_VM_NEXT_OPCODE();
  18067. }
  18068. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18069. {
  18070. USE_OPLINE
  18071. zval *value, *arg;
  18072. uint32_t arg_num;
  18073. if (IS_UNUSED == IS_CONST) {
  18074. SAVE_OPLINE();
  18075. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  18076. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  18077. if (UNEXPECTED(!arg)) {
  18078. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18079. HANDLE_EXCEPTION();
  18080. }
  18081. } else {
  18082. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  18083. arg_num = opline->op2.num;
  18084. }
  18085. if (EXPECTED(1)) {
  18086. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  18087. goto send_val_by_ref;
  18088. }
  18089. } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  18090. send_val_by_ref:
  18091. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  18092. }
  18093. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18094. ZVAL_COPY_VALUE(arg, value);
  18095. if (IS_TMP_VAR == IS_CONST) {
  18096. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  18097. Z_ADDREF_P(arg);
  18098. }
  18099. }
  18100. ZEND_VM_NEXT_OPCODE();
  18101. }
  18102. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18103. {
  18104. USE_OPLINE
  18105. zval *expr_ptr, new_expr;
  18106. SAVE_OPLINE();
  18107. if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
  18108. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  18109. expr_ptr = NULL;
  18110. if (Z_ISREF_P(expr_ptr)) {
  18111. Z_ADDREF_P(expr_ptr);
  18112. } else {
  18113. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  18114. }
  18115. } else {
  18116. expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18117. if (IS_TMP_VAR == IS_TMP_VAR) {
  18118. /* pass */
  18119. } else if (IS_TMP_VAR == IS_CONST) {
  18120. Z_TRY_ADDREF_P(expr_ptr);
  18121. } else if (IS_TMP_VAR == IS_CV) {
  18122. ZVAL_DEREF(expr_ptr);
  18123. Z_TRY_ADDREF_P(expr_ptr);
  18124. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  18125. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  18126. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  18127. expr_ptr = Z_REFVAL_P(expr_ptr);
  18128. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  18129. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  18130. expr_ptr = &new_expr;
  18131. efree_size(ref, sizeof(zend_reference));
  18132. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  18133. Z_ADDREF_P(expr_ptr);
  18134. }
  18135. }
  18136. }
  18137. }
  18138. if (IS_UNUSED != IS_UNUSED) {
  18139. zval *offset = NULL;
  18140. zend_string *str;
  18141. zend_ulong hval;
  18142. add_again:
  18143. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  18144. str = Z_STR_P(offset);
  18145. if (IS_UNUSED != IS_CONST) {
  18146. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  18147. goto num_index;
  18148. }
  18149. }
  18150. str_index:
  18151. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  18152. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  18153. hval = Z_LVAL_P(offset);
  18154. num_index:
  18155. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  18156. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  18157. offset = Z_REFVAL_P(offset);
  18158. goto add_again;
  18159. } else if (Z_TYPE_P(offset) == IS_NULL) {
  18160. str = ZSTR_EMPTY_ALLOC();
  18161. goto str_index;
  18162. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  18163. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  18164. goto num_index;
  18165. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  18166. hval = 0;
  18167. goto num_index;
  18168. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  18169. hval = 1;
  18170. goto num_index;
  18171. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  18172. zend_use_resource_as_offset(offset);
  18173. hval = Z_RES_HANDLE_P(offset);
  18174. goto num_index;
  18175. } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  18176. ZVAL_UNDEFINED_OP2();
  18177. str = ZSTR_EMPTY_ALLOC();
  18178. goto str_index;
  18179. } else {
  18180. zend_illegal_offset();
  18181. zval_ptr_dtor_nogc(expr_ptr);
  18182. }
  18183. } else {
  18184. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  18185. zend_cannot_add_element();
  18186. zval_ptr_dtor_nogc(expr_ptr);
  18187. }
  18188. }
  18189. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18190. }
  18191. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18192. {
  18193. zval *array;
  18194. uint32_t size;
  18195. USE_OPLINE
  18196. array = EX_VAR(opline->result.var);
  18197. if (IS_TMP_VAR != IS_UNUSED) {
  18198. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  18199. ZVAL_ARR(array, zend_new_array(size));
  18200. /* Explicitly initialize array as not-packed if flag is set */
  18201. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  18202. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  18203. }
  18204. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18205. } else {
  18206. ZVAL_ARR(array, zend_new_array(0));
  18207. ZEND_VM_NEXT_OPCODE();
  18208. }
  18209. }
  18210. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18211. {
  18212. USE_OPLINE
  18213. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  18214. SAVE_OPLINE();
  18215. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  18216. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18217. }
  18218. /* Destroy the previously yielded value */
  18219. zval_ptr_dtor(&generator->value);
  18220. /* Destroy the previously yielded key */
  18221. zval_ptr_dtor(&generator->key);
  18222. /* Set the new yielded value */
  18223. if (IS_TMP_VAR != IS_UNUSED) {
  18224. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  18225. /* Constants and temporary variables aren't yieldable by reference,
  18226. * but we still allow them with a notice. */
  18227. if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
  18228. zval *value;
  18229. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  18230. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18231. ZVAL_COPY_VALUE(&generator->value, value);
  18232. if (IS_TMP_VAR == IS_CONST) {
  18233. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  18234. Z_ADDREF(generator->value);
  18235. }
  18236. }
  18237. } else {
  18238. zval *value_ptr = NULL;
  18239. /* If a function call result is yielded and the function did
  18240. * not return by reference we throw a notice. */
  18241. do {
  18242. if (IS_TMP_VAR == IS_VAR) {
  18243. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  18244. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  18245. && !Z_ISREF_P(value_ptr)) {
  18246. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  18247. ZVAL_COPY(&generator->value, value_ptr);
  18248. break;
  18249. }
  18250. }
  18251. if (Z_ISREF_P(value_ptr)) {
  18252. Z_ADDREF_P(value_ptr);
  18253. } else {
  18254. ZVAL_MAKE_REF_EX(value_ptr, 2);
  18255. }
  18256. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  18257. } while (0);
  18258. }
  18259. } else {
  18260. zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18261. /* Consts, temporary variables and references need copying */
  18262. if (IS_TMP_VAR == IS_CONST) {
  18263. ZVAL_COPY_VALUE(&generator->value, value);
  18264. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  18265. Z_ADDREF(generator->value);
  18266. }
  18267. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  18268. ZVAL_COPY_VALUE(&generator->value, value);
  18269. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  18270. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  18271. } else {
  18272. ZVAL_COPY_VALUE(&generator->value, value);
  18273. if (IS_TMP_VAR == IS_CV) {
  18274. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  18275. }
  18276. }
  18277. }
  18278. } else {
  18279. /* If no value was specified yield null */
  18280. ZVAL_NULL(&generator->value);
  18281. }
  18282. /* Set the new yielded key */
  18283. if (IS_UNUSED != IS_UNUSED) {
  18284. zval *key = NULL;
  18285. if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  18286. key = Z_REFVAL_P(key);
  18287. }
  18288. ZVAL_COPY(&generator->key, key);
  18289. if (Z_TYPE(generator->key) == IS_LONG
  18290. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  18291. ) {
  18292. generator->largest_used_integer_key = Z_LVAL(generator->key);
  18293. }
  18294. } else {
  18295. /* If no key was specified we use auto-increment keys */
  18296. generator->largest_used_integer_key++;
  18297. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  18298. }
  18299. if (RETURN_VALUE_USED(opline)) {
  18300. /* If the return value of yield is used set the send
  18301. * target and initialize it to NULL */
  18302. generator->send_target = EX_VAR(opline->result.var);
  18303. ZVAL_NULL(generator->send_target);
  18304. } else {
  18305. generator->send_target = NULL;
  18306. }
  18307. /* We increment to the next op, so we are at the correct position when the
  18308. * generator is resumed. */
  18309. ZEND_VM_INC_OPCODE();
  18310. /* The GOTO VM uses a local opline variable. We need to set the opline
  18311. * variable in execute_data so we don't resume at an old position. */
  18312. SAVE_OPLINE();
  18313. ZEND_VM_RETURN();
  18314. }
  18315. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18316. {
  18317. USE_OPLINE
  18318. zval *op1;
  18319. zend_string *type;
  18320. SAVE_OPLINE();
  18321. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18322. type = zend_zval_get_legacy_type(op1);
  18323. if (EXPECTED(type)) {
  18324. ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
  18325. } else {
  18326. ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
  18327. }
  18328. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18329. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18330. }
  18331. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18332. {
  18333. USE_OPLINE
  18334. zval *op1, *op2;
  18335. bool result;
  18336. SAVE_OPLINE();
  18337. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18338. op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  18339. result = fast_is_identical_function(op1, op2);
  18340. ZEND_VM_SMART_BRANCH(result, 1);
  18341. }
  18342. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18343. {
  18344. #if 0
  18345. USE_OPLINE
  18346. #endif
  18347. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  18348. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  18349. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18350. }
  18351. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18352. } else {
  18353. if (IS_CV == IS_UNUSED) {
  18354. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18355. }
  18356. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18357. }
  18358. }
  18359. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18360. {
  18361. #if 0
  18362. USE_OPLINE
  18363. #endif
  18364. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  18365. /* Behave like FETCH_OBJ_W */
  18366. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  18367. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18368. }
  18369. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18370. } else {
  18371. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18372. }
  18373. }
  18374. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18375. {
  18376. USE_OPLINE
  18377. zend_string **rope;
  18378. zval *var;
  18379. /* op1 and result are the same */
  18380. rope = (zend_string**)EX_VAR(opline->op1.var);
  18381. if (IS_CV == IS_CONST) {
  18382. var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  18383. rope[opline->extended_value] = Z_STR_P(var);
  18384. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  18385. Z_ADDREF_P(var);
  18386. }
  18387. } else {
  18388. var = EX_VAR(opline->op2.var);
  18389. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  18390. if (IS_CV == IS_CV) {
  18391. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  18392. } else {
  18393. rope[opline->extended_value] = Z_STR_P(var);
  18394. }
  18395. } else {
  18396. SAVE_OPLINE();
  18397. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  18398. ZVAL_UNDEFINED_OP2();
  18399. }
  18400. rope[opline->extended_value] = zval_get_string_func(var);
  18401. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18402. }
  18403. }
  18404. ZEND_VM_NEXT_OPCODE();
  18405. }
  18406. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18407. {
  18408. USE_OPLINE
  18409. zend_string **rope;
  18410. zval *var, *ret;
  18411. uint32_t i;
  18412. size_t len = 0;
  18413. char *target;
  18414. rope = (zend_string**)EX_VAR(opline->op1.var);
  18415. if (IS_CV == IS_CONST) {
  18416. var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  18417. rope[opline->extended_value] = Z_STR_P(var);
  18418. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  18419. Z_ADDREF_P(var);
  18420. }
  18421. } else {
  18422. var = EX_VAR(opline->op2.var);
  18423. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  18424. if (IS_CV == IS_CV) {
  18425. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  18426. } else {
  18427. rope[opline->extended_value] = Z_STR_P(var);
  18428. }
  18429. } else {
  18430. SAVE_OPLINE();
  18431. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  18432. ZVAL_UNDEFINED_OP2();
  18433. }
  18434. rope[opline->extended_value] = zval_get_string_func(var);
  18435. if (UNEXPECTED(EG(exception))) {
  18436. for (i = 0; i <= opline->extended_value; i++) {
  18437. zend_string_release_ex(rope[i], 0);
  18438. }
  18439. ZVAL_UNDEF(EX_VAR(opline->result.var));
  18440. HANDLE_EXCEPTION();
  18441. }
  18442. }
  18443. }
  18444. for (i = 0; i <= opline->extended_value; i++) {
  18445. len += ZSTR_LEN(rope[i]);
  18446. }
  18447. ret = EX_VAR(opline->result.var);
  18448. ZVAL_STR(ret, zend_string_alloc(len, 0));
  18449. target = Z_STRVAL_P(ret);
  18450. for (i = 0; i <= opline->extended_value; i++) {
  18451. memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
  18452. target += ZSTR_LEN(rope[i]);
  18453. zend_string_release_ex(rope[i], 0);
  18454. }
  18455. *target = '\0';
  18456. ZEND_VM_NEXT_OPCODE();
  18457. }
  18458. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18459. {
  18460. USE_OPLINE
  18461. zval *expr_ptr, new_expr;
  18462. SAVE_OPLINE();
  18463. if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
  18464. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  18465. expr_ptr = NULL;
  18466. if (Z_ISREF_P(expr_ptr)) {
  18467. Z_ADDREF_P(expr_ptr);
  18468. } else {
  18469. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  18470. }
  18471. } else {
  18472. expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18473. if (IS_TMP_VAR == IS_TMP_VAR) {
  18474. /* pass */
  18475. } else if (IS_TMP_VAR == IS_CONST) {
  18476. Z_TRY_ADDREF_P(expr_ptr);
  18477. } else if (IS_TMP_VAR == IS_CV) {
  18478. ZVAL_DEREF(expr_ptr);
  18479. Z_TRY_ADDREF_P(expr_ptr);
  18480. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  18481. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  18482. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  18483. expr_ptr = Z_REFVAL_P(expr_ptr);
  18484. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  18485. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  18486. expr_ptr = &new_expr;
  18487. efree_size(ref, sizeof(zend_reference));
  18488. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  18489. Z_ADDREF_P(expr_ptr);
  18490. }
  18491. }
  18492. }
  18493. }
  18494. if (IS_CV != IS_UNUSED) {
  18495. zval *offset = EX_VAR(opline->op2.var);
  18496. zend_string *str;
  18497. zend_ulong hval;
  18498. add_again:
  18499. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  18500. str = Z_STR_P(offset);
  18501. if (IS_CV != IS_CONST) {
  18502. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  18503. goto num_index;
  18504. }
  18505. }
  18506. str_index:
  18507. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  18508. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  18509. hval = Z_LVAL_P(offset);
  18510. num_index:
  18511. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  18512. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  18513. offset = Z_REFVAL_P(offset);
  18514. goto add_again;
  18515. } else if (Z_TYPE_P(offset) == IS_NULL) {
  18516. str = ZSTR_EMPTY_ALLOC();
  18517. goto str_index;
  18518. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  18519. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  18520. goto num_index;
  18521. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  18522. hval = 0;
  18523. goto num_index;
  18524. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  18525. hval = 1;
  18526. goto num_index;
  18527. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  18528. zend_use_resource_as_offset(offset);
  18529. hval = Z_RES_HANDLE_P(offset);
  18530. goto num_index;
  18531. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  18532. ZVAL_UNDEFINED_OP2();
  18533. str = ZSTR_EMPTY_ALLOC();
  18534. goto str_index;
  18535. } else {
  18536. zend_illegal_offset();
  18537. zval_ptr_dtor_nogc(expr_ptr);
  18538. }
  18539. } else {
  18540. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  18541. zend_cannot_add_element();
  18542. zval_ptr_dtor_nogc(expr_ptr);
  18543. }
  18544. }
  18545. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18546. }
  18547. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18548. {
  18549. zval *array;
  18550. uint32_t size;
  18551. USE_OPLINE
  18552. array = EX_VAR(opline->result.var);
  18553. if (IS_TMP_VAR != IS_UNUSED) {
  18554. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  18555. ZVAL_ARR(array, zend_new_array(size));
  18556. /* Explicitly initialize array as not-packed if flag is set */
  18557. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  18558. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  18559. }
  18560. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18561. } else {
  18562. ZVAL_ARR(array, zend_new_array(0));
  18563. ZEND_VM_NEXT_OPCODE();
  18564. }
  18565. }
  18566. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18567. {
  18568. USE_OPLINE
  18569. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  18570. SAVE_OPLINE();
  18571. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  18572. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18573. }
  18574. /* Destroy the previously yielded value */
  18575. zval_ptr_dtor(&generator->value);
  18576. /* Destroy the previously yielded key */
  18577. zval_ptr_dtor(&generator->key);
  18578. /* Set the new yielded value */
  18579. if (IS_TMP_VAR != IS_UNUSED) {
  18580. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  18581. /* Constants and temporary variables aren't yieldable by reference,
  18582. * but we still allow them with a notice. */
  18583. if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
  18584. zval *value;
  18585. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  18586. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18587. ZVAL_COPY_VALUE(&generator->value, value);
  18588. if (IS_TMP_VAR == IS_CONST) {
  18589. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  18590. Z_ADDREF(generator->value);
  18591. }
  18592. }
  18593. } else {
  18594. zval *value_ptr = NULL;
  18595. /* If a function call result is yielded and the function did
  18596. * not return by reference we throw a notice. */
  18597. do {
  18598. if (IS_TMP_VAR == IS_VAR) {
  18599. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  18600. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  18601. && !Z_ISREF_P(value_ptr)) {
  18602. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  18603. ZVAL_COPY(&generator->value, value_ptr);
  18604. break;
  18605. }
  18606. }
  18607. if (Z_ISREF_P(value_ptr)) {
  18608. Z_ADDREF_P(value_ptr);
  18609. } else {
  18610. ZVAL_MAKE_REF_EX(value_ptr, 2);
  18611. }
  18612. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  18613. } while (0);
  18614. }
  18615. } else {
  18616. zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18617. /* Consts, temporary variables and references need copying */
  18618. if (IS_TMP_VAR == IS_CONST) {
  18619. ZVAL_COPY_VALUE(&generator->value, value);
  18620. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  18621. Z_ADDREF(generator->value);
  18622. }
  18623. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  18624. ZVAL_COPY_VALUE(&generator->value, value);
  18625. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  18626. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  18627. } else {
  18628. ZVAL_COPY_VALUE(&generator->value, value);
  18629. if (IS_TMP_VAR == IS_CV) {
  18630. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  18631. }
  18632. }
  18633. }
  18634. } else {
  18635. /* If no value was specified yield null */
  18636. ZVAL_NULL(&generator->value);
  18637. }
  18638. /* Set the new yielded key */
  18639. if (IS_CV != IS_UNUSED) {
  18640. zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  18641. if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  18642. key = Z_REFVAL_P(key);
  18643. }
  18644. ZVAL_COPY(&generator->key, key);
  18645. if (Z_TYPE(generator->key) == IS_LONG
  18646. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  18647. ) {
  18648. generator->largest_used_integer_key = Z_LVAL(generator->key);
  18649. }
  18650. } else {
  18651. /* If no key was specified we use auto-increment keys */
  18652. generator->largest_used_integer_key++;
  18653. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  18654. }
  18655. if (RETURN_VALUE_USED(opline)) {
  18656. /* If the return value of yield is used set the send
  18657. * target and initialize it to NULL */
  18658. generator->send_target = EX_VAR(opline->result.var);
  18659. ZVAL_NULL(generator->send_target);
  18660. } else {
  18661. generator->send_target = NULL;
  18662. }
  18663. /* We increment to the next op, so we are at the correct position when the
  18664. * generator is resumed. */
  18665. ZEND_VM_INC_OPCODE();
  18666. /* The GOTO VM uses a local opline variable. We need to set the opline
  18667. * variable in execute_data so we don't resume at an old position. */
  18668. SAVE_OPLINE();
  18669. ZEND_VM_RETURN();
  18670. }
  18671. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18672. {
  18673. USE_OPLINE
  18674. zval *closure, *var;
  18675. closure = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18676. if (opline->extended_value & ZEND_BIND_REF) {
  18677. /* By-ref binding */
  18678. var = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
  18679. if (Z_ISREF_P(var)) {
  18680. Z_ADDREF_P(var);
  18681. } else {
  18682. ZVAL_MAKE_REF_EX(var, 2);
  18683. }
  18684. } else {
  18685. var = EX_VAR(opline->op2.var);
  18686. if (UNEXPECTED(Z_ISUNDEF_P(var)) && !(opline->extended_value & ZEND_BIND_IMPLICIT)) {
  18687. SAVE_OPLINE();
  18688. var = ZVAL_UNDEFINED_OP2();
  18689. if (UNEXPECTED(EG(exception))) {
  18690. HANDLE_EXCEPTION();
  18691. }
  18692. }
  18693. ZVAL_DEREF(var);
  18694. Z_TRY_ADDREF_P(var);
  18695. }
  18696. zend_closure_bind_var_ex(closure,
  18697. (opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT)), var);
  18698. ZEND_VM_NEXT_OPCODE();
  18699. }
  18700. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
  18701. {
  18702. USE_OPLINE
  18703. zval *var_ptr;
  18704. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18705. SAVE_OPLINE();
  18706. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  18707. ZVAL_UNDEFINED_OP1();
  18708. ZVAL_NULL(var_ptr);
  18709. }
  18710. do {
  18711. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  18712. zend_reference *ref = Z_REF_P(var_ptr);
  18713. var_ptr = Z_REFVAL_P(var_ptr);
  18714. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  18715. zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
  18716. break;
  18717. }
  18718. }
  18719. increment_function(var_ptr);
  18720. } while (0);
  18721. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  18722. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  18723. }
  18724. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18725. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18726. }
  18727. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18728. {
  18729. USE_OPLINE
  18730. zval *var_ptr;
  18731. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18732. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  18733. fast_long_increment_function(var_ptr);
  18734. if (UNEXPECTED(0)) {
  18735. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  18736. }
  18737. ZEND_VM_NEXT_OPCODE();
  18738. }
  18739. ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18740. }
  18741. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18742. {
  18743. USE_OPLINE
  18744. zval *var_ptr;
  18745. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18746. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  18747. fast_long_increment_function(var_ptr);
  18748. if (UNEXPECTED(1)) {
  18749. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  18750. }
  18751. ZEND_VM_NEXT_OPCODE();
  18752. }
  18753. ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18754. }
  18755. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
  18756. {
  18757. USE_OPLINE
  18758. zval *var_ptr;
  18759. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18760. SAVE_OPLINE();
  18761. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  18762. ZVAL_UNDEFINED_OP1();
  18763. ZVAL_NULL(var_ptr);
  18764. }
  18765. do {
  18766. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  18767. zend_reference *ref = Z_REF_P(var_ptr);
  18768. var_ptr = Z_REFVAL_P(var_ptr);
  18769. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  18770. zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
  18771. break;
  18772. }
  18773. }
  18774. decrement_function(var_ptr);
  18775. } while (0);
  18776. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  18777. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  18778. }
  18779. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18780. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18781. }
  18782. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18783. {
  18784. USE_OPLINE
  18785. zval *var_ptr;
  18786. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18787. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  18788. fast_long_decrement_function(var_ptr);
  18789. if (UNEXPECTED(0)) {
  18790. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  18791. }
  18792. ZEND_VM_NEXT_OPCODE();
  18793. }
  18794. ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18795. }
  18796. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18797. {
  18798. USE_OPLINE
  18799. zval *var_ptr;
  18800. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18801. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  18802. fast_long_decrement_function(var_ptr);
  18803. if (UNEXPECTED(1)) {
  18804. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  18805. }
  18806. ZEND_VM_NEXT_OPCODE();
  18807. }
  18808. ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18809. }
  18810. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
  18811. {
  18812. USE_OPLINE
  18813. zval *var_ptr;
  18814. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18815. SAVE_OPLINE();
  18816. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  18817. ZVAL_UNDEFINED_OP1();
  18818. ZVAL_NULL(var_ptr);
  18819. }
  18820. do {
  18821. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  18822. zend_reference *ref = Z_REF_P(var_ptr);
  18823. var_ptr = Z_REFVAL_P(var_ptr);
  18824. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  18825. zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
  18826. break;
  18827. }
  18828. }
  18829. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  18830. increment_function(var_ptr);
  18831. } while (0);
  18832. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18833. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18834. }
  18835. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18836. {
  18837. USE_OPLINE
  18838. zval *var_ptr;
  18839. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18840. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  18841. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  18842. fast_long_increment_function(var_ptr);
  18843. ZEND_VM_NEXT_OPCODE();
  18844. }
  18845. ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18846. }
  18847. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
  18848. {
  18849. USE_OPLINE
  18850. zval *var_ptr;
  18851. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18852. SAVE_OPLINE();
  18853. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  18854. ZVAL_UNDEFINED_OP1();
  18855. ZVAL_NULL(var_ptr);
  18856. }
  18857. do {
  18858. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  18859. zend_reference *ref = Z_REF_P(var_ptr);
  18860. var_ptr = Z_REFVAL_P(var_ptr);
  18861. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  18862. zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
  18863. break;
  18864. }
  18865. }
  18866. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  18867. decrement_function(var_ptr);
  18868. } while (0);
  18869. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18870. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18871. }
  18872. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18873. {
  18874. USE_OPLINE
  18875. zval *var_ptr;
  18876. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18877. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  18878. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  18879. fast_long_decrement_function(var_ptr);
  18880. ZEND_VM_NEXT_OPCODE();
  18881. }
  18882. ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18883. }
  18884. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18885. {
  18886. USE_OPLINE
  18887. zval *retval_ptr;
  18888. zval *return_value;
  18889. retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18890. return_value = EX(return_value);
  18891. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  18892. SAVE_OPLINE();
  18893. retval_ptr = ZVAL_UNDEFINED_OP1();
  18894. if (return_value) {
  18895. ZVAL_NULL(return_value);
  18896. }
  18897. } else if (!return_value) {
  18898. if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
  18899. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  18900. SAVE_OPLINE();
  18901. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  18902. }
  18903. }
  18904. } else {
  18905. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  18906. ZVAL_COPY_VALUE(return_value, retval_ptr);
  18907. if (IS_VAR == IS_CONST) {
  18908. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  18909. Z_ADDREF_P(return_value);
  18910. }
  18911. }
  18912. } else if (IS_VAR == IS_CV) {
  18913. do {
  18914. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  18915. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  18916. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  18917. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  18918. ZVAL_COPY_VALUE(return_value, retval_ptr);
  18919. if (GC_MAY_LEAK(ref)) {
  18920. SAVE_OPLINE();
  18921. gc_possible_root(ref);
  18922. }
  18923. ZVAL_NULL(retval_ptr);
  18924. break;
  18925. } else {
  18926. Z_ADDREF_P(retval_ptr);
  18927. }
  18928. } else {
  18929. retval_ptr = Z_REFVAL_P(retval_ptr);
  18930. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  18931. Z_ADDREF_P(retval_ptr);
  18932. }
  18933. }
  18934. }
  18935. ZVAL_COPY_VALUE(return_value, retval_ptr);
  18936. } while (0);
  18937. } else /* if (IS_VAR == IS_VAR) */ {
  18938. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  18939. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  18940. retval_ptr = Z_REFVAL_P(retval_ptr);
  18941. ZVAL_COPY_VALUE(return_value, retval_ptr);
  18942. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  18943. efree_size(ref, sizeof(zend_reference));
  18944. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  18945. Z_ADDREF_P(retval_ptr);
  18946. }
  18947. } else {
  18948. ZVAL_COPY_VALUE(return_value, retval_ptr);
  18949. }
  18950. }
  18951. }
  18952. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18953. }
  18954. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18955. {
  18956. USE_OPLINE
  18957. zval *retval_ptr;
  18958. zval *return_value;
  18959. SAVE_OPLINE();
  18960. return_value = EX(return_value);
  18961. do {
  18962. if ((IS_VAR & (IS_CONST|IS_TMP_VAR)) ||
  18963. (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
  18964. /* Not supposed to happen, but we'll allow it */
  18965. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  18966. retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18967. if (!return_value) {
  18968. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18969. } else {
  18970. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  18971. ZVAL_COPY_VALUE(return_value, retval_ptr);
  18972. break;
  18973. }
  18974. ZVAL_NEW_REF(return_value, retval_ptr);
  18975. if (IS_VAR == IS_CONST) {
  18976. Z_TRY_ADDREF_P(retval_ptr);
  18977. }
  18978. }
  18979. break;
  18980. }
  18981. retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18982. if (IS_VAR == IS_VAR) {
  18983. ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
  18984. if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
  18985. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  18986. if (return_value) {
  18987. ZVAL_NEW_REF(return_value, retval_ptr);
  18988. } else {
  18989. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18990. }
  18991. break;
  18992. }
  18993. }
  18994. if (return_value) {
  18995. if (Z_ISREF_P(retval_ptr)) {
  18996. Z_ADDREF_P(retval_ptr);
  18997. } else {
  18998. ZVAL_MAKE_REF_EX(retval_ptr, 2);
  18999. }
  19000. ZVAL_REF(return_value, Z_REF_P(retval_ptr));
  19001. }
  19002. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19003. } while (0);
  19004. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19005. }
  19006. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19007. {
  19008. USE_OPLINE
  19009. zval *retval;
  19010. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  19011. SAVE_OPLINE();
  19012. retval = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19013. /* Copy return value into generator->retval */
  19014. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  19015. ZVAL_COPY_VALUE(&generator->retval, retval);
  19016. if (IS_VAR == IS_CONST) {
  19017. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
  19018. Z_ADDREF(generator->retval);
  19019. }
  19020. }
  19021. } else if (IS_VAR == IS_CV) {
  19022. ZVAL_COPY_DEREF(&generator->retval, retval);
  19023. } else /* if (IS_VAR == IS_VAR) */ {
  19024. if (UNEXPECTED(Z_ISREF_P(retval))) {
  19025. zend_refcounted *ref = Z_COUNTED_P(retval);
  19026. retval = Z_REFVAL_P(retval);
  19027. ZVAL_COPY_VALUE(&generator->retval, retval);
  19028. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  19029. efree_size(ref, sizeof(zend_reference));
  19030. } else if (Z_OPT_REFCOUNTED_P(retval)) {
  19031. Z_ADDREF_P(retval);
  19032. }
  19033. } else {
  19034. ZVAL_COPY_VALUE(&generator->retval, retval);
  19035. }
  19036. }
  19037. /* Close the generator to free up resources */
  19038. zend_generator_close(generator, 1);
  19039. /* Pass execution back to handling code */
  19040. ZEND_VM_RETURN();
  19041. }
  19042. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19043. {
  19044. USE_OPLINE
  19045. zval *arg, *param;
  19046. SAVE_OPLINE();
  19047. arg = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  19048. param = ZEND_CALL_VAR(EX(call), opline->result.var);
  19049. if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
  19050. zend_param_must_be_ref(EX(call)->func, opline->op2.num);
  19051. Z_TRY_ADDREF_P(arg);
  19052. ZVAL_NEW_REF(param, arg);
  19053. } else {
  19054. ZVAL_COPY(param, arg);
  19055. }
  19056. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19057. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19058. }
  19059. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19060. {
  19061. USE_OPLINE
  19062. zval *expr;
  19063. zval *result = EX_VAR(opline->result.var);
  19064. HashTable *ht;
  19065. SAVE_OPLINE();
  19066. expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19067. switch (opline->extended_value) {
  19068. case IS_LONG:
  19069. ZVAL_LONG(result, zval_get_long(expr));
  19070. break;
  19071. case IS_DOUBLE:
  19072. ZVAL_DOUBLE(result, zval_get_double(expr));
  19073. break;
  19074. case IS_STRING:
  19075. ZVAL_STR(result, zval_get_string(expr));
  19076. break;
  19077. default:
  19078. ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
  19079. if (IS_VAR & (IS_VAR|IS_CV)) {
  19080. ZVAL_DEREF(expr);
  19081. }
  19082. /* If value is already of correct type, return it directly */
  19083. if (Z_TYPE_P(expr) == opline->extended_value) {
  19084. ZVAL_COPY_VALUE(result, expr);
  19085. if (IS_VAR == IS_CONST) {
  19086. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  19087. } else if (IS_VAR != IS_TMP_VAR) {
  19088. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  19089. }
  19090. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19091. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19092. }
  19093. if (opline->extended_value == IS_ARRAY) {
  19094. if (IS_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
  19095. if (Z_TYPE_P(expr) != IS_NULL) {
  19096. ZVAL_ARR(result, zend_new_array(1));
  19097. expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
  19098. if (IS_VAR == IS_CONST) {
  19099. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  19100. } else {
  19101. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  19102. }
  19103. } else {
  19104. ZVAL_EMPTY_ARRAY(result);
  19105. }
  19106. } else if (Z_OBJ_P(expr)->properties == NULL
  19107. && Z_OBJ_HT_P(expr)->get_properties_for == NULL
  19108. && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
  19109. /* Optimized version without rebuilding properties HashTable */
  19110. ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
  19111. } else {
  19112. HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
  19113. if (obj_ht) {
  19114. /* fast copy */
  19115. ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
  19116. (Z_OBJCE_P(expr)->default_properties_count ||
  19117. Z_OBJ_P(expr)->handlers != &std_object_handlers ||
  19118. GC_IS_RECURSIVE(obj_ht))));
  19119. zend_release_properties(obj_ht);
  19120. } else {
  19121. ZVAL_EMPTY_ARRAY(result);
  19122. }
  19123. }
  19124. } else {
  19125. ZEND_ASSERT(opline->extended_value == IS_OBJECT);
  19126. ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
  19127. if (Z_TYPE_P(expr) == IS_ARRAY) {
  19128. ht = zend_symtable_to_proptable(Z_ARR_P(expr));
  19129. if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
  19130. /* TODO: try not to duplicate immutable arrays as well ??? */
  19131. ht = zend_array_dup(ht);
  19132. }
  19133. Z_OBJ_P(result)->properties = ht;
  19134. } else if (Z_TYPE_P(expr) != IS_NULL) {
  19135. Z_OBJ_P(result)->properties = ht = zend_new_array(1);
  19136. expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
  19137. if (IS_VAR == IS_CONST) {
  19138. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  19139. } else {
  19140. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  19141. }
  19142. }
  19143. }
  19144. }
  19145. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19146. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19147. }
  19148. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19149. {
  19150. USE_OPLINE
  19151. zval *array_ptr, *result;
  19152. SAVE_OPLINE();
  19153. array_ptr = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  19154. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  19155. result = EX_VAR(opline->result.var);
  19156. ZVAL_COPY_VALUE(result, array_ptr);
  19157. if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
  19158. Z_ADDREF_P(array_ptr);
  19159. }
  19160. Z_FE_POS_P(result) = 0;
  19161. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19162. ZEND_VM_NEXT_OPCODE();
  19163. } else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  19164. zend_object *zobj = Z_OBJ_P(array_ptr);
  19165. if (!zobj->ce->get_iterator) {
  19166. HashTable *properties = zobj->properties;
  19167. if (properties) {
  19168. if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
  19169. if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
  19170. GC_DELREF(properties);
  19171. }
  19172. properties = zobj->properties = zend_array_dup(properties);
  19173. }
  19174. } else {
  19175. properties = zobj->handlers->get_properties(zobj);
  19176. }
  19177. result = EX_VAR(opline->result.var);
  19178. ZVAL_COPY_VALUE(result, array_ptr);
  19179. if (IS_VAR != IS_TMP_VAR) {
  19180. Z_ADDREF_P(array_ptr);
  19181. }
  19182. if (zend_hash_num_elements(properties) == 0) {
  19183. Z_FE_ITER_P(result) = (uint32_t) -1;
  19184. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19185. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  19186. }
  19187. Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
  19188. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19189. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19190. } else {
  19191. bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
  19192. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19193. if (UNEXPECTED(EG(exception))) {
  19194. HANDLE_EXCEPTION();
  19195. } else if (is_empty) {
  19196. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  19197. } else {
  19198. ZEND_VM_NEXT_OPCODE();
  19199. }
  19200. }
  19201. } else {
  19202. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
  19203. ZVAL_UNDEF(EX_VAR(opline->result.var));
  19204. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  19205. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19206. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  19207. }
  19208. }
  19209. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19210. {
  19211. USE_OPLINE
  19212. zval *array_ptr, *array_ref;
  19213. SAVE_OPLINE();
  19214. if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
  19215. array_ref = array_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19216. if (Z_ISREF_P(array_ref)) {
  19217. array_ptr = Z_REFVAL_P(array_ref);
  19218. }
  19219. } else {
  19220. array_ref = array_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19221. }
  19222. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  19223. if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
  19224. if (array_ptr == array_ref) {
  19225. ZVAL_NEW_REF(array_ref, array_ref);
  19226. array_ptr = Z_REFVAL_P(array_ref);
  19227. }
  19228. Z_ADDREF_P(array_ref);
  19229. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  19230. } else {
  19231. array_ref = EX_VAR(opline->result.var);
  19232. ZVAL_NEW_REF(array_ref, array_ptr);
  19233. array_ptr = Z_REFVAL_P(array_ref);
  19234. }
  19235. if (IS_VAR == IS_CONST) {
  19236. ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
  19237. } else {
  19238. SEPARATE_ARRAY(array_ptr);
  19239. }
  19240. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
  19241. if (IS_VAR == IS_VAR) {
  19242. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19243. }
  19244. ZEND_VM_NEXT_OPCODE();
  19245. } else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  19246. if (!Z_OBJCE_P(array_ptr)->get_iterator) {
  19247. HashTable *properties;
  19248. if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
  19249. if (array_ptr == array_ref) {
  19250. ZVAL_NEW_REF(array_ref, array_ref);
  19251. array_ptr = Z_REFVAL_P(array_ref);
  19252. }
  19253. Z_ADDREF_P(array_ref);
  19254. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  19255. } else {
  19256. array_ptr = EX_VAR(opline->result.var);
  19257. ZVAL_COPY_VALUE(array_ptr, array_ref);
  19258. }
  19259. if (Z_OBJ_P(array_ptr)->properties
  19260. && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
  19261. if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
  19262. GC_DELREF(Z_OBJ_P(array_ptr)->properties);
  19263. }
  19264. Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
  19265. }
  19266. properties = Z_OBJPROP_P(array_ptr);
  19267. if (zend_hash_num_elements(properties) == 0) {
  19268. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
  19269. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19270. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  19271. }
  19272. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
  19273. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19274. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19275. } else {
  19276. bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
  19277. if (IS_VAR == IS_VAR) {
  19278. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19279. } else {
  19280. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19281. }
  19282. if (UNEXPECTED(EG(exception))) {
  19283. HANDLE_EXCEPTION();
  19284. } else if (is_empty) {
  19285. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  19286. } else {
  19287. ZEND_VM_NEXT_OPCODE();
  19288. }
  19289. }
  19290. } else {
  19291. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
  19292. ZVAL_UNDEF(EX_VAR(opline->result.var));
  19293. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  19294. if (IS_VAR == IS_VAR) {
  19295. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19296. } else {
  19297. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19298. }
  19299. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  19300. }
  19301. }
  19302. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19303. {
  19304. USE_OPLINE
  19305. zval *array;
  19306. zval *value;
  19307. uint32_t value_type;
  19308. HashTable *fe_ht;
  19309. HashPosition pos;
  19310. Bucket *p;
  19311. array = EX_VAR(opline->op1.var);
  19312. if (UNEXPECTED(Z_TYPE_P(array) != IS_ARRAY)) {
  19313. ZEND_VM_TAIL_CALL(zend_fe_fetch_object_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19314. }
  19315. fe_ht = Z_ARRVAL_P(array);
  19316. pos = Z_FE_POS_P(array);
  19317. p = fe_ht->arData + pos;
  19318. while (1) {
  19319. if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
  19320. /* reached end of iteration */
  19321. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  19322. ZEND_VM_CONTINUE();
  19323. }
  19324. pos++;
  19325. value = &p->val;
  19326. value_type = Z_TYPE_INFO_P(value);
  19327. ZEND_ASSERT(value_type != IS_INDIRECT);
  19328. if (EXPECTED(value_type != IS_UNDEF)) {
  19329. break;
  19330. }
  19331. p++;
  19332. }
  19333. Z_FE_POS_P(array) = pos;
  19334. if (RETURN_VALUE_USED(opline)) {
  19335. if (!p->key) {
  19336. ZVAL_LONG(EX_VAR(opline->result.var), p->h);
  19337. } else {
  19338. ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
  19339. }
  19340. }
  19341. if (EXPECTED(opline->op2_type == IS_CV)) {
  19342. zval *variable_ptr = EX_VAR(opline->op2.var);
  19343. SAVE_OPLINE();
  19344. zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  19345. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19346. } else {
  19347. zval *res = EX_VAR(opline->op2.var);
  19348. zend_refcounted *gc = Z_COUNTED_P(value);
  19349. ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
  19350. if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
  19351. GC_ADDREF(gc);
  19352. }
  19353. ZEND_VM_NEXT_OPCODE();
  19354. }
  19355. }
  19356. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19357. {
  19358. USE_OPLINE
  19359. zval *array;
  19360. zval *value;
  19361. uint32_t value_type;
  19362. HashTable *fe_ht;
  19363. HashPosition pos;
  19364. Bucket *p;
  19365. array = EX_VAR(opline->op1.var);
  19366. SAVE_OPLINE();
  19367. ZVAL_DEREF(array);
  19368. if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
  19369. pos = zend_hash_iterator_pos_ex(Z_FE_ITER_P(EX_VAR(opline->op1.var)), array);
  19370. fe_ht = Z_ARRVAL_P(array);
  19371. p = fe_ht->arData + pos;
  19372. while (1) {
  19373. if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
  19374. /* reached end of iteration */
  19375. goto fe_fetch_w_exit;
  19376. }
  19377. pos++;
  19378. value = &p->val;
  19379. value_type = Z_TYPE_INFO_P(value);
  19380. ZEND_ASSERT(value_type != IS_INDIRECT);
  19381. if (EXPECTED(value_type != IS_UNDEF)) {
  19382. break;
  19383. }
  19384. p++;
  19385. }
  19386. EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
  19387. if (RETURN_VALUE_USED(opline)) {
  19388. if (!p->key) {
  19389. ZVAL_LONG(EX_VAR(opline->result.var), p->h);
  19390. } else {
  19391. ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
  19392. }
  19393. }
  19394. } else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
  19395. zend_object_iterator *iter;
  19396. if ((iter = zend_iterator_unwrap(array)) == NULL) {
  19397. /* plain object */
  19398. fe_ht = Z_OBJPROP_P(array);
  19399. pos = zend_hash_iterator_pos(Z_FE_ITER_P(EX_VAR(opline->op1.var)), fe_ht);
  19400. p = fe_ht->arData + pos;
  19401. while (1) {
  19402. if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
  19403. /* reached end of iteration */
  19404. goto fe_fetch_w_exit;
  19405. }
  19406. pos++;
  19407. value = &p->val;
  19408. value_type = Z_TYPE_INFO_P(value);
  19409. if (EXPECTED(value_type != IS_UNDEF)) {
  19410. if (UNEXPECTED(value_type == IS_INDIRECT)) {
  19411. value = Z_INDIRECT_P(value);
  19412. value_type = Z_TYPE_INFO_P(value);
  19413. if (EXPECTED(value_type != IS_UNDEF)
  19414. && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
  19415. if ((value_type & Z_TYPE_MASK) != IS_REFERENCE) {
  19416. zend_property_info *prop_info =
  19417. zend_get_property_info_for_slot(Z_OBJ_P(array), value);
  19418. if (UNEXPECTED(prop_info)) {
  19419. if (UNEXPECTED(prop_info->flags & ZEND_ACC_READONLY)) {
  19420. zend_throw_error(NULL,
  19421. "Cannot acquire reference to readonly property %s::$%s",
  19422. ZSTR_VAL(prop_info->ce->name), ZSTR_VAL(p->key));
  19423. UNDEF_RESULT();
  19424. HANDLE_EXCEPTION();
  19425. }
  19426. if (ZEND_TYPE_IS_SET(prop_info->type)) {
  19427. ZVAL_NEW_REF(value, value);
  19428. ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(value), prop_info);
  19429. value_type = IS_REFERENCE_EX;
  19430. }
  19431. }
  19432. }
  19433. break;
  19434. }
  19435. } else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
  19436. || !p->key
  19437. || zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
  19438. break;
  19439. }
  19440. }
  19441. p++;
  19442. }
  19443. EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
  19444. if (RETURN_VALUE_USED(opline)) {
  19445. if (UNEXPECTED(!p->key)) {
  19446. ZVAL_LONG(EX_VAR(opline->result.var), p->h);
  19447. } else if (ZSTR_VAL(p->key)[0]) {
  19448. ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
  19449. } else {
  19450. const char *class_name, *prop_name;
  19451. size_t prop_name_len;
  19452. zend_unmangle_property_name_ex(
  19453. p->key, &class_name, &prop_name, &prop_name_len);
  19454. ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
  19455. }
  19456. }
  19457. } else {
  19458. const zend_object_iterator_funcs *funcs = iter->funcs;
  19459. if (++iter->index > 0) {
  19460. /* This could cause an endless loop if index becomes zero again.
  19461. * In case that ever happens we need an additional flag. */
  19462. funcs->move_forward(iter);
  19463. if (UNEXPECTED(EG(exception) != NULL)) {
  19464. UNDEF_RESULT();
  19465. HANDLE_EXCEPTION();
  19466. }
  19467. if (UNEXPECTED(funcs->valid(iter) == FAILURE)) {
  19468. /* reached end of iteration */
  19469. if (UNEXPECTED(EG(exception) != NULL)) {
  19470. UNDEF_RESULT();
  19471. HANDLE_EXCEPTION();
  19472. }
  19473. goto fe_fetch_w_exit;
  19474. }
  19475. }
  19476. value = funcs->get_current_data(iter);
  19477. if (UNEXPECTED(EG(exception) != NULL)) {
  19478. UNDEF_RESULT();
  19479. HANDLE_EXCEPTION();
  19480. }
  19481. if (!value) {
  19482. /* failure in get_current_data */
  19483. goto fe_fetch_w_exit;
  19484. }
  19485. if (RETURN_VALUE_USED(opline)) {
  19486. if (funcs->get_current_key) {
  19487. funcs->get_current_key(iter, EX_VAR(opline->result.var));
  19488. if (UNEXPECTED(EG(exception) != NULL)) {
  19489. UNDEF_RESULT();
  19490. HANDLE_EXCEPTION();
  19491. }
  19492. } else {
  19493. ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
  19494. }
  19495. }
  19496. value_type = Z_TYPE_INFO_P(value);
  19497. }
  19498. } else {
  19499. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array));
  19500. if (UNEXPECTED(EG(exception))) {
  19501. UNDEF_RESULT();
  19502. HANDLE_EXCEPTION();
  19503. }
  19504. fe_fetch_w_exit:
  19505. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  19506. ZEND_VM_CONTINUE();
  19507. }
  19508. if (EXPECTED((value_type & Z_TYPE_MASK) != IS_REFERENCE)) {
  19509. zend_refcounted *gc = Z_COUNTED_P(value);
  19510. zval *ref;
  19511. ZVAL_NEW_EMPTY_REF(value);
  19512. ref = Z_REFVAL_P(value);
  19513. ZVAL_COPY_VALUE_EX(ref, value, gc, value_type);
  19514. }
  19515. if (EXPECTED(opline->op2_type == IS_CV)) {
  19516. zval *variable_ptr = EX_VAR(opline->op2.var);
  19517. if (EXPECTED(variable_ptr != value)) {
  19518. zend_reference *ref;
  19519. ref = Z_REF_P(value);
  19520. GC_ADDREF(ref);
  19521. i_zval_ptr_dtor(variable_ptr);
  19522. ZVAL_REF(variable_ptr, ref);
  19523. }
  19524. } else {
  19525. Z_ADDREF_P(value);
  19526. ZVAL_REF(EX_VAR(opline->op2.var), Z_REF_P(value));
  19527. }
  19528. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19529. }
  19530. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19531. {
  19532. USE_OPLINE
  19533. zval *value;
  19534. zend_reference *ref = NULL;
  19535. bool ret;
  19536. SAVE_OPLINE();
  19537. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19538. if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
  19539. if (IS_VAR == IS_VAR) {
  19540. ref = Z_REF_P(value);
  19541. }
  19542. value = Z_REFVAL_P(value);
  19543. }
  19544. ret = i_zend_is_true(value);
  19545. if (UNEXPECTED(EG(exception))) {
  19546. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19547. ZVAL_UNDEF(EX_VAR(opline->result.var));
  19548. HANDLE_EXCEPTION();
  19549. }
  19550. if (ret) {
  19551. zval *result = EX_VAR(opline->result.var);
  19552. ZVAL_COPY_VALUE(result, value);
  19553. if (IS_VAR == IS_CONST) {
  19554. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  19555. } else if (IS_VAR == IS_CV) {
  19556. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  19557. } else if (IS_VAR == IS_VAR && ref) {
  19558. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  19559. efree_size(ref, sizeof(zend_reference));
  19560. } else if (Z_OPT_REFCOUNTED_P(result)) {
  19561. Z_ADDREF_P(result);
  19562. }
  19563. }
  19564. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  19565. }
  19566. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19567. ZEND_VM_NEXT_OPCODE();
  19568. }
  19569. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19570. {
  19571. USE_OPLINE
  19572. zval *value;
  19573. zend_reference *ref = NULL;
  19574. SAVE_OPLINE();
  19575. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19576. if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  19577. if (IS_VAR & IS_VAR) {
  19578. ref = Z_REF_P(value);
  19579. }
  19580. value = Z_REFVAL_P(value);
  19581. }
  19582. if (Z_TYPE_P(value) > IS_NULL) {
  19583. zval *result = EX_VAR(opline->result.var);
  19584. ZVAL_COPY_VALUE(result, value);
  19585. if (IS_VAR == IS_CONST) {
  19586. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  19587. } else if (IS_VAR == IS_CV) {
  19588. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  19589. } else if ((IS_VAR & IS_VAR) && ref) {
  19590. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  19591. efree_size(ref, sizeof(zend_reference));
  19592. } else if (Z_OPT_REFCOUNTED_P(result)) {
  19593. Z_ADDREF_P(result);
  19594. }
  19595. }
  19596. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  19597. }
  19598. if ((IS_VAR & IS_VAR) && ref) {
  19599. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  19600. efree_size(ref, sizeof(zend_reference));
  19601. }
  19602. }
  19603. ZEND_VM_NEXT_OPCODE();
  19604. }
  19605. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19606. {
  19607. USE_OPLINE
  19608. zval *val, *result;
  19609. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19610. if (Z_TYPE_P(val) > IS_NULL) {
  19611. do {
  19612. if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
  19613. val = Z_REFVAL_P(val);
  19614. if (Z_TYPE_P(val) <= IS_NULL) {
  19615. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19616. break;
  19617. }
  19618. }
  19619. ZEND_VM_NEXT_OPCODE();
  19620. } while (0);
  19621. }
  19622. result = EX_VAR(opline->result.var);
  19623. if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
  19624. ZVAL_NULL(result);
  19625. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
  19626. SAVE_OPLINE();
  19627. ZVAL_UNDEFINED_OP1();
  19628. if (UNEXPECTED(EG(exception) != NULL)) {
  19629. HANDLE_EXCEPTION();
  19630. }
  19631. }
  19632. } else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
  19633. ZVAL_FALSE(result);
  19634. } else {
  19635. ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
  19636. ZVAL_TRUE(result);
  19637. }
  19638. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  19639. }
  19640. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19641. {
  19642. USE_OPLINE
  19643. zval *value;
  19644. zval *result = EX_VAR(opline->result.var);
  19645. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19646. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  19647. SAVE_OPLINE();
  19648. ZVAL_UNDEFINED_OP1();
  19649. ZVAL_NULL(result);
  19650. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19651. }
  19652. if (IS_VAR == IS_CV) {
  19653. ZVAL_COPY_DEREF(result, value);
  19654. } else if (IS_VAR == IS_VAR) {
  19655. if (UNEXPECTED(Z_ISREF_P(value))) {
  19656. ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
  19657. if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
  19658. efree_size(Z_REF_P(value), sizeof(zend_reference));
  19659. } else if (Z_OPT_REFCOUNTED_P(result)) {
  19660. Z_ADDREF_P(result);
  19661. }
  19662. } else {
  19663. ZVAL_COPY_VALUE(result, value);
  19664. }
  19665. } else {
  19666. ZVAL_COPY_VALUE(result, value);
  19667. if (IS_VAR == IS_CONST) {
  19668. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
  19669. Z_ADDREF_P(result);
  19670. }
  19671. }
  19672. }
  19673. ZEND_VM_NEXT_OPCODE();
  19674. }
  19675. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19676. {
  19677. USE_OPLINE
  19678. zval *varptr, *arg;
  19679. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19680. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  19681. if (IS_VAR == IS_CV) {
  19682. ZVAL_COPY(arg, varptr);
  19683. } else /* if (IS_VAR == IS_VAR) */ {
  19684. ZVAL_COPY_VALUE(arg, varptr);
  19685. }
  19686. ZEND_VM_NEXT_OPCODE();
  19687. }
  19688. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19689. {
  19690. USE_OPLINE
  19691. zval *op1, *op2;
  19692. bool result;
  19693. SAVE_OPLINE();
  19694. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  19695. op2 = RT_CONSTANT(opline, opline->op2);
  19696. result = fast_is_identical_function(op1, op2);
  19697. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19698. ZEND_VM_SMART_BRANCH(result, 1);
  19699. }
  19700. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19701. {
  19702. USE_OPLINE
  19703. zval *op1, *op2;
  19704. bool result;
  19705. SAVE_OPLINE();
  19706. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  19707. op2 = RT_CONSTANT(opline, opline->op2);
  19708. result = fast_is_identical_function(op1, op2);
  19709. ZEND_VM_SMART_BRANCH(result, 1);
  19710. }
  19711. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19712. {
  19713. USE_OPLINE
  19714. zval *op1, *op2;
  19715. bool result;
  19716. SAVE_OPLINE();
  19717. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  19718. op2 = RT_CONSTANT(opline, opline->op2);
  19719. result = fast_is_not_identical_function(op1, op2);
  19720. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19721. ZEND_VM_SMART_BRANCH(result, 1);
  19722. }
  19723. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19724. {
  19725. USE_OPLINE
  19726. zval *object;
  19727. zval *property;
  19728. zval *value;
  19729. zval *zptr;
  19730. void **cache_slot;
  19731. zend_property_info *prop_info;
  19732. zend_object *zobj;
  19733. zend_string *name, *tmp_name;
  19734. SAVE_OPLINE();
  19735. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19736. property = RT_CONSTANT(opline, opline->op2);
  19737. do {
  19738. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  19739. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  19740. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  19741. object = Z_REFVAL_P(object);
  19742. goto assign_op_object;
  19743. }
  19744. if (IS_VAR == IS_CV
  19745. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  19746. ZVAL_UNDEFINED_OP1();
  19747. }
  19748. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  19749. break;
  19750. }
  19751. assign_op_object:
  19752. /* here we are sure we are dealing with an object */
  19753. zobj = Z_OBJ_P(object);
  19754. if (IS_CONST == IS_CONST) {
  19755. name = Z_STR_P(property);
  19756. } else {
  19757. name = zval_try_get_tmp_string(property, &tmp_name);
  19758. if (UNEXPECTED(!name)) {
  19759. UNDEF_RESULT();
  19760. break;
  19761. }
  19762. }
  19763. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  19764. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  19765. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  19766. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19767. ZVAL_NULL(EX_VAR(opline->result.var));
  19768. }
  19769. } else {
  19770. zval *orig_zptr = zptr;
  19771. zend_reference *ref;
  19772. do {
  19773. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  19774. ref = Z_REF_P(zptr);
  19775. zptr = Z_REFVAL_P(zptr);
  19776. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  19777. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  19778. break;
  19779. }
  19780. }
  19781. if (IS_CONST == IS_CONST) {
  19782. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  19783. } else {
  19784. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  19785. }
  19786. if (UNEXPECTED(prop_info)) {
  19787. /* special case for typed properties */
  19788. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  19789. } else {
  19790. zend_binary_op(zptr, zptr, value OPLINE_CC);
  19791. }
  19792. } while (0);
  19793. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19794. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  19795. }
  19796. }
  19797. } else {
  19798. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  19799. }
  19800. if (IS_CONST != IS_CONST) {
  19801. zend_tmp_string_release(tmp_name);
  19802. }
  19803. } while (0);
  19804. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  19805. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19806. /* assign_obj has two opcodes! */
  19807. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  19808. }
  19809. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  19810. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19811. {
  19812. USE_OPLINE
  19813. zval *var_ptr;
  19814. zval *value, *container, *dim;
  19815. HashTable *ht;
  19816. SAVE_OPLINE();
  19817. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19818. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  19819. assign_dim_op_array:
  19820. SEPARATE_ARRAY(container);
  19821. ht = Z_ARRVAL_P(container);
  19822. assign_dim_op_new_array:
  19823. dim = RT_CONSTANT(opline, opline->op2);
  19824. if (IS_CONST == IS_UNUSED) {
  19825. var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
  19826. if (UNEXPECTED(!var_ptr)) {
  19827. zend_cannot_add_element();
  19828. goto assign_dim_op_ret_null;
  19829. }
  19830. } else {
  19831. if (IS_CONST == IS_CONST) {
  19832. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
  19833. } else {
  19834. var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
  19835. }
  19836. if (UNEXPECTED(!var_ptr)) {
  19837. goto assign_dim_op_ret_null;
  19838. }
  19839. }
  19840. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  19841. do {
  19842. if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
  19843. zend_reference *ref = Z_REF_P(var_ptr);
  19844. var_ptr = Z_REFVAL_P(var_ptr);
  19845. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  19846. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  19847. break;
  19848. }
  19849. }
  19850. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  19851. } while (0);
  19852. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19853. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  19854. }
  19855. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  19856. } else {
  19857. if (EXPECTED(Z_ISREF_P(container))) {
  19858. container = Z_REFVAL_P(container);
  19859. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  19860. goto assign_dim_op_array;
  19861. }
  19862. }
  19863. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  19864. zend_object *obj = Z_OBJ_P(container);
  19865. dim = RT_CONSTANT(opline, opline->op2);
  19866. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  19867. dim++;
  19868. }
  19869. zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
  19870. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  19871. zend_uchar old_type;
  19872. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  19873. ZVAL_UNDEFINED_OP1();
  19874. }
  19875. ht = zend_new_array(8);
  19876. old_type = Z_TYPE_P(container);
  19877. ZVAL_ARR(container, ht);
  19878. if (UNEXPECTED(old_type == IS_FALSE)) {
  19879. GC_ADDREF(ht);
  19880. zend_false_to_array_deprecated();
  19881. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  19882. zend_array_destroy(ht);
  19883. goto assign_dim_op_ret_null;
  19884. }
  19885. }
  19886. goto assign_dim_op_new_array;
  19887. } else {
  19888. dim = RT_CONSTANT(opline, opline->op2);
  19889. zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  19890. assign_dim_op_ret_null:
  19891. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  19892. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19893. ZVAL_NULL(EX_VAR(opline->result.var));
  19894. }
  19895. }
  19896. }
  19897. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19898. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  19899. }
  19900. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19901. {
  19902. USE_OPLINE
  19903. zval *var_ptr;
  19904. zval *value;
  19905. SAVE_OPLINE();
  19906. value = RT_CONSTANT(opline, opline->op2);
  19907. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19908. do {
  19909. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  19910. zend_reference *ref = Z_REF_P(var_ptr);
  19911. var_ptr = Z_REFVAL_P(var_ptr);
  19912. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  19913. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  19914. break;
  19915. }
  19916. }
  19917. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  19918. } while (0);
  19919. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19920. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  19921. }
  19922. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19923. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19924. }
  19925. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19926. {
  19927. USE_OPLINE
  19928. zval *object;
  19929. zval *property;
  19930. zval *zptr;
  19931. void **cache_slot;
  19932. zend_property_info *prop_info;
  19933. zend_object *zobj;
  19934. zend_string *name, *tmp_name;
  19935. SAVE_OPLINE();
  19936. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19937. property = RT_CONSTANT(opline, opline->op2);
  19938. do {
  19939. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  19940. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  19941. object = Z_REFVAL_P(object);
  19942. goto pre_incdec_object;
  19943. }
  19944. if (IS_VAR == IS_CV
  19945. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  19946. ZVAL_UNDEFINED_OP1();
  19947. }
  19948. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  19949. break;
  19950. }
  19951. pre_incdec_object:
  19952. /* here we are sure we are dealing with an object */
  19953. zobj = Z_OBJ_P(object);
  19954. if (IS_CONST == IS_CONST) {
  19955. name = Z_STR_P(property);
  19956. } else {
  19957. name = zval_try_get_tmp_string(property, &tmp_name);
  19958. if (UNEXPECTED(!name)) {
  19959. UNDEF_RESULT();
  19960. break;
  19961. }
  19962. }
  19963. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  19964. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  19965. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  19966. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19967. ZVAL_NULL(EX_VAR(opline->result.var));
  19968. }
  19969. } else {
  19970. if (IS_CONST == IS_CONST) {
  19971. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  19972. } else {
  19973. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  19974. }
  19975. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  19976. }
  19977. } else {
  19978. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  19979. }
  19980. if (IS_CONST != IS_CONST) {
  19981. zend_tmp_string_release(tmp_name);
  19982. }
  19983. } while (0);
  19984. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19985. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19986. }
  19987. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19988. {
  19989. USE_OPLINE
  19990. zval *object;
  19991. zval *property;
  19992. zval *zptr;
  19993. void **cache_slot;
  19994. zend_property_info *prop_info;
  19995. zend_object *zobj;
  19996. zend_string *name, *tmp_name;
  19997. SAVE_OPLINE();
  19998. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19999. property = RT_CONSTANT(opline, opline->op2);
  20000. do {
  20001. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  20002. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  20003. object = Z_REFVAL_P(object);
  20004. goto post_incdec_object;
  20005. }
  20006. if (IS_VAR == IS_CV
  20007. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  20008. ZVAL_UNDEFINED_OP1();
  20009. }
  20010. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  20011. break;
  20012. }
  20013. post_incdec_object:
  20014. /* here we are sure we are dealing with an object */
  20015. zobj = Z_OBJ_P(object);
  20016. if (IS_CONST == IS_CONST) {
  20017. name = Z_STR_P(property);
  20018. } else {
  20019. name = zval_try_get_tmp_string(property, &tmp_name);
  20020. if (UNEXPECTED(!name)) {
  20021. ZVAL_UNDEF(EX_VAR(opline->result.var));
  20022. break;
  20023. }
  20024. }
  20025. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  20026. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  20027. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  20028. ZVAL_NULL(EX_VAR(opline->result.var));
  20029. } else {
  20030. if (IS_CONST == IS_CONST) {
  20031. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  20032. } else {
  20033. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  20034. }
  20035. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  20036. }
  20037. } else {
  20038. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  20039. }
  20040. if (IS_CONST != IS_CONST) {
  20041. zend_tmp_string_release(tmp_name);
  20042. }
  20043. } while (0);
  20044. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  20045. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20046. }
  20047. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20048. {
  20049. USE_OPLINE
  20050. zval *container;
  20051. SAVE_OPLINE();
  20052. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20053. zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  20054. if (IS_VAR == IS_VAR) {
  20055. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  20056. }
  20057. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20058. }
  20059. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20060. {
  20061. USE_OPLINE
  20062. zval *container;
  20063. SAVE_OPLINE();
  20064. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20065. zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  20066. if (IS_VAR == IS_VAR) {
  20067. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  20068. }
  20069. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20070. }
  20071. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20072. {
  20073. #if 0
  20074. USE_OPLINE
  20075. #endif
  20076. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  20077. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  20078. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20079. }
  20080. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20081. } else {
  20082. if (IS_CONST == IS_UNUSED) {
  20083. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20084. }
  20085. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20086. }
  20087. }
  20088. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20089. {
  20090. USE_OPLINE
  20091. zval *container;
  20092. SAVE_OPLINE();
  20093. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20094. zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  20095. if (IS_VAR == IS_VAR) {
  20096. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  20097. }
  20098. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20099. }
  20100. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20101. {
  20102. USE_OPLINE
  20103. zval *property, *container, *result;
  20104. SAVE_OPLINE();
  20105. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20106. property = RT_CONSTANT(opline, opline->op2);
  20107. result = EX_VAR(opline->result.var);
  20108. zend_fetch_property_address(
  20109. result, container, IS_VAR, property, IS_CONST,
  20110. ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  20111. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
  20112. if (IS_VAR == IS_VAR) {
  20113. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  20114. }
  20115. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20116. }
  20117. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20118. {
  20119. USE_OPLINE
  20120. zval *property, *container, *result;
  20121. SAVE_OPLINE();
  20122. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20123. property = RT_CONSTANT(opline, opline->op2);
  20124. result = EX_VAR(opline->result.var);
  20125. zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  20126. if (IS_VAR == IS_VAR) {
  20127. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  20128. }
  20129. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20130. }
  20131. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20132. {
  20133. #if 0
  20134. USE_OPLINE
  20135. #endif
  20136. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  20137. /* Behave like FETCH_OBJ_W */
  20138. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  20139. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20140. }
  20141. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20142. } else {
  20143. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20144. }
  20145. }
  20146. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20147. {
  20148. USE_OPLINE
  20149. zval *container, *property, *result;
  20150. SAVE_OPLINE();
  20151. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20152. property = RT_CONSTANT(opline, opline->op2);
  20153. result = EX_VAR(opline->result.var);
  20154. zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  20155. if (IS_VAR == IS_VAR) {
  20156. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  20157. }
  20158. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20159. }
  20160. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20161. {
  20162. USE_OPLINE
  20163. zval *container, *dim;
  20164. SAVE_OPLINE();
  20165. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20166. dim = RT_CONSTANT(opline, opline->op2);
  20167. if (IS_VAR == IS_VAR
  20168. && Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
  20169. && UNEXPECTED(!Z_ISREF_P(container))
  20170. ) {
  20171. zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
  20172. zend_fetch_dimension_address_LIST_r(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  20173. } else {
  20174. zend_fetch_dimension_address_W(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  20175. }
  20176. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20177. }
  20178. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20179. {
  20180. USE_OPLINE
  20181. zval *object, *value, tmp;
  20182. zend_object *zobj;
  20183. zend_string *name, *tmp_name;
  20184. SAVE_OPLINE();
  20185. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20186. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  20187. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  20188. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  20189. object = Z_REFVAL_P(object);
  20190. goto assign_object;
  20191. }
  20192. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  20193. value = &EG(uninitialized_zval);
  20194. goto free_and_exit_assign_obj;
  20195. }
  20196. assign_object:
  20197. zobj = Z_OBJ_P(object);
  20198. if (IS_CONST == IS_CONST) {
  20199. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  20200. void **cache_slot = CACHE_ADDR(opline->extended_value);
  20201. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  20202. zend_object *zobj = Z_OBJ_P(object);
  20203. zval *property_val;
  20204. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  20205. property_val = OBJ_PROP(zobj, prop_offset);
  20206. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  20207. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  20208. if (UNEXPECTED(prop_info != NULL)) {
  20209. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  20210. goto free_and_exit_assign_obj;
  20211. } else {
  20212. fast_assign_obj:
  20213. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  20214. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20215. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20216. }
  20217. goto exit_assign_obj;
  20218. }
  20219. }
  20220. } else {
  20221. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  20222. if (EXPECTED(zobj->properties != NULL)) {
  20223. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  20224. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  20225. GC_DELREF(zobj->properties);
  20226. }
  20227. zobj->properties = zend_array_dup(zobj->properties);
  20228. }
  20229. property_val = zend_hash_find_known_hash(zobj->properties, name);
  20230. if (property_val) {
  20231. goto fast_assign_obj;
  20232. }
  20233. }
  20234. if (!zobj->ce->__set) {
  20235. if (EXPECTED(zobj->properties == NULL)) {
  20236. rebuild_object_properties(zobj);
  20237. }
  20238. if (IS_CONST == IS_CONST) {
  20239. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  20240. Z_ADDREF_P(value);
  20241. }
  20242. } else if (IS_CONST != IS_TMP_VAR) {
  20243. if (Z_ISREF_P(value)) {
  20244. if (IS_CONST == IS_VAR) {
  20245. zend_reference *ref = Z_REF_P(value);
  20246. if (GC_DELREF(ref) == 0) {
  20247. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  20248. efree_size(ref, sizeof(zend_reference));
  20249. value = &tmp;
  20250. } else {
  20251. value = Z_REFVAL_P(value);
  20252. Z_TRY_ADDREF_P(value);
  20253. }
  20254. } else {
  20255. value = Z_REFVAL_P(value);
  20256. Z_TRY_ADDREF_P(value);
  20257. }
  20258. } else if (IS_CONST == IS_CV) {
  20259. Z_TRY_ADDREF_P(value);
  20260. }
  20261. }
  20262. zend_hash_add_new(zobj->properties, name, value);
  20263. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20264. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20265. }
  20266. goto exit_assign_obj;
  20267. }
  20268. }
  20269. }
  20270. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  20271. } else {
  20272. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  20273. if (UNEXPECTED(!name)) {
  20274. UNDEF_RESULT();
  20275. goto exit_assign_obj;
  20276. }
  20277. }
  20278. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  20279. ZVAL_DEREF(value);
  20280. }
  20281. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  20282. if (IS_CONST != IS_CONST) {
  20283. zend_tmp_string_release(tmp_name);
  20284. }
  20285. free_and_exit_assign_obj:
  20286. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20287. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  20288. }
  20289. exit_assign_obj:
  20290. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  20291. /* assign_obj has two opcodes! */
  20292. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  20293. }
  20294. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  20295. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20296. {
  20297. USE_OPLINE
  20298. zval *object, *value, tmp;
  20299. zend_object *zobj;
  20300. zend_string *name, *tmp_name;
  20301. SAVE_OPLINE();
  20302. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20303. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  20304. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  20305. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  20306. object = Z_REFVAL_P(object);
  20307. goto assign_object;
  20308. }
  20309. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  20310. value = &EG(uninitialized_zval);
  20311. goto free_and_exit_assign_obj;
  20312. }
  20313. assign_object:
  20314. zobj = Z_OBJ_P(object);
  20315. if (IS_CONST == IS_CONST) {
  20316. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  20317. void **cache_slot = CACHE_ADDR(opline->extended_value);
  20318. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  20319. zend_object *zobj = Z_OBJ_P(object);
  20320. zval *property_val;
  20321. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  20322. property_val = OBJ_PROP(zobj, prop_offset);
  20323. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  20324. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  20325. if (UNEXPECTED(prop_info != NULL)) {
  20326. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  20327. goto free_and_exit_assign_obj;
  20328. } else {
  20329. fast_assign_obj:
  20330. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  20331. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20332. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20333. }
  20334. goto exit_assign_obj;
  20335. }
  20336. }
  20337. } else {
  20338. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  20339. if (EXPECTED(zobj->properties != NULL)) {
  20340. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  20341. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  20342. GC_DELREF(zobj->properties);
  20343. }
  20344. zobj->properties = zend_array_dup(zobj->properties);
  20345. }
  20346. property_val = zend_hash_find_known_hash(zobj->properties, name);
  20347. if (property_val) {
  20348. goto fast_assign_obj;
  20349. }
  20350. }
  20351. if (!zobj->ce->__set) {
  20352. if (EXPECTED(zobj->properties == NULL)) {
  20353. rebuild_object_properties(zobj);
  20354. }
  20355. if (IS_TMP_VAR == IS_CONST) {
  20356. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  20357. Z_ADDREF_P(value);
  20358. }
  20359. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  20360. if (Z_ISREF_P(value)) {
  20361. if (IS_TMP_VAR == IS_VAR) {
  20362. zend_reference *ref = Z_REF_P(value);
  20363. if (GC_DELREF(ref) == 0) {
  20364. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  20365. efree_size(ref, sizeof(zend_reference));
  20366. value = &tmp;
  20367. } else {
  20368. value = Z_REFVAL_P(value);
  20369. Z_TRY_ADDREF_P(value);
  20370. }
  20371. } else {
  20372. value = Z_REFVAL_P(value);
  20373. Z_TRY_ADDREF_P(value);
  20374. }
  20375. } else if (IS_TMP_VAR == IS_CV) {
  20376. Z_TRY_ADDREF_P(value);
  20377. }
  20378. }
  20379. zend_hash_add_new(zobj->properties, name, value);
  20380. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20381. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20382. }
  20383. goto exit_assign_obj;
  20384. }
  20385. }
  20386. }
  20387. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  20388. } else {
  20389. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  20390. if (UNEXPECTED(!name)) {
  20391. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20392. UNDEF_RESULT();
  20393. goto exit_assign_obj;
  20394. }
  20395. }
  20396. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  20397. ZVAL_DEREF(value);
  20398. }
  20399. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  20400. if (IS_CONST != IS_CONST) {
  20401. zend_tmp_string_release(tmp_name);
  20402. }
  20403. free_and_exit_assign_obj:
  20404. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20405. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  20406. }
  20407. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20408. exit_assign_obj:
  20409. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  20410. /* assign_obj has two opcodes! */
  20411. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  20412. }
  20413. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  20414. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20415. {
  20416. USE_OPLINE
  20417. zval *object, *value, tmp;
  20418. zend_object *zobj;
  20419. zend_string *name, *tmp_name;
  20420. SAVE_OPLINE();
  20421. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20422. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  20423. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  20424. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  20425. object = Z_REFVAL_P(object);
  20426. goto assign_object;
  20427. }
  20428. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  20429. value = &EG(uninitialized_zval);
  20430. goto free_and_exit_assign_obj;
  20431. }
  20432. assign_object:
  20433. zobj = Z_OBJ_P(object);
  20434. if (IS_CONST == IS_CONST) {
  20435. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  20436. void **cache_slot = CACHE_ADDR(opline->extended_value);
  20437. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  20438. zend_object *zobj = Z_OBJ_P(object);
  20439. zval *property_val;
  20440. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  20441. property_val = OBJ_PROP(zobj, prop_offset);
  20442. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  20443. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  20444. if (UNEXPECTED(prop_info != NULL)) {
  20445. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  20446. goto free_and_exit_assign_obj;
  20447. } else {
  20448. fast_assign_obj:
  20449. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  20450. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20451. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20452. }
  20453. goto exit_assign_obj;
  20454. }
  20455. }
  20456. } else {
  20457. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  20458. if (EXPECTED(zobj->properties != NULL)) {
  20459. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  20460. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  20461. GC_DELREF(zobj->properties);
  20462. }
  20463. zobj->properties = zend_array_dup(zobj->properties);
  20464. }
  20465. property_val = zend_hash_find_known_hash(zobj->properties, name);
  20466. if (property_val) {
  20467. goto fast_assign_obj;
  20468. }
  20469. }
  20470. if (!zobj->ce->__set) {
  20471. if (EXPECTED(zobj->properties == NULL)) {
  20472. rebuild_object_properties(zobj);
  20473. }
  20474. if (IS_VAR == IS_CONST) {
  20475. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  20476. Z_ADDREF_P(value);
  20477. }
  20478. } else if (IS_VAR != IS_TMP_VAR) {
  20479. if (Z_ISREF_P(value)) {
  20480. if (IS_VAR == IS_VAR) {
  20481. zend_reference *ref = Z_REF_P(value);
  20482. if (GC_DELREF(ref) == 0) {
  20483. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  20484. efree_size(ref, sizeof(zend_reference));
  20485. value = &tmp;
  20486. } else {
  20487. value = Z_REFVAL_P(value);
  20488. Z_TRY_ADDREF_P(value);
  20489. }
  20490. } else {
  20491. value = Z_REFVAL_P(value);
  20492. Z_TRY_ADDREF_P(value);
  20493. }
  20494. } else if (IS_VAR == IS_CV) {
  20495. Z_TRY_ADDREF_P(value);
  20496. }
  20497. }
  20498. zend_hash_add_new(zobj->properties, name, value);
  20499. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20500. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20501. }
  20502. goto exit_assign_obj;
  20503. }
  20504. }
  20505. }
  20506. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  20507. } else {
  20508. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  20509. if (UNEXPECTED(!name)) {
  20510. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20511. UNDEF_RESULT();
  20512. goto exit_assign_obj;
  20513. }
  20514. }
  20515. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  20516. ZVAL_DEREF(value);
  20517. }
  20518. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  20519. if (IS_CONST != IS_CONST) {
  20520. zend_tmp_string_release(tmp_name);
  20521. }
  20522. free_and_exit_assign_obj:
  20523. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20524. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  20525. }
  20526. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20527. exit_assign_obj:
  20528. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  20529. /* assign_obj has two opcodes! */
  20530. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  20531. }
  20532. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  20533. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20534. {
  20535. USE_OPLINE
  20536. zval *object, *value, tmp;
  20537. zend_object *zobj;
  20538. zend_string *name, *tmp_name;
  20539. SAVE_OPLINE();
  20540. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20541. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  20542. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  20543. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  20544. object = Z_REFVAL_P(object);
  20545. goto assign_object;
  20546. }
  20547. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  20548. value = &EG(uninitialized_zval);
  20549. goto free_and_exit_assign_obj;
  20550. }
  20551. assign_object:
  20552. zobj = Z_OBJ_P(object);
  20553. if (IS_CONST == IS_CONST) {
  20554. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  20555. void **cache_slot = CACHE_ADDR(opline->extended_value);
  20556. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  20557. zend_object *zobj = Z_OBJ_P(object);
  20558. zval *property_val;
  20559. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  20560. property_val = OBJ_PROP(zobj, prop_offset);
  20561. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  20562. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  20563. if (UNEXPECTED(prop_info != NULL)) {
  20564. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  20565. goto free_and_exit_assign_obj;
  20566. } else {
  20567. fast_assign_obj:
  20568. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  20569. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20570. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20571. }
  20572. goto exit_assign_obj;
  20573. }
  20574. }
  20575. } else {
  20576. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  20577. if (EXPECTED(zobj->properties != NULL)) {
  20578. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  20579. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  20580. GC_DELREF(zobj->properties);
  20581. }
  20582. zobj->properties = zend_array_dup(zobj->properties);
  20583. }
  20584. property_val = zend_hash_find_known_hash(zobj->properties, name);
  20585. if (property_val) {
  20586. goto fast_assign_obj;
  20587. }
  20588. }
  20589. if (!zobj->ce->__set) {
  20590. if (EXPECTED(zobj->properties == NULL)) {
  20591. rebuild_object_properties(zobj);
  20592. }
  20593. if (IS_CV == IS_CONST) {
  20594. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  20595. Z_ADDREF_P(value);
  20596. }
  20597. } else if (IS_CV != IS_TMP_VAR) {
  20598. if (Z_ISREF_P(value)) {
  20599. if (IS_CV == IS_VAR) {
  20600. zend_reference *ref = Z_REF_P(value);
  20601. if (GC_DELREF(ref) == 0) {
  20602. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  20603. efree_size(ref, sizeof(zend_reference));
  20604. value = &tmp;
  20605. } else {
  20606. value = Z_REFVAL_P(value);
  20607. Z_TRY_ADDREF_P(value);
  20608. }
  20609. } else {
  20610. value = Z_REFVAL_P(value);
  20611. Z_TRY_ADDREF_P(value);
  20612. }
  20613. } else if (IS_CV == IS_CV) {
  20614. Z_TRY_ADDREF_P(value);
  20615. }
  20616. }
  20617. zend_hash_add_new(zobj->properties, name, value);
  20618. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20619. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20620. }
  20621. goto exit_assign_obj;
  20622. }
  20623. }
  20624. }
  20625. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  20626. } else {
  20627. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  20628. if (UNEXPECTED(!name)) {
  20629. UNDEF_RESULT();
  20630. goto exit_assign_obj;
  20631. }
  20632. }
  20633. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  20634. ZVAL_DEREF(value);
  20635. }
  20636. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  20637. if (IS_CONST != IS_CONST) {
  20638. zend_tmp_string_release(tmp_name);
  20639. }
  20640. free_and_exit_assign_obj:
  20641. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20642. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  20643. }
  20644. exit_assign_obj:
  20645. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  20646. /* assign_obj has two opcodes! */
  20647. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  20648. }
  20649. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  20650. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20651. {
  20652. USE_OPLINE
  20653. zval *object_ptr, *orig_object_ptr;
  20654. zval *value;
  20655. zval *variable_ptr;
  20656. zval *dim;
  20657. SAVE_OPLINE();
  20658. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20659. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  20660. try_assign_dim_array:
  20661. SEPARATE_ARRAY(object_ptr);
  20662. if (IS_CONST == IS_UNUSED) {
  20663. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  20664. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  20665. HashTable *ht = Z_ARRVAL_P(object_ptr);
  20666. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  20667. GC_ADDREF(ht);
  20668. }
  20669. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  20670. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  20671. zend_array_destroy(ht);
  20672. goto assign_dim_error;
  20673. }
  20674. }
  20675. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  20676. ZVAL_DEREF(value);
  20677. }
  20678. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  20679. if (UNEXPECTED(value == NULL)) {
  20680. zend_cannot_add_element();
  20681. goto assign_dim_error;
  20682. } else if (IS_CONST == IS_CV) {
  20683. if (Z_REFCOUNTED_P(value)) {
  20684. Z_ADDREF_P(value);
  20685. }
  20686. } else if (IS_CONST == IS_VAR) {
  20687. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  20688. if (Z_ISREF_P(free_op_data)) {
  20689. if (Z_REFCOUNTED_P(value)) {
  20690. Z_ADDREF_P(value);
  20691. }
  20692. zval_ptr_dtor_nogc(free_op_data);
  20693. }
  20694. } else if (IS_CONST == IS_CONST) {
  20695. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  20696. Z_ADDREF_P(value);
  20697. }
  20698. }
  20699. } else {
  20700. dim = RT_CONSTANT(opline, opline->op2);
  20701. if (IS_CONST == IS_CONST) {
  20702. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20703. } else {
  20704. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20705. }
  20706. if (UNEXPECTED(variable_ptr == NULL)) {
  20707. goto assign_dim_error;
  20708. }
  20709. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  20710. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  20711. }
  20712. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20713. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20714. }
  20715. } else {
  20716. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  20717. object_ptr = Z_REFVAL_P(object_ptr);
  20718. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  20719. goto try_assign_dim_array;
  20720. }
  20721. }
  20722. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  20723. zend_object *obj = Z_OBJ_P(object_ptr);
  20724. GC_ADDREF(obj);
  20725. dim = RT_CONSTANT(opline, opline->op2);
  20726. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  20727. dim = ZVAL_UNDEFINED_OP2();
  20728. } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  20729. dim++;
  20730. }
  20731. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  20732. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  20733. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  20734. } else if (IS_CONST & (IS_CV|IS_VAR)) {
  20735. ZVAL_DEREF(value);
  20736. }
  20737. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  20738. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  20739. zend_objects_store_del(obj);
  20740. }
  20741. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  20742. if (IS_CONST == IS_UNUSED) {
  20743. zend_use_new_element_for_string();
  20744. UNDEF_RESULT();
  20745. } else {
  20746. dim = RT_CONSTANT(opline, opline->op2);
  20747. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  20748. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  20749. }
  20750. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  20751. if (Z_ISREF_P(orig_object_ptr)
  20752. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  20753. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  20754. dim = RT_CONSTANT(opline, opline->op2);
  20755. UNDEF_RESULT();
  20756. } else {
  20757. HashTable *ht = zend_new_array(8);
  20758. zend_uchar old_type = Z_TYPE_P(object_ptr);
  20759. ZVAL_ARR(object_ptr, ht);
  20760. if (UNEXPECTED(old_type == IS_FALSE)) {
  20761. GC_ADDREF(ht);
  20762. zend_false_to_array_deprecated();
  20763. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  20764. zend_array_destroy(ht);
  20765. goto assign_dim_error;
  20766. }
  20767. }
  20768. goto try_assign_dim_array;
  20769. }
  20770. } else {
  20771. zend_use_scalar_as_array();
  20772. dim = RT_CONSTANT(opline, opline->op2);
  20773. assign_dim_error:
  20774. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20775. ZVAL_NULL(EX_VAR(opline->result.var));
  20776. }
  20777. }
  20778. }
  20779. if (IS_CONST != IS_UNUSED) {
  20780. }
  20781. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  20782. /* assign_dim has two opcodes! */
  20783. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  20784. }
  20785. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20786. {
  20787. USE_OPLINE
  20788. zval *object_ptr, *orig_object_ptr;
  20789. zval *value;
  20790. zval *variable_ptr;
  20791. zval *dim;
  20792. SAVE_OPLINE();
  20793. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20794. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  20795. try_assign_dim_array:
  20796. SEPARATE_ARRAY(object_ptr);
  20797. if (IS_CONST == IS_UNUSED) {
  20798. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  20799. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  20800. HashTable *ht = Z_ARRVAL_P(object_ptr);
  20801. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  20802. GC_ADDREF(ht);
  20803. }
  20804. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  20805. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  20806. zend_array_destroy(ht);
  20807. goto assign_dim_error;
  20808. }
  20809. }
  20810. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  20811. ZVAL_DEREF(value);
  20812. }
  20813. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  20814. if (UNEXPECTED(value == NULL)) {
  20815. zend_cannot_add_element();
  20816. goto assign_dim_error;
  20817. } else if (IS_TMP_VAR == IS_CV) {
  20818. if (Z_REFCOUNTED_P(value)) {
  20819. Z_ADDREF_P(value);
  20820. }
  20821. } else if (IS_TMP_VAR == IS_VAR) {
  20822. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  20823. if (Z_ISREF_P(free_op_data)) {
  20824. if (Z_REFCOUNTED_P(value)) {
  20825. Z_ADDREF_P(value);
  20826. }
  20827. zval_ptr_dtor_nogc(free_op_data);
  20828. }
  20829. } else if (IS_TMP_VAR == IS_CONST) {
  20830. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  20831. Z_ADDREF_P(value);
  20832. }
  20833. }
  20834. } else {
  20835. dim = RT_CONSTANT(opline, opline->op2);
  20836. if (IS_CONST == IS_CONST) {
  20837. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20838. } else {
  20839. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20840. }
  20841. if (UNEXPECTED(variable_ptr == NULL)) {
  20842. goto assign_dim_error;
  20843. }
  20844. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  20845. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  20846. }
  20847. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20848. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20849. }
  20850. } else {
  20851. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  20852. object_ptr = Z_REFVAL_P(object_ptr);
  20853. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  20854. goto try_assign_dim_array;
  20855. }
  20856. }
  20857. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  20858. zend_object *obj = Z_OBJ_P(object_ptr);
  20859. GC_ADDREF(obj);
  20860. dim = RT_CONSTANT(opline, opline->op2);
  20861. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  20862. dim = ZVAL_UNDEFINED_OP2();
  20863. } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  20864. dim++;
  20865. }
  20866. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  20867. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  20868. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  20869. } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
  20870. ZVAL_DEREF(value);
  20871. }
  20872. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  20873. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20874. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  20875. zend_objects_store_del(obj);
  20876. }
  20877. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  20878. if (IS_CONST == IS_UNUSED) {
  20879. zend_use_new_element_for_string();
  20880. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20881. UNDEF_RESULT();
  20882. } else {
  20883. dim = RT_CONSTANT(opline, opline->op2);
  20884. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  20885. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  20886. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20887. }
  20888. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  20889. if (Z_ISREF_P(orig_object_ptr)
  20890. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  20891. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  20892. dim = RT_CONSTANT(opline, opline->op2);
  20893. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20894. UNDEF_RESULT();
  20895. } else {
  20896. HashTable *ht = zend_new_array(8);
  20897. zend_uchar old_type = Z_TYPE_P(object_ptr);
  20898. ZVAL_ARR(object_ptr, ht);
  20899. if (UNEXPECTED(old_type == IS_FALSE)) {
  20900. GC_ADDREF(ht);
  20901. zend_false_to_array_deprecated();
  20902. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  20903. zend_array_destroy(ht);
  20904. goto assign_dim_error;
  20905. }
  20906. }
  20907. goto try_assign_dim_array;
  20908. }
  20909. } else {
  20910. zend_use_scalar_as_array();
  20911. dim = RT_CONSTANT(opline, opline->op2);
  20912. assign_dim_error:
  20913. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20914. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20915. ZVAL_NULL(EX_VAR(opline->result.var));
  20916. }
  20917. }
  20918. }
  20919. if (IS_CONST != IS_UNUSED) {
  20920. }
  20921. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  20922. /* assign_dim has two opcodes! */
  20923. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  20924. }
  20925. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20926. {
  20927. USE_OPLINE
  20928. zval *object_ptr, *orig_object_ptr;
  20929. zval *value;
  20930. zval *variable_ptr;
  20931. zval *dim;
  20932. SAVE_OPLINE();
  20933. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20934. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  20935. try_assign_dim_array:
  20936. SEPARATE_ARRAY(object_ptr);
  20937. if (IS_CONST == IS_UNUSED) {
  20938. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  20939. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  20940. HashTable *ht = Z_ARRVAL_P(object_ptr);
  20941. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  20942. GC_ADDREF(ht);
  20943. }
  20944. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  20945. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  20946. zend_array_destroy(ht);
  20947. goto assign_dim_error;
  20948. }
  20949. }
  20950. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  20951. ZVAL_DEREF(value);
  20952. }
  20953. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  20954. if (UNEXPECTED(value == NULL)) {
  20955. zend_cannot_add_element();
  20956. goto assign_dim_error;
  20957. } else if (IS_VAR == IS_CV) {
  20958. if (Z_REFCOUNTED_P(value)) {
  20959. Z_ADDREF_P(value);
  20960. }
  20961. } else if (IS_VAR == IS_VAR) {
  20962. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  20963. if (Z_ISREF_P(free_op_data)) {
  20964. if (Z_REFCOUNTED_P(value)) {
  20965. Z_ADDREF_P(value);
  20966. }
  20967. zval_ptr_dtor_nogc(free_op_data);
  20968. }
  20969. } else if (IS_VAR == IS_CONST) {
  20970. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  20971. Z_ADDREF_P(value);
  20972. }
  20973. }
  20974. } else {
  20975. dim = RT_CONSTANT(opline, opline->op2);
  20976. if (IS_CONST == IS_CONST) {
  20977. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20978. } else {
  20979. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20980. }
  20981. if (UNEXPECTED(variable_ptr == NULL)) {
  20982. goto assign_dim_error;
  20983. }
  20984. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  20985. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  20986. }
  20987. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20988. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20989. }
  20990. } else {
  20991. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  20992. object_ptr = Z_REFVAL_P(object_ptr);
  20993. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  20994. goto try_assign_dim_array;
  20995. }
  20996. }
  20997. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  20998. zend_object *obj = Z_OBJ_P(object_ptr);
  20999. GC_ADDREF(obj);
  21000. dim = RT_CONSTANT(opline, opline->op2);
  21001. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  21002. dim = ZVAL_UNDEFINED_OP2();
  21003. } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  21004. dim++;
  21005. }
  21006. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  21007. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  21008. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  21009. } else if (IS_VAR & (IS_CV|IS_VAR)) {
  21010. ZVAL_DEREF(value);
  21011. }
  21012. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  21013. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  21014. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  21015. zend_objects_store_del(obj);
  21016. }
  21017. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  21018. if (IS_CONST == IS_UNUSED) {
  21019. zend_use_new_element_for_string();
  21020. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  21021. UNDEF_RESULT();
  21022. } else {
  21023. dim = RT_CONSTANT(opline, opline->op2);
  21024. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  21025. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  21026. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  21027. }
  21028. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  21029. if (Z_ISREF_P(orig_object_ptr)
  21030. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  21031. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  21032. dim = RT_CONSTANT(opline, opline->op2);
  21033. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  21034. UNDEF_RESULT();
  21035. } else {
  21036. HashTable *ht = zend_new_array(8);
  21037. zend_uchar old_type = Z_TYPE_P(object_ptr);
  21038. ZVAL_ARR(object_ptr, ht);
  21039. if (UNEXPECTED(old_type == IS_FALSE)) {
  21040. GC_ADDREF(ht);
  21041. zend_false_to_array_deprecated();
  21042. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  21043. zend_array_destroy(ht);
  21044. goto assign_dim_error;
  21045. }
  21046. }
  21047. goto try_assign_dim_array;
  21048. }
  21049. } else {
  21050. zend_use_scalar_as_array();
  21051. dim = RT_CONSTANT(opline, opline->op2);
  21052. assign_dim_error:
  21053. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  21054. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21055. ZVAL_NULL(EX_VAR(opline->result.var));
  21056. }
  21057. }
  21058. }
  21059. if (IS_CONST != IS_UNUSED) {
  21060. }
  21061. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21062. /* assign_dim has two opcodes! */
  21063. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  21064. }
  21065. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21066. {
  21067. USE_OPLINE
  21068. zval *object_ptr, *orig_object_ptr;
  21069. zval *value;
  21070. zval *variable_ptr;
  21071. zval *dim;
  21072. SAVE_OPLINE();
  21073. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21074. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  21075. try_assign_dim_array:
  21076. SEPARATE_ARRAY(object_ptr);
  21077. if (IS_CONST == IS_UNUSED) {
  21078. value = EX_VAR((opline+1)->op1.var);
  21079. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  21080. HashTable *ht = Z_ARRVAL_P(object_ptr);
  21081. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  21082. GC_ADDREF(ht);
  21083. }
  21084. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  21085. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  21086. zend_array_destroy(ht);
  21087. goto assign_dim_error;
  21088. }
  21089. }
  21090. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  21091. ZVAL_DEREF(value);
  21092. }
  21093. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  21094. if (UNEXPECTED(value == NULL)) {
  21095. zend_cannot_add_element();
  21096. goto assign_dim_error;
  21097. } else if (IS_CV == IS_CV) {
  21098. if (Z_REFCOUNTED_P(value)) {
  21099. Z_ADDREF_P(value);
  21100. }
  21101. } else if (IS_CV == IS_VAR) {
  21102. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  21103. if (Z_ISREF_P(free_op_data)) {
  21104. if (Z_REFCOUNTED_P(value)) {
  21105. Z_ADDREF_P(value);
  21106. }
  21107. zval_ptr_dtor_nogc(free_op_data);
  21108. }
  21109. } else if (IS_CV == IS_CONST) {
  21110. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  21111. Z_ADDREF_P(value);
  21112. }
  21113. }
  21114. } else {
  21115. dim = RT_CONSTANT(opline, opline->op2);
  21116. if (IS_CONST == IS_CONST) {
  21117. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  21118. } else {
  21119. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  21120. }
  21121. if (UNEXPECTED(variable_ptr == NULL)) {
  21122. goto assign_dim_error;
  21123. }
  21124. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  21125. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  21126. }
  21127. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21128. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21129. }
  21130. } else {
  21131. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  21132. object_ptr = Z_REFVAL_P(object_ptr);
  21133. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  21134. goto try_assign_dim_array;
  21135. }
  21136. }
  21137. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  21138. zend_object *obj = Z_OBJ_P(object_ptr);
  21139. GC_ADDREF(obj);
  21140. dim = RT_CONSTANT(opline, opline->op2);
  21141. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  21142. dim = ZVAL_UNDEFINED_OP2();
  21143. } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  21144. dim++;
  21145. }
  21146. value = EX_VAR((opline+1)->op1.var);
  21147. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  21148. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  21149. } else if (IS_CV & (IS_CV|IS_VAR)) {
  21150. ZVAL_DEREF(value);
  21151. }
  21152. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  21153. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  21154. zend_objects_store_del(obj);
  21155. }
  21156. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  21157. if (IS_CONST == IS_UNUSED) {
  21158. zend_use_new_element_for_string();
  21159. UNDEF_RESULT();
  21160. } else {
  21161. dim = RT_CONSTANT(opline, opline->op2);
  21162. value = EX_VAR((opline+1)->op1.var);
  21163. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  21164. }
  21165. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  21166. if (Z_ISREF_P(orig_object_ptr)
  21167. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  21168. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  21169. dim = RT_CONSTANT(opline, opline->op2);
  21170. UNDEF_RESULT();
  21171. } else {
  21172. HashTable *ht = zend_new_array(8);
  21173. zend_uchar old_type = Z_TYPE_P(object_ptr);
  21174. ZVAL_ARR(object_ptr, ht);
  21175. if (UNEXPECTED(old_type == IS_FALSE)) {
  21176. GC_ADDREF(ht);
  21177. zend_false_to_array_deprecated();
  21178. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  21179. zend_array_destroy(ht);
  21180. goto assign_dim_error;
  21181. }
  21182. }
  21183. goto try_assign_dim_array;
  21184. }
  21185. } else {
  21186. zend_use_scalar_as_array();
  21187. dim = RT_CONSTANT(opline, opline->op2);
  21188. assign_dim_error:
  21189. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21190. ZVAL_NULL(EX_VAR(opline->result.var));
  21191. }
  21192. }
  21193. }
  21194. if (IS_CONST != IS_UNUSED) {
  21195. }
  21196. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21197. /* assign_dim has two opcodes! */
  21198. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  21199. }
  21200. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21201. {
  21202. USE_OPLINE
  21203. zval *value;
  21204. zval *variable_ptr;
  21205. SAVE_OPLINE();
  21206. value = RT_CONSTANT(opline, opline->op2);
  21207. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21208. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  21209. if (UNEXPECTED(0)) {
  21210. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21211. }
  21212. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21213. /* zend_assign_to_variable() always takes care of op2, never free it! */
  21214. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21215. }
  21216. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21217. {
  21218. USE_OPLINE
  21219. zval *value;
  21220. zval *variable_ptr;
  21221. SAVE_OPLINE();
  21222. value = RT_CONSTANT(opline, opline->op2);
  21223. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21224. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  21225. if (UNEXPECTED(1)) {
  21226. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21227. }
  21228. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21229. /* zend_assign_to_variable() always takes care of op2, never free it! */
  21230. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21231. }
  21232. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21233. {
  21234. USE_OPLINE
  21235. zval *property, *container, *value_ptr;
  21236. SAVE_OPLINE();
  21237. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21238. property = RT_CONSTANT(opline, opline->op2);
  21239. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  21240. if (1) {
  21241. if (IS_VAR == IS_UNUSED) {
  21242. if (IS_CONST == IS_CONST) {
  21243. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21244. } else {
  21245. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21246. }
  21247. } else {
  21248. if (IS_CONST == IS_CONST) {
  21249. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21250. } else {
  21251. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21252. }
  21253. }
  21254. } else {
  21255. zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21256. }
  21257. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21258. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  21259. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  21260. }
  21261. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  21262. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21263. {
  21264. USE_OPLINE
  21265. zval *property, *container, *value_ptr;
  21266. SAVE_OPLINE();
  21267. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21268. property = RT_CONSTANT(opline, opline->op2);
  21269. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  21270. if (1) {
  21271. if (IS_VAR == IS_UNUSED) {
  21272. if (IS_CONST == IS_CONST) {
  21273. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21274. } else {
  21275. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21276. }
  21277. } else {
  21278. if (IS_CONST == IS_CONST) {
  21279. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21280. } else {
  21281. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21282. }
  21283. }
  21284. } else {
  21285. zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21286. }
  21287. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21288. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  21289. }
  21290. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  21291. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21292. {
  21293. USE_OPLINE
  21294. zval *function_name;
  21295. zend_class_entry *ce;
  21296. uint32_t call_info;
  21297. zend_function *fbc;
  21298. zend_execute_data *call;
  21299. SAVE_OPLINE();
  21300. if (IS_VAR == IS_CONST) {
  21301. /* no function found. try a static method in class */
  21302. ce = CACHED_PTR(opline->result.num);
  21303. if (UNEXPECTED(ce == NULL)) {
  21304. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  21305. if (UNEXPECTED(ce == NULL)) {
  21306. HANDLE_EXCEPTION();
  21307. }
  21308. if (IS_CONST != IS_CONST) {
  21309. CACHE_PTR(opline->result.num, ce);
  21310. }
  21311. }
  21312. } else if (IS_VAR == IS_UNUSED) {
  21313. ce = zend_fetch_class(NULL, opline->op1.num);
  21314. if (UNEXPECTED(ce == NULL)) {
  21315. HANDLE_EXCEPTION();
  21316. }
  21317. } else {
  21318. ce = Z_CE_P(EX_VAR(opline->op1.var));
  21319. }
  21320. if (IS_VAR == IS_CONST &&
  21321. IS_CONST == IS_CONST &&
  21322. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  21323. /* nothing to do */
  21324. } else if (IS_VAR != IS_CONST &&
  21325. IS_CONST == IS_CONST &&
  21326. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  21327. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  21328. } else if (IS_CONST != IS_UNUSED) {
  21329. function_name = RT_CONSTANT(opline, opline->op2);
  21330. if (IS_CONST != IS_CONST) {
  21331. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  21332. do {
  21333. if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  21334. function_name = Z_REFVAL_P(function_name);
  21335. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  21336. break;
  21337. }
  21338. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  21339. ZVAL_UNDEFINED_OP2();
  21340. if (UNEXPECTED(EG(exception) != NULL)) {
  21341. HANDLE_EXCEPTION();
  21342. }
  21343. }
  21344. zend_throw_error(NULL, "Method name must be a string");
  21345. HANDLE_EXCEPTION();
  21346. } while (0);
  21347. }
  21348. }
  21349. if (ce->get_static_method) {
  21350. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  21351. } else {
  21352. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  21353. }
  21354. if (UNEXPECTED(fbc == NULL)) {
  21355. if (EXPECTED(!EG(exception))) {
  21356. zend_undefined_method(ce, Z_STR_P(function_name));
  21357. }
  21358. HANDLE_EXCEPTION();
  21359. }
  21360. if (IS_CONST == IS_CONST &&
  21361. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  21362. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  21363. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  21364. }
  21365. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  21366. init_func_run_time_cache(&fbc->op_array);
  21367. }
  21368. if (IS_CONST != IS_CONST) {
  21369. }
  21370. } else {
  21371. if (UNEXPECTED(ce->constructor == NULL)) {
  21372. zend_throw_error(NULL, "Cannot call constructor");
  21373. HANDLE_EXCEPTION();
  21374. }
  21375. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  21376. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  21377. HANDLE_EXCEPTION();
  21378. }
  21379. fbc = ce->constructor;
  21380. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  21381. init_func_run_time_cache(&fbc->op_array);
  21382. }
  21383. }
  21384. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  21385. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  21386. ce = (zend_class_entry*)Z_OBJ(EX(This));
  21387. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  21388. } else {
  21389. zend_non_static_method_call(fbc);
  21390. HANDLE_EXCEPTION();
  21391. }
  21392. } else {
  21393. /* previous opcode is ZEND_FETCH_CLASS */
  21394. if (IS_VAR == IS_UNUSED
  21395. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  21396. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  21397. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  21398. ce = Z_OBJCE(EX(This));
  21399. } else {
  21400. ce = Z_CE(EX(This));
  21401. }
  21402. }
  21403. call_info = ZEND_CALL_NESTED_FUNCTION;
  21404. }
  21405. call = zend_vm_stack_push_call_frame(call_info,
  21406. fbc, opline->extended_value, ce);
  21407. call->prev_execute_data = EX(call);
  21408. EX(call) = call;
  21409. ZEND_VM_NEXT_OPCODE();
  21410. }
  21411. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21412. {
  21413. USE_OPLINE
  21414. zval *varptr, *arg;
  21415. if (IS_CONST == IS_CONST) {
  21416. SAVE_OPLINE();
  21417. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  21418. uint32_t arg_num;
  21419. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  21420. if (UNEXPECTED(!arg)) {
  21421. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21422. HANDLE_EXCEPTION();
  21423. }
  21424. } else {
  21425. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  21426. }
  21427. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21428. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  21429. SAVE_OPLINE();
  21430. ZVAL_UNDEFINED_OP1();
  21431. ZVAL_NULL(arg);
  21432. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21433. }
  21434. if (IS_VAR == IS_CV) {
  21435. ZVAL_COPY_DEREF(arg, varptr);
  21436. } else /* if (IS_VAR == IS_VAR) */ {
  21437. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  21438. zend_refcounted *ref = Z_COUNTED_P(varptr);
  21439. varptr = Z_REFVAL_P(varptr);
  21440. ZVAL_COPY_VALUE(arg, varptr);
  21441. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  21442. efree_size(ref, sizeof(zend_reference));
  21443. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  21444. Z_ADDREF_P(arg);
  21445. }
  21446. } else {
  21447. ZVAL_COPY_VALUE(arg, varptr);
  21448. }
  21449. }
  21450. ZEND_VM_NEXT_OPCODE();
  21451. }
  21452. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21453. {
  21454. USE_OPLINE
  21455. zval *varptr, *arg;
  21456. if (IS_CONST == IS_CONST) {
  21457. SAVE_OPLINE();
  21458. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  21459. uint32_t arg_num;
  21460. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  21461. if (UNEXPECTED(!arg)) {
  21462. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21463. HANDLE_EXCEPTION();
  21464. }
  21465. } else {
  21466. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  21467. }
  21468. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21469. ZVAL_COPY_VALUE(arg, varptr);
  21470. if (EXPECTED(Z_ISREF_P(varptr))) {
  21471. ZEND_VM_NEXT_OPCODE();
  21472. }
  21473. SAVE_OPLINE();
  21474. ZVAL_NEW_REF(arg, arg);
  21475. zend_error(E_NOTICE, "Only variables should be passed by reference");
  21476. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21477. }
  21478. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21479. {
  21480. USE_OPLINE
  21481. zval *varptr, *arg;
  21482. uint32_t arg_num;
  21483. if (IS_CONST == IS_CONST) {
  21484. SAVE_OPLINE();
  21485. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  21486. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  21487. if (UNEXPECTED(!arg)) {
  21488. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21489. HANDLE_EXCEPTION();
  21490. }
  21491. } else {
  21492. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  21493. arg_num = opline->op2.num;
  21494. }
  21495. if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
  21496. if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  21497. goto send_var;
  21498. }
  21499. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21500. ZVAL_COPY_VALUE(arg, varptr);
  21501. if (EXPECTED(Z_ISREF_P(varptr) ||
  21502. QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
  21503. ZEND_VM_NEXT_OPCODE();
  21504. }
  21505. } else {
  21506. if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  21507. goto send_var;
  21508. }
  21509. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21510. ZVAL_COPY_VALUE(arg, varptr);
  21511. if (EXPECTED(Z_ISREF_P(varptr) ||
  21512. ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
  21513. ZEND_VM_NEXT_OPCODE();
  21514. }
  21515. }
  21516. SAVE_OPLINE();
  21517. ZVAL_NEW_REF(arg, arg);
  21518. zend_error(E_NOTICE, "Only variables should be passed by reference");
  21519. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21520. send_var:
  21521. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21522. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  21523. zend_refcounted *ref = Z_COUNTED_P(varptr);
  21524. varptr = Z_REFVAL_P(varptr);
  21525. ZVAL_COPY_VALUE(arg, varptr);
  21526. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  21527. efree_size(ref, sizeof(zend_reference));
  21528. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  21529. Z_ADDREF_P(arg);
  21530. }
  21531. } else {
  21532. ZVAL_COPY_VALUE(arg, varptr);
  21533. }
  21534. ZEND_VM_NEXT_OPCODE();
  21535. }
  21536. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21537. {
  21538. USE_OPLINE
  21539. zval *varptr, *arg;
  21540. SAVE_OPLINE();
  21541. if (IS_CONST == IS_CONST) {
  21542. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  21543. uint32_t arg_num;
  21544. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  21545. if (UNEXPECTED(!arg)) {
  21546. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21547. HANDLE_EXCEPTION();
  21548. }
  21549. } else {
  21550. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  21551. }
  21552. varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21553. if (Z_ISREF_P(varptr)) {
  21554. Z_ADDREF_P(varptr);
  21555. } else {
  21556. ZVAL_MAKE_REF_EX(varptr, 2);
  21557. }
  21558. ZVAL_REF(arg, Z_REF_P(varptr));
  21559. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21560. ZEND_VM_NEXT_OPCODE();
  21561. }
  21562. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21563. {
  21564. USE_OPLINE
  21565. zval *varptr, *arg;
  21566. uint32_t arg_num;
  21567. if (IS_CONST == IS_CONST) {
  21568. SAVE_OPLINE();
  21569. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  21570. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  21571. if (UNEXPECTED(!arg)) {
  21572. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21573. HANDLE_EXCEPTION();
  21574. }
  21575. } else {
  21576. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  21577. arg_num = opline->op2.num;
  21578. }
  21579. if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
  21580. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  21581. goto send_var_by_ref;
  21582. }
  21583. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  21584. send_var_by_ref:
  21585. varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21586. if (Z_ISREF_P(varptr)) {
  21587. Z_ADDREF_P(varptr);
  21588. } else {
  21589. ZVAL_MAKE_REF_EX(varptr, 2);
  21590. }
  21591. ZVAL_REF(arg, Z_REF_P(varptr));
  21592. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21593. ZEND_VM_NEXT_OPCODE();
  21594. }
  21595. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21596. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  21597. SAVE_OPLINE();
  21598. ZVAL_UNDEFINED_OP1();
  21599. ZVAL_NULL(arg);
  21600. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21601. }
  21602. if (IS_VAR == IS_CV) {
  21603. ZVAL_COPY_DEREF(arg, varptr);
  21604. } else /* if (IS_VAR == IS_VAR) */ {
  21605. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  21606. zend_refcounted *ref = Z_COUNTED_P(varptr);
  21607. varptr = Z_REFVAL_P(varptr);
  21608. ZVAL_COPY_VALUE(arg, varptr);
  21609. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  21610. efree_size(ref, sizeof(zend_reference));
  21611. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  21612. Z_ADDREF_P(arg);
  21613. }
  21614. } else {
  21615. ZVAL_COPY_VALUE(arg, varptr);
  21616. }
  21617. }
  21618. ZEND_VM_NEXT_OPCODE();
  21619. }
  21620. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21621. {
  21622. USE_OPLINE
  21623. zval *varptr, *arg;
  21624. if (IS_CONST == IS_CONST) {
  21625. // TODO: Would it make sense to share the cache slot with CHECK_FUNC_ARG?
  21626. SAVE_OPLINE();
  21627. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  21628. uint32_t arg_num;
  21629. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  21630. if (UNEXPECTED(!arg)) {
  21631. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21632. HANDLE_EXCEPTION();
  21633. }
  21634. } else {
  21635. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  21636. }
  21637. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  21638. varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21639. if (Z_ISREF_P(varptr)) {
  21640. Z_ADDREF_P(varptr);
  21641. } else {
  21642. ZVAL_MAKE_REF_EX(varptr, 2);
  21643. }
  21644. ZVAL_REF(arg, Z_REF_P(varptr));
  21645. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21646. ZEND_VM_NEXT_OPCODE();
  21647. }
  21648. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21649. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  21650. zend_refcounted *ref = Z_COUNTED_P(varptr);
  21651. varptr = Z_REFVAL_P(varptr);
  21652. ZVAL_COPY_VALUE(arg, varptr);
  21653. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  21654. efree_size(ref, sizeof(zend_reference));
  21655. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  21656. Z_ADDREF_P(arg);
  21657. }
  21658. } else {
  21659. ZVAL_COPY_VALUE(arg, varptr);
  21660. }
  21661. ZEND_VM_NEXT_OPCODE();
  21662. }
  21663. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21664. {
  21665. zend_class_entry *ce, *scope;
  21666. zend_class_constant *c;
  21667. zval *value, *zv;
  21668. USE_OPLINE
  21669. SAVE_OPLINE();
  21670. do {
  21671. if (IS_VAR == IS_CONST) {
  21672. if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
  21673. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  21674. break;
  21675. } else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
  21676. ce = CACHED_PTR(opline->extended_value);
  21677. } else {
  21678. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  21679. if (UNEXPECTED(ce == NULL)) {
  21680. ZVAL_UNDEF(EX_VAR(opline->result.var));
  21681. HANDLE_EXCEPTION();
  21682. }
  21683. }
  21684. } else {
  21685. if (IS_VAR == IS_UNUSED) {
  21686. ce = zend_fetch_class(NULL, opline->op1.num);
  21687. if (UNEXPECTED(ce == NULL)) {
  21688. ZVAL_UNDEF(EX_VAR(opline->result.var));
  21689. HANDLE_EXCEPTION();
  21690. }
  21691. } else {
  21692. ce = Z_CE_P(EX_VAR(opline->op1.var));
  21693. }
  21694. if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  21695. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  21696. break;
  21697. }
  21698. }
  21699. zv = zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), Z_STR_P(RT_CONSTANT(opline, opline->op2)));
  21700. if (EXPECTED(zv != NULL)) {
  21701. c = Z_PTR_P(zv);
  21702. scope = EX(func)->op_array.scope;
  21703. if (!zend_verify_const_access(c, scope)) {
  21704. zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
  21705. ZVAL_UNDEF(EX_VAR(opline->result.var));
  21706. HANDLE_EXCEPTION();
  21707. }
  21708. value = &c->value;
  21709. if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
  21710. zval_update_constant_ex(value, c->ce);
  21711. if (UNEXPECTED(EG(exception) != NULL)) {
  21712. ZVAL_UNDEF(EX_VAR(opline->result.var));
  21713. HANDLE_EXCEPTION();
  21714. }
  21715. }
  21716. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
  21717. } else {
  21718. zend_throw_error(NULL, "Undefined constant %s::%s",
  21719. ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
  21720. ZVAL_UNDEF(EX_VAR(opline->result.var));
  21721. HANDLE_EXCEPTION();
  21722. }
  21723. } while (0);
  21724. ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
  21725. ZEND_VM_NEXT_OPCODE();
  21726. }
  21727. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21728. {
  21729. USE_OPLINE
  21730. zval *expr_ptr, new_expr;
  21731. SAVE_OPLINE();
  21732. if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
  21733. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  21734. expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21735. if (Z_ISREF_P(expr_ptr)) {
  21736. Z_ADDREF_P(expr_ptr);
  21737. } else {
  21738. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  21739. }
  21740. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21741. } else {
  21742. expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21743. if (IS_VAR == IS_TMP_VAR) {
  21744. /* pass */
  21745. } else if (IS_VAR == IS_CONST) {
  21746. Z_TRY_ADDREF_P(expr_ptr);
  21747. } else if (IS_VAR == IS_CV) {
  21748. ZVAL_DEREF(expr_ptr);
  21749. Z_TRY_ADDREF_P(expr_ptr);
  21750. } else /* if (IS_VAR == IS_VAR) */ {
  21751. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  21752. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  21753. expr_ptr = Z_REFVAL_P(expr_ptr);
  21754. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  21755. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  21756. expr_ptr = &new_expr;
  21757. efree_size(ref, sizeof(zend_reference));
  21758. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  21759. Z_ADDREF_P(expr_ptr);
  21760. }
  21761. }
  21762. }
  21763. }
  21764. if (IS_CONST != IS_UNUSED) {
  21765. zval *offset = RT_CONSTANT(opline, opline->op2);
  21766. zend_string *str;
  21767. zend_ulong hval;
  21768. add_again:
  21769. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  21770. str = Z_STR_P(offset);
  21771. if (IS_CONST != IS_CONST) {
  21772. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  21773. goto num_index;
  21774. }
  21775. }
  21776. str_index:
  21777. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  21778. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  21779. hval = Z_LVAL_P(offset);
  21780. num_index:
  21781. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  21782. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  21783. offset = Z_REFVAL_P(offset);
  21784. goto add_again;
  21785. } else if (Z_TYPE_P(offset) == IS_NULL) {
  21786. str = ZSTR_EMPTY_ALLOC();
  21787. goto str_index;
  21788. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  21789. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  21790. goto num_index;
  21791. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  21792. hval = 0;
  21793. goto num_index;
  21794. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  21795. hval = 1;
  21796. goto num_index;
  21797. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  21798. zend_use_resource_as_offset(offset);
  21799. hval = Z_RES_HANDLE_P(offset);
  21800. goto num_index;
  21801. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  21802. ZVAL_UNDEFINED_OP2();
  21803. str = ZSTR_EMPTY_ALLOC();
  21804. goto str_index;
  21805. } else {
  21806. zend_illegal_offset();
  21807. zval_ptr_dtor_nogc(expr_ptr);
  21808. }
  21809. } else {
  21810. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  21811. zend_cannot_add_element();
  21812. zval_ptr_dtor_nogc(expr_ptr);
  21813. }
  21814. }
  21815. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21816. }
  21817. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21818. {
  21819. zval *array;
  21820. uint32_t size;
  21821. USE_OPLINE
  21822. array = EX_VAR(opline->result.var);
  21823. if (IS_VAR != IS_UNUSED) {
  21824. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  21825. ZVAL_ARR(array, zend_new_array(size));
  21826. /* Explicitly initialize array as not-packed if flag is set */
  21827. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  21828. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  21829. }
  21830. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21831. } else {
  21832. ZVAL_ARR(array, zend_new_array(0));
  21833. ZEND_VM_NEXT_OPCODE();
  21834. }
  21835. }
  21836. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21837. {
  21838. USE_OPLINE
  21839. zval *container;
  21840. zval *offset;
  21841. zend_ulong hval;
  21842. zend_string *key;
  21843. SAVE_OPLINE();
  21844. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21845. offset = RT_CONSTANT(opline, opline->op2);
  21846. do {
  21847. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  21848. HashTable *ht;
  21849. unset_dim_array:
  21850. SEPARATE_ARRAY(container);
  21851. ht = Z_ARRVAL_P(container);
  21852. offset_again:
  21853. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  21854. key = Z_STR_P(offset);
  21855. if (IS_CONST != IS_CONST) {
  21856. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  21857. goto num_index_dim;
  21858. }
  21859. }
  21860. str_index_dim:
  21861. ZEND_ASSERT(ht != &EG(symbol_table));
  21862. zend_hash_del(ht, key);
  21863. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  21864. hval = Z_LVAL_P(offset);
  21865. num_index_dim:
  21866. zend_hash_index_del(ht, hval);
  21867. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  21868. offset = Z_REFVAL_P(offset);
  21869. goto offset_again;
  21870. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  21871. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  21872. goto num_index_dim;
  21873. } else if (Z_TYPE_P(offset) == IS_NULL) {
  21874. key = ZSTR_EMPTY_ALLOC();
  21875. goto str_index_dim;
  21876. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  21877. hval = 0;
  21878. goto num_index_dim;
  21879. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  21880. hval = 1;
  21881. goto num_index_dim;
  21882. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  21883. zend_use_resource_as_offset(offset);
  21884. hval = Z_RES_HANDLE_P(offset);
  21885. goto num_index_dim;
  21886. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  21887. ZVAL_UNDEFINED_OP2();
  21888. key = ZSTR_EMPTY_ALLOC();
  21889. goto str_index_dim;
  21890. } else {
  21891. zend_type_error("Illegal offset type in unset");
  21892. }
  21893. break;
  21894. } else if (Z_ISREF_P(container)) {
  21895. container = Z_REFVAL_P(container);
  21896. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  21897. goto unset_dim_array;
  21898. }
  21899. }
  21900. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  21901. container = ZVAL_UNDEFINED_OP1();
  21902. }
  21903. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  21904. offset = ZVAL_UNDEFINED_OP2();
  21905. }
  21906. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  21907. if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  21908. offset++;
  21909. }
  21910. Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
  21911. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  21912. zend_throw_error(NULL, "Cannot unset string offsets");
  21913. } else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
  21914. zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
  21915. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
  21916. zend_false_to_array_deprecated();
  21917. }
  21918. } while (0);
  21919. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21920. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21921. }
  21922. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21923. {
  21924. USE_OPLINE
  21925. zval *container;
  21926. zval *offset;
  21927. zend_string *name, *tmp_name;
  21928. SAVE_OPLINE();
  21929. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21930. offset = RT_CONSTANT(opline, opline->op2);
  21931. do {
  21932. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  21933. if (Z_ISREF_P(container)) {
  21934. container = Z_REFVAL_P(container);
  21935. if (Z_TYPE_P(container) != IS_OBJECT) {
  21936. if (IS_VAR == IS_CV
  21937. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  21938. ZVAL_UNDEFINED_OP1();
  21939. }
  21940. break;
  21941. }
  21942. } else {
  21943. break;
  21944. }
  21945. }
  21946. if (IS_CONST == IS_CONST) {
  21947. name = Z_STR_P(offset);
  21948. } else {
  21949. name = zval_try_get_tmp_string(offset, &tmp_name);
  21950. if (UNEXPECTED(!name)) {
  21951. break;
  21952. }
  21953. }
  21954. Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  21955. if (IS_CONST != IS_CONST) {
  21956. zend_tmp_string_release(tmp_name);
  21957. }
  21958. } while (0);
  21959. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21960. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21961. }
  21962. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21963. {
  21964. USE_OPLINE
  21965. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  21966. SAVE_OPLINE();
  21967. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  21968. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21969. }
  21970. /* Destroy the previously yielded value */
  21971. zval_ptr_dtor(&generator->value);
  21972. /* Destroy the previously yielded key */
  21973. zval_ptr_dtor(&generator->key);
  21974. /* Set the new yielded value */
  21975. if (IS_VAR != IS_UNUSED) {
  21976. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  21977. /* Constants and temporary variables aren't yieldable by reference,
  21978. * but we still allow them with a notice. */
  21979. if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
  21980. zval *value;
  21981. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  21982. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21983. ZVAL_COPY_VALUE(&generator->value, value);
  21984. if (IS_VAR == IS_CONST) {
  21985. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  21986. Z_ADDREF(generator->value);
  21987. }
  21988. }
  21989. } else {
  21990. zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21991. /* If a function call result is yielded and the function did
  21992. * not return by reference we throw a notice. */
  21993. do {
  21994. if (IS_VAR == IS_VAR) {
  21995. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  21996. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  21997. && !Z_ISREF_P(value_ptr)) {
  21998. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  21999. ZVAL_COPY(&generator->value, value_ptr);
  22000. break;
  22001. }
  22002. }
  22003. if (Z_ISREF_P(value_ptr)) {
  22004. Z_ADDREF_P(value_ptr);
  22005. } else {
  22006. ZVAL_MAKE_REF_EX(value_ptr, 2);
  22007. }
  22008. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  22009. } while (0);
  22010. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22011. }
  22012. } else {
  22013. zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22014. /* Consts, temporary variables and references need copying */
  22015. if (IS_VAR == IS_CONST) {
  22016. ZVAL_COPY_VALUE(&generator->value, value);
  22017. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  22018. Z_ADDREF(generator->value);
  22019. }
  22020. } else if (IS_VAR == IS_TMP_VAR) {
  22021. ZVAL_COPY_VALUE(&generator->value, value);
  22022. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  22023. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  22024. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22025. } else {
  22026. ZVAL_COPY_VALUE(&generator->value, value);
  22027. if (IS_VAR == IS_CV) {
  22028. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  22029. }
  22030. }
  22031. }
  22032. } else {
  22033. /* If no value was specified yield null */
  22034. ZVAL_NULL(&generator->value);
  22035. }
  22036. /* Set the new yielded key */
  22037. if (IS_CONST != IS_UNUSED) {
  22038. zval *key = RT_CONSTANT(opline, opline->op2);
  22039. if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  22040. key = Z_REFVAL_P(key);
  22041. }
  22042. ZVAL_COPY(&generator->key, key);
  22043. if (Z_TYPE(generator->key) == IS_LONG
  22044. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  22045. ) {
  22046. generator->largest_used_integer_key = Z_LVAL(generator->key);
  22047. }
  22048. } else {
  22049. /* If no key was specified we use auto-increment keys */
  22050. generator->largest_used_integer_key++;
  22051. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  22052. }
  22053. if (RETURN_VALUE_USED(opline)) {
  22054. /* If the return value of yield is used set the send
  22055. * target and initialize it to NULL */
  22056. generator->send_target = EX_VAR(opline->result.var);
  22057. ZVAL_NULL(generator->send_target);
  22058. } else {
  22059. generator->send_target = NULL;
  22060. }
  22061. /* We increment to the next op, so we are at the correct position when the
  22062. * generator is resumed. */
  22063. ZEND_VM_INC_OPCODE();
  22064. /* The GOTO VM uses a local opline variable. We need to set the opline
  22065. * variable in execute_data so we don't resume at an old position. */
  22066. SAVE_OPLINE();
  22067. ZEND_VM_RETURN();
  22068. }
  22069. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22070. {
  22071. USE_OPLINE
  22072. zval *op1;
  22073. HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  22074. zval *result;
  22075. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22076. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  22077. result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_VAR == IS_CONST);
  22078. if (IS_VAR & (IS_TMP_VAR|IS_VAR)) {
  22079. zval_ptr_dtor_str(op1);
  22080. }
  22081. ZEND_VM_SMART_BRANCH(result, 0);
  22082. }
  22083. if (opline->extended_value) {
  22084. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  22085. result = zend_hash_index_find(ht, Z_LVAL_P(op1));
  22086. ZEND_VM_SMART_BRANCH(result, 0);
  22087. }
  22088. SAVE_OPLINE();
  22089. if ((IS_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
  22090. op1 = Z_REFVAL_P(op1);
  22091. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  22092. result = zend_hash_find(ht, Z_STR_P(op1));
  22093. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22094. ZEND_VM_SMART_BRANCH(result, 0);
  22095. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  22096. result = zend_hash_index_find(ht, Z_LVAL_P(op1));
  22097. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22098. ZEND_VM_SMART_BRANCH(result, 0);
  22099. }
  22100. } else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  22101. ZVAL_UNDEFINED_OP1();
  22102. }
  22103. } else if (Z_TYPE_P(op1) <= IS_FALSE) {
  22104. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  22105. SAVE_OPLINE();
  22106. ZVAL_UNDEFINED_OP1();
  22107. if (UNEXPECTED(EG(exception) != NULL)) {
  22108. HANDLE_EXCEPTION();
  22109. }
  22110. }
  22111. result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
  22112. ZEND_VM_SMART_BRANCH(result, 0);
  22113. } else {
  22114. zend_string *key;
  22115. zval key_tmp;
  22116. if ((IS_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
  22117. op1 = Z_REFVAL_P(op1);
  22118. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  22119. result = zend_hash_find(ht, Z_STR_P(op1));
  22120. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22121. ZEND_VM_SMART_BRANCH(result, 0);
  22122. }
  22123. }
  22124. SAVE_OPLINE();
  22125. ZEND_HASH_FOREACH_STR_KEY(ht, key) {
  22126. ZVAL_STR(&key_tmp, key);
  22127. if (zend_compare(op1, &key_tmp) == 0) {
  22128. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22129. ZEND_VM_SMART_BRANCH(1, 1);
  22130. }
  22131. } ZEND_HASH_FOREACH_END();
  22132. }
  22133. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22134. ZEND_VM_SMART_BRANCH(0, 1);
  22135. }
  22136. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22137. {
  22138. USE_OPLINE
  22139. zval *object;
  22140. zval *property;
  22141. zval *value;
  22142. zval *zptr;
  22143. void **cache_slot;
  22144. zend_property_info *prop_info;
  22145. zend_object *zobj;
  22146. zend_string *name, *tmp_name;
  22147. SAVE_OPLINE();
  22148. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22149. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22150. do {
  22151. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  22152. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  22153. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  22154. object = Z_REFVAL_P(object);
  22155. goto assign_op_object;
  22156. }
  22157. if (IS_VAR == IS_CV
  22158. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  22159. ZVAL_UNDEFINED_OP1();
  22160. }
  22161. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  22162. break;
  22163. }
  22164. assign_op_object:
  22165. /* here we are sure we are dealing with an object */
  22166. zobj = Z_OBJ_P(object);
  22167. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22168. name = Z_STR_P(property);
  22169. } else {
  22170. name = zval_try_get_tmp_string(property, &tmp_name);
  22171. if (UNEXPECTED(!name)) {
  22172. UNDEF_RESULT();
  22173. break;
  22174. }
  22175. }
  22176. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  22177. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  22178. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  22179. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22180. ZVAL_NULL(EX_VAR(opline->result.var));
  22181. }
  22182. } else {
  22183. zval *orig_zptr = zptr;
  22184. zend_reference *ref;
  22185. do {
  22186. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  22187. ref = Z_REF_P(zptr);
  22188. zptr = Z_REFVAL_P(zptr);
  22189. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  22190. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  22191. break;
  22192. }
  22193. }
  22194. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22195. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  22196. } else {
  22197. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  22198. }
  22199. if (UNEXPECTED(prop_info)) {
  22200. /* special case for typed properties */
  22201. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  22202. } else {
  22203. zend_binary_op(zptr, zptr, value OPLINE_CC);
  22204. }
  22205. } while (0);
  22206. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22207. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  22208. }
  22209. }
  22210. } else {
  22211. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  22212. }
  22213. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  22214. zend_tmp_string_release(tmp_name);
  22215. }
  22216. } while (0);
  22217. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  22218. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22219. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22220. /* assign_obj has two opcodes! */
  22221. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  22222. }
  22223. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  22224. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22225. {
  22226. USE_OPLINE
  22227. zval *var_ptr;
  22228. zval *value, *container, *dim;
  22229. HashTable *ht;
  22230. SAVE_OPLINE();
  22231. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22232. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  22233. assign_dim_op_array:
  22234. SEPARATE_ARRAY(container);
  22235. ht = Z_ARRVAL_P(container);
  22236. assign_dim_op_new_array:
  22237. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22238. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  22239. var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
  22240. if (UNEXPECTED(!var_ptr)) {
  22241. zend_cannot_add_element();
  22242. goto assign_dim_op_ret_null;
  22243. }
  22244. } else {
  22245. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22246. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
  22247. } else {
  22248. var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
  22249. }
  22250. if (UNEXPECTED(!var_ptr)) {
  22251. goto assign_dim_op_ret_null;
  22252. }
  22253. }
  22254. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  22255. do {
  22256. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
  22257. zend_reference *ref = Z_REF_P(var_ptr);
  22258. var_ptr = Z_REFVAL_P(var_ptr);
  22259. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  22260. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  22261. break;
  22262. }
  22263. }
  22264. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  22265. } while (0);
  22266. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22267. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  22268. }
  22269. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  22270. } else {
  22271. if (EXPECTED(Z_ISREF_P(container))) {
  22272. container = Z_REFVAL_P(container);
  22273. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  22274. goto assign_dim_op_array;
  22275. }
  22276. }
  22277. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  22278. zend_object *obj = Z_OBJ_P(container);
  22279. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22280. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  22281. dim++;
  22282. }
  22283. zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
  22284. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  22285. zend_uchar old_type;
  22286. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  22287. ZVAL_UNDEFINED_OP1();
  22288. }
  22289. ht = zend_new_array(8);
  22290. old_type = Z_TYPE_P(container);
  22291. ZVAL_ARR(container, ht);
  22292. if (UNEXPECTED(old_type == IS_FALSE)) {
  22293. GC_ADDREF(ht);
  22294. zend_false_to_array_deprecated();
  22295. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  22296. zend_array_destroy(ht);
  22297. goto assign_dim_op_ret_null;
  22298. }
  22299. }
  22300. goto assign_dim_op_new_array;
  22301. } else {
  22302. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22303. zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  22304. assign_dim_op_ret_null:
  22305. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  22306. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22307. ZVAL_NULL(EX_VAR(opline->result.var));
  22308. }
  22309. }
  22310. }
  22311. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22312. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22313. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  22314. }
  22315. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22316. {
  22317. USE_OPLINE
  22318. zval *var_ptr;
  22319. zval *value;
  22320. SAVE_OPLINE();
  22321. value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22322. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22323. do {
  22324. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  22325. zend_reference *ref = Z_REF_P(var_ptr);
  22326. var_ptr = Z_REFVAL_P(var_ptr);
  22327. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  22328. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  22329. break;
  22330. }
  22331. }
  22332. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  22333. } while (0);
  22334. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22335. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  22336. }
  22337. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22338. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22339. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22340. }
  22341. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22342. {
  22343. USE_OPLINE
  22344. zval *object;
  22345. zval *property;
  22346. zval *zptr;
  22347. void **cache_slot;
  22348. zend_property_info *prop_info;
  22349. zend_object *zobj;
  22350. zend_string *name, *tmp_name;
  22351. SAVE_OPLINE();
  22352. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22353. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22354. do {
  22355. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  22356. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  22357. object = Z_REFVAL_P(object);
  22358. goto pre_incdec_object;
  22359. }
  22360. if (IS_VAR == IS_CV
  22361. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  22362. ZVAL_UNDEFINED_OP1();
  22363. }
  22364. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  22365. break;
  22366. }
  22367. pre_incdec_object:
  22368. /* here we are sure we are dealing with an object */
  22369. zobj = Z_OBJ_P(object);
  22370. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22371. name = Z_STR_P(property);
  22372. } else {
  22373. name = zval_try_get_tmp_string(property, &tmp_name);
  22374. if (UNEXPECTED(!name)) {
  22375. UNDEF_RESULT();
  22376. break;
  22377. }
  22378. }
  22379. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  22380. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  22381. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  22382. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22383. ZVAL_NULL(EX_VAR(opline->result.var));
  22384. }
  22385. } else {
  22386. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22387. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  22388. } else {
  22389. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  22390. }
  22391. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  22392. }
  22393. } else {
  22394. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  22395. }
  22396. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  22397. zend_tmp_string_release(tmp_name);
  22398. }
  22399. } while (0);
  22400. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22401. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22402. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22403. }
  22404. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22405. {
  22406. USE_OPLINE
  22407. zval *object;
  22408. zval *property;
  22409. zval *zptr;
  22410. void **cache_slot;
  22411. zend_property_info *prop_info;
  22412. zend_object *zobj;
  22413. zend_string *name, *tmp_name;
  22414. SAVE_OPLINE();
  22415. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22416. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22417. do {
  22418. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  22419. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  22420. object = Z_REFVAL_P(object);
  22421. goto post_incdec_object;
  22422. }
  22423. if (IS_VAR == IS_CV
  22424. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  22425. ZVAL_UNDEFINED_OP1();
  22426. }
  22427. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  22428. break;
  22429. }
  22430. post_incdec_object:
  22431. /* here we are sure we are dealing with an object */
  22432. zobj = Z_OBJ_P(object);
  22433. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22434. name = Z_STR_P(property);
  22435. } else {
  22436. name = zval_try_get_tmp_string(property, &tmp_name);
  22437. if (UNEXPECTED(!name)) {
  22438. ZVAL_UNDEF(EX_VAR(opline->result.var));
  22439. break;
  22440. }
  22441. }
  22442. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  22443. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  22444. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  22445. ZVAL_NULL(EX_VAR(opline->result.var));
  22446. } else {
  22447. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22448. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  22449. } else {
  22450. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  22451. }
  22452. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  22453. }
  22454. } else {
  22455. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  22456. }
  22457. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  22458. zend_tmp_string_release(tmp_name);
  22459. }
  22460. } while (0);
  22461. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22462. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22463. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22464. }
  22465. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22466. {
  22467. USE_OPLINE
  22468. zval *container;
  22469. SAVE_OPLINE();
  22470. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22471. zend_fetch_dimension_address_W(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  22472. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22473. if (IS_VAR == IS_VAR) {
  22474. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  22475. }
  22476. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22477. }
  22478. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22479. {
  22480. USE_OPLINE
  22481. zval *container;
  22482. SAVE_OPLINE();
  22483. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22484. zend_fetch_dimension_address_RW(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  22485. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22486. if (IS_VAR == IS_VAR) {
  22487. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  22488. }
  22489. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22490. }
  22491. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22492. {
  22493. #if 0
  22494. USE_OPLINE
  22495. #endif
  22496. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  22497. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  22498. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  22499. }
  22500. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  22501. } else {
  22502. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  22503. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  22504. }
  22505. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  22506. }
  22507. }
  22508. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22509. {
  22510. USE_OPLINE
  22511. zval *container;
  22512. SAVE_OPLINE();
  22513. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22514. zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  22515. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22516. if (IS_VAR == IS_VAR) {
  22517. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  22518. }
  22519. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22520. }
  22521. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22522. {
  22523. USE_OPLINE
  22524. zval *property, *container, *result;
  22525. SAVE_OPLINE();
  22526. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22527. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22528. result = EX_VAR(opline->result.var);
  22529. zend_fetch_property_address(
  22530. result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR),
  22531. (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  22532. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
  22533. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22534. if (IS_VAR == IS_VAR) {
  22535. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  22536. }
  22537. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22538. }
  22539. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22540. {
  22541. USE_OPLINE
  22542. zval *property, *container, *result;
  22543. SAVE_OPLINE();
  22544. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22545. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22546. result = EX_VAR(opline->result.var);
  22547. 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, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  22548. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22549. if (IS_VAR == IS_VAR) {
  22550. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  22551. }
  22552. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22553. }
  22554. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22555. {
  22556. #if 0
  22557. USE_OPLINE
  22558. #endif
  22559. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  22560. /* Behave like FETCH_OBJ_W */
  22561. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  22562. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  22563. }
  22564. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  22565. } else {
  22566. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  22567. }
  22568. }
  22569. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22570. {
  22571. USE_OPLINE
  22572. zval *container, *property, *result;
  22573. SAVE_OPLINE();
  22574. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22575. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22576. result = EX_VAR(opline->result.var);
  22577. 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, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  22578. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22579. if (IS_VAR == IS_VAR) {
  22580. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  22581. }
  22582. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22583. }
  22584. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22585. {
  22586. USE_OPLINE
  22587. zval *container, *dim;
  22588. SAVE_OPLINE();
  22589. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22590. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22591. if (IS_VAR == IS_VAR
  22592. && Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
  22593. && UNEXPECTED(!Z_ISREF_P(container))
  22594. ) {
  22595. zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
  22596. zend_fetch_dimension_address_LIST_r(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  22597. } else {
  22598. zend_fetch_dimension_address_W(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  22599. }
  22600. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22601. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22602. }
  22603. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22604. {
  22605. USE_OPLINE
  22606. zval *object, *value, tmp;
  22607. zend_object *zobj;
  22608. zend_string *name, *tmp_name;
  22609. SAVE_OPLINE();
  22610. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22611. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  22612. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  22613. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  22614. object = Z_REFVAL_P(object);
  22615. goto assign_object;
  22616. }
  22617. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  22618. value = &EG(uninitialized_zval);
  22619. goto free_and_exit_assign_obj;
  22620. }
  22621. assign_object:
  22622. zobj = Z_OBJ_P(object);
  22623. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22624. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  22625. void **cache_slot = CACHE_ADDR(opline->extended_value);
  22626. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  22627. zend_object *zobj = Z_OBJ_P(object);
  22628. zval *property_val;
  22629. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  22630. property_val = OBJ_PROP(zobj, prop_offset);
  22631. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  22632. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  22633. if (UNEXPECTED(prop_info != NULL)) {
  22634. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  22635. goto free_and_exit_assign_obj;
  22636. } else {
  22637. fast_assign_obj:
  22638. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  22639. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22640. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22641. }
  22642. goto exit_assign_obj;
  22643. }
  22644. }
  22645. } else {
  22646. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  22647. if (EXPECTED(zobj->properties != NULL)) {
  22648. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  22649. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  22650. GC_DELREF(zobj->properties);
  22651. }
  22652. zobj->properties = zend_array_dup(zobj->properties);
  22653. }
  22654. property_val = zend_hash_find_known_hash(zobj->properties, name);
  22655. if (property_val) {
  22656. goto fast_assign_obj;
  22657. }
  22658. }
  22659. if (!zobj->ce->__set) {
  22660. if (EXPECTED(zobj->properties == NULL)) {
  22661. rebuild_object_properties(zobj);
  22662. }
  22663. if (IS_CONST == IS_CONST) {
  22664. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  22665. Z_ADDREF_P(value);
  22666. }
  22667. } else if (IS_CONST != IS_TMP_VAR) {
  22668. if (Z_ISREF_P(value)) {
  22669. if (IS_CONST == IS_VAR) {
  22670. zend_reference *ref = Z_REF_P(value);
  22671. if (GC_DELREF(ref) == 0) {
  22672. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  22673. efree_size(ref, sizeof(zend_reference));
  22674. value = &tmp;
  22675. } else {
  22676. value = Z_REFVAL_P(value);
  22677. Z_TRY_ADDREF_P(value);
  22678. }
  22679. } else {
  22680. value = Z_REFVAL_P(value);
  22681. Z_TRY_ADDREF_P(value);
  22682. }
  22683. } else if (IS_CONST == IS_CV) {
  22684. Z_TRY_ADDREF_P(value);
  22685. }
  22686. }
  22687. zend_hash_add_new(zobj->properties, name, value);
  22688. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22689. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22690. }
  22691. goto exit_assign_obj;
  22692. }
  22693. }
  22694. }
  22695. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  22696. } else {
  22697. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  22698. if (UNEXPECTED(!name)) {
  22699. UNDEF_RESULT();
  22700. goto exit_assign_obj;
  22701. }
  22702. }
  22703. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  22704. ZVAL_DEREF(value);
  22705. }
  22706. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  22707. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  22708. zend_tmp_string_release(tmp_name);
  22709. }
  22710. free_and_exit_assign_obj:
  22711. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22712. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  22713. }
  22714. exit_assign_obj:
  22715. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22716. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22717. /* assign_obj has two opcodes! */
  22718. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  22719. }
  22720. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  22721. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22722. {
  22723. USE_OPLINE
  22724. zval *object, *value, tmp;
  22725. zend_object *zobj;
  22726. zend_string *name, *tmp_name;
  22727. SAVE_OPLINE();
  22728. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22729. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  22730. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  22731. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  22732. object = Z_REFVAL_P(object);
  22733. goto assign_object;
  22734. }
  22735. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  22736. value = &EG(uninitialized_zval);
  22737. goto free_and_exit_assign_obj;
  22738. }
  22739. assign_object:
  22740. zobj = Z_OBJ_P(object);
  22741. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22742. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  22743. void **cache_slot = CACHE_ADDR(opline->extended_value);
  22744. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  22745. zend_object *zobj = Z_OBJ_P(object);
  22746. zval *property_val;
  22747. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  22748. property_val = OBJ_PROP(zobj, prop_offset);
  22749. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  22750. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  22751. if (UNEXPECTED(prop_info != NULL)) {
  22752. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  22753. goto free_and_exit_assign_obj;
  22754. } else {
  22755. fast_assign_obj:
  22756. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  22757. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22758. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22759. }
  22760. goto exit_assign_obj;
  22761. }
  22762. }
  22763. } else {
  22764. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  22765. if (EXPECTED(zobj->properties != NULL)) {
  22766. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  22767. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  22768. GC_DELREF(zobj->properties);
  22769. }
  22770. zobj->properties = zend_array_dup(zobj->properties);
  22771. }
  22772. property_val = zend_hash_find_known_hash(zobj->properties, name);
  22773. if (property_val) {
  22774. goto fast_assign_obj;
  22775. }
  22776. }
  22777. if (!zobj->ce->__set) {
  22778. if (EXPECTED(zobj->properties == NULL)) {
  22779. rebuild_object_properties(zobj);
  22780. }
  22781. if (IS_TMP_VAR == IS_CONST) {
  22782. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  22783. Z_ADDREF_P(value);
  22784. }
  22785. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  22786. if (Z_ISREF_P(value)) {
  22787. if (IS_TMP_VAR == IS_VAR) {
  22788. zend_reference *ref = Z_REF_P(value);
  22789. if (GC_DELREF(ref) == 0) {
  22790. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  22791. efree_size(ref, sizeof(zend_reference));
  22792. value = &tmp;
  22793. } else {
  22794. value = Z_REFVAL_P(value);
  22795. Z_TRY_ADDREF_P(value);
  22796. }
  22797. } else {
  22798. value = Z_REFVAL_P(value);
  22799. Z_TRY_ADDREF_P(value);
  22800. }
  22801. } else if (IS_TMP_VAR == IS_CV) {
  22802. Z_TRY_ADDREF_P(value);
  22803. }
  22804. }
  22805. zend_hash_add_new(zobj->properties, name, value);
  22806. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22807. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22808. }
  22809. goto exit_assign_obj;
  22810. }
  22811. }
  22812. }
  22813. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  22814. } else {
  22815. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  22816. if (UNEXPECTED(!name)) {
  22817. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  22818. UNDEF_RESULT();
  22819. goto exit_assign_obj;
  22820. }
  22821. }
  22822. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  22823. ZVAL_DEREF(value);
  22824. }
  22825. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  22826. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  22827. zend_tmp_string_release(tmp_name);
  22828. }
  22829. free_and_exit_assign_obj:
  22830. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22831. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  22832. }
  22833. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  22834. exit_assign_obj:
  22835. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22836. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22837. /* assign_obj has two opcodes! */
  22838. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  22839. }
  22840. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  22841. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22842. {
  22843. USE_OPLINE
  22844. zval *object, *value, tmp;
  22845. zend_object *zobj;
  22846. zend_string *name, *tmp_name;
  22847. SAVE_OPLINE();
  22848. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22849. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  22850. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  22851. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  22852. object = Z_REFVAL_P(object);
  22853. goto assign_object;
  22854. }
  22855. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  22856. value = &EG(uninitialized_zval);
  22857. goto free_and_exit_assign_obj;
  22858. }
  22859. assign_object:
  22860. zobj = Z_OBJ_P(object);
  22861. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22862. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  22863. void **cache_slot = CACHE_ADDR(opline->extended_value);
  22864. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  22865. zend_object *zobj = Z_OBJ_P(object);
  22866. zval *property_val;
  22867. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  22868. property_val = OBJ_PROP(zobj, prop_offset);
  22869. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  22870. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  22871. if (UNEXPECTED(prop_info != NULL)) {
  22872. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  22873. goto free_and_exit_assign_obj;
  22874. } else {
  22875. fast_assign_obj:
  22876. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  22877. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22878. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22879. }
  22880. goto exit_assign_obj;
  22881. }
  22882. }
  22883. } else {
  22884. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  22885. if (EXPECTED(zobj->properties != NULL)) {
  22886. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  22887. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  22888. GC_DELREF(zobj->properties);
  22889. }
  22890. zobj->properties = zend_array_dup(zobj->properties);
  22891. }
  22892. property_val = zend_hash_find_known_hash(zobj->properties, name);
  22893. if (property_val) {
  22894. goto fast_assign_obj;
  22895. }
  22896. }
  22897. if (!zobj->ce->__set) {
  22898. if (EXPECTED(zobj->properties == NULL)) {
  22899. rebuild_object_properties(zobj);
  22900. }
  22901. if (IS_VAR == IS_CONST) {
  22902. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  22903. Z_ADDREF_P(value);
  22904. }
  22905. } else if (IS_VAR != IS_TMP_VAR) {
  22906. if (Z_ISREF_P(value)) {
  22907. if (IS_VAR == IS_VAR) {
  22908. zend_reference *ref = Z_REF_P(value);
  22909. if (GC_DELREF(ref) == 0) {
  22910. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  22911. efree_size(ref, sizeof(zend_reference));
  22912. value = &tmp;
  22913. } else {
  22914. value = Z_REFVAL_P(value);
  22915. Z_TRY_ADDREF_P(value);
  22916. }
  22917. } else {
  22918. value = Z_REFVAL_P(value);
  22919. Z_TRY_ADDREF_P(value);
  22920. }
  22921. } else if (IS_VAR == IS_CV) {
  22922. Z_TRY_ADDREF_P(value);
  22923. }
  22924. }
  22925. zend_hash_add_new(zobj->properties, name, value);
  22926. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22927. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22928. }
  22929. goto exit_assign_obj;
  22930. }
  22931. }
  22932. }
  22933. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  22934. } else {
  22935. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  22936. if (UNEXPECTED(!name)) {
  22937. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  22938. UNDEF_RESULT();
  22939. goto exit_assign_obj;
  22940. }
  22941. }
  22942. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  22943. ZVAL_DEREF(value);
  22944. }
  22945. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  22946. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  22947. zend_tmp_string_release(tmp_name);
  22948. }
  22949. free_and_exit_assign_obj:
  22950. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22951. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  22952. }
  22953. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  22954. exit_assign_obj:
  22955. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22956. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22957. /* assign_obj has two opcodes! */
  22958. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  22959. }
  22960. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  22961. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22962. {
  22963. USE_OPLINE
  22964. zval *object, *value, tmp;
  22965. zend_object *zobj;
  22966. zend_string *name, *tmp_name;
  22967. SAVE_OPLINE();
  22968. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22969. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  22970. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  22971. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  22972. object = Z_REFVAL_P(object);
  22973. goto assign_object;
  22974. }
  22975. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  22976. value = &EG(uninitialized_zval);
  22977. goto free_and_exit_assign_obj;
  22978. }
  22979. assign_object:
  22980. zobj = Z_OBJ_P(object);
  22981. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22982. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  22983. void **cache_slot = CACHE_ADDR(opline->extended_value);
  22984. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  22985. zend_object *zobj = Z_OBJ_P(object);
  22986. zval *property_val;
  22987. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  22988. property_val = OBJ_PROP(zobj, prop_offset);
  22989. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  22990. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  22991. if (UNEXPECTED(prop_info != NULL)) {
  22992. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  22993. goto free_and_exit_assign_obj;
  22994. } else {
  22995. fast_assign_obj:
  22996. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  22997. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22998. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22999. }
  23000. goto exit_assign_obj;
  23001. }
  23002. }
  23003. } else {
  23004. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  23005. if (EXPECTED(zobj->properties != NULL)) {
  23006. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  23007. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  23008. GC_DELREF(zobj->properties);
  23009. }
  23010. zobj->properties = zend_array_dup(zobj->properties);
  23011. }
  23012. property_val = zend_hash_find_known_hash(zobj->properties, name);
  23013. if (property_val) {
  23014. goto fast_assign_obj;
  23015. }
  23016. }
  23017. if (!zobj->ce->__set) {
  23018. if (EXPECTED(zobj->properties == NULL)) {
  23019. rebuild_object_properties(zobj);
  23020. }
  23021. if (IS_CV == IS_CONST) {
  23022. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  23023. Z_ADDREF_P(value);
  23024. }
  23025. } else if (IS_CV != IS_TMP_VAR) {
  23026. if (Z_ISREF_P(value)) {
  23027. if (IS_CV == IS_VAR) {
  23028. zend_reference *ref = Z_REF_P(value);
  23029. if (GC_DELREF(ref) == 0) {
  23030. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  23031. efree_size(ref, sizeof(zend_reference));
  23032. value = &tmp;
  23033. } else {
  23034. value = Z_REFVAL_P(value);
  23035. Z_TRY_ADDREF_P(value);
  23036. }
  23037. } else {
  23038. value = Z_REFVAL_P(value);
  23039. Z_TRY_ADDREF_P(value);
  23040. }
  23041. } else if (IS_CV == IS_CV) {
  23042. Z_TRY_ADDREF_P(value);
  23043. }
  23044. }
  23045. zend_hash_add_new(zobj->properties, name, value);
  23046. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23047. ZVAL_COPY(EX_VAR(opline->result.var), value);
  23048. }
  23049. goto exit_assign_obj;
  23050. }
  23051. }
  23052. }
  23053. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  23054. } else {
  23055. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  23056. if (UNEXPECTED(!name)) {
  23057. UNDEF_RESULT();
  23058. goto exit_assign_obj;
  23059. }
  23060. }
  23061. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  23062. ZVAL_DEREF(value);
  23063. }
  23064. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  23065. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  23066. zend_tmp_string_release(tmp_name);
  23067. }
  23068. free_and_exit_assign_obj:
  23069. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23070. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  23071. }
  23072. exit_assign_obj:
  23073. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23074. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  23075. /* assign_obj has two opcodes! */
  23076. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23077. }
  23078. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  23079. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23080. {
  23081. USE_OPLINE
  23082. zval *object_ptr, *orig_object_ptr;
  23083. zval *value;
  23084. zval *variable_ptr;
  23085. zval *dim;
  23086. SAVE_OPLINE();
  23087. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23088. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23089. try_assign_dim_array:
  23090. SEPARATE_ARRAY(object_ptr);
  23091. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  23092. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  23093. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  23094. HashTable *ht = Z_ARRVAL_P(object_ptr);
  23095. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  23096. GC_ADDREF(ht);
  23097. }
  23098. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  23099. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  23100. zend_array_destroy(ht);
  23101. goto assign_dim_error;
  23102. }
  23103. }
  23104. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  23105. ZVAL_DEREF(value);
  23106. }
  23107. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  23108. if (UNEXPECTED(value == NULL)) {
  23109. zend_cannot_add_element();
  23110. goto assign_dim_error;
  23111. } else if (IS_CONST == IS_CV) {
  23112. if (Z_REFCOUNTED_P(value)) {
  23113. Z_ADDREF_P(value);
  23114. }
  23115. } else if (IS_CONST == IS_VAR) {
  23116. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  23117. if (Z_ISREF_P(free_op_data)) {
  23118. if (Z_REFCOUNTED_P(value)) {
  23119. Z_ADDREF_P(value);
  23120. }
  23121. zval_ptr_dtor_nogc(free_op_data);
  23122. }
  23123. } else if (IS_CONST == IS_CONST) {
  23124. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  23125. Z_ADDREF_P(value);
  23126. }
  23127. }
  23128. } else {
  23129. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23130. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  23131. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23132. } else {
  23133. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23134. }
  23135. if (UNEXPECTED(variable_ptr == NULL)) {
  23136. goto assign_dim_error;
  23137. }
  23138. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  23139. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  23140. }
  23141. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23142. ZVAL_COPY(EX_VAR(opline->result.var), value);
  23143. }
  23144. } else {
  23145. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  23146. object_ptr = Z_REFVAL_P(object_ptr);
  23147. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23148. goto try_assign_dim_array;
  23149. }
  23150. }
  23151. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  23152. zend_object *obj = Z_OBJ_P(object_ptr);
  23153. GC_ADDREF(obj);
  23154. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23155. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  23156. dim = ZVAL_UNDEFINED_OP2();
  23157. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  23158. dim++;
  23159. }
  23160. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  23161. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  23162. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  23163. } else if (IS_CONST & (IS_CV|IS_VAR)) {
  23164. ZVAL_DEREF(value);
  23165. }
  23166. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23167. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  23168. zend_objects_store_del(obj);
  23169. }
  23170. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  23171. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  23172. zend_use_new_element_for_string();
  23173. UNDEF_RESULT();
  23174. } else {
  23175. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23176. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  23177. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23178. }
  23179. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  23180. if (Z_ISREF_P(orig_object_ptr)
  23181. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  23182. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  23183. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23184. UNDEF_RESULT();
  23185. } else {
  23186. HashTable *ht = zend_new_array(8);
  23187. zend_uchar old_type = Z_TYPE_P(object_ptr);
  23188. ZVAL_ARR(object_ptr, ht);
  23189. if (UNEXPECTED(old_type == IS_FALSE)) {
  23190. GC_ADDREF(ht);
  23191. zend_false_to_array_deprecated();
  23192. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  23193. zend_array_destroy(ht);
  23194. goto assign_dim_error;
  23195. }
  23196. }
  23197. goto try_assign_dim_array;
  23198. }
  23199. } else {
  23200. zend_use_scalar_as_array();
  23201. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23202. assign_dim_error:
  23203. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23204. ZVAL_NULL(EX_VAR(opline->result.var));
  23205. }
  23206. }
  23207. }
  23208. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  23209. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23210. }
  23211. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  23212. /* assign_dim has two opcodes! */
  23213. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23214. }
  23215. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23216. {
  23217. USE_OPLINE
  23218. zval *object_ptr, *orig_object_ptr;
  23219. zval *value;
  23220. zval *variable_ptr;
  23221. zval *dim;
  23222. SAVE_OPLINE();
  23223. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23224. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23225. try_assign_dim_array:
  23226. SEPARATE_ARRAY(object_ptr);
  23227. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  23228. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  23229. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  23230. HashTable *ht = Z_ARRVAL_P(object_ptr);
  23231. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  23232. GC_ADDREF(ht);
  23233. }
  23234. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  23235. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  23236. zend_array_destroy(ht);
  23237. goto assign_dim_error;
  23238. }
  23239. }
  23240. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  23241. ZVAL_DEREF(value);
  23242. }
  23243. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  23244. if (UNEXPECTED(value == NULL)) {
  23245. zend_cannot_add_element();
  23246. goto assign_dim_error;
  23247. } else if (IS_TMP_VAR == IS_CV) {
  23248. if (Z_REFCOUNTED_P(value)) {
  23249. Z_ADDREF_P(value);
  23250. }
  23251. } else if (IS_TMP_VAR == IS_VAR) {
  23252. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  23253. if (Z_ISREF_P(free_op_data)) {
  23254. if (Z_REFCOUNTED_P(value)) {
  23255. Z_ADDREF_P(value);
  23256. }
  23257. zval_ptr_dtor_nogc(free_op_data);
  23258. }
  23259. } else if (IS_TMP_VAR == IS_CONST) {
  23260. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  23261. Z_ADDREF_P(value);
  23262. }
  23263. }
  23264. } else {
  23265. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23266. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  23267. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23268. } else {
  23269. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23270. }
  23271. if (UNEXPECTED(variable_ptr == NULL)) {
  23272. goto assign_dim_error;
  23273. }
  23274. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  23275. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  23276. }
  23277. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23278. ZVAL_COPY(EX_VAR(opline->result.var), value);
  23279. }
  23280. } else {
  23281. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  23282. object_ptr = Z_REFVAL_P(object_ptr);
  23283. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23284. goto try_assign_dim_array;
  23285. }
  23286. }
  23287. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  23288. zend_object *obj = Z_OBJ_P(object_ptr);
  23289. GC_ADDREF(obj);
  23290. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23291. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  23292. dim = ZVAL_UNDEFINED_OP2();
  23293. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  23294. dim++;
  23295. }
  23296. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  23297. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  23298. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  23299. } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
  23300. ZVAL_DEREF(value);
  23301. }
  23302. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23303. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23304. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  23305. zend_objects_store_del(obj);
  23306. }
  23307. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  23308. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  23309. zend_use_new_element_for_string();
  23310. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23311. UNDEF_RESULT();
  23312. } else {
  23313. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23314. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  23315. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23316. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23317. }
  23318. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  23319. if (Z_ISREF_P(orig_object_ptr)
  23320. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  23321. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  23322. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23323. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23324. UNDEF_RESULT();
  23325. } else {
  23326. HashTable *ht = zend_new_array(8);
  23327. zend_uchar old_type = Z_TYPE_P(object_ptr);
  23328. ZVAL_ARR(object_ptr, ht);
  23329. if (UNEXPECTED(old_type == IS_FALSE)) {
  23330. GC_ADDREF(ht);
  23331. zend_false_to_array_deprecated();
  23332. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  23333. zend_array_destroy(ht);
  23334. goto assign_dim_error;
  23335. }
  23336. }
  23337. goto try_assign_dim_array;
  23338. }
  23339. } else {
  23340. zend_use_scalar_as_array();
  23341. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23342. assign_dim_error:
  23343. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23344. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23345. ZVAL_NULL(EX_VAR(opline->result.var));
  23346. }
  23347. }
  23348. }
  23349. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  23350. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23351. }
  23352. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  23353. /* assign_dim has two opcodes! */
  23354. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23355. }
  23356. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23357. {
  23358. USE_OPLINE
  23359. zval *object_ptr, *orig_object_ptr;
  23360. zval *value;
  23361. zval *variable_ptr;
  23362. zval *dim;
  23363. SAVE_OPLINE();
  23364. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23365. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23366. try_assign_dim_array:
  23367. SEPARATE_ARRAY(object_ptr);
  23368. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  23369. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  23370. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  23371. HashTable *ht = Z_ARRVAL_P(object_ptr);
  23372. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  23373. GC_ADDREF(ht);
  23374. }
  23375. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  23376. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  23377. zend_array_destroy(ht);
  23378. goto assign_dim_error;
  23379. }
  23380. }
  23381. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  23382. ZVAL_DEREF(value);
  23383. }
  23384. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  23385. if (UNEXPECTED(value == NULL)) {
  23386. zend_cannot_add_element();
  23387. goto assign_dim_error;
  23388. } else if (IS_VAR == IS_CV) {
  23389. if (Z_REFCOUNTED_P(value)) {
  23390. Z_ADDREF_P(value);
  23391. }
  23392. } else if (IS_VAR == IS_VAR) {
  23393. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  23394. if (Z_ISREF_P(free_op_data)) {
  23395. if (Z_REFCOUNTED_P(value)) {
  23396. Z_ADDREF_P(value);
  23397. }
  23398. zval_ptr_dtor_nogc(free_op_data);
  23399. }
  23400. } else if (IS_VAR == IS_CONST) {
  23401. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  23402. Z_ADDREF_P(value);
  23403. }
  23404. }
  23405. } else {
  23406. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23407. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  23408. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23409. } else {
  23410. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23411. }
  23412. if (UNEXPECTED(variable_ptr == NULL)) {
  23413. goto assign_dim_error;
  23414. }
  23415. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  23416. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  23417. }
  23418. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23419. ZVAL_COPY(EX_VAR(opline->result.var), value);
  23420. }
  23421. } else {
  23422. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  23423. object_ptr = Z_REFVAL_P(object_ptr);
  23424. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23425. goto try_assign_dim_array;
  23426. }
  23427. }
  23428. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  23429. zend_object *obj = Z_OBJ_P(object_ptr);
  23430. GC_ADDREF(obj);
  23431. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23432. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  23433. dim = ZVAL_UNDEFINED_OP2();
  23434. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  23435. dim++;
  23436. }
  23437. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  23438. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  23439. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  23440. } else if (IS_VAR & (IS_CV|IS_VAR)) {
  23441. ZVAL_DEREF(value);
  23442. }
  23443. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23444. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23445. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  23446. zend_objects_store_del(obj);
  23447. }
  23448. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  23449. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  23450. zend_use_new_element_for_string();
  23451. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23452. UNDEF_RESULT();
  23453. } else {
  23454. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23455. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  23456. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23457. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23458. }
  23459. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  23460. if (Z_ISREF_P(orig_object_ptr)
  23461. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  23462. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  23463. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23464. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23465. UNDEF_RESULT();
  23466. } else {
  23467. HashTable *ht = zend_new_array(8);
  23468. zend_uchar old_type = Z_TYPE_P(object_ptr);
  23469. ZVAL_ARR(object_ptr, ht);
  23470. if (UNEXPECTED(old_type == IS_FALSE)) {
  23471. GC_ADDREF(ht);
  23472. zend_false_to_array_deprecated();
  23473. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  23474. zend_array_destroy(ht);
  23475. goto assign_dim_error;
  23476. }
  23477. }
  23478. goto try_assign_dim_array;
  23479. }
  23480. } else {
  23481. zend_use_scalar_as_array();
  23482. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23483. assign_dim_error:
  23484. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23485. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23486. ZVAL_NULL(EX_VAR(opline->result.var));
  23487. }
  23488. }
  23489. }
  23490. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  23491. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23492. }
  23493. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  23494. /* assign_dim has two opcodes! */
  23495. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23496. }
  23497. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23498. {
  23499. USE_OPLINE
  23500. zval *object_ptr, *orig_object_ptr;
  23501. zval *value;
  23502. zval *variable_ptr;
  23503. zval *dim;
  23504. SAVE_OPLINE();
  23505. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23506. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23507. try_assign_dim_array:
  23508. SEPARATE_ARRAY(object_ptr);
  23509. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  23510. value = EX_VAR((opline+1)->op1.var);
  23511. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  23512. HashTable *ht = Z_ARRVAL_P(object_ptr);
  23513. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  23514. GC_ADDREF(ht);
  23515. }
  23516. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  23517. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  23518. zend_array_destroy(ht);
  23519. goto assign_dim_error;
  23520. }
  23521. }
  23522. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  23523. ZVAL_DEREF(value);
  23524. }
  23525. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  23526. if (UNEXPECTED(value == NULL)) {
  23527. zend_cannot_add_element();
  23528. goto assign_dim_error;
  23529. } else if (IS_CV == IS_CV) {
  23530. if (Z_REFCOUNTED_P(value)) {
  23531. Z_ADDREF_P(value);
  23532. }
  23533. } else if (IS_CV == IS_VAR) {
  23534. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  23535. if (Z_ISREF_P(free_op_data)) {
  23536. if (Z_REFCOUNTED_P(value)) {
  23537. Z_ADDREF_P(value);
  23538. }
  23539. zval_ptr_dtor_nogc(free_op_data);
  23540. }
  23541. } else if (IS_CV == IS_CONST) {
  23542. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  23543. Z_ADDREF_P(value);
  23544. }
  23545. }
  23546. } else {
  23547. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23548. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  23549. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23550. } else {
  23551. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23552. }
  23553. if (UNEXPECTED(variable_ptr == NULL)) {
  23554. goto assign_dim_error;
  23555. }
  23556. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  23557. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  23558. }
  23559. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23560. ZVAL_COPY(EX_VAR(opline->result.var), value);
  23561. }
  23562. } else {
  23563. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  23564. object_ptr = Z_REFVAL_P(object_ptr);
  23565. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23566. goto try_assign_dim_array;
  23567. }
  23568. }
  23569. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  23570. zend_object *obj = Z_OBJ_P(object_ptr);
  23571. GC_ADDREF(obj);
  23572. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23573. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  23574. dim = ZVAL_UNDEFINED_OP2();
  23575. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  23576. dim++;
  23577. }
  23578. value = EX_VAR((opline+1)->op1.var);
  23579. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  23580. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  23581. } else if (IS_CV & (IS_CV|IS_VAR)) {
  23582. ZVAL_DEREF(value);
  23583. }
  23584. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23585. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  23586. zend_objects_store_del(obj);
  23587. }
  23588. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  23589. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  23590. zend_use_new_element_for_string();
  23591. UNDEF_RESULT();
  23592. } else {
  23593. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23594. value = EX_VAR((opline+1)->op1.var);
  23595. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23596. }
  23597. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  23598. if (Z_ISREF_P(orig_object_ptr)
  23599. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  23600. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  23601. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23602. UNDEF_RESULT();
  23603. } else {
  23604. HashTable *ht = zend_new_array(8);
  23605. zend_uchar old_type = Z_TYPE_P(object_ptr);
  23606. ZVAL_ARR(object_ptr, ht);
  23607. if (UNEXPECTED(old_type == IS_FALSE)) {
  23608. GC_ADDREF(ht);
  23609. zend_false_to_array_deprecated();
  23610. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  23611. zend_array_destroy(ht);
  23612. goto assign_dim_error;
  23613. }
  23614. }
  23615. goto try_assign_dim_array;
  23616. }
  23617. } else {
  23618. zend_use_scalar_as_array();
  23619. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23620. assign_dim_error:
  23621. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23622. ZVAL_NULL(EX_VAR(opline->result.var));
  23623. }
  23624. }
  23625. }
  23626. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  23627. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23628. }
  23629. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  23630. /* assign_dim has two opcodes! */
  23631. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23632. }
  23633. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23634. {
  23635. USE_OPLINE
  23636. zval *property, *container, *value_ptr;
  23637. SAVE_OPLINE();
  23638. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23639. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23640. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  23641. if (1) {
  23642. if (IS_VAR == IS_UNUSED) {
  23643. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  23644. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23645. } else {
  23646. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23647. }
  23648. } else {
  23649. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  23650. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23651. } else {
  23652. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23653. }
  23654. }
  23655. } else {
  23656. zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23657. }
  23658. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  23659. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23660. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  23661. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23662. }
  23663. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  23664. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23665. {
  23666. USE_OPLINE
  23667. zval *property, *container, *value_ptr;
  23668. SAVE_OPLINE();
  23669. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23670. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23671. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  23672. if (1) {
  23673. if (IS_VAR == IS_UNUSED) {
  23674. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  23675. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23676. } else {
  23677. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23678. }
  23679. } else {
  23680. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  23681. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23682. } else {
  23683. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23684. }
  23685. }
  23686. } else {
  23687. zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23688. }
  23689. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  23690. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23691. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23692. }
  23693. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  23694. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23695. {
  23696. USE_OPLINE
  23697. zval *function_name;
  23698. zend_class_entry *ce;
  23699. uint32_t call_info;
  23700. zend_function *fbc;
  23701. zend_execute_data *call;
  23702. SAVE_OPLINE();
  23703. if (IS_VAR == IS_CONST) {
  23704. /* no function found. try a static method in class */
  23705. ce = CACHED_PTR(opline->result.num);
  23706. if (UNEXPECTED(ce == NULL)) {
  23707. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  23708. if (UNEXPECTED(ce == NULL)) {
  23709. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23710. HANDLE_EXCEPTION();
  23711. }
  23712. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  23713. CACHE_PTR(opline->result.num, ce);
  23714. }
  23715. }
  23716. } else if (IS_VAR == IS_UNUSED) {
  23717. ce = zend_fetch_class(NULL, opline->op1.num);
  23718. if (UNEXPECTED(ce == NULL)) {
  23719. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23720. HANDLE_EXCEPTION();
  23721. }
  23722. } else {
  23723. ce = Z_CE_P(EX_VAR(opline->op1.var));
  23724. }
  23725. if (IS_VAR == IS_CONST &&
  23726. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  23727. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  23728. /* nothing to do */
  23729. } else if (IS_VAR != IS_CONST &&
  23730. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  23731. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  23732. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  23733. } else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  23734. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23735. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  23736. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  23737. do {
  23738. if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  23739. function_name = Z_REFVAL_P(function_name);
  23740. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  23741. break;
  23742. }
  23743. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  23744. ZVAL_UNDEFINED_OP2();
  23745. if (UNEXPECTED(EG(exception) != NULL)) {
  23746. HANDLE_EXCEPTION();
  23747. }
  23748. }
  23749. zend_throw_error(NULL, "Method name must be a string");
  23750. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23751. HANDLE_EXCEPTION();
  23752. } while (0);
  23753. }
  23754. }
  23755. if (ce->get_static_method) {
  23756. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  23757. } else {
  23758. 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));
  23759. }
  23760. if (UNEXPECTED(fbc == NULL)) {
  23761. if (EXPECTED(!EG(exception))) {
  23762. zend_undefined_method(ce, Z_STR_P(function_name));
  23763. }
  23764. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23765. HANDLE_EXCEPTION();
  23766. }
  23767. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  23768. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  23769. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  23770. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  23771. }
  23772. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  23773. init_func_run_time_cache(&fbc->op_array);
  23774. }
  23775. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  23776. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23777. }
  23778. } else {
  23779. if (UNEXPECTED(ce->constructor == NULL)) {
  23780. zend_throw_error(NULL, "Cannot call constructor");
  23781. HANDLE_EXCEPTION();
  23782. }
  23783. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  23784. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  23785. HANDLE_EXCEPTION();
  23786. }
  23787. fbc = ce->constructor;
  23788. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  23789. init_func_run_time_cache(&fbc->op_array);
  23790. }
  23791. }
  23792. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  23793. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  23794. ce = (zend_class_entry*)Z_OBJ(EX(This));
  23795. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  23796. } else {
  23797. zend_non_static_method_call(fbc);
  23798. HANDLE_EXCEPTION();
  23799. }
  23800. } else {
  23801. /* previous opcode is ZEND_FETCH_CLASS */
  23802. if (IS_VAR == IS_UNUSED
  23803. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  23804. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  23805. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  23806. ce = Z_OBJCE(EX(This));
  23807. } else {
  23808. ce = Z_CE(EX(This));
  23809. }
  23810. }
  23811. call_info = ZEND_CALL_NESTED_FUNCTION;
  23812. }
  23813. call = zend_vm_stack_push_call_frame(call_info,
  23814. fbc, opline->extended_value, ce);
  23815. call->prev_execute_data = EX(call);
  23816. EX(call) = call;
  23817. ZEND_VM_NEXT_OPCODE();
  23818. }
  23819. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23820. {
  23821. USE_OPLINE
  23822. zval *expr_ptr, new_expr;
  23823. SAVE_OPLINE();
  23824. if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
  23825. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  23826. expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23827. if (Z_ISREF_P(expr_ptr)) {
  23828. Z_ADDREF_P(expr_ptr);
  23829. } else {
  23830. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  23831. }
  23832. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  23833. } else {
  23834. expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23835. if (IS_VAR == IS_TMP_VAR) {
  23836. /* pass */
  23837. } else if (IS_VAR == IS_CONST) {
  23838. Z_TRY_ADDREF_P(expr_ptr);
  23839. } else if (IS_VAR == IS_CV) {
  23840. ZVAL_DEREF(expr_ptr);
  23841. Z_TRY_ADDREF_P(expr_ptr);
  23842. } else /* if (IS_VAR == IS_VAR) */ {
  23843. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  23844. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  23845. expr_ptr = Z_REFVAL_P(expr_ptr);
  23846. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  23847. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  23848. expr_ptr = &new_expr;
  23849. efree_size(ref, sizeof(zend_reference));
  23850. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  23851. Z_ADDREF_P(expr_ptr);
  23852. }
  23853. }
  23854. }
  23855. }
  23856. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  23857. zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23858. zend_string *str;
  23859. zend_ulong hval;
  23860. add_again:
  23861. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  23862. str = Z_STR_P(offset);
  23863. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  23864. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  23865. goto num_index;
  23866. }
  23867. }
  23868. str_index:
  23869. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  23870. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  23871. hval = Z_LVAL_P(offset);
  23872. num_index:
  23873. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  23874. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  23875. offset = Z_REFVAL_P(offset);
  23876. goto add_again;
  23877. } else if (Z_TYPE_P(offset) == IS_NULL) {
  23878. str = ZSTR_EMPTY_ALLOC();
  23879. goto str_index;
  23880. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  23881. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  23882. goto num_index;
  23883. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  23884. hval = 0;
  23885. goto num_index;
  23886. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  23887. hval = 1;
  23888. goto num_index;
  23889. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  23890. zend_use_resource_as_offset(offset);
  23891. hval = Z_RES_HANDLE_P(offset);
  23892. goto num_index;
  23893. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  23894. ZVAL_UNDEFINED_OP2();
  23895. str = ZSTR_EMPTY_ALLOC();
  23896. goto str_index;
  23897. } else {
  23898. zend_illegal_offset();
  23899. zval_ptr_dtor_nogc(expr_ptr);
  23900. }
  23901. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23902. } else {
  23903. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  23904. zend_cannot_add_element();
  23905. zval_ptr_dtor_nogc(expr_ptr);
  23906. }
  23907. }
  23908. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  23909. }
  23910. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23911. {
  23912. zval *array;
  23913. uint32_t size;
  23914. USE_OPLINE
  23915. array = EX_VAR(opline->result.var);
  23916. if (IS_VAR != IS_UNUSED) {
  23917. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  23918. ZVAL_ARR(array, zend_new_array(size));
  23919. /* Explicitly initialize array as not-packed if flag is set */
  23920. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  23921. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  23922. }
  23923. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  23924. } else {
  23925. ZVAL_ARR(array, zend_new_array(0));
  23926. ZEND_VM_NEXT_OPCODE();
  23927. }
  23928. }
  23929. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23930. {
  23931. USE_OPLINE
  23932. zval *container;
  23933. zval *offset;
  23934. zend_ulong hval;
  23935. zend_string *key;
  23936. SAVE_OPLINE();
  23937. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23938. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23939. do {
  23940. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  23941. HashTable *ht;
  23942. unset_dim_array:
  23943. SEPARATE_ARRAY(container);
  23944. ht = Z_ARRVAL_P(container);
  23945. offset_again:
  23946. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  23947. key = Z_STR_P(offset);
  23948. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  23949. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  23950. goto num_index_dim;
  23951. }
  23952. }
  23953. str_index_dim:
  23954. ZEND_ASSERT(ht != &EG(symbol_table));
  23955. zend_hash_del(ht, key);
  23956. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  23957. hval = Z_LVAL_P(offset);
  23958. num_index_dim:
  23959. zend_hash_index_del(ht, hval);
  23960. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  23961. offset = Z_REFVAL_P(offset);
  23962. goto offset_again;
  23963. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  23964. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  23965. goto num_index_dim;
  23966. } else if (Z_TYPE_P(offset) == IS_NULL) {
  23967. key = ZSTR_EMPTY_ALLOC();
  23968. goto str_index_dim;
  23969. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  23970. hval = 0;
  23971. goto num_index_dim;
  23972. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  23973. hval = 1;
  23974. goto num_index_dim;
  23975. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  23976. zend_use_resource_as_offset(offset);
  23977. hval = Z_RES_HANDLE_P(offset);
  23978. goto num_index_dim;
  23979. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  23980. ZVAL_UNDEFINED_OP2();
  23981. key = ZSTR_EMPTY_ALLOC();
  23982. goto str_index_dim;
  23983. } else {
  23984. zend_type_error("Illegal offset type in unset");
  23985. }
  23986. break;
  23987. } else if (Z_ISREF_P(container)) {
  23988. container = Z_REFVAL_P(container);
  23989. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  23990. goto unset_dim_array;
  23991. }
  23992. }
  23993. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  23994. container = ZVAL_UNDEFINED_OP1();
  23995. }
  23996. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  23997. offset = ZVAL_UNDEFINED_OP2();
  23998. }
  23999. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  24000. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  24001. offset++;
  24002. }
  24003. Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
  24004. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  24005. zend_throw_error(NULL, "Cannot unset string offsets");
  24006. } else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
  24007. zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
  24008. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
  24009. zend_false_to_array_deprecated();
  24010. }
  24011. } while (0);
  24012. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24013. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24014. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24015. }
  24016. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24017. {
  24018. USE_OPLINE
  24019. zval *container;
  24020. zval *offset;
  24021. zend_string *name, *tmp_name;
  24022. SAVE_OPLINE();
  24023. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24024. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  24025. do {
  24026. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  24027. if (Z_ISREF_P(container)) {
  24028. container = Z_REFVAL_P(container);
  24029. if (Z_TYPE_P(container) != IS_OBJECT) {
  24030. if (IS_VAR == IS_CV
  24031. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  24032. ZVAL_UNDEFINED_OP1();
  24033. }
  24034. break;
  24035. }
  24036. } else {
  24037. break;
  24038. }
  24039. }
  24040. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  24041. name = Z_STR_P(offset);
  24042. } else {
  24043. name = zval_try_get_tmp_string(offset, &tmp_name);
  24044. if (UNEXPECTED(!name)) {
  24045. break;
  24046. }
  24047. }
  24048. Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  24049. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  24050. zend_tmp_string_release(tmp_name);
  24051. }
  24052. } while (0);
  24053. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24054. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24055. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24056. }
  24057. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24058. {
  24059. USE_OPLINE
  24060. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  24061. SAVE_OPLINE();
  24062. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  24063. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24064. }
  24065. /* Destroy the previously yielded value */
  24066. zval_ptr_dtor(&generator->value);
  24067. /* Destroy the previously yielded key */
  24068. zval_ptr_dtor(&generator->key);
  24069. /* Set the new yielded value */
  24070. if (IS_VAR != IS_UNUSED) {
  24071. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  24072. /* Constants and temporary variables aren't yieldable by reference,
  24073. * but we still allow them with a notice. */
  24074. if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
  24075. zval *value;
  24076. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  24077. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24078. ZVAL_COPY_VALUE(&generator->value, value);
  24079. if (IS_VAR == IS_CONST) {
  24080. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  24081. Z_ADDREF(generator->value);
  24082. }
  24083. }
  24084. } else {
  24085. zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24086. /* If a function call result is yielded and the function did
  24087. * not return by reference we throw a notice. */
  24088. do {
  24089. if (IS_VAR == IS_VAR) {
  24090. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  24091. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  24092. && !Z_ISREF_P(value_ptr)) {
  24093. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  24094. ZVAL_COPY(&generator->value, value_ptr);
  24095. break;
  24096. }
  24097. }
  24098. if (Z_ISREF_P(value_ptr)) {
  24099. Z_ADDREF_P(value_ptr);
  24100. } else {
  24101. ZVAL_MAKE_REF_EX(value_ptr, 2);
  24102. }
  24103. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  24104. } while (0);
  24105. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24106. }
  24107. } else {
  24108. zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24109. /* Consts, temporary variables and references need copying */
  24110. if (IS_VAR == IS_CONST) {
  24111. ZVAL_COPY_VALUE(&generator->value, value);
  24112. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  24113. Z_ADDREF(generator->value);
  24114. }
  24115. } else if (IS_VAR == IS_TMP_VAR) {
  24116. ZVAL_COPY_VALUE(&generator->value, value);
  24117. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  24118. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  24119. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24120. } else {
  24121. ZVAL_COPY_VALUE(&generator->value, value);
  24122. if (IS_VAR == IS_CV) {
  24123. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  24124. }
  24125. }
  24126. }
  24127. } else {
  24128. /* If no value was specified yield null */
  24129. ZVAL_NULL(&generator->value);
  24130. }
  24131. /* Set the new yielded key */
  24132. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  24133. zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  24134. if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  24135. key = Z_REFVAL_P(key);
  24136. }
  24137. ZVAL_COPY(&generator->key, key);
  24138. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24139. if (Z_TYPE(generator->key) == IS_LONG
  24140. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  24141. ) {
  24142. generator->largest_used_integer_key = Z_LVAL(generator->key);
  24143. }
  24144. } else {
  24145. /* If no key was specified we use auto-increment keys */
  24146. generator->largest_used_integer_key++;
  24147. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  24148. }
  24149. if (RETURN_VALUE_USED(opline)) {
  24150. /* If the return value of yield is used set the send
  24151. * target and initialize it to NULL */
  24152. generator->send_target = EX_VAR(opline->result.var);
  24153. ZVAL_NULL(generator->send_target);
  24154. } else {
  24155. generator->send_target = NULL;
  24156. }
  24157. /* We increment to the next op, so we are at the correct position when the
  24158. * generator is resumed. */
  24159. ZEND_VM_INC_OPCODE();
  24160. /* The GOTO VM uses a local opline variable. We need to set the opline
  24161. * variable in execute_data so we don't resume at an old position. */
  24162. SAVE_OPLINE();
  24163. ZEND_VM_RETURN();
  24164. }
  24165. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24166. {
  24167. USE_OPLINE
  24168. zval *op1, *op2;
  24169. bool result;
  24170. SAVE_OPLINE();
  24171. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  24172. op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  24173. result = fast_is_identical_function(op1, op2);
  24174. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24175. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24176. ZEND_VM_SMART_BRANCH(result, 1);
  24177. }
  24178. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24179. {
  24180. USE_OPLINE
  24181. zval *op1, *op2;
  24182. bool result;
  24183. SAVE_OPLINE();
  24184. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  24185. op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  24186. result = fast_is_identical_function(op1, op2);
  24187. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24188. ZEND_VM_SMART_BRANCH(result, 1);
  24189. }
  24190. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24191. {
  24192. USE_OPLINE
  24193. zval *op1, *op2;
  24194. bool result;
  24195. SAVE_OPLINE();
  24196. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  24197. op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  24198. result = fast_is_not_identical_function(op1, op2);
  24199. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24200. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24201. ZEND_VM_SMART_BRANCH(result, 1);
  24202. }
  24203. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24204. {
  24205. USE_OPLINE
  24206. zval *value;
  24207. zval *variable_ptr;
  24208. SAVE_OPLINE();
  24209. value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  24210. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24211. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  24212. if (UNEXPECTED(0)) {
  24213. ZVAL_COPY(EX_VAR(opline->result.var), value);
  24214. }
  24215. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24216. /* zend_assign_to_variable() always takes care of op2, never free it! */
  24217. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24218. }
  24219. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24220. {
  24221. USE_OPLINE
  24222. zval *value;
  24223. zval *variable_ptr;
  24224. SAVE_OPLINE();
  24225. value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  24226. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24227. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  24228. if (UNEXPECTED(1)) {
  24229. ZVAL_COPY(EX_VAR(opline->result.var), value);
  24230. }
  24231. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24232. /* zend_assign_to_variable() always takes care of op2, never free it! */
  24233. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24234. }
  24235. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24236. {
  24237. USE_OPLINE
  24238. zval *op1, *op2;
  24239. bool result;
  24240. SAVE_OPLINE();
  24241. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  24242. op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
  24243. result = fast_is_identical_function(op1, op2);
  24244. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24245. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24246. ZEND_VM_SMART_BRANCH(result, 1);
  24247. }
  24248. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24249. {
  24250. USE_OPLINE
  24251. zval *op1, *op2;
  24252. bool result;
  24253. SAVE_OPLINE();
  24254. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  24255. op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
  24256. result = fast_is_identical_function(op1, op2);
  24257. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24258. ZEND_VM_SMART_BRANCH(result, 1);
  24259. }
  24260. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24261. {
  24262. USE_OPLINE
  24263. zval *op1, *op2;
  24264. bool result;
  24265. SAVE_OPLINE();
  24266. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  24267. op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
  24268. result = fast_is_not_identical_function(op1, op2);
  24269. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24270. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24271. ZEND_VM_SMART_BRANCH(result, 1);
  24272. }
  24273. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24274. {
  24275. USE_OPLINE
  24276. zval *value;
  24277. zval *variable_ptr;
  24278. SAVE_OPLINE();
  24279. value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  24280. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24281. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  24282. if (UNEXPECTED(0)) {
  24283. ZVAL_COPY(EX_VAR(opline->result.var), value);
  24284. }
  24285. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24286. /* zend_assign_to_variable() always takes care of op2, never free it! */
  24287. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24288. }
  24289. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24290. {
  24291. USE_OPLINE
  24292. zval *value;
  24293. zval *variable_ptr;
  24294. SAVE_OPLINE();
  24295. value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  24296. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24297. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  24298. if (UNEXPECTED(1)) {
  24299. ZVAL_COPY(EX_VAR(opline->result.var), value);
  24300. }
  24301. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24302. /* zend_assign_to_variable() always takes care of op2, never free it! */
  24303. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24304. }
  24305. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24306. {
  24307. USE_OPLINE
  24308. zval *variable_ptr;
  24309. zval *value_ptr;
  24310. SAVE_OPLINE();
  24311. value_ptr = _get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  24312. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24313. if (IS_VAR == IS_VAR &&
  24314. UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
  24315. zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
  24316. variable_ptr = &EG(uninitialized_zval);
  24317. } else if (IS_VAR == IS_VAR &&
  24318. opline->extended_value == ZEND_RETURNS_FUNCTION &&
  24319. UNEXPECTED(!Z_ISREF_P(value_ptr))) {
  24320. variable_ptr = zend_wrong_assign_to_variable_reference(
  24321. variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  24322. } else {
  24323. zend_assign_to_variable_reference(variable_ptr, value_ptr);
  24324. }
  24325. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24326. ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
  24327. }
  24328. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24329. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24330. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24331. }
  24332. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24333. {
  24334. USE_OPLINE
  24335. zval *var_ptr;
  24336. zval *value, *container, *dim;
  24337. HashTable *ht;
  24338. SAVE_OPLINE();
  24339. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24340. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  24341. assign_dim_op_array:
  24342. SEPARATE_ARRAY(container);
  24343. ht = Z_ARRVAL_P(container);
  24344. assign_dim_op_new_array:
  24345. dim = NULL;
  24346. if (IS_UNUSED == IS_UNUSED) {
  24347. var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
  24348. if (UNEXPECTED(!var_ptr)) {
  24349. zend_cannot_add_element();
  24350. goto assign_dim_op_ret_null;
  24351. }
  24352. } else {
  24353. if (IS_UNUSED == IS_CONST) {
  24354. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
  24355. } else {
  24356. var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
  24357. }
  24358. if (UNEXPECTED(!var_ptr)) {
  24359. goto assign_dim_op_ret_null;
  24360. }
  24361. }
  24362. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  24363. do {
  24364. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
  24365. zend_reference *ref = Z_REF_P(var_ptr);
  24366. var_ptr = Z_REFVAL_P(var_ptr);
  24367. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  24368. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  24369. break;
  24370. }
  24371. }
  24372. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  24373. } while (0);
  24374. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24375. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  24376. }
  24377. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  24378. } else {
  24379. if (EXPECTED(Z_ISREF_P(container))) {
  24380. container = Z_REFVAL_P(container);
  24381. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  24382. goto assign_dim_op_array;
  24383. }
  24384. }
  24385. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  24386. zend_object *obj = Z_OBJ_P(container);
  24387. dim = NULL;
  24388. if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  24389. dim++;
  24390. }
  24391. zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
  24392. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  24393. zend_uchar old_type;
  24394. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  24395. ZVAL_UNDEFINED_OP1();
  24396. }
  24397. ht = zend_new_array(8);
  24398. old_type = Z_TYPE_P(container);
  24399. ZVAL_ARR(container, ht);
  24400. if (UNEXPECTED(old_type == IS_FALSE)) {
  24401. GC_ADDREF(ht);
  24402. zend_false_to_array_deprecated();
  24403. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  24404. zend_array_destroy(ht);
  24405. goto assign_dim_op_ret_null;
  24406. }
  24407. }
  24408. goto assign_dim_op_new_array;
  24409. } else {
  24410. dim = NULL;
  24411. zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  24412. assign_dim_op_ret_null:
  24413. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  24414. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24415. ZVAL_NULL(EX_VAR(opline->result.var));
  24416. }
  24417. }
  24418. }
  24419. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24420. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  24421. }
  24422. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24423. {
  24424. USE_OPLINE
  24425. zval *container;
  24426. SAVE_OPLINE();
  24427. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24428. zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
  24429. if (IS_VAR == IS_VAR) {
  24430. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  24431. }
  24432. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24433. }
  24434. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24435. {
  24436. USE_OPLINE
  24437. zval *container;
  24438. SAVE_OPLINE();
  24439. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24440. zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
  24441. if (IS_VAR == IS_VAR) {
  24442. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  24443. }
  24444. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24445. }
  24446. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24447. {
  24448. #if 0
  24449. USE_OPLINE
  24450. #endif
  24451. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  24452. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  24453. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24454. }
  24455. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24456. } else {
  24457. if (IS_UNUSED == IS_UNUSED) {
  24458. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24459. }
  24460. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24461. }
  24462. }
  24463. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24464. {
  24465. USE_OPLINE
  24466. zval *object_ptr, *orig_object_ptr;
  24467. zval *value;
  24468. zval *variable_ptr;
  24469. zval *dim;
  24470. SAVE_OPLINE();
  24471. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24472. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  24473. try_assign_dim_array:
  24474. SEPARATE_ARRAY(object_ptr);
  24475. if (IS_UNUSED == IS_UNUSED) {
  24476. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  24477. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  24478. HashTable *ht = Z_ARRVAL_P(object_ptr);
  24479. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  24480. GC_ADDREF(ht);
  24481. }
  24482. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  24483. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  24484. zend_array_destroy(ht);
  24485. goto assign_dim_error;
  24486. }
  24487. }
  24488. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  24489. ZVAL_DEREF(value);
  24490. }
  24491. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  24492. if (UNEXPECTED(value == NULL)) {
  24493. zend_cannot_add_element();
  24494. goto assign_dim_error;
  24495. } else if (IS_CONST == IS_CV) {
  24496. if (Z_REFCOUNTED_P(value)) {
  24497. Z_ADDREF_P(value);
  24498. }
  24499. } else if (IS_CONST == IS_VAR) {
  24500. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  24501. if (Z_ISREF_P(free_op_data)) {
  24502. if (Z_REFCOUNTED_P(value)) {
  24503. Z_ADDREF_P(value);
  24504. }
  24505. zval_ptr_dtor_nogc(free_op_data);
  24506. }
  24507. } else if (IS_CONST == IS_CONST) {
  24508. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  24509. Z_ADDREF_P(value);
  24510. }
  24511. }
  24512. } else {
  24513. dim = NULL;
  24514. if (IS_UNUSED == IS_CONST) {
  24515. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  24516. } else {
  24517. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  24518. }
  24519. if (UNEXPECTED(variable_ptr == NULL)) {
  24520. goto assign_dim_error;
  24521. }
  24522. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  24523. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  24524. }
  24525. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24526. ZVAL_COPY(EX_VAR(opline->result.var), value);
  24527. }
  24528. } else {
  24529. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  24530. object_ptr = Z_REFVAL_P(object_ptr);
  24531. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  24532. goto try_assign_dim_array;
  24533. }
  24534. }
  24535. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  24536. zend_object *obj = Z_OBJ_P(object_ptr);
  24537. GC_ADDREF(obj);
  24538. dim = NULL;
  24539. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  24540. dim = ZVAL_UNDEFINED_OP2();
  24541. } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  24542. dim++;
  24543. }
  24544. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  24545. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  24546. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  24547. } else if (IS_CONST & (IS_CV|IS_VAR)) {
  24548. ZVAL_DEREF(value);
  24549. }
  24550. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  24551. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  24552. zend_objects_store_del(obj);
  24553. }
  24554. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  24555. if (IS_UNUSED == IS_UNUSED) {
  24556. zend_use_new_element_for_string();
  24557. UNDEF_RESULT();
  24558. } else {
  24559. dim = NULL;
  24560. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  24561. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  24562. }
  24563. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  24564. if (Z_ISREF_P(orig_object_ptr)
  24565. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  24566. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  24567. dim = NULL;
  24568. UNDEF_RESULT();
  24569. } else {
  24570. HashTable *ht = zend_new_array(8);
  24571. zend_uchar old_type = Z_TYPE_P(object_ptr);
  24572. ZVAL_ARR(object_ptr, ht);
  24573. if (UNEXPECTED(old_type == IS_FALSE)) {
  24574. GC_ADDREF(ht);
  24575. zend_false_to_array_deprecated();
  24576. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  24577. zend_array_destroy(ht);
  24578. goto assign_dim_error;
  24579. }
  24580. }
  24581. goto try_assign_dim_array;
  24582. }
  24583. } else {
  24584. zend_use_scalar_as_array();
  24585. dim = NULL;
  24586. assign_dim_error:
  24587. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24588. ZVAL_NULL(EX_VAR(opline->result.var));
  24589. }
  24590. }
  24591. }
  24592. if (IS_UNUSED != IS_UNUSED) {
  24593. }
  24594. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24595. /* assign_dim has two opcodes! */
  24596. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  24597. }
  24598. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24599. {
  24600. USE_OPLINE
  24601. zval *object_ptr, *orig_object_ptr;
  24602. zval *value;
  24603. zval *variable_ptr;
  24604. zval *dim;
  24605. SAVE_OPLINE();
  24606. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24607. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  24608. try_assign_dim_array:
  24609. SEPARATE_ARRAY(object_ptr);
  24610. if (IS_UNUSED == IS_UNUSED) {
  24611. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  24612. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  24613. HashTable *ht = Z_ARRVAL_P(object_ptr);
  24614. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  24615. GC_ADDREF(ht);
  24616. }
  24617. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  24618. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  24619. zend_array_destroy(ht);
  24620. goto assign_dim_error;
  24621. }
  24622. }
  24623. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  24624. ZVAL_DEREF(value);
  24625. }
  24626. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  24627. if (UNEXPECTED(value == NULL)) {
  24628. zend_cannot_add_element();
  24629. goto assign_dim_error;
  24630. } else if (IS_TMP_VAR == IS_CV) {
  24631. if (Z_REFCOUNTED_P(value)) {
  24632. Z_ADDREF_P(value);
  24633. }
  24634. } else if (IS_TMP_VAR == IS_VAR) {
  24635. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  24636. if (Z_ISREF_P(free_op_data)) {
  24637. if (Z_REFCOUNTED_P(value)) {
  24638. Z_ADDREF_P(value);
  24639. }
  24640. zval_ptr_dtor_nogc(free_op_data);
  24641. }
  24642. } else if (IS_TMP_VAR == IS_CONST) {
  24643. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  24644. Z_ADDREF_P(value);
  24645. }
  24646. }
  24647. } else {
  24648. dim = NULL;
  24649. if (IS_UNUSED == IS_CONST) {
  24650. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  24651. } else {
  24652. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  24653. }
  24654. if (UNEXPECTED(variable_ptr == NULL)) {
  24655. goto assign_dim_error;
  24656. }
  24657. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  24658. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  24659. }
  24660. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24661. ZVAL_COPY(EX_VAR(opline->result.var), value);
  24662. }
  24663. } else {
  24664. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  24665. object_ptr = Z_REFVAL_P(object_ptr);
  24666. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  24667. goto try_assign_dim_array;
  24668. }
  24669. }
  24670. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  24671. zend_object *obj = Z_OBJ_P(object_ptr);
  24672. GC_ADDREF(obj);
  24673. dim = NULL;
  24674. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  24675. dim = ZVAL_UNDEFINED_OP2();
  24676. } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  24677. dim++;
  24678. }
  24679. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  24680. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  24681. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  24682. } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
  24683. ZVAL_DEREF(value);
  24684. }
  24685. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  24686. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24687. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  24688. zend_objects_store_del(obj);
  24689. }
  24690. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  24691. if (IS_UNUSED == IS_UNUSED) {
  24692. zend_use_new_element_for_string();
  24693. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24694. UNDEF_RESULT();
  24695. } else {
  24696. dim = NULL;
  24697. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  24698. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  24699. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24700. }
  24701. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  24702. if (Z_ISREF_P(orig_object_ptr)
  24703. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  24704. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  24705. dim = NULL;
  24706. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24707. UNDEF_RESULT();
  24708. } else {
  24709. HashTable *ht = zend_new_array(8);
  24710. zend_uchar old_type = Z_TYPE_P(object_ptr);
  24711. ZVAL_ARR(object_ptr, ht);
  24712. if (UNEXPECTED(old_type == IS_FALSE)) {
  24713. GC_ADDREF(ht);
  24714. zend_false_to_array_deprecated();
  24715. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  24716. zend_array_destroy(ht);
  24717. goto assign_dim_error;
  24718. }
  24719. }
  24720. goto try_assign_dim_array;
  24721. }
  24722. } else {
  24723. zend_use_scalar_as_array();
  24724. dim = NULL;
  24725. assign_dim_error:
  24726. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24727. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24728. ZVAL_NULL(EX_VAR(opline->result.var));
  24729. }
  24730. }
  24731. }
  24732. if (IS_UNUSED != IS_UNUSED) {
  24733. }
  24734. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24735. /* assign_dim has two opcodes! */
  24736. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  24737. }
  24738. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24739. {
  24740. USE_OPLINE
  24741. zval *object_ptr, *orig_object_ptr;
  24742. zval *value;
  24743. zval *variable_ptr;
  24744. zval *dim;
  24745. SAVE_OPLINE();
  24746. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24747. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  24748. try_assign_dim_array:
  24749. SEPARATE_ARRAY(object_ptr);
  24750. if (IS_UNUSED == IS_UNUSED) {
  24751. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  24752. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  24753. HashTable *ht = Z_ARRVAL_P(object_ptr);
  24754. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  24755. GC_ADDREF(ht);
  24756. }
  24757. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  24758. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  24759. zend_array_destroy(ht);
  24760. goto assign_dim_error;
  24761. }
  24762. }
  24763. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  24764. ZVAL_DEREF(value);
  24765. }
  24766. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  24767. if (UNEXPECTED(value == NULL)) {
  24768. zend_cannot_add_element();
  24769. goto assign_dim_error;
  24770. } else if (IS_VAR == IS_CV) {
  24771. if (Z_REFCOUNTED_P(value)) {
  24772. Z_ADDREF_P(value);
  24773. }
  24774. } else if (IS_VAR == IS_VAR) {
  24775. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  24776. if (Z_ISREF_P(free_op_data)) {
  24777. if (Z_REFCOUNTED_P(value)) {
  24778. Z_ADDREF_P(value);
  24779. }
  24780. zval_ptr_dtor_nogc(free_op_data);
  24781. }
  24782. } else if (IS_VAR == IS_CONST) {
  24783. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  24784. Z_ADDREF_P(value);
  24785. }
  24786. }
  24787. } else {
  24788. dim = NULL;
  24789. if (IS_UNUSED == IS_CONST) {
  24790. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  24791. } else {
  24792. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  24793. }
  24794. if (UNEXPECTED(variable_ptr == NULL)) {
  24795. goto assign_dim_error;
  24796. }
  24797. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  24798. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  24799. }
  24800. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24801. ZVAL_COPY(EX_VAR(opline->result.var), value);
  24802. }
  24803. } else {
  24804. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  24805. object_ptr = Z_REFVAL_P(object_ptr);
  24806. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  24807. goto try_assign_dim_array;
  24808. }
  24809. }
  24810. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  24811. zend_object *obj = Z_OBJ_P(object_ptr);
  24812. GC_ADDREF(obj);
  24813. dim = NULL;
  24814. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  24815. dim = ZVAL_UNDEFINED_OP2();
  24816. } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  24817. dim++;
  24818. }
  24819. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  24820. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  24821. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  24822. } else if (IS_VAR & (IS_CV|IS_VAR)) {
  24823. ZVAL_DEREF(value);
  24824. }
  24825. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  24826. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24827. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  24828. zend_objects_store_del(obj);
  24829. }
  24830. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  24831. if (IS_UNUSED == IS_UNUSED) {
  24832. zend_use_new_element_for_string();
  24833. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24834. UNDEF_RESULT();
  24835. } else {
  24836. dim = NULL;
  24837. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  24838. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  24839. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24840. }
  24841. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  24842. if (Z_ISREF_P(orig_object_ptr)
  24843. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  24844. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  24845. dim = NULL;
  24846. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24847. UNDEF_RESULT();
  24848. } else {
  24849. HashTable *ht = zend_new_array(8);
  24850. zend_uchar old_type = Z_TYPE_P(object_ptr);
  24851. ZVAL_ARR(object_ptr, ht);
  24852. if (UNEXPECTED(old_type == IS_FALSE)) {
  24853. GC_ADDREF(ht);
  24854. zend_false_to_array_deprecated();
  24855. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  24856. zend_array_destroy(ht);
  24857. goto assign_dim_error;
  24858. }
  24859. }
  24860. goto try_assign_dim_array;
  24861. }
  24862. } else {
  24863. zend_use_scalar_as_array();
  24864. dim = NULL;
  24865. assign_dim_error:
  24866. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24867. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24868. ZVAL_NULL(EX_VAR(opline->result.var));
  24869. }
  24870. }
  24871. }
  24872. if (IS_UNUSED != IS_UNUSED) {
  24873. }
  24874. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24875. /* assign_dim has two opcodes! */
  24876. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  24877. }
  24878. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24879. {
  24880. USE_OPLINE
  24881. zval *object_ptr, *orig_object_ptr;
  24882. zval *value;
  24883. zval *variable_ptr;
  24884. zval *dim;
  24885. SAVE_OPLINE();
  24886. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24887. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  24888. try_assign_dim_array:
  24889. SEPARATE_ARRAY(object_ptr);
  24890. if (IS_UNUSED == IS_UNUSED) {
  24891. value = EX_VAR((opline+1)->op1.var);
  24892. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  24893. HashTable *ht = Z_ARRVAL_P(object_ptr);
  24894. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  24895. GC_ADDREF(ht);
  24896. }
  24897. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  24898. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  24899. zend_array_destroy(ht);
  24900. goto assign_dim_error;
  24901. }
  24902. }
  24903. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  24904. ZVAL_DEREF(value);
  24905. }
  24906. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  24907. if (UNEXPECTED(value == NULL)) {
  24908. zend_cannot_add_element();
  24909. goto assign_dim_error;
  24910. } else if (IS_CV == IS_CV) {
  24911. if (Z_REFCOUNTED_P(value)) {
  24912. Z_ADDREF_P(value);
  24913. }
  24914. } else if (IS_CV == IS_VAR) {
  24915. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  24916. if (Z_ISREF_P(free_op_data)) {
  24917. if (Z_REFCOUNTED_P(value)) {
  24918. Z_ADDREF_P(value);
  24919. }
  24920. zval_ptr_dtor_nogc(free_op_data);
  24921. }
  24922. } else if (IS_CV == IS_CONST) {
  24923. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  24924. Z_ADDREF_P(value);
  24925. }
  24926. }
  24927. } else {
  24928. dim = NULL;
  24929. if (IS_UNUSED == IS_CONST) {
  24930. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  24931. } else {
  24932. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  24933. }
  24934. if (UNEXPECTED(variable_ptr == NULL)) {
  24935. goto assign_dim_error;
  24936. }
  24937. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  24938. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  24939. }
  24940. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24941. ZVAL_COPY(EX_VAR(opline->result.var), value);
  24942. }
  24943. } else {
  24944. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  24945. object_ptr = Z_REFVAL_P(object_ptr);
  24946. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  24947. goto try_assign_dim_array;
  24948. }
  24949. }
  24950. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  24951. zend_object *obj = Z_OBJ_P(object_ptr);
  24952. GC_ADDREF(obj);
  24953. dim = NULL;
  24954. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  24955. dim = ZVAL_UNDEFINED_OP2();
  24956. } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  24957. dim++;
  24958. }
  24959. value = EX_VAR((opline+1)->op1.var);
  24960. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  24961. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  24962. } else if (IS_CV & (IS_CV|IS_VAR)) {
  24963. ZVAL_DEREF(value);
  24964. }
  24965. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  24966. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  24967. zend_objects_store_del(obj);
  24968. }
  24969. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  24970. if (IS_UNUSED == IS_UNUSED) {
  24971. zend_use_new_element_for_string();
  24972. UNDEF_RESULT();
  24973. } else {
  24974. dim = NULL;
  24975. value = EX_VAR((opline+1)->op1.var);
  24976. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  24977. }
  24978. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  24979. if (Z_ISREF_P(orig_object_ptr)
  24980. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  24981. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  24982. dim = NULL;
  24983. UNDEF_RESULT();
  24984. } else {
  24985. HashTable *ht = zend_new_array(8);
  24986. zend_uchar old_type = Z_TYPE_P(object_ptr);
  24987. ZVAL_ARR(object_ptr, ht);
  24988. if (UNEXPECTED(old_type == IS_FALSE)) {
  24989. GC_ADDREF(ht);
  24990. zend_false_to_array_deprecated();
  24991. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  24992. zend_array_destroy(ht);
  24993. goto assign_dim_error;
  24994. }
  24995. }
  24996. goto try_assign_dim_array;
  24997. }
  24998. } else {
  24999. zend_use_scalar_as_array();
  25000. dim = NULL;
  25001. assign_dim_error:
  25002. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25003. ZVAL_NULL(EX_VAR(opline->result.var));
  25004. }
  25005. }
  25006. }
  25007. if (IS_UNUSED != IS_UNUSED) {
  25008. }
  25009. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25010. /* assign_dim has two opcodes! */
  25011. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  25012. }
  25013. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25014. {
  25015. USE_OPLINE
  25016. zval *function_name;
  25017. zend_class_entry *ce;
  25018. uint32_t call_info;
  25019. zend_function *fbc;
  25020. zend_execute_data *call;
  25021. SAVE_OPLINE();
  25022. if (IS_VAR == IS_CONST) {
  25023. /* no function found. try a static method in class */
  25024. ce = CACHED_PTR(opline->result.num);
  25025. if (UNEXPECTED(ce == NULL)) {
  25026. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  25027. if (UNEXPECTED(ce == NULL)) {
  25028. HANDLE_EXCEPTION();
  25029. }
  25030. if (IS_UNUSED != IS_CONST) {
  25031. CACHE_PTR(opline->result.num, ce);
  25032. }
  25033. }
  25034. } else if (IS_VAR == IS_UNUSED) {
  25035. ce = zend_fetch_class(NULL, opline->op1.num);
  25036. if (UNEXPECTED(ce == NULL)) {
  25037. HANDLE_EXCEPTION();
  25038. }
  25039. } else {
  25040. ce = Z_CE_P(EX_VAR(opline->op1.var));
  25041. }
  25042. if (IS_VAR == IS_CONST &&
  25043. IS_UNUSED == IS_CONST &&
  25044. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  25045. /* nothing to do */
  25046. } else if (IS_VAR != IS_CONST &&
  25047. IS_UNUSED == IS_CONST &&
  25048. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  25049. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  25050. } else if (IS_UNUSED != IS_UNUSED) {
  25051. function_name = NULL;
  25052. if (IS_UNUSED != IS_CONST) {
  25053. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  25054. do {
  25055. if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  25056. function_name = Z_REFVAL_P(function_name);
  25057. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  25058. break;
  25059. }
  25060. } else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  25061. ZVAL_UNDEFINED_OP2();
  25062. if (UNEXPECTED(EG(exception) != NULL)) {
  25063. HANDLE_EXCEPTION();
  25064. }
  25065. }
  25066. zend_throw_error(NULL, "Method name must be a string");
  25067. HANDLE_EXCEPTION();
  25068. } while (0);
  25069. }
  25070. }
  25071. if (ce->get_static_method) {
  25072. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  25073. } else {
  25074. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  25075. }
  25076. if (UNEXPECTED(fbc == NULL)) {
  25077. if (EXPECTED(!EG(exception))) {
  25078. zend_undefined_method(ce, Z_STR_P(function_name));
  25079. }
  25080. HANDLE_EXCEPTION();
  25081. }
  25082. if (IS_UNUSED == IS_CONST &&
  25083. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  25084. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  25085. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  25086. }
  25087. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  25088. init_func_run_time_cache(&fbc->op_array);
  25089. }
  25090. if (IS_UNUSED != IS_CONST) {
  25091. }
  25092. } else {
  25093. if (UNEXPECTED(ce->constructor == NULL)) {
  25094. zend_throw_error(NULL, "Cannot call constructor");
  25095. HANDLE_EXCEPTION();
  25096. }
  25097. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  25098. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  25099. HANDLE_EXCEPTION();
  25100. }
  25101. fbc = ce->constructor;
  25102. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  25103. init_func_run_time_cache(&fbc->op_array);
  25104. }
  25105. }
  25106. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  25107. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  25108. ce = (zend_class_entry*)Z_OBJ(EX(This));
  25109. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  25110. } else {
  25111. zend_non_static_method_call(fbc);
  25112. HANDLE_EXCEPTION();
  25113. }
  25114. } else {
  25115. /* previous opcode is ZEND_FETCH_CLASS */
  25116. if (IS_VAR == IS_UNUSED
  25117. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  25118. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  25119. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  25120. ce = Z_OBJCE(EX(This));
  25121. } else {
  25122. ce = Z_CE(EX(This));
  25123. }
  25124. }
  25125. call_info = ZEND_CALL_NESTED_FUNCTION;
  25126. }
  25127. call = zend_vm_stack_push_call_frame(call_info,
  25128. fbc, opline->extended_value, ce);
  25129. call->prev_execute_data = EX(call);
  25130. EX(call) = call;
  25131. ZEND_VM_NEXT_OPCODE();
  25132. }
  25133. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25134. {
  25135. if (IS_VAR == IS_UNUSED) {
  25136. SAVE_OPLINE();
  25137. zend_verify_missing_return_type(EX(func));
  25138. HANDLE_EXCEPTION();
  25139. } else {
  25140. /* prevents "undefined variable opline" errors */
  25141. #if 0 || (IS_VAR != IS_UNUSED)
  25142. USE_OPLINE
  25143. zval *retval_ref, *retval_ptr;
  25144. zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
  25145. retval_ref = retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25146. if (IS_VAR == IS_CONST) {
  25147. ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
  25148. retval_ref = retval_ptr = EX_VAR(opline->result.var);
  25149. } else if (IS_VAR == IS_VAR) {
  25150. if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
  25151. retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
  25152. }
  25153. ZVAL_DEREF(retval_ptr);
  25154. } else if (IS_VAR == IS_CV) {
  25155. ZVAL_DEREF(retval_ptr);
  25156. }
  25157. if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
  25158. ZEND_VM_NEXT_OPCODE();
  25159. }
  25160. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
  25161. SAVE_OPLINE();
  25162. retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
  25163. if (UNEXPECTED(EG(exception))) {
  25164. HANDLE_EXCEPTION();
  25165. }
  25166. if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
  25167. ZEND_VM_NEXT_OPCODE();
  25168. }
  25169. }
  25170. zend_reference *ref = NULL;
  25171. void *cache_slot = CACHE_ADDR(opline->op2.num);
  25172. if (UNEXPECTED(retval_ref != retval_ptr)) {
  25173. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  25174. ref = Z_REF_P(retval_ref);
  25175. } else {
  25176. /* A cast might happen - unwrap the reference if this is a by-value return */
  25177. if (Z_REFCOUNT_P(retval_ref) == 1) {
  25178. ZVAL_UNREF(retval_ref);
  25179. } else {
  25180. Z_DELREF_P(retval_ref);
  25181. ZVAL_COPY(retval_ref, retval_ptr);
  25182. }
  25183. retval_ptr = retval_ref;
  25184. }
  25185. }
  25186. SAVE_OPLINE();
  25187. if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
  25188. zend_verify_return_error(EX(func), retval_ptr);
  25189. HANDLE_EXCEPTION();
  25190. }
  25191. ZEND_VM_NEXT_OPCODE();
  25192. #endif
  25193. }
  25194. }
  25195. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25196. {
  25197. USE_OPLINE
  25198. zval *varptr, *arg;
  25199. if (IS_UNUSED == IS_CONST) {
  25200. SAVE_OPLINE();
  25201. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  25202. uint32_t arg_num;
  25203. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  25204. if (UNEXPECTED(!arg)) {
  25205. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25206. HANDLE_EXCEPTION();
  25207. }
  25208. } else {
  25209. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25210. }
  25211. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25212. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  25213. SAVE_OPLINE();
  25214. ZVAL_UNDEFINED_OP1();
  25215. ZVAL_NULL(arg);
  25216. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25217. }
  25218. if (IS_VAR == IS_CV) {
  25219. ZVAL_COPY_DEREF(arg, varptr);
  25220. } else /* if (IS_VAR == IS_VAR) */ {
  25221. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  25222. zend_refcounted *ref = Z_COUNTED_P(varptr);
  25223. varptr = Z_REFVAL_P(varptr);
  25224. ZVAL_COPY_VALUE(arg, varptr);
  25225. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  25226. efree_size(ref, sizeof(zend_reference));
  25227. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  25228. Z_ADDREF_P(arg);
  25229. }
  25230. } else {
  25231. ZVAL_COPY_VALUE(arg, varptr);
  25232. }
  25233. }
  25234. ZEND_VM_NEXT_OPCODE();
  25235. }
  25236. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25237. {
  25238. USE_OPLINE
  25239. zval *varptr, *arg;
  25240. if (IS_UNUSED == IS_CONST) {
  25241. SAVE_OPLINE();
  25242. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  25243. uint32_t arg_num;
  25244. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  25245. if (UNEXPECTED(!arg)) {
  25246. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25247. HANDLE_EXCEPTION();
  25248. }
  25249. } else {
  25250. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25251. }
  25252. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25253. ZVAL_COPY_VALUE(arg, varptr);
  25254. if (EXPECTED(Z_ISREF_P(varptr))) {
  25255. ZEND_VM_NEXT_OPCODE();
  25256. }
  25257. SAVE_OPLINE();
  25258. ZVAL_NEW_REF(arg, arg);
  25259. zend_error(E_NOTICE, "Only variables should be passed by reference");
  25260. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25261. }
  25262. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25263. {
  25264. USE_OPLINE
  25265. zval *varptr, *arg;
  25266. uint32_t arg_num;
  25267. if (IS_UNUSED == IS_CONST) {
  25268. SAVE_OPLINE();
  25269. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  25270. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  25271. if (UNEXPECTED(!arg)) {
  25272. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25273. HANDLE_EXCEPTION();
  25274. }
  25275. } else {
  25276. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25277. arg_num = opline->op2.num;
  25278. }
  25279. if (EXPECTED(0)) {
  25280. if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25281. goto send_var;
  25282. }
  25283. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25284. ZVAL_COPY_VALUE(arg, varptr);
  25285. if (EXPECTED(Z_ISREF_P(varptr) ||
  25286. QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
  25287. ZEND_VM_NEXT_OPCODE();
  25288. }
  25289. } else {
  25290. if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25291. goto send_var;
  25292. }
  25293. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25294. ZVAL_COPY_VALUE(arg, varptr);
  25295. if (EXPECTED(Z_ISREF_P(varptr) ||
  25296. ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
  25297. ZEND_VM_NEXT_OPCODE();
  25298. }
  25299. }
  25300. SAVE_OPLINE();
  25301. ZVAL_NEW_REF(arg, arg);
  25302. zend_error(E_NOTICE, "Only variables should be passed by reference");
  25303. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25304. send_var:
  25305. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25306. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  25307. zend_refcounted *ref = Z_COUNTED_P(varptr);
  25308. varptr = Z_REFVAL_P(varptr);
  25309. ZVAL_COPY_VALUE(arg, varptr);
  25310. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  25311. efree_size(ref, sizeof(zend_reference));
  25312. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  25313. Z_ADDREF_P(arg);
  25314. }
  25315. } else {
  25316. ZVAL_COPY_VALUE(arg, varptr);
  25317. }
  25318. ZEND_VM_NEXT_OPCODE();
  25319. }
  25320. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25321. {
  25322. USE_OPLINE
  25323. zval *varptr, *arg;
  25324. uint32_t arg_num;
  25325. if (IS_UNUSED == IS_CONST) {
  25326. SAVE_OPLINE();
  25327. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  25328. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  25329. if (UNEXPECTED(!arg)) {
  25330. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25331. HANDLE_EXCEPTION();
  25332. }
  25333. } else {
  25334. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25335. arg_num = opline->op2.num;
  25336. }
  25337. if (EXPECTED(1)) {
  25338. if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25339. goto send_var;
  25340. }
  25341. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25342. ZVAL_COPY_VALUE(arg, varptr);
  25343. if (EXPECTED(Z_ISREF_P(varptr) ||
  25344. QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
  25345. ZEND_VM_NEXT_OPCODE();
  25346. }
  25347. } else {
  25348. if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25349. goto send_var;
  25350. }
  25351. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25352. ZVAL_COPY_VALUE(arg, varptr);
  25353. if (EXPECTED(Z_ISREF_P(varptr) ||
  25354. ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
  25355. ZEND_VM_NEXT_OPCODE();
  25356. }
  25357. }
  25358. SAVE_OPLINE();
  25359. ZVAL_NEW_REF(arg, arg);
  25360. zend_error(E_NOTICE, "Only variables should be passed by reference");
  25361. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25362. send_var:
  25363. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25364. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  25365. zend_refcounted *ref = Z_COUNTED_P(varptr);
  25366. varptr = Z_REFVAL_P(varptr);
  25367. ZVAL_COPY_VALUE(arg, varptr);
  25368. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  25369. efree_size(ref, sizeof(zend_reference));
  25370. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  25371. Z_ADDREF_P(arg);
  25372. }
  25373. } else {
  25374. ZVAL_COPY_VALUE(arg, varptr);
  25375. }
  25376. ZEND_VM_NEXT_OPCODE();
  25377. }
  25378. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25379. {
  25380. USE_OPLINE
  25381. zval *varptr, *arg;
  25382. SAVE_OPLINE();
  25383. if (IS_UNUSED == IS_CONST) {
  25384. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  25385. uint32_t arg_num;
  25386. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  25387. if (UNEXPECTED(!arg)) {
  25388. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25389. HANDLE_EXCEPTION();
  25390. }
  25391. } else {
  25392. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25393. }
  25394. varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25395. if (Z_ISREF_P(varptr)) {
  25396. Z_ADDREF_P(varptr);
  25397. } else {
  25398. ZVAL_MAKE_REF_EX(varptr, 2);
  25399. }
  25400. ZVAL_REF(arg, Z_REF_P(varptr));
  25401. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25402. ZEND_VM_NEXT_OPCODE();
  25403. }
  25404. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25405. {
  25406. USE_OPLINE
  25407. zval *varptr, *arg;
  25408. uint32_t arg_num;
  25409. if (IS_UNUSED == IS_CONST) {
  25410. SAVE_OPLINE();
  25411. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  25412. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  25413. if (UNEXPECTED(!arg)) {
  25414. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25415. HANDLE_EXCEPTION();
  25416. }
  25417. } else {
  25418. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25419. arg_num = opline->op2.num;
  25420. }
  25421. if (EXPECTED(0)) {
  25422. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25423. goto send_var_by_ref;
  25424. }
  25425. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25426. send_var_by_ref:
  25427. varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25428. if (Z_ISREF_P(varptr)) {
  25429. Z_ADDREF_P(varptr);
  25430. } else {
  25431. ZVAL_MAKE_REF_EX(varptr, 2);
  25432. }
  25433. ZVAL_REF(arg, Z_REF_P(varptr));
  25434. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25435. ZEND_VM_NEXT_OPCODE();
  25436. }
  25437. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25438. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  25439. SAVE_OPLINE();
  25440. ZVAL_UNDEFINED_OP1();
  25441. ZVAL_NULL(arg);
  25442. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25443. }
  25444. if (IS_VAR == IS_CV) {
  25445. ZVAL_COPY_DEREF(arg, varptr);
  25446. } else /* if (IS_VAR == IS_VAR) */ {
  25447. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  25448. zend_refcounted *ref = Z_COUNTED_P(varptr);
  25449. varptr = Z_REFVAL_P(varptr);
  25450. ZVAL_COPY_VALUE(arg, varptr);
  25451. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  25452. efree_size(ref, sizeof(zend_reference));
  25453. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  25454. Z_ADDREF_P(arg);
  25455. }
  25456. } else {
  25457. ZVAL_COPY_VALUE(arg, varptr);
  25458. }
  25459. }
  25460. ZEND_VM_NEXT_OPCODE();
  25461. }
  25462. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25463. {
  25464. USE_OPLINE
  25465. zval *varptr, *arg;
  25466. uint32_t arg_num;
  25467. if (IS_UNUSED == IS_CONST) {
  25468. SAVE_OPLINE();
  25469. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  25470. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  25471. if (UNEXPECTED(!arg)) {
  25472. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25473. HANDLE_EXCEPTION();
  25474. }
  25475. } else {
  25476. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25477. arg_num = opline->op2.num;
  25478. }
  25479. if (EXPECTED(1)) {
  25480. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25481. goto send_var_by_ref;
  25482. }
  25483. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25484. send_var_by_ref:
  25485. varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25486. if (Z_ISREF_P(varptr)) {
  25487. Z_ADDREF_P(varptr);
  25488. } else {
  25489. ZVAL_MAKE_REF_EX(varptr, 2);
  25490. }
  25491. ZVAL_REF(arg, Z_REF_P(varptr));
  25492. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25493. ZEND_VM_NEXT_OPCODE();
  25494. }
  25495. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25496. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  25497. SAVE_OPLINE();
  25498. ZVAL_UNDEFINED_OP1();
  25499. ZVAL_NULL(arg);
  25500. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25501. }
  25502. if (IS_VAR == IS_CV) {
  25503. ZVAL_COPY_DEREF(arg, varptr);
  25504. } else /* if (IS_VAR == IS_VAR) */ {
  25505. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  25506. zend_refcounted *ref = Z_COUNTED_P(varptr);
  25507. varptr = Z_REFVAL_P(varptr);
  25508. ZVAL_COPY_VALUE(arg, varptr);
  25509. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  25510. efree_size(ref, sizeof(zend_reference));
  25511. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  25512. Z_ADDREF_P(arg);
  25513. }
  25514. } else {
  25515. ZVAL_COPY_VALUE(arg, varptr);
  25516. }
  25517. }
  25518. ZEND_VM_NEXT_OPCODE();
  25519. }
  25520. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25521. {
  25522. USE_OPLINE
  25523. zval *varptr, *arg;
  25524. if (IS_UNUSED == IS_CONST) {
  25525. // TODO: Would it make sense to share the cache slot with CHECK_FUNC_ARG?
  25526. SAVE_OPLINE();
  25527. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  25528. uint32_t arg_num;
  25529. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  25530. if (UNEXPECTED(!arg)) {
  25531. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25532. HANDLE_EXCEPTION();
  25533. }
  25534. } else {
  25535. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25536. }
  25537. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  25538. varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25539. if (Z_ISREF_P(varptr)) {
  25540. Z_ADDREF_P(varptr);
  25541. } else {
  25542. ZVAL_MAKE_REF_EX(varptr, 2);
  25543. }
  25544. ZVAL_REF(arg, Z_REF_P(varptr));
  25545. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25546. ZEND_VM_NEXT_OPCODE();
  25547. }
  25548. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25549. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  25550. zend_refcounted *ref = Z_COUNTED_P(varptr);
  25551. varptr = Z_REFVAL_P(varptr);
  25552. ZVAL_COPY_VALUE(arg, varptr);
  25553. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  25554. efree_size(ref, sizeof(zend_reference));
  25555. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  25556. Z_ADDREF_P(arg);
  25557. }
  25558. } else {
  25559. ZVAL_COPY_VALUE(arg, varptr);
  25560. }
  25561. ZEND_VM_NEXT_OPCODE();
  25562. }
  25563. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25564. {
  25565. USE_OPLINE
  25566. zval *result;
  25567. zend_function *constructor;
  25568. zend_class_entry *ce;
  25569. zend_execute_data *call;
  25570. SAVE_OPLINE();
  25571. if (IS_VAR == IS_CONST) {
  25572. ce = CACHED_PTR(opline->op2.num);
  25573. if (UNEXPECTED(ce == NULL)) {
  25574. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  25575. if (UNEXPECTED(ce == NULL)) {
  25576. ZVAL_UNDEF(EX_VAR(opline->result.var));
  25577. HANDLE_EXCEPTION();
  25578. }
  25579. CACHE_PTR(opline->op2.num, ce);
  25580. }
  25581. } else if (IS_VAR == IS_UNUSED) {
  25582. ce = zend_fetch_class(NULL, opline->op1.num);
  25583. if (UNEXPECTED(ce == NULL)) {
  25584. ZVAL_UNDEF(EX_VAR(opline->result.var));
  25585. HANDLE_EXCEPTION();
  25586. }
  25587. } else {
  25588. ce = Z_CE_P(EX_VAR(opline->op1.var));
  25589. }
  25590. result = EX_VAR(opline->result.var);
  25591. if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
  25592. ZVAL_UNDEF(result);
  25593. HANDLE_EXCEPTION();
  25594. }
  25595. constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
  25596. if (constructor == NULL) {
  25597. if (UNEXPECTED(EG(exception))) {
  25598. HANDLE_EXCEPTION();
  25599. }
  25600. /* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
  25601. * opcode is DO_FCALL in case EXT instructions are used. */
  25602. if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
  25603. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  25604. }
  25605. /* Perform a dummy function call */
  25606. call = zend_vm_stack_push_call_frame(
  25607. ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
  25608. opline->extended_value, NULL);
  25609. } else {
  25610. if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
  25611. init_func_run_time_cache(&constructor->op_array);
  25612. }
  25613. /* We are not handling overloaded classes right now */
  25614. call = zend_vm_stack_push_call_frame(
  25615. ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
  25616. constructor,
  25617. opline->extended_value,
  25618. Z_OBJ_P(result));
  25619. Z_ADDREF_P(result);
  25620. }
  25621. call->prev_execute_data = EX(call);
  25622. EX(call) = call;
  25623. ZEND_VM_NEXT_OPCODE();
  25624. }
  25625. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25626. {
  25627. USE_OPLINE
  25628. zval *expr_ptr, new_expr;
  25629. SAVE_OPLINE();
  25630. if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
  25631. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  25632. expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25633. if (Z_ISREF_P(expr_ptr)) {
  25634. Z_ADDREF_P(expr_ptr);
  25635. } else {
  25636. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  25637. }
  25638. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25639. } else {
  25640. expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25641. if (IS_VAR == IS_TMP_VAR) {
  25642. /* pass */
  25643. } else if (IS_VAR == IS_CONST) {
  25644. Z_TRY_ADDREF_P(expr_ptr);
  25645. } else if (IS_VAR == IS_CV) {
  25646. ZVAL_DEREF(expr_ptr);
  25647. Z_TRY_ADDREF_P(expr_ptr);
  25648. } else /* if (IS_VAR == IS_VAR) */ {
  25649. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  25650. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  25651. expr_ptr = Z_REFVAL_P(expr_ptr);
  25652. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  25653. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  25654. expr_ptr = &new_expr;
  25655. efree_size(ref, sizeof(zend_reference));
  25656. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  25657. Z_ADDREF_P(expr_ptr);
  25658. }
  25659. }
  25660. }
  25661. }
  25662. if (IS_UNUSED != IS_UNUSED) {
  25663. zval *offset = NULL;
  25664. zend_string *str;
  25665. zend_ulong hval;
  25666. add_again:
  25667. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  25668. str = Z_STR_P(offset);
  25669. if (IS_UNUSED != IS_CONST) {
  25670. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  25671. goto num_index;
  25672. }
  25673. }
  25674. str_index:
  25675. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  25676. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  25677. hval = Z_LVAL_P(offset);
  25678. num_index:
  25679. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  25680. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  25681. offset = Z_REFVAL_P(offset);
  25682. goto add_again;
  25683. } else if (Z_TYPE_P(offset) == IS_NULL) {
  25684. str = ZSTR_EMPTY_ALLOC();
  25685. goto str_index;
  25686. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  25687. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  25688. goto num_index;
  25689. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  25690. hval = 0;
  25691. goto num_index;
  25692. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  25693. hval = 1;
  25694. goto num_index;
  25695. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  25696. zend_use_resource_as_offset(offset);
  25697. hval = Z_RES_HANDLE_P(offset);
  25698. goto num_index;
  25699. } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  25700. ZVAL_UNDEFINED_OP2();
  25701. str = ZSTR_EMPTY_ALLOC();
  25702. goto str_index;
  25703. } else {
  25704. zend_illegal_offset();
  25705. zval_ptr_dtor_nogc(expr_ptr);
  25706. }
  25707. } else {
  25708. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  25709. zend_cannot_add_element();
  25710. zval_ptr_dtor_nogc(expr_ptr);
  25711. }
  25712. }
  25713. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25714. }
  25715. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25716. {
  25717. zval *array;
  25718. uint32_t size;
  25719. USE_OPLINE
  25720. array = EX_VAR(opline->result.var);
  25721. if (IS_VAR != IS_UNUSED) {
  25722. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  25723. ZVAL_ARR(array, zend_new_array(size));
  25724. /* Explicitly initialize array as not-packed if flag is set */
  25725. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  25726. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  25727. }
  25728. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  25729. } else {
  25730. ZVAL_ARR(array, zend_new_array(0));
  25731. ZEND_VM_NEXT_OPCODE();
  25732. }
  25733. }
  25734. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25735. {
  25736. USE_OPLINE
  25737. zval *var_ptr;
  25738. var_ptr = EX_VAR(opline->op1.var);
  25739. if (UNEXPECTED(Z_ISREF_P(var_ptr))) {
  25740. if (UNEXPECTED(Z_REFCOUNT_P(var_ptr) == 1)) {
  25741. ZVAL_UNREF(var_ptr);
  25742. }
  25743. }
  25744. ZEND_VM_NEXT_OPCODE();
  25745. }
  25746. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25747. {
  25748. USE_OPLINE
  25749. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  25750. SAVE_OPLINE();
  25751. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  25752. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  25753. }
  25754. /* Destroy the previously yielded value */
  25755. zval_ptr_dtor(&generator->value);
  25756. /* Destroy the previously yielded key */
  25757. zval_ptr_dtor(&generator->key);
  25758. /* Set the new yielded value */
  25759. if (IS_VAR != IS_UNUSED) {
  25760. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  25761. /* Constants and temporary variables aren't yieldable by reference,
  25762. * but we still allow them with a notice. */
  25763. if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
  25764. zval *value;
  25765. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  25766. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25767. ZVAL_COPY_VALUE(&generator->value, value);
  25768. if (IS_VAR == IS_CONST) {
  25769. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  25770. Z_ADDREF(generator->value);
  25771. }
  25772. }
  25773. } else {
  25774. zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25775. /* If a function call result is yielded and the function did
  25776. * not return by reference we throw a notice. */
  25777. do {
  25778. if (IS_VAR == IS_VAR) {
  25779. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  25780. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  25781. && !Z_ISREF_P(value_ptr)) {
  25782. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  25783. ZVAL_COPY(&generator->value, value_ptr);
  25784. break;
  25785. }
  25786. }
  25787. if (Z_ISREF_P(value_ptr)) {
  25788. Z_ADDREF_P(value_ptr);
  25789. } else {
  25790. ZVAL_MAKE_REF_EX(value_ptr, 2);
  25791. }
  25792. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  25793. } while (0);
  25794. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25795. }
  25796. } else {
  25797. zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25798. /* Consts, temporary variables and references need copying */
  25799. if (IS_VAR == IS_CONST) {
  25800. ZVAL_COPY_VALUE(&generator->value, value);
  25801. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  25802. Z_ADDREF(generator->value);
  25803. }
  25804. } else if (IS_VAR == IS_TMP_VAR) {
  25805. ZVAL_COPY_VALUE(&generator->value, value);
  25806. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  25807. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  25808. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25809. } else {
  25810. ZVAL_COPY_VALUE(&generator->value, value);
  25811. if (IS_VAR == IS_CV) {
  25812. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  25813. }
  25814. }
  25815. }
  25816. } else {
  25817. /* If no value was specified yield null */
  25818. ZVAL_NULL(&generator->value);
  25819. }
  25820. /* Set the new yielded key */
  25821. if (IS_UNUSED != IS_UNUSED) {
  25822. zval *key = NULL;
  25823. if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  25824. key = Z_REFVAL_P(key);
  25825. }
  25826. ZVAL_COPY(&generator->key, key);
  25827. if (Z_TYPE(generator->key) == IS_LONG
  25828. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  25829. ) {
  25830. generator->largest_used_integer_key = Z_LVAL(generator->key);
  25831. }
  25832. } else {
  25833. /* If no key was specified we use auto-increment keys */
  25834. generator->largest_used_integer_key++;
  25835. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  25836. }
  25837. if (RETURN_VALUE_USED(opline)) {
  25838. /* If the return value of yield is used set the send
  25839. * target and initialize it to NULL */
  25840. generator->send_target = EX_VAR(opline->result.var);
  25841. ZVAL_NULL(generator->send_target);
  25842. } else {
  25843. generator->send_target = NULL;
  25844. }
  25845. /* We increment to the next op, so we are at the correct position when the
  25846. * generator is resumed. */
  25847. ZEND_VM_INC_OPCODE();
  25848. /* The GOTO VM uses a local opline variable. We need to set the opline
  25849. * variable in execute_data so we don't resume at an old position. */
  25850. SAVE_OPLINE();
  25851. ZEND_VM_RETURN();
  25852. }
  25853. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25854. {
  25855. USE_OPLINE
  25856. zval *op1 = EX_VAR(opline->op1.var);
  25857. if (IS_VAR == IS_CV) {
  25858. if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  25859. ZVAL_NEW_EMPTY_REF(op1);
  25860. Z_SET_REFCOUNT_P(op1, 2);
  25861. ZVAL_NULL(Z_REFVAL_P(op1));
  25862. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  25863. } else {
  25864. if (Z_ISREF_P(op1)) {
  25865. Z_ADDREF_P(op1);
  25866. } else {
  25867. ZVAL_MAKE_REF_EX(op1, 2);
  25868. }
  25869. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  25870. }
  25871. } else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
  25872. op1 = Z_INDIRECT_P(op1);
  25873. if (EXPECTED(!Z_ISREF_P(op1))) {
  25874. ZVAL_MAKE_REF_EX(op1, 2);
  25875. } else {
  25876. GC_ADDREF(Z_REF_P(op1));
  25877. }
  25878. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  25879. } else {
  25880. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
  25881. }
  25882. ZEND_VM_NEXT_OPCODE();
  25883. }
  25884. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25885. {
  25886. USE_OPLINE
  25887. zval *op1;
  25888. zend_string *type;
  25889. SAVE_OPLINE();
  25890. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  25891. type = zend_zval_get_legacy_type(op1);
  25892. if (EXPECTED(type)) {
  25893. ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
  25894. } else {
  25895. ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
  25896. }
  25897. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25898. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25899. }
  25900. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25901. {
  25902. USE_OPLINE
  25903. zval *varptr, *arg;
  25904. uint32_t arg_num = opline->op2.num;
  25905. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25906. ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  25907. }
  25908. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25909. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25910. if (IS_VAR == IS_CV) {
  25911. ZVAL_COPY(arg, varptr);
  25912. } else /* if (IS_VAR == IS_VAR) */ {
  25913. ZVAL_COPY_VALUE(arg, varptr);
  25914. }
  25915. ZEND_VM_NEXT_OPCODE();
  25916. }
  25917. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25918. {
  25919. USE_OPLINE
  25920. zval *op1, *op2;
  25921. bool result;
  25922. SAVE_OPLINE();
  25923. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  25924. op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25925. result = fast_is_identical_function(op1, op2);
  25926. ZEND_VM_SMART_BRANCH(result, 1);
  25927. }
  25928. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25929. {
  25930. USE_OPLINE
  25931. zval *object;
  25932. zval *property;
  25933. zval *value;
  25934. zval *zptr;
  25935. void **cache_slot;
  25936. zend_property_info *prop_info;
  25937. zend_object *zobj;
  25938. zend_string *name, *tmp_name;
  25939. SAVE_OPLINE();
  25940. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25941. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25942. do {
  25943. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  25944. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  25945. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  25946. object = Z_REFVAL_P(object);
  25947. goto assign_op_object;
  25948. }
  25949. if (IS_VAR == IS_CV
  25950. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  25951. ZVAL_UNDEFINED_OP1();
  25952. }
  25953. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  25954. break;
  25955. }
  25956. assign_op_object:
  25957. /* here we are sure we are dealing with an object */
  25958. zobj = Z_OBJ_P(object);
  25959. if (IS_CV == IS_CONST) {
  25960. name = Z_STR_P(property);
  25961. } else {
  25962. name = zval_try_get_tmp_string(property, &tmp_name);
  25963. if (UNEXPECTED(!name)) {
  25964. UNDEF_RESULT();
  25965. break;
  25966. }
  25967. }
  25968. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  25969. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  25970. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  25971. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25972. ZVAL_NULL(EX_VAR(opline->result.var));
  25973. }
  25974. } else {
  25975. zval *orig_zptr = zptr;
  25976. zend_reference *ref;
  25977. do {
  25978. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  25979. ref = Z_REF_P(zptr);
  25980. zptr = Z_REFVAL_P(zptr);
  25981. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  25982. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  25983. break;
  25984. }
  25985. }
  25986. if (IS_CV == IS_CONST) {
  25987. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  25988. } else {
  25989. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  25990. }
  25991. if (UNEXPECTED(prop_info)) {
  25992. /* special case for typed properties */
  25993. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  25994. } else {
  25995. zend_binary_op(zptr, zptr, value OPLINE_CC);
  25996. }
  25997. } while (0);
  25998. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25999. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  26000. }
  26001. }
  26002. } else {
  26003. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  26004. }
  26005. if (IS_CV != IS_CONST) {
  26006. zend_tmp_string_release(tmp_name);
  26007. }
  26008. } while (0);
  26009. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  26010. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26011. /* assign_obj has two opcodes! */
  26012. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  26013. }
  26014. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  26015. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26016. {
  26017. USE_OPLINE
  26018. zval *var_ptr;
  26019. zval *value, *container, *dim;
  26020. HashTable *ht;
  26021. SAVE_OPLINE();
  26022. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26023. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  26024. assign_dim_op_array:
  26025. SEPARATE_ARRAY(container);
  26026. ht = Z_ARRVAL_P(container);
  26027. assign_dim_op_new_array:
  26028. dim = EX_VAR(opline->op2.var);
  26029. if (IS_CV == IS_UNUSED) {
  26030. var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
  26031. if (UNEXPECTED(!var_ptr)) {
  26032. zend_cannot_add_element();
  26033. goto assign_dim_op_ret_null;
  26034. }
  26035. } else {
  26036. if (IS_CV == IS_CONST) {
  26037. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
  26038. } else {
  26039. var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
  26040. }
  26041. if (UNEXPECTED(!var_ptr)) {
  26042. goto assign_dim_op_ret_null;
  26043. }
  26044. }
  26045. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  26046. do {
  26047. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
  26048. zend_reference *ref = Z_REF_P(var_ptr);
  26049. var_ptr = Z_REFVAL_P(var_ptr);
  26050. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  26051. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  26052. break;
  26053. }
  26054. }
  26055. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  26056. } while (0);
  26057. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26058. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  26059. }
  26060. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  26061. } else {
  26062. if (EXPECTED(Z_ISREF_P(container))) {
  26063. container = Z_REFVAL_P(container);
  26064. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  26065. goto assign_dim_op_array;
  26066. }
  26067. }
  26068. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  26069. zend_object *obj = Z_OBJ_P(container);
  26070. dim = EX_VAR(opline->op2.var);
  26071. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  26072. dim++;
  26073. }
  26074. zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
  26075. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  26076. zend_uchar old_type;
  26077. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  26078. ZVAL_UNDEFINED_OP1();
  26079. }
  26080. ht = zend_new_array(8);
  26081. old_type = Z_TYPE_P(container);
  26082. ZVAL_ARR(container, ht);
  26083. if (UNEXPECTED(old_type == IS_FALSE)) {
  26084. GC_ADDREF(ht);
  26085. zend_false_to_array_deprecated();
  26086. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  26087. zend_array_destroy(ht);
  26088. goto assign_dim_op_ret_null;
  26089. }
  26090. }
  26091. goto assign_dim_op_new_array;
  26092. } else {
  26093. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26094. zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  26095. assign_dim_op_ret_null:
  26096. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  26097. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26098. ZVAL_NULL(EX_VAR(opline->result.var));
  26099. }
  26100. }
  26101. }
  26102. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26103. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  26104. }
  26105. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26106. {
  26107. USE_OPLINE
  26108. zval *var_ptr;
  26109. zval *value;
  26110. SAVE_OPLINE();
  26111. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26112. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26113. do {
  26114. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  26115. zend_reference *ref = Z_REF_P(var_ptr);
  26116. var_ptr = Z_REFVAL_P(var_ptr);
  26117. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  26118. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  26119. break;
  26120. }
  26121. }
  26122. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  26123. } while (0);
  26124. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26125. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  26126. }
  26127. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26128. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26129. }
  26130. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26131. {
  26132. USE_OPLINE
  26133. zval *object;
  26134. zval *property;
  26135. zval *zptr;
  26136. void **cache_slot;
  26137. zend_property_info *prop_info;
  26138. zend_object *zobj;
  26139. zend_string *name, *tmp_name;
  26140. SAVE_OPLINE();
  26141. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26142. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26143. do {
  26144. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  26145. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  26146. object = Z_REFVAL_P(object);
  26147. goto pre_incdec_object;
  26148. }
  26149. if (IS_VAR == IS_CV
  26150. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  26151. ZVAL_UNDEFINED_OP1();
  26152. }
  26153. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  26154. break;
  26155. }
  26156. pre_incdec_object:
  26157. /* here we are sure we are dealing with an object */
  26158. zobj = Z_OBJ_P(object);
  26159. if (IS_CV == IS_CONST) {
  26160. name = Z_STR_P(property);
  26161. } else {
  26162. name = zval_try_get_tmp_string(property, &tmp_name);
  26163. if (UNEXPECTED(!name)) {
  26164. UNDEF_RESULT();
  26165. break;
  26166. }
  26167. }
  26168. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  26169. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  26170. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  26171. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26172. ZVAL_NULL(EX_VAR(opline->result.var));
  26173. }
  26174. } else {
  26175. if (IS_CV == IS_CONST) {
  26176. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  26177. } else {
  26178. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  26179. }
  26180. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  26181. }
  26182. } else {
  26183. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  26184. }
  26185. if (IS_CV != IS_CONST) {
  26186. zend_tmp_string_release(tmp_name);
  26187. }
  26188. } while (0);
  26189. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26190. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26191. }
  26192. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26193. {
  26194. USE_OPLINE
  26195. zval *object;
  26196. zval *property;
  26197. zval *zptr;
  26198. void **cache_slot;
  26199. zend_property_info *prop_info;
  26200. zend_object *zobj;
  26201. zend_string *name, *tmp_name;
  26202. SAVE_OPLINE();
  26203. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26204. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26205. do {
  26206. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  26207. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  26208. object = Z_REFVAL_P(object);
  26209. goto post_incdec_object;
  26210. }
  26211. if (IS_VAR == IS_CV
  26212. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  26213. ZVAL_UNDEFINED_OP1();
  26214. }
  26215. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  26216. break;
  26217. }
  26218. post_incdec_object:
  26219. /* here we are sure we are dealing with an object */
  26220. zobj = Z_OBJ_P(object);
  26221. if (IS_CV == IS_CONST) {
  26222. name = Z_STR_P(property);
  26223. } else {
  26224. name = zval_try_get_tmp_string(property, &tmp_name);
  26225. if (UNEXPECTED(!name)) {
  26226. ZVAL_UNDEF(EX_VAR(opline->result.var));
  26227. break;
  26228. }
  26229. }
  26230. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  26231. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  26232. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  26233. ZVAL_NULL(EX_VAR(opline->result.var));
  26234. } else {
  26235. if (IS_CV == IS_CONST) {
  26236. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  26237. } else {
  26238. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  26239. }
  26240. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  26241. }
  26242. } else {
  26243. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  26244. }
  26245. if (IS_CV != IS_CONST) {
  26246. zend_tmp_string_release(tmp_name);
  26247. }
  26248. } while (0);
  26249. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26250. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26251. }
  26252. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26253. {
  26254. USE_OPLINE
  26255. zval *container;
  26256. SAVE_OPLINE();
  26257. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26258. zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  26259. if (IS_VAR == IS_VAR) {
  26260. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  26261. }
  26262. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26263. }
  26264. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26265. {
  26266. USE_OPLINE
  26267. zval *container;
  26268. SAVE_OPLINE();
  26269. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26270. zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  26271. if (IS_VAR == IS_VAR) {
  26272. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  26273. }
  26274. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26275. }
  26276. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26277. {
  26278. #if 0
  26279. USE_OPLINE
  26280. #endif
  26281. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  26282. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  26283. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26284. }
  26285. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26286. } else {
  26287. if (IS_CV == IS_UNUSED) {
  26288. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26289. }
  26290. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26291. }
  26292. }
  26293. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26294. {
  26295. USE_OPLINE
  26296. zval *container;
  26297. SAVE_OPLINE();
  26298. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26299. zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  26300. if (IS_VAR == IS_VAR) {
  26301. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  26302. }
  26303. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26304. }
  26305. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26306. {
  26307. USE_OPLINE
  26308. zval *property, *container, *result;
  26309. SAVE_OPLINE();
  26310. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26311. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26312. result = EX_VAR(opline->result.var);
  26313. zend_fetch_property_address(
  26314. result, container, IS_VAR, property, IS_CV,
  26315. ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  26316. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
  26317. if (IS_VAR == IS_VAR) {
  26318. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  26319. }
  26320. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26321. }
  26322. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26323. {
  26324. USE_OPLINE
  26325. zval *property, *container, *result;
  26326. SAVE_OPLINE();
  26327. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26328. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26329. result = EX_VAR(opline->result.var);
  26330. zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  26331. if (IS_VAR == IS_VAR) {
  26332. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  26333. }
  26334. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26335. }
  26336. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26337. {
  26338. #if 0
  26339. USE_OPLINE
  26340. #endif
  26341. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  26342. /* Behave like FETCH_OBJ_W */
  26343. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  26344. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26345. }
  26346. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26347. } else {
  26348. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26349. }
  26350. }
  26351. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26352. {
  26353. USE_OPLINE
  26354. zval *container, *property, *result;
  26355. SAVE_OPLINE();
  26356. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26357. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26358. result = EX_VAR(opline->result.var);
  26359. zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  26360. if (IS_VAR == IS_VAR) {
  26361. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  26362. }
  26363. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26364. }
  26365. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26366. {
  26367. USE_OPLINE
  26368. zval *container, *dim;
  26369. SAVE_OPLINE();
  26370. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26371. dim = EX_VAR(opline->op2.var);
  26372. if (IS_VAR == IS_VAR
  26373. && Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
  26374. && UNEXPECTED(!Z_ISREF_P(container))
  26375. ) {
  26376. zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
  26377. zend_fetch_dimension_address_LIST_r(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
  26378. } else {
  26379. zend_fetch_dimension_address_W(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
  26380. }
  26381. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26382. }
  26383. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26384. {
  26385. USE_OPLINE
  26386. zval *object, *value, tmp;
  26387. zend_object *zobj;
  26388. zend_string *name, *tmp_name;
  26389. SAVE_OPLINE();
  26390. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26391. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  26392. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  26393. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  26394. object = Z_REFVAL_P(object);
  26395. goto assign_object;
  26396. }
  26397. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  26398. value = &EG(uninitialized_zval);
  26399. goto free_and_exit_assign_obj;
  26400. }
  26401. assign_object:
  26402. zobj = Z_OBJ_P(object);
  26403. if (IS_CV == IS_CONST) {
  26404. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  26405. void **cache_slot = CACHE_ADDR(opline->extended_value);
  26406. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  26407. zend_object *zobj = Z_OBJ_P(object);
  26408. zval *property_val;
  26409. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  26410. property_val = OBJ_PROP(zobj, prop_offset);
  26411. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  26412. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  26413. if (UNEXPECTED(prop_info != NULL)) {
  26414. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  26415. goto free_and_exit_assign_obj;
  26416. } else {
  26417. fast_assign_obj:
  26418. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  26419. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26420. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26421. }
  26422. goto exit_assign_obj;
  26423. }
  26424. }
  26425. } else {
  26426. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  26427. if (EXPECTED(zobj->properties != NULL)) {
  26428. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  26429. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  26430. GC_DELREF(zobj->properties);
  26431. }
  26432. zobj->properties = zend_array_dup(zobj->properties);
  26433. }
  26434. property_val = zend_hash_find_known_hash(zobj->properties, name);
  26435. if (property_val) {
  26436. goto fast_assign_obj;
  26437. }
  26438. }
  26439. if (!zobj->ce->__set) {
  26440. if (EXPECTED(zobj->properties == NULL)) {
  26441. rebuild_object_properties(zobj);
  26442. }
  26443. if (IS_CONST == IS_CONST) {
  26444. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  26445. Z_ADDREF_P(value);
  26446. }
  26447. } else if (IS_CONST != IS_TMP_VAR) {
  26448. if (Z_ISREF_P(value)) {
  26449. if (IS_CONST == IS_VAR) {
  26450. zend_reference *ref = Z_REF_P(value);
  26451. if (GC_DELREF(ref) == 0) {
  26452. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  26453. efree_size(ref, sizeof(zend_reference));
  26454. value = &tmp;
  26455. } else {
  26456. value = Z_REFVAL_P(value);
  26457. Z_TRY_ADDREF_P(value);
  26458. }
  26459. } else {
  26460. value = Z_REFVAL_P(value);
  26461. Z_TRY_ADDREF_P(value);
  26462. }
  26463. } else if (IS_CONST == IS_CV) {
  26464. Z_TRY_ADDREF_P(value);
  26465. }
  26466. }
  26467. zend_hash_add_new(zobj->properties, name, value);
  26468. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26469. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26470. }
  26471. goto exit_assign_obj;
  26472. }
  26473. }
  26474. }
  26475. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  26476. } else {
  26477. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  26478. if (UNEXPECTED(!name)) {
  26479. UNDEF_RESULT();
  26480. goto exit_assign_obj;
  26481. }
  26482. }
  26483. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  26484. ZVAL_DEREF(value);
  26485. }
  26486. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  26487. if (IS_CV != IS_CONST) {
  26488. zend_tmp_string_release(tmp_name);
  26489. }
  26490. free_and_exit_assign_obj:
  26491. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26492. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  26493. }
  26494. exit_assign_obj:
  26495. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26496. /* assign_obj has two opcodes! */
  26497. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  26498. }
  26499. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  26500. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26501. {
  26502. USE_OPLINE
  26503. zval *object, *value, tmp;
  26504. zend_object *zobj;
  26505. zend_string *name, *tmp_name;
  26506. SAVE_OPLINE();
  26507. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26508. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  26509. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  26510. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  26511. object = Z_REFVAL_P(object);
  26512. goto assign_object;
  26513. }
  26514. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  26515. value = &EG(uninitialized_zval);
  26516. goto free_and_exit_assign_obj;
  26517. }
  26518. assign_object:
  26519. zobj = Z_OBJ_P(object);
  26520. if (IS_CV == IS_CONST) {
  26521. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  26522. void **cache_slot = CACHE_ADDR(opline->extended_value);
  26523. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  26524. zend_object *zobj = Z_OBJ_P(object);
  26525. zval *property_val;
  26526. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  26527. property_val = OBJ_PROP(zobj, prop_offset);
  26528. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  26529. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  26530. if (UNEXPECTED(prop_info != NULL)) {
  26531. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  26532. goto free_and_exit_assign_obj;
  26533. } else {
  26534. fast_assign_obj:
  26535. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  26536. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26537. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26538. }
  26539. goto exit_assign_obj;
  26540. }
  26541. }
  26542. } else {
  26543. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  26544. if (EXPECTED(zobj->properties != NULL)) {
  26545. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  26546. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  26547. GC_DELREF(zobj->properties);
  26548. }
  26549. zobj->properties = zend_array_dup(zobj->properties);
  26550. }
  26551. property_val = zend_hash_find_known_hash(zobj->properties, name);
  26552. if (property_val) {
  26553. goto fast_assign_obj;
  26554. }
  26555. }
  26556. if (!zobj->ce->__set) {
  26557. if (EXPECTED(zobj->properties == NULL)) {
  26558. rebuild_object_properties(zobj);
  26559. }
  26560. if (IS_TMP_VAR == IS_CONST) {
  26561. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  26562. Z_ADDREF_P(value);
  26563. }
  26564. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  26565. if (Z_ISREF_P(value)) {
  26566. if (IS_TMP_VAR == IS_VAR) {
  26567. zend_reference *ref = Z_REF_P(value);
  26568. if (GC_DELREF(ref) == 0) {
  26569. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  26570. efree_size(ref, sizeof(zend_reference));
  26571. value = &tmp;
  26572. } else {
  26573. value = Z_REFVAL_P(value);
  26574. Z_TRY_ADDREF_P(value);
  26575. }
  26576. } else {
  26577. value = Z_REFVAL_P(value);
  26578. Z_TRY_ADDREF_P(value);
  26579. }
  26580. } else if (IS_TMP_VAR == IS_CV) {
  26581. Z_TRY_ADDREF_P(value);
  26582. }
  26583. }
  26584. zend_hash_add_new(zobj->properties, name, value);
  26585. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26586. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26587. }
  26588. goto exit_assign_obj;
  26589. }
  26590. }
  26591. }
  26592. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  26593. } else {
  26594. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  26595. if (UNEXPECTED(!name)) {
  26596. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  26597. UNDEF_RESULT();
  26598. goto exit_assign_obj;
  26599. }
  26600. }
  26601. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  26602. ZVAL_DEREF(value);
  26603. }
  26604. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  26605. if (IS_CV != IS_CONST) {
  26606. zend_tmp_string_release(tmp_name);
  26607. }
  26608. free_and_exit_assign_obj:
  26609. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26610. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  26611. }
  26612. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  26613. exit_assign_obj:
  26614. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26615. /* assign_obj has two opcodes! */
  26616. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  26617. }
  26618. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  26619. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26620. {
  26621. USE_OPLINE
  26622. zval *object, *value, tmp;
  26623. zend_object *zobj;
  26624. zend_string *name, *tmp_name;
  26625. SAVE_OPLINE();
  26626. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26627. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  26628. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  26629. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  26630. object = Z_REFVAL_P(object);
  26631. goto assign_object;
  26632. }
  26633. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  26634. value = &EG(uninitialized_zval);
  26635. goto free_and_exit_assign_obj;
  26636. }
  26637. assign_object:
  26638. zobj = Z_OBJ_P(object);
  26639. if (IS_CV == IS_CONST) {
  26640. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  26641. void **cache_slot = CACHE_ADDR(opline->extended_value);
  26642. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  26643. zend_object *zobj = Z_OBJ_P(object);
  26644. zval *property_val;
  26645. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  26646. property_val = OBJ_PROP(zobj, prop_offset);
  26647. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  26648. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  26649. if (UNEXPECTED(prop_info != NULL)) {
  26650. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  26651. goto free_and_exit_assign_obj;
  26652. } else {
  26653. fast_assign_obj:
  26654. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  26655. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26656. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26657. }
  26658. goto exit_assign_obj;
  26659. }
  26660. }
  26661. } else {
  26662. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  26663. if (EXPECTED(zobj->properties != NULL)) {
  26664. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  26665. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  26666. GC_DELREF(zobj->properties);
  26667. }
  26668. zobj->properties = zend_array_dup(zobj->properties);
  26669. }
  26670. property_val = zend_hash_find_known_hash(zobj->properties, name);
  26671. if (property_val) {
  26672. goto fast_assign_obj;
  26673. }
  26674. }
  26675. if (!zobj->ce->__set) {
  26676. if (EXPECTED(zobj->properties == NULL)) {
  26677. rebuild_object_properties(zobj);
  26678. }
  26679. if (IS_VAR == IS_CONST) {
  26680. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  26681. Z_ADDREF_P(value);
  26682. }
  26683. } else if (IS_VAR != IS_TMP_VAR) {
  26684. if (Z_ISREF_P(value)) {
  26685. if (IS_VAR == IS_VAR) {
  26686. zend_reference *ref = Z_REF_P(value);
  26687. if (GC_DELREF(ref) == 0) {
  26688. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  26689. efree_size(ref, sizeof(zend_reference));
  26690. value = &tmp;
  26691. } else {
  26692. value = Z_REFVAL_P(value);
  26693. Z_TRY_ADDREF_P(value);
  26694. }
  26695. } else {
  26696. value = Z_REFVAL_P(value);
  26697. Z_TRY_ADDREF_P(value);
  26698. }
  26699. } else if (IS_VAR == IS_CV) {
  26700. Z_TRY_ADDREF_P(value);
  26701. }
  26702. }
  26703. zend_hash_add_new(zobj->properties, name, value);
  26704. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26705. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26706. }
  26707. goto exit_assign_obj;
  26708. }
  26709. }
  26710. }
  26711. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  26712. } else {
  26713. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  26714. if (UNEXPECTED(!name)) {
  26715. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  26716. UNDEF_RESULT();
  26717. goto exit_assign_obj;
  26718. }
  26719. }
  26720. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  26721. ZVAL_DEREF(value);
  26722. }
  26723. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  26724. if (IS_CV != IS_CONST) {
  26725. zend_tmp_string_release(tmp_name);
  26726. }
  26727. free_and_exit_assign_obj:
  26728. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26729. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  26730. }
  26731. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  26732. exit_assign_obj:
  26733. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26734. /* assign_obj has two opcodes! */
  26735. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  26736. }
  26737. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  26738. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26739. {
  26740. USE_OPLINE
  26741. zval *object, *value, tmp;
  26742. zend_object *zobj;
  26743. zend_string *name, *tmp_name;
  26744. SAVE_OPLINE();
  26745. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26746. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  26747. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  26748. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  26749. object = Z_REFVAL_P(object);
  26750. goto assign_object;
  26751. }
  26752. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  26753. value = &EG(uninitialized_zval);
  26754. goto free_and_exit_assign_obj;
  26755. }
  26756. assign_object:
  26757. zobj = Z_OBJ_P(object);
  26758. if (IS_CV == IS_CONST) {
  26759. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  26760. void **cache_slot = CACHE_ADDR(opline->extended_value);
  26761. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  26762. zend_object *zobj = Z_OBJ_P(object);
  26763. zval *property_val;
  26764. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  26765. property_val = OBJ_PROP(zobj, prop_offset);
  26766. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  26767. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  26768. if (UNEXPECTED(prop_info != NULL)) {
  26769. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  26770. goto free_and_exit_assign_obj;
  26771. } else {
  26772. fast_assign_obj:
  26773. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  26774. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26775. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26776. }
  26777. goto exit_assign_obj;
  26778. }
  26779. }
  26780. } else {
  26781. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  26782. if (EXPECTED(zobj->properties != NULL)) {
  26783. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  26784. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  26785. GC_DELREF(zobj->properties);
  26786. }
  26787. zobj->properties = zend_array_dup(zobj->properties);
  26788. }
  26789. property_val = zend_hash_find_known_hash(zobj->properties, name);
  26790. if (property_val) {
  26791. goto fast_assign_obj;
  26792. }
  26793. }
  26794. if (!zobj->ce->__set) {
  26795. if (EXPECTED(zobj->properties == NULL)) {
  26796. rebuild_object_properties(zobj);
  26797. }
  26798. if (IS_CV == IS_CONST) {
  26799. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  26800. Z_ADDREF_P(value);
  26801. }
  26802. } else if (IS_CV != IS_TMP_VAR) {
  26803. if (Z_ISREF_P(value)) {
  26804. if (IS_CV == IS_VAR) {
  26805. zend_reference *ref = Z_REF_P(value);
  26806. if (GC_DELREF(ref) == 0) {
  26807. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  26808. efree_size(ref, sizeof(zend_reference));
  26809. value = &tmp;
  26810. } else {
  26811. value = Z_REFVAL_P(value);
  26812. Z_TRY_ADDREF_P(value);
  26813. }
  26814. } else {
  26815. value = Z_REFVAL_P(value);
  26816. Z_TRY_ADDREF_P(value);
  26817. }
  26818. } else if (IS_CV == IS_CV) {
  26819. Z_TRY_ADDREF_P(value);
  26820. }
  26821. }
  26822. zend_hash_add_new(zobj->properties, name, value);
  26823. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26824. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26825. }
  26826. goto exit_assign_obj;
  26827. }
  26828. }
  26829. }
  26830. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  26831. } else {
  26832. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  26833. if (UNEXPECTED(!name)) {
  26834. UNDEF_RESULT();
  26835. goto exit_assign_obj;
  26836. }
  26837. }
  26838. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  26839. ZVAL_DEREF(value);
  26840. }
  26841. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  26842. if (IS_CV != IS_CONST) {
  26843. zend_tmp_string_release(tmp_name);
  26844. }
  26845. free_and_exit_assign_obj:
  26846. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26847. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  26848. }
  26849. exit_assign_obj:
  26850. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26851. /* assign_obj has two opcodes! */
  26852. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  26853. }
  26854. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  26855. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26856. {
  26857. USE_OPLINE
  26858. zval *object_ptr, *orig_object_ptr;
  26859. zval *value;
  26860. zval *variable_ptr;
  26861. zval *dim;
  26862. SAVE_OPLINE();
  26863. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26864. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  26865. try_assign_dim_array:
  26866. SEPARATE_ARRAY(object_ptr);
  26867. if (IS_CV == IS_UNUSED) {
  26868. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  26869. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  26870. HashTable *ht = Z_ARRVAL_P(object_ptr);
  26871. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  26872. GC_ADDREF(ht);
  26873. }
  26874. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  26875. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  26876. zend_array_destroy(ht);
  26877. goto assign_dim_error;
  26878. }
  26879. }
  26880. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  26881. ZVAL_DEREF(value);
  26882. }
  26883. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  26884. if (UNEXPECTED(value == NULL)) {
  26885. zend_cannot_add_element();
  26886. goto assign_dim_error;
  26887. } else if (IS_CONST == IS_CV) {
  26888. if (Z_REFCOUNTED_P(value)) {
  26889. Z_ADDREF_P(value);
  26890. }
  26891. } else if (IS_CONST == IS_VAR) {
  26892. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  26893. if (Z_ISREF_P(free_op_data)) {
  26894. if (Z_REFCOUNTED_P(value)) {
  26895. Z_ADDREF_P(value);
  26896. }
  26897. zval_ptr_dtor_nogc(free_op_data);
  26898. }
  26899. } else if (IS_CONST == IS_CONST) {
  26900. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  26901. Z_ADDREF_P(value);
  26902. }
  26903. }
  26904. } else {
  26905. dim = EX_VAR(opline->op2.var);
  26906. if (IS_CV == IS_CONST) {
  26907. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  26908. } else {
  26909. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  26910. }
  26911. if (UNEXPECTED(variable_ptr == NULL)) {
  26912. goto assign_dim_error;
  26913. }
  26914. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  26915. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  26916. }
  26917. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26918. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26919. }
  26920. } else {
  26921. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  26922. object_ptr = Z_REFVAL_P(object_ptr);
  26923. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  26924. goto try_assign_dim_array;
  26925. }
  26926. }
  26927. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  26928. zend_object *obj = Z_OBJ_P(object_ptr);
  26929. GC_ADDREF(obj);
  26930. dim = EX_VAR(opline->op2.var);
  26931. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  26932. dim = ZVAL_UNDEFINED_OP2();
  26933. } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  26934. dim++;
  26935. }
  26936. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  26937. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  26938. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  26939. } else if (IS_CONST & (IS_CV|IS_VAR)) {
  26940. ZVAL_DEREF(value);
  26941. }
  26942. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  26943. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  26944. zend_objects_store_del(obj);
  26945. }
  26946. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  26947. if (IS_CV == IS_UNUSED) {
  26948. zend_use_new_element_for_string();
  26949. UNDEF_RESULT();
  26950. } else {
  26951. dim = EX_VAR(opline->op2.var);
  26952. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  26953. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  26954. }
  26955. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  26956. if (Z_ISREF_P(orig_object_ptr)
  26957. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  26958. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  26959. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26960. UNDEF_RESULT();
  26961. } else {
  26962. HashTable *ht = zend_new_array(8);
  26963. zend_uchar old_type = Z_TYPE_P(object_ptr);
  26964. ZVAL_ARR(object_ptr, ht);
  26965. if (UNEXPECTED(old_type == IS_FALSE)) {
  26966. GC_ADDREF(ht);
  26967. zend_false_to_array_deprecated();
  26968. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  26969. zend_array_destroy(ht);
  26970. goto assign_dim_error;
  26971. }
  26972. }
  26973. goto try_assign_dim_array;
  26974. }
  26975. } else {
  26976. zend_use_scalar_as_array();
  26977. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26978. assign_dim_error:
  26979. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26980. ZVAL_NULL(EX_VAR(opline->result.var));
  26981. }
  26982. }
  26983. }
  26984. if (IS_CV != IS_UNUSED) {
  26985. }
  26986. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26987. /* assign_dim has two opcodes! */
  26988. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  26989. }
  26990. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26991. {
  26992. USE_OPLINE
  26993. zval *object_ptr, *orig_object_ptr;
  26994. zval *value;
  26995. zval *variable_ptr;
  26996. zval *dim;
  26997. SAVE_OPLINE();
  26998. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26999. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  27000. try_assign_dim_array:
  27001. SEPARATE_ARRAY(object_ptr);
  27002. if (IS_CV == IS_UNUSED) {
  27003. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  27004. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  27005. HashTable *ht = Z_ARRVAL_P(object_ptr);
  27006. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  27007. GC_ADDREF(ht);
  27008. }
  27009. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  27010. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  27011. zend_array_destroy(ht);
  27012. goto assign_dim_error;
  27013. }
  27014. }
  27015. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  27016. ZVAL_DEREF(value);
  27017. }
  27018. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  27019. if (UNEXPECTED(value == NULL)) {
  27020. zend_cannot_add_element();
  27021. goto assign_dim_error;
  27022. } else if (IS_TMP_VAR == IS_CV) {
  27023. if (Z_REFCOUNTED_P(value)) {
  27024. Z_ADDREF_P(value);
  27025. }
  27026. } else if (IS_TMP_VAR == IS_VAR) {
  27027. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  27028. if (Z_ISREF_P(free_op_data)) {
  27029. if (Z_REFCOUNTED_P(value)) {
  27030. Z_ADDREF_P(value);
  27031. }
  27032. zval_ptr_dtor_nogc(free_op_data);
  27033. }
  27034. } else if (IS_TMP_VAR == IS_CONST) {
  27035. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  27036. Z_ADDREF_P(value);
  27037. }
  27038. }
  27039. } else {
  27040. dim = EX_VAR(opline->op2.var);
  27041. if (IS_CV == IS_CONST) {
  27042. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  27043. } else {
  27044. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  27045. }
  27046. if (UNEXPECTED(variable_ptr == NULL)) {
  27047. goto assign_dim_error;
  27048. }
  27049. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  27050. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  27051. }
  27052. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27053. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27054. }
  27055. } else {
  27056. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  27057. object_ptr = Z_REFVAL_P(object_ptr);
  27058. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  27059. goto try_assign_dim_array;
  27060. }
  27061. }
  27062. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  27063. zend_object *obj = Z_OBJ_P(object_ptr);
  27064. GC_ADDREF(obj);
  27065. dim = EX_VAR(opline->op2.var);
  27066. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  27067. dim = ZVAL_UNDEFINED_OP2();
  27068. } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  27069. dim++;
  27070. }
  27071. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  27072. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  27073. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  27074. } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
  27075. ZVAL_DEREF(value);
  27076. }
  27077. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  27078. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27079. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  27080. zend_objects_store_del(obj);
  27081. }
  27082. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  27083. if (IS_CV == IS_UNUSED) {
  27084. zend_use_new_element_for_string();
  27085. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27086. UNDEF_RESULT();
  27087. } else {
  27088. dim = EX_VAR(opline->op2.var);
  27089. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  27090. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  27091. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27092. }
  27093. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  27094. if (Z_ISREF_P(orig_object_ptr)
  27095. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  27096. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  27097. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27098. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27099. UNDEF_RESULT();
  27100. } else {
  27101. HashTable *ht = zend_new_array(8);
  27102. zend_uchar old_type = Z_TYPE_P(object_ptr);
  27103. ZVAL_ARR(object_ptr, ht);
  27104. if (UNEXPECTED(old_type == IS_FALSE)) {
  27105. GC_ADDREF(ht);
  27106. zend_false_to_array_deprecated();
  27107. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  27108. zend_array_destroy(ht);
  27109. goto assign_dim_error;
  27110. }
  27111. }
  27112. goto try_assign_dim_array;
  27113. }
  27114. } else {
  27115. zend_use_scalar_as_array();
  27116. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27117. assign_dim_error:
  27118. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27119. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27120. ZVAL_NULL(EX_VAR(opline->result.var));
  27121. }
  27122. }
  27123. }
  27124. if (IS_CV != IS_UNUSED) {
  27125. }
  27126. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27127. /* assign_dim has two opcodes! */
  27128. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  27129. }
  27130. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27131. {
  27132. USE_OPLINE
  27133. zval *object_ptr, *orig_object_ptr;
  27134. zval *value;
  27135. zval *variable_ptr;
  27136. zval *dim;
  27137. SAVE_OPLINE();
  27138. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27139. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  27140. try_assign_dim_array:
  27141. SEPARATE_ARRAY(object_ptr);
  27142. if (IS_CV == IS_UNUSED) {
  27143. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  27144. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  27145. HashTable *ht = Z_ARRVAL_P(object_ptr);
  27146. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  27147. GC_ADDREF(ht);
  27148. }
  27149. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  27150. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  27151. zend_array_destroy(ht);
  27152. goto assign_dim_error;
  27153. }
  27154. }
  27155. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  27156. ZVAL_DEREF(value);
  27157. }
  27158. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  27159. if (UNEXPECTED(value == NULL)) {
  27160. zend_cannot_add_element();
  27161. goto assign_dim_error;
  27162. } else if (IS_VAR == IS_CV) {
  27163. if (Z_REFCOUNTED_P(value)) {
  27164. Z_ADDREF_P(value);
  27165. }
  27166. } else if (IS_VAR == IS_VAR) {
  27167. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  27168. if (Z_ISREF_P(free_op_data)) {
  27169. if (Z_REFCOUNTED_P(value)) {
  27170. Z_ADDREF_P(value);
  27171. }
  27172. zval_ptr_dtor_nogc(free_op_data);
  27173. }
  27174. } else if (IS_VAR == IS_CONST) {
  27175. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  27176. Z_ADDREF_P(value);
  27177. }
  27178. }
  27179. } else {
  27180. dim = EX_VAR(opline->op2.var);
  27181. if (IS_CV == IS_CONST) {
  27182. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  27183. } else {
  27184. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  27185. }
  27186. if (UNEXPECTED(variable_ptr == NULL)) {
  27187. goto assign_dim_error;
  27188. }
  27189. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  27190. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  27191. }
  27192. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27193. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27194. }
  27195. } else {
  27196. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  27197. object_ptr = Z_REFVAL_P(object_ptr);
  27198. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  27199. goto try_assign_dim_array;
  27200. }
  27201. }
  27202. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  27203. zend_object *obj = Z_OBJ_P(object_ptr);
  27204. GC_ADDREF(obj);
  27205. dim = EX_VAR(opline->op2.var);
  27206. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  27207. dim = ZVAL_UNDEFINED_OP2();
  27208. } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  27209. dim++;
  27210. }
  27211. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  27212. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  27213. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  27214. } else if (IS_VAR & (IS_CV|IS_VAR)) {
  27215. ZVAL_DEREF(value);
  27216. }
  27217. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  27218. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27219. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  27220. zend_objects_store_del(obj);
  27221. }
  27222. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  27223. if (IS_CV == IS_UNUSED) {
  27224. zend_use_new_element_for_string();
  27225. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27226. UNDEF_RESULT();
  27227. } else {
  27228. dim = EX_VAR(opline->op2.var);
  27229. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  27230. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  27231. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27232. }
  27233. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  27234. if (Z_ISREF_P(orig_object_ptr)
  27235. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  27236. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  27237. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27238. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27239. UNDEF_RESULT();
  27240. } else {
  27241. HashTable *ht = zend_new_array(8);
  27242. zend_uchar old_type = Z_TYPE_P(object_ptr);
  27243. ZVAL_ARR(object_ptr, ht);
  27244. if (UNEXPECTED(old_type == IS_FALSE)) {
  27245. GC_ADDREF(ht);
  27246. zend_false_to_array_deprecated();
  27247. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  27248. zend_array_destroy(ht);
  27249. goto assign_dim_error;
  27250. }
  27251. }
  27252. goto try_assign_dim_array;
  27253. }
  27254. } else {
  27255. zend_use_scalar_as_array();
  27256. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27257. assign_dim_error:
  27258. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27259. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27260. ZVAL_NULL(EX_VAR(opline->result.var));
  27261. }
  27262. }
  27263. }
  27264. if (IS_CV != IS_UNUSED) {
  27265. }
  27266. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27267. /* assign_dim has two opcodes! */
  27268. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  27269. }
  27270. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27271. {
  27272. USE_OPLINE
  27273. zval *object_ptr, *orig_object_ptr;
  27274. zval *value;
  27275. zval *variable_ptr;
  27276. zval *dim;
  27277. SAVE_OPLINE();
  27278. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27279. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  27280. try_assign_dim_array:
  27281. SEPARATE_ARRAY(object_ptr);
  27282. if (IS_CV == IS_UNUSED) {
  27283. value = EX_VAR((opline+1)->op1.var);
  27284. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  27285. HashTable *ht = Z_ARRVAL_P(object_ptr);
  27286. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  27287. GC_ADDREF(ht);
  27288. }
  27289. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  27290. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  27291. zend_array_destroy(ht);
  27292. goto assign_dim_error;
  27293. }
  27294. }
  27295. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  27296. ZVAL_DEREF(value);
  27297. }
  27298. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  27299. if (UNEXPECTED(value == NULL)) {
  27300. zend_cannot_add_element();
  27301. goto assign_dim_error;
  27302. } else if (IS_CV == IS_CV) {
  27303. if (Z_REFCOUNTED_P(value)) {
  27304. Z_ADDREF_P(value);
  27305. }
  27306. } else if (IS_CV == IS_VAR) {
  27307. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  27308. if (Z_ISREF_P(free_op_data)) {
  27309. if (Z_REFCOUNTED_P(value)) {
  27310. Z_ADDREF_P(value);
  27311. }
  27312. zval_ptr_dtor_nogc(free_op_data);
  27313. }
  27314. } else if (IS_CV == IS_CONST) {
  27315. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  27316. Z_ADDREF_P(value);
  27317. }
  27318. }
  27319. } else {
  27320. dim = EX_VAR(opline->op2.var);
  27321. if (IS_CV == IS_CONST) {
  27322. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  27323. } else {
  27324. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  27325. }
  27326. if (UNEXPECTED(variable_ptr == NULL)) {
  27327. goto assign_dim_error;
  27328. }
  27329. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  27330. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  27331. }
  27332. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27333. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27334. }
  27335. } else {
  27336. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  27337. object_ptr = Z_REFVAL_P(object_ptr);
  27338. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  27339. goto try_assign_dim_array;
  27340. }
  27341. }
  27342. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  27343. zend_object *obj = Z_OBJ_P(object_ptr);
  27344. GC_ADDREF(obj);
  27345. dim = EX_VAR(opline->op2.var);
  27346. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  27347. dim = ZVAL_UNDEFINED_OP2();
  27348. } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  27349. dim++;
  27350. }
  27351. value = EX_VAR((opline+1)->op1.var);
  27352. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  27353. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  27354. } else if (IS_CV & (IS_CV|IS_VAR)) {
  27355. ZVAL_DEREF(value);
  27356. }
  27357. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  27358. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  27359. zend_objects_store_del(obj);
  27360. }
  27361. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  27362. if (IS_CV == IS_UNUSED) {
  27363. zend_use_new_element_for_string();
  27364. UNDEF_RESULT();
  27365. } else {
  27366. dim = EX_VAR(opline->op2.var);
  27367. value = EX_VAR((opline+1)->op1.var);
  27368. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  27369. }
  27370. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  27371. if (Z_ISREF_P(orig_object_ptr)
  27372. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  27373. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  27374. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27375. UNDEF_RESULT();
  27376. } else {
  27377. HashTable *ht = zend_new_array(8);
  27378. zend_uchar old_type = Z_TYPE_P(object_ptr);
  27379. ZVAL_ARR(object_ptr, ht);
  27380. if (UNEXPECTED(old_type == IS_FALSE)) {
  27381. GC_ADDREF(ht);
  27382. zend_false_to_array_deprecated();
  27383. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  27384. zend_array_destroy(ht);
  27385. goto assign_dim_error;
  27386. }
  27387. }
  27388. goto try_assign_dim_array;
  27389. }
  27390. } else {
  27391. zend_use_scalar_as_array();
  27392. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27393. assign_dim_error:
  27394. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27395. ZVAL_NULL(EX_VAR(opline->result.var));
  27396. }
  27397. }
  27398. }
  27399. if (IS_CV != IS_UNUSED) {
  27400. }
  27401. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27402. /* assign_dim has two opcodes! */
  27403. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  27404. }
  27405. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27406. {
  27407. USE_OPLINE
  27408. zval *value;
  27409. zval *variable_ptr;
  27410. SAVE_OPLINE();
  27411. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27412. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27413. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  27414. if (UNEXPECTED(0)) {
  27415. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27416. }
  27417. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27418. /* zend_assign_to_variable() always takes care of op2, never free it! */
  27419. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27420. }
  27421. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27422. {
  27423. USE_OPLINE
  27424. zval *value;
  27425. zval *variable_ptr;
  27426. SAVE_OPLINE();
  27427. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27428. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27429. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  27430. if (UNEXPECTED(1)) {
  27431. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27432. }
  27433. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27434. /* zend_assign_to_variable() always takes care of op2, never free it! */
  27435. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27436. }
  27437. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27438. {
  27439. USE_OPLINE
  27440. zval *variable_ptr;
  27441. zval *value_ptr;
  27442. SAVE_OPLINE();
  27443. value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
  27444. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27445. if (IS_VAR == IS_VAR &&
  27446. UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
  27447. zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
  27448. variable_ptr = &EG(uninitialized_zval);
  27449. } else if (IS_CV == IS_VAR &&
  27450. opline->extended_value == ZEND_RETURNS_FUNCTION &&
  27451. UNEXPECTED(!Z_ISREF_P(value_ptr))) {
  27452. variable_ptr = zend_wrong_assign_to_variable_reference(
  27453. variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27454. } else {
  27455. zend_assign_to_variable_reference(variable_ptr, value_ptr);
  27456. }
  27457. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27458. ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
  27459. }
  27460. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27461. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27462. }
  27463. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27464. {
  27465. USE_OPLINE
  27466. zval *property, *container, *value_ptr;
  27467. SAVE_OPLINE();
  27468. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27469. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27470. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  27471. if (1) {
  27472. if (IS_VAR == IS_UNUSED) {
  27473. if (IS_CV == IS_CONST) {
  27474. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27475. } else {
  27476. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27477. }
  27478. } else {
  27479. if (IS_CV == IS_CONST) {
  27480. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27481. } else {
  27482. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27483. }
  27484. }
  27485. } else {
  27486. zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27487. }
  27488. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27489. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  27490. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  27491. }
  27492. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  27493. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27494. {
  27495. USE_OPLINE
  27496. zval *property, *container, *value_ptr;
  27497. SAVE_OPLINE();
  27498. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27499. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27500. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  27501. if (1) {
  27502. if (IS_VAR == IS_UNUSED) {
  27503. if (IS_CV == IS_CONST) {
  27504. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27505. } else {
  27506. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27507. }
  27508. } else {
  27509. if (IS_CV == IS_CONST) {
  27510. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27511. } else {
  27512. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27513. }
  27514. }
  27515. } else {
  27516. zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27517. }
  27518. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27519. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  27520. }
  27521. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  27522. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27523. {
  27524. USE_OPLINE
  27525. zval *function_name;
  27526. zend_class_entry *ce;
  27527. uint32_t call_info;
  27528. zend_function *fbc;
  27529. zend_execute_data *call;
  27530. SAVE_OPLINE();
  27531. if (IS_VAR == IS_CONST) {
  27532. /* no function found. try a static method in class */
  27533. ce = CACHED_PTR(opline->result.num);
  27534. if (UNEXPECTED(ce == NULL)) {
  27535. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  27536. if (UNEXPECTED(ce == NULL)) {
  27537. HANDLE_EXCEPTION();
  27538. }
  27539. if (IS_CV != IS_CONST) {
  27540. CACHE_PTR(opline->result.num, ce);
  27541. }
  27542. }
  27543. } else if (IS_VAR == IS_UNUSED) {
  27544. ce = zend_fetch_class(NULL, opline->op1.num);
  27545. if (UNEXPECTED(ce == NULL)) {
  27546. HANDLE_EXCEPTION();
  27547. }
  27548. } else {
  27549. ce = Z_CE_P(EX_VAR(opline->op1.var));
  27550. }
  27551. if (IS_VAR == IS_CONST &&
  27552. IS_CV == IS_CONST &&
  27553. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  27554. /* nothing to do */
  27555. } else if (IS_VAR != IS_CONST &&
  27556. IS_CV == IS_CONST &&
  27557. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  27558. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  27559. } else if (IS_CV != IS_UNUSED) {
  27560. function_name = EX_VAR(opline->op2.var);
  27561. if (IS_CV != IS_CONST) {
  27562. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  27563. do {
  27564. if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  27565. function_name = Z_REFVAL_P(function_name);
  27566. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  27567. break;
  27568. }
  27569. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  27570. ZVAL_UNDEFINED_OP2();
  27571. if (UNEXPECTED(EG(exception) != NULL)) {
  27572. HANDLE_EXCEPTION();
  27573. }
  27574. }
  27575. zend_throw_error(NULL, "Method name must be a string");
  27576. HANDLE_EXCEPTION();
  27577. } while (0);
  27578. }
  27579. }
  27580. if (ce->get_static_method) {
  27581. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  27582. } else {
  27583. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  27584. }
  27585. if (UNEXPECTED(fbc == NULL)) {
  27586. if (EXPECTED(!EG(exception))) {
  27587. zend_undefined_method(ce, Z_STR_P(function_name));
  27588. }
  27589. HANDLE_EXCEPTION();
  27590. }
  27591. if (IS_CV == IS_CONST &&
  27592. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  27593. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  27594. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  27595. }
  27596. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  27597. init_func_run_time_cache(&fbc->op_array);
  27598. }
  27599. if (IS_CV != IS_CONST) {
  27600. }
  27601. } else {
  27602. if (UNEXPECTED(ce->constructor == NULL)) {
  27603. zend_throw_error(NULL, "Cannot call constructor");
  27604. HANDLE_EXCEPTION();
  27605. }
  27606. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  27607. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  27608. HANDLE_EXCEPTION();
  27609. }
  27610. fbc = ce->constructor;
  27611. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  27612. init_func_run_time_cache(&fbc->op_array);
  27613. }
  27614. }
  27615. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  27616. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  27617. ce = (zend_class_entry*)Z_OBJ(EX(This));
  27618. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  27619. } else {
  27620. zend_non_static_method_call(fbc);
  27621. HANDLE_EXCEPTION();
  27622. }
  27623. } else {
  27624. /* previous opcode is ZEND_FETCH_CLASS */
  27625. if (IS_VAR == IS_UNUSED
  27626. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  27627. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  27628. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  27629. ce = Z_OBJCE(EX(This));
  27630. } else {
  27631. ce = Z_CE(EX(This));
  27632. }
  27633. }
  27634. call_info = ZEND_CALL_NESTED_FUNCTION;
  27635. }
  27636. call = zend_vm_stack_push_call_frame(call_info,
  27637. fbc, opline->extended_value, ce);
  27638. call->prev_execute_data = EX(call);
  27639. EX(call) = call;
  27640. ZEND_VM_NEXT_OPCODE();
  27641. }
  27642. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27643. {
  27644. USE_OPLINE
  27645. zval *expr_ptr, new_expr;
  27646. SAVE_OPLINE();
  27647. if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
  27648. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  27649. expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27650. if (Z_ISREF_P(expr_ptr)) {
  27651. Z_ADDREF_P(expr_ptr);
  27652. } else {
  27653. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  27654. }
  27655. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27656. } else {
  27657. expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27658. if (IS_VAR == IS_TMP_VAR) {
  27659. /* pass */
  27660. } else if (IS_VAR == IS_CONST) {
  27661. Z_TRY_ADDREF_P(expr_ptr);
  27662. } else if (IS_VAR == IS_CV) {
  27663. ZVAL_DEREF(expr_ptr);
  27664. Z_TRY_ADDREF_P(expr_ptr);
  27665. } else /* if (IS_VAR == IS_VAR) */ {
  27666. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  27667. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  27668. expr_ptr = Z_REFVAL_P(expr_ptr);
  27669. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  27670. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  27671. expr_ptr = &new_expr;
  27672. efree_size(ref, sizeof(zend_reference));
  27673. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  27674. Z_ADDREF_P(expr_ptr);
  27675. }
  27676. }
  27677. }
  27678. }
  27679. if (IS_CV != IS_UNUSED) {
  27680. zval *offset = EX_VAR(opline->op2.var);
  27681. zend_string *str;
  27682. zend_ulong hval;
  27683. add_again:
  27684. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  27685. str = Z_STR_P(offset);
  27686. if (IS_CV != IS_CONST) {
  27687. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  27688. goto num_index;
  27689. }
  27690. }
  27691. str_index:
  27692. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  27693. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  27694. hval = Z_LVAL_P(offset);
  27695. num_index:
  27696. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  27697. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  27698. offset = Z_REFVAL_P(offset);
  27699. goto add_again;
  27700. } else if (Z_TYPE_P(offset) == IS_NULL) {
  27701. str = ZSTR_EMPTY_ALLOC();
  27702. goto str_index;
  27703. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  27704. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  27705. goto num_index;
  27706. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  27707. hval = 0;
  27708. goto num_index;
  27709. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  27710. hval = 1;
  27711. goto num_index;
  27712. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  27713. zend_use_resource_as_offset(offset);
  27714. hval = Z_RES_HANDLE_P(offset);
  27715. goto num_index;
  27716. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  27717. ZVAL_UNDEFINED_OP2();
  27718. str = ZSTR_EMPTY_ALLOC();
  27719. goto str_index;
  27720. } else {
  27721. zend_illegal_offset();
  27722. zval_ptr_dtor_nogc(expr_ptr);
  27723. }
  27724. } else {
  27725. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  27726. zend_cannot_add_element();
  27727. zval_ptr_dtor_nogc(expr_ptr);
  27728. }
  27729. }
  27730. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27731. }
  27732. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27733. {
  27734. zval *array;
  27735. uint32_t size;
  27736. USE_OPLINE
  27737. array = EX_VAR(opline->result.var);
  27738. if (IS_VAR != IS_UNUSED) {
  27739. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  27740. ZVAL_ARR(array, zend_new_array(size));
  27741. /* Explicitly initialize array as not-packed if flag is set */
  27742. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  27743. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  27744. }
  27745. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27746. } else {
  27747. ZVAL_ARR(array, zend_new_array(0));
  27748. ZEND_VM_NEXT_OPCODE();
  27749. }
  27750. }
  27751. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27752. {
  27753. USE_OPLINE
  27754. zval *container;
  27755. zval *offset;
  27756. zend_ulong hval;
  27757. zend_string *key;
  27758. SAVE_OPLINE();
  27759. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27760. offset = EX_VAR(opline->op2.var);
  27761. do {
  27762. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  27763. HashTable *ht;
  27764. unset_dim_array:
  27765. SEPARATE_ARRAY(container);
  27766. ht = Z_ARRVAL_P(container);
  27767. offset_again:
  27768. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  27769. key = Z_STR_P(offset);
  27770. if (IS_CV != IS_CONST) {
  27771. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  27772. goto num_index_dim;
  27773. }
  27774. }
  27775. str_index_dim:
  27776. ZEND_ASSERT(ht != &EG(symbol_table));
  27777. zend_hash_del(ht, key);
  27778. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  27779. hval = Z_LVAL_P(offset);
  27780. num_index_dim:
  27781. zend_hash_index_del(ht, hval);
  27782. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  27783. offset = Z_REFVAL_P(offset);
  27784. goto offset_again;
  27785. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  27786. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  27787. goto num_index_dim;
  27788. } else if (Z_TYPE_P(offset) == IS_NULL) {
  27789. key = ZSTR_EMPTY_ALLOC();
  27790. goto str_index_dim;
  27791. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  27792. hval = 0;
  27793. goto num_index_dim;
  27794. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  27795. hval = 1;
  27796. goto num_index_dim;
  27797. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  27798. zend_use_resource_as_offset(offset);
  27799. hval = Z_RES_HANDLE_P(offset);
  27800. goto num_index_dim;
  27801. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  27802. ZVAL_UNDEFINED_OP2();
  27803. key = ZSTR_EMPTY_ALLOC();
  27804. goto str_index_dim;
  27805. } else {
  27806. zend_type_error("Illegal offset type in unset");
  27807. }
  27808. break;
  27809. } else if (Z_ISREF_P(container)) {
  27810. container = Z_REFVAL_P(container);
  27811. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  27812. goto unset_dim_array;
  27813. }
  27814. }
  27815. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  27816. container = ZVAL_UNDEFINED_OP1();
  27817. }
  27818. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  27819. offset = ZVAL_UNDEFINED_OP2();
  27820. }
  27821. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  27822. if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  27823. offset++;
  27824. }
  27825. Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
  27826. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  27827. zend_throw_error(NULL, "Cannot unset string offsets");
  27828. } else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
  27829. zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
  27830. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
  27831. zend_false_to_array_deprecated();
  27832. }
  27833. } while (0);
  27834. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27835. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27836. }
  27837. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27838. {
  27839. USE_OPLINE
  27840. zval *container;
  27841. zval *offset;
  27842. zend_string *name, *tmp_name;
  27843. SAVE_OPLINE();
  27844. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27845. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27846. do {
  27847. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  27848. if (Z_ISREF_P(container)) {
  27849. container = Z_REFVAL_P(container);
  27850. if (Z_TYPE_P(container) != IS_OBJECT) {
  27851. if (IS_VAR == IS_CV
  27852. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  27853. ZVAL_UNDEFINED_OP1();
  27854. }
  27855. break;
  27856. }
  27857. } else {
  27858. break;
  27859. }
  27860. }
  27861. if (IS_CV == IS_CONST) {
  27862. name = Z_STR_P(offset);
  27863. } else {
  27864. name = zval_try_get_tmp_string(offset, &tmp_name);
  27865. if (UNEXPECTED(!name)) {
  27866. break;
  27867. }
  27868. }
  27869. Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  27870. if (IS_CV != IS_CONST) {
  27871. zend_tmp_string_release(tmp_name);
  27872. }
  27873. } while (0);
  27874. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27875. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27876. }
  27877. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27878. {
  27879. USE_OPLINE
  27880. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  27881. SAVE_OPLINE();
  27882. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  27883. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27884. }
  27885. /* Destroy the previously yielded value */
  27886. zval_ptr_dtor(&generator->value);
  27887. /* Destroy the previously yielded key */
  27888. zval_ptr_dtor(&generator->key);
  27889. /* Set the new yielded value */
  27890. if (IS_VAR != IS_UNUSED) {
  27891. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  27892. /* Constants and temporary variables aren't yieldable by reference,
  27893. * but we still allow them with a notice. */
  27894. if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
  27895. zval *value;
  27896. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  27897. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27898. ZVAL_COPY_VALUE(&generator->value, value);
  27899. if (IS_VAR == IS_CONST) {
  27900. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  27901. Z_ADDREF(generator->value);
  27902. }
  27903. }
  27904. } else {
  27905. zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27906. /* If a function call result is yielded and the function did
  27907. * not return by reference we throw a notice. */
  27908. do {
  27909. if (IS_VAR == IS_VAR) {
  27910. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  27911. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  27912. && !Z_ISREF_P(value_ptr)) {
  27913. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  27914. ZVAL_COPY(&generator->value, value_ptr);
  27915. break;
  27916. }
  27917. }
  27918. if (Z_ISREF_P(value_ptr)) {
  27919. Z_ADDREF_P(value_ptr);
  27920. } else {
  27921. ZVAL_MAKE_REF_EX(value_ptr, 2);
  27922. }
  27923. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  27924. } while (0);
  27925. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27926. }
  27927. } else {
  27928. zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27929. /* Consts, temporary variables and references need copying */
  27930. if (IS_VAR == IS_CONST) {
  27931. ZVAL_COPY_VALUE(&generator->value, value);
  27932. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  27933. Z_ADDREF(generator->value);
  27934. }
  27935. } else if (IS_VAR == IS_TMP_VAR) {
  27936. ZVAL_COPY_VALUE(&generator->value, value);
  27937. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  27938. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  27939. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27940. } else {
  27941. ZVAL_COPY_VALUE(&generator->value, value);
  27942. if (IS_VAR == IS_CV) {
  27943. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  27944. }
  27945. }
  27946. }
  27947. } else {
  27948. /* If no value was specified yield null */
  27949. ZVAL_NULL(&generator->value);
  27950. }
  27951. /* Set the new yielded key */
  27952. if (IS_CV != IS_UNUSED) {
  27953. zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27954. if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  27955. key = Z_REFVAL_P(key);
  27956. }
  27957. ZVAL_COPY(&generator->key, key);
  27958. if (Z_TYPE(generator->key) == IS_LONG
  27959. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  27960. ) {
  27961. generator->largest_used_integer_key = Z_LVAL(generator->key);
  27962. }
  27963. } else {
  27964. /* If no key was specified we use auto-increment keys */
  27965. generator->largest_used_integer_key++;
  27966. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  27967. }
  27968. if (RETURN_VALUE_USED(opline)) {
  27969. /* If the return value of yield is used set the send
  27970. * target and initialize it to NULL */
  27971. generator->send_target = EX_VAR(opline->result.var);
  27972. ZVAL_NULL(generator->send_target);
  27973. } else {
  27974. generator->send_target = NULL;
  27975. }
  27976. /* We increment to the next op, so we are at the correct position when the
  27977. * generator is resumed. */
  27978. ZEND_VM_INC_OPCODE();
  27979. /* The GOTO VM uses a local opline variable. We need to set the opline
  27980. * variable in execute_data so we don't resume at an old position. */
  27981. SAVE_OPLINE();
  27982. ZEND_VM_RETURN();
  27983. }
  27984. 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)
  27985. {
  27986. USE_OPLINE
  27987. zval *array;
  27988. zval *value, *variable_ptr;
  27989. uint32_t value_type;
  27990. HashTable *fe_ht;
  27991. HashPosition pos;
  27992. Bucket *p;
  27993. array = EX_VAR(opline->op1.var);
  27994. SAVE_OPLINE();
  27995. fe_ht = Z_ARRVAL_P(array);
  27996. pos = Z_FE_POS_P(array);
  27997. p = fe_ht->arData + pos;
  27998. while (1) {
  27999. if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
  28000. /* reached end of iteration */
  28001. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  28002. ZEND_VM_CONTINUE();
  28003. }
  28004. pos++;
  28005. value = &p->val;
  28006. value_type = Z_TYPE_INFO_P(value);
  28007. ZEND_ASSERT(value_type != IS_INDIRECT);
  28008. if (EXPECTED(value_type != IS_UNDEF)) {
  28009. break;
  28010. }
  28011. p++;
  28012. }
  28013. Z_FE_POS_P(array) = pos;
  28014. if (0) {
  28015. if (!p->key) {
  28016. ZVAL_LONG(EX_VAR(opline->result.var), p->h);
  28017. } else {
  28018. ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
  28019. }
  28020. }
  28021. variable_ptr = EX_VAR(opline->op2.var);
  28022. zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  28023. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28024. }
  28025. 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)
  28026. {
  28027. USE_OPLINE
  28028. zval *array;
  28029. zval *value, *variable_ptr;
  28030. uint32_t value_type;
  28031. HashTable *fe_ht;
  28032. HashPosition pos;
  28033. Bucket *p;
  28034. array = EX_VAR(opline->op1.var);
  28035. SAVE_OPLINE();
  28036. fe_ht = Z_ARRVAL_P(array);
  28037. pos = Z_FE_POS_P(array);
  28038. p = fe_ht->arData + pos;
  28039. while (1) {
  28040. if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
  28041. /* reached end of iteration */
  28042. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  28043. ZEND_VM_CONTINUE();
  28044. }
  28045. pos++;
  28046. value = &p->val;
  28047. value_type = Z_TYPE_INFO_P(value);
  28048. ZEND_ASSERT(value_type != IS_INDIRECT);
  28049. if (EXPECTED(value_type != IS_UNDEF)) {
  28050. break;
  28051. }
  28052. p++;
  28053. }
  28054. Z_FE_POS_P(array) = pos;
  28055. if (1) {
  28056. if (!p->key) {
  28057. ZVAL_LONG(EX_VAR(opline->result.var), p->h);
  28058. } else {
  28059. ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
  28060. }
  28061. }
  28062. variable_ptr = EX_VAR(opline->op2.var);
  28063. zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  28064. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28065. }
  28066. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28067. {
  28068. USE_OPLINE
  28069. zval *obj;
  28070. zend_object *zobj;
  28071. zend_class_entry *ce, *scope;
  28072. zend_function *clone;
  28073. zend_object_clone_obj_t clone_call;
  28074. SAVE_OPLINE();
  28075. obj = &EX(This);
  28076. do {
  28077. if (IS_UNUSED == IS_CONST ||
  28078. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
  28079. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
  28080. obj = Z_REFVAL_P(obj);
  28081. if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
  28082. break;
  28083. }
  28084. }
  28085. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28086. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
  28087. ZVAL_UNDEFINED_OP1();
  28088. if (UNEXPECTED(EG(exception) != NULL)) {
  28089. HANDLE_EXCEPTION();
  28090. }
  28091. }
  28092. zend_throw_error(NULL, "__clone method called on non-object");
  28093. HANDLE_EXCEPTION();
  28094. }
  28095. } while (0);
  28096. zobj = Z_OBJ_P(obj);
  28097. ce = zobj->ce;
  28098. clone = ce->clone;
  28099. clone_call = zobj->handlers->clone_obj;
  28100. if (UNEXPECTED(clone_call == NULL)) {
  28101. zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
  28102. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28103. HANDLE_EXCEPTION();
  28104. }
  28105. if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
  28106. scope = EX(func)->op_array.scope;
  28107. if (clone->common.scope != scope) {
  28108. if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
  28109. || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
  28110. zend_wrong_clone_call(clone, scope);
  28111. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28112. HANDLE_EXCEPTION();
  28113. }
  28114. }
  28115. }
  28116. ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
  28117. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28118. }
  28119. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28120. {
  28121. uint32_t fetch_type;
  28122. zend_class_entry *called_scope, *scope;
  28123. USE_OPLINE
  28124. if (IS_UNUSED != IS_UNUSED) {
  28125. SAVE_OPLINE();
  28126. zval *op = NULL;
  28127. if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
  28128. ZVAL_DEREF(op);
  28129. if (Z_TYPE_P(op) != IS_OBJECT) {
  28130. zend_type_error("Cannot use \"::class\" on value of type %s", zend_zval_type_name(op));
  28131. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28132. HANDLE_EXCEPTION();
  28133. }
  28134. }
  28135. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
  28136. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28137. }
  28138. fetch_type = opline->op1.num;
  28139. scope = EX(func)->op_array.scope;
  28140. if (UNEXPECTED(scope == NULL)) {
  28141. SAVE_OPLINE();
  28142. zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
  28143. fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
  28144. fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
  28145. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28146. HANDLE_EXCEPTION();
  28147. }
  28148. switch (fetch_type) {
  28149. case ZEND_FETCH_CLASS_SELF:
  28150. ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
  28151. break;
  28152. case ZEND_FETCH_CLASS_PARENT:
  28153. if (UNEXPECTED(scope->parent == NULL)) {
  28154. SAVE_OPLINE();
  28155. zend_throw_error(NULL,
  28156. "Cannot use \"parent\" when current class scope has no parent");
  28157. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28158. HANDLE_EXCEPTION();
  28159. }
  28160. ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
  28161. break;
  28162. case ZEND_FETCH_CLASS_STATIC:
  28163. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  28164. called_scope = Z_OBJCE(EX(This));
  28165. } else {
  28166. called_scope = Z_CE(EX(This));
  28167. }
  28168. ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
  28169. break;
  28170. EMPTY_SWITCH_DEFAULT_CASE()
  28171. }
  28172. ZEND_VM_NEXT_OPCODE();
  28173. }
  28174. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28175. {
  28176. USE_OPLINE
  28177. zval *object;
  28178. zval *property;
  28179. zval *value;
  28180. zval *zptr;
  28181. void **cache_slot;
  28182. zend_property_info *prop_info;
  28183. zend_object *zobj;
  28184. zend_string *name, *tmp_name;
  28185. SAVE_OPLINE();
  28186. object = &EX(This);
  28187. property = RT_CONSTANT(opline, opline->op2);
  28188. do {
  28189. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  28190. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28191. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  28192. object = Z_REFVAL_P(object);
  28193. goto assign_op_object;
  28194. }
  28195. if (IS_UNUSED == IS_CV
  28196. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  28197. ZVAL_UNDEFINED_OP1();
  28198. }
  28199. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  28200. break;
  28201. }
  28202. assign_op_object:
  28203. /* here we are sure we are dealing with an object */
  28204. zobj = Z_OBJ_P(object);
  28205. if (IS_CONST == IS_CONST) {
  28206. name = Z_STR_P(property);
  28207. } else {
  28208. name = zval_try_get_tmp_string(property, &tmp_name);
  28209. if (UNEXPECTED(!name)) {
  28210. UNDEF_RESULT();
  28211. break;
  28212. }
  28213. }
  28214. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  28215. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  28216. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  28217. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28218. ZVAL_NULL(EX_VAR(opline->result.var));
  28219. }
  28220. } else {
  28221. zval *orig_zptr = zptr;
  28222. zend_reference *ref;
  28223. do {
  28224. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  28225. ref = Z_REF_P(zptr);
  28226. zptr = Z_REFVAL_P(zptr);
  28227. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  28228. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  28229. break;
  28230. }
  28231. }
  28232. if (IS_CONST == IS_CONST) {
  28233. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  28234. } else {
  28235. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  28236. }
  28237. if (UNEXPECTED(prop_info)) {
  28238. /* special case for typed properties */
  28239. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  28240. } else {
  28241. zend_binary_op(zptr, zptr, value OPLINE_CC);
  28242. }
  28243. } while (0);
  28244. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28245. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  28246. }
  28247. }
  28248. } else {
  28249. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  28250. }
  28251. if (IS_CONST != IS_CONST) {
  28252. zend_tmp_string_release(tmp_name);
  28253. }
  28254. } while (0);
  28255. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  28256. /* assign_obj has two opcodes! */
  28257. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  28258. }
  28259. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  28260. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28261. {
  28262. USE_OPLINE
  28263. zval *object;
  28264. zval *property;
  28265. zval *zptr;
  28266. void **cache_slot;
  28267. zend_property_info *prop_info;
  28268. zend_object *zobj;
  28269. zend_string *name, *tmp_name;
  28270. SAVE_OPLINE();
  28271. object = &EX(This);
  28272. property = RT_CONSTANT(opline, opline->op2);
  28273. do {
  28274. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28275. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  28276. object = Z_REFVAL_P(object);
  28277. goto pre_incdec_object;
  28278. }
  28279. if (IS_UNUSED == IS_CV
  28280. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  28281. ZVAL_UNDEFINED_OP1();
  28282. }
  28283. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  28284. break;
  28285. }
  28286. pre_incdec_object:
  28287. /* here we are sure we are dealing with an object */
  28288. zobj = Z_OBJ_P(object);
  28289. if (IS_CONST == IS_CONST) {
  28290. name = Z_STR_P(property);
  28291. } else {
  28292. name = zval_try_get_tmp_string(property, &tmp_name);
  28293. if (UNEXPECTED(!name)) {
  28294. UNDEF_RESULT();
  28295. break;
  28296. }
  28297. }
  28298. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  28299. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  28300. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  28301. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28302. ZVAL_NULL(EX_VAR(opline->result.var));
  28303. }
  28304. } else {
  28305. if (IS_CONST == IS_CONST) {
  28306. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  28307. } else {
  28308. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  28309. }
  28310. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  28311. }
  28312. } else {
  28313. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  28314. }
  28315. if (IS_CONST != IS_CONST) {
  28316. zend_tmp_string_release(tmp_name);
  28317. }
  28318. } while (0);
  28319. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28320. }
  28321. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28322. {
  28323. USE_OPLINE
  28324. zval *object;
  28325. zval *property;
  28326. zval *zptr;
  28327. void **cache_slot;
  28328. zend_property_info *prop_info;
  28329. zend_object *zobj;
  28330. zend_string *name, *tmp_name;
  28331. SAVE_OPLINE();
  28332. object = &EX(This);
  28333. property = RT_CONSTANT(opline, opline->op2);
  28334. do {
  28335. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28336. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  28337. object = Z_REFVAL_P(object);
  28338. goto post_incdec_object;
  28339. }
  28340. if (IS_UNUSED == IS_CV
  28341. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  28342. ZVAL_UNDEFINED_OP1();
  28343. }
  28344. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  28345. break;
  28346. }
  28347. post_incdec_object:
  28348. /* here we are sure we are dealing with an object */
  28349. zobj = Z_OBJ_P(object);
  28350. if (IS_CONST == IS_CONST) {
  28351. name = Z_STR_P(property);
  28352. } else {
  28353. name = zval_try_get_tmp_string(property, &tmp_name);
  28354. if (UNEXPECTED(!name)) {
  28355. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28356. break;
  28357. }
  28358. }
  28359. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  28360. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  28361. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  28362. ZVAL_NULL(EX_VAR(opline->result.var));
  28363. } else {
  28364. if (IS_CONST == IS_CONST) {
  28365. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  28366. } else {
  28367. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  28368. }
  28369. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  28370. }
  28371. } else {
  28372. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  28373. }
  28374. if (IS_CONST != IS_CONST) {
  28375. zend_tmp_string_release(tmp_name);
  28376. }
  28377. } while (0);
  28378. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28379. }
  28380. static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28381. {
  28382. USE_OPLINE
  28383. zval *container;
  28384. void **cache_slot = NULL;
  28385. SAVE_OPLINE();
  28386. container = &EX(This);
  28387. if (IS_UNUSED == IS_CONST ||
  28388. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  28389. do {
  28390. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  28391. container = Z_REFVAL_P(container);
  28392. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  28393. break;
  28394. }
  28395. }
  28396. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  28397. ZVAL_UNDEFINED_OP1();
  28398. }
  28399. zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
  28400. ZVAL_NULL(EX_VAR(opline->result.var));
  28401. goto fetch_obj_r_finish;
  28402. } while (0);
  28403. }
  28404. /* here we are sure we are dealing with an object */
  28405. do {
  28406. zend_object *zobj = Z_OBJ_P(container);
  28407. zend_string *name, *tmp_name;
  28408. zval *retval;
  28409. if (IS_CONST == IS_CONST) {
  28410. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  28411. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  28412. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  28413. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  28414. retval = OBJ_PROP(zobj, prop_offset);
  28415. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  28416. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  28417. goto fetch_obj_r_copy;
  28418. } else {
  28419. fetch_obj_r_fast_copy:
  28420. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  28421. ZEND_VM_NEXT_OPCODE();
  28422. }
  28423. }
  28424. } else if (EXPECTED(zobj->properties != NULL)) {
  28425. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28426. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  28427. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  28428. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  28429. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  28430. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  28431. (EXPECTED(p->key == name) ||
  28432. (EXPECTED(p->h == ZSTR_H(name)) &&
  28433. EXPECTED(p->key != NULL) &&
  28434. EXPECTED(zend_string_equal_content(p->key, name))))) {
  28435. retval = &p->val;
  28436. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  28437. goto fetch_obj_r_copy;
  28438. } else {
  28439. goto fetch_obj_r_fast_copy;
  28440. }
  28441. }
  28442. }
  28443. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  28444. }
  28445. retval = zend_hash_find_known_hash(zobj->properties, name);
  28446. if (EXPECTED(retval)) {
  28447. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  28448. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  28449. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  28450. goto fetch_obj_r_copy;
  28451. } else {
  28452. goto fetch_obj_r_fast_copy;
  28453. }
  28454. }
  28455. }
  28456. }
  28457. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28458. } else {
  28459. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  28460. if (UNEXPECTED(!name)) {
  28461. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28462. break;
  28463. }
  28464. }
  28465. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  28466. #if ZEND_DEBUG
  28467. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  28468. zend_verify_internal_read_property_type(zobj, name, retval);
  28469. }
  28470. #endif
  28471. if (IS_CONST != IS_CONST) {
  28472. zend_tmp_string_release(tmp_name);
  28473. }
  28474. if (retval != EX_VAR(opline->result.var)) {
  28475. fetch_obj_r_copy:
  28476. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  28477. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  28478. zend_unwrap_reference(retval);
  28479. }
  28480. } while (0);
  28481. fetch_obj_r_finish:
  28482. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28483. }
  28484. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28485. {
  28486. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28487. }
  28488. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28489. {
  28490. USE_OPLINE
  28491. zval *property, *container, *result;
  28492. SAVE_OPLINE();
  28493. container = &EX(This);
  28494. property = RT_CONSTANT(opline, opline->op2);
  28495. result = EX_VAR(opline->result.var);
  28496. zend_fetch_property_address(
  28497. result, container, IS_UNUSED, property, IS_CONST,
  28498. ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  28499. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
  28500. if (IS_UNUSED == IS_VAR) {
  28501. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  28502. }
  28503. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28504. }
  28505. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28506. {
  28507. USE_OPLINE
  28508. zval *property, *container, *result;
  28509. SAVE_OPLINE();
  28510. container = &EX(This);
  28511. property = RT_CONSTANT(opline, opline->op2);
  28512. result = EX_VAR(opline->result.var);
  28513. zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  28514. if (IS_UNUSED == IS_VAR) {
  28515. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  28516. }
  28517. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28518. }
  28519. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28520. {
  28521. USE_OPLINE
  28522. zval *container;
  28523. void **cache_slot = NULL;
  28524. SAVE_OPLINE();
  28525. container = &EX(This);
  28526. if (IS_UNUSED == IS_CONST ||
  28527. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  28528. do {
  28529. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  28530. container = Z_REFVAL_P(container);
  28531. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  28532. break;
  28533. }
  28534. }
  28535. if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  28536. ZVAL_UNDEFINED_OP2();
  28537. }
  28538. ZVAL_NULL(EX_VAR(opline->result.var));
  28539. goto fetch_obj_is_finish;
  28540. } while (0);
  28541. }
  28542. /* here we are sure we are dealing with an object */
  28543. do {
  28544. zend_object *zobj = Z_OBJ_P(container);
  28545. zend_string *name, *tmp_name;
  28546. zval *retval;
  28547. if (IS_CONST == IS_CONST) {
  28548. cache_slot = CACHE_ADDR(opline->extended_value);
  28549. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  28550. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  28551. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  28552. retval = OBJ_PROP(zobj, prop_offset);
  28553. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  28554. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  28555. goto fetch_obj_is_copy;
  28556. } else {
  28557. fetch_obj_is_fast_copy:
  28558. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  28559. ZEND_VM_NEXT_OPCODE();
  28560. }
  28561. }
  28562. } else if (EXPECTED(zobj->properties != NULL)) {
  28563. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28564. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  28565. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  28566. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  28567. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  28568. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  28569. (EXPECTED(p->key == name) ||
  28570. (EXPECTED(p->h == ZSTR_H(name)) &&
  28571. EXPECTED(p->key != NULL) &&
  28572. EXPECTED(zend_string_equal_content(p->key, name))))) {
  28573. retval = &p->val;
  28574. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  28575. goto fetch_obj_is_copy;
  28576. } else {
  28577. goto fetch_obj_is_fast_copy;
  28578. }
  28579. }
  28580. }
  28581. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  28582. }
  28583. retval = zend_hash_find_known_hash(zobj->properties, name);
  28584. if (EXPECTED(retval)) {
  28585. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  28586. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  28587. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  28588. goto fetch_obj_is_copy;
  28589. } else {
  28590. goto fetch_obj_is_fast_copy;
  28591. }
  28592. }
  28593. }
  28594. }
  28595. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28596. } else {
  28597. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  28598. if (UNEXPECTED(!name)) {
  28599. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28600. break;
  28601. }
  28602. }
  28603. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  28604. if (IS_CONST != IS_CONST) {
  28605. zend_tmp_string_release(tmp_name);
  28606. }
  28607. if (retval != EX_VAR(opline->result.var)) {
  28608. fetch_obj_is_copy:
  28609. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  28610. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  28611. zend_unwrap_reference(retval);
  28612. }
  28613. } while (0);
  28614. fetch_obj_is_finish:
  28615. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28616. }
  28617. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28618. {
  28619. #if 0
  28620. USE_OPLINE
  28621. #endif
  28622. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  28623. /* Behave like FETCH_OBJ_W */
  28624. if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
  28625. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28626. }
  28627. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28628. } else {
  28629. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28630. }
  28631. }
  28632. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28633. {
  28634. USE_OPLINE
  28635. zval *container, *property, *result;
  28636. SAVE_OPLINE();
  28637. container = &EX(This);
  28638. property = RT_CONSTANT(opline, opline->op2);
  28639. result = EX_VAR(opline->result.var);
  28640. zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  28641. if (IS_UNUSED == IS_VAR) {
  28642. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  28643. }
  28644. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28645. }
  28646. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28647. {
  28648. USE_OPLINE
  28649. zval *object, *value, tmp;
  28650. zend_object *zobj;
  28651. zend_string *name, *tmp_name;
  28652. SAVE_OPLINE();
  28653. object = &EX(This);
  28654. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  28655. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28656. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  28657. object = Z_REFVAL_P(object);
  28658. goto assign_object;
  28659. }
  28660. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  28661. value = &EG(uninitialized_zval);
  28662. goto free_and_exit_assign_obj;
  28663. }
  28664. assign_object:
  28665. zobj = Z_OBJ_P(object);
  28666. if (IS_CONST == IS_CONST) {
  28667. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  28668. void **cache_slot = CACHE_ADDR(opline->extended_value);
  28669. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  28670. zend_object *zobj = Z_OBJ_P(object);
  28671. zval *property_val;
  28672. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  28673. property_val = OBJ_PROP(zobj, prop_offset);
  28674. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  28675. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  28676. if (UNEXPECTED(prop_info != NULL)) {
  28677. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  28678. goto free_and_exit_assign_obj;
  28679. } else {
  28680. fast_assign_obj:
  28681. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  28682. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28683. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28684. }
  28685. goto exit_assign_obj;
  28686. }
  28687. }
  28688. } else {
  28689. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28690. if (EXPECTED(zobj->properties != NULL)) {
  28691. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  28692. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  28693. GC_DELREF(zobj->properties);
  28694. }
  28695. zobj->properties = zend_array_dup(zobj->properties);
  28696. }
  28697. property_val = zend_hash_find_known_hash(zobj->properties, name);
  28698. if (property_val) {
  28699. goto fast_assign_obj;
  28700. }
  28701. }
  28702. if (!zobj->ce->__set) {
  28703. if (EXPECTED(zobj->properties == NULL)) {
  28704. rebuild_object_properties(zobj);
  28705. }
  28706. if (IS_CONST == IS_CONST) {
  28707. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  28708. Z_ADDREF_P(value);
  28709. }
  28710. } else if (IS_CONST != IS_TMP_VAR) {
  28711. if (Z_ISREF_P(value)) {
  28712. if (IS_CONST == IS_VAR) {
  28713. zend_reference *ref = Z_REF_P(value);
  28714. if (GC_DELREF(ref) == 0) {
  28715. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  28716. efree_size(ref, sizeof(zend_reference));
  28717. value = &tmp;
  28718. } else {
  28719. value = Z_REFVAL_P(value);
  28720. Z_TRY_ADDREF_P(value);
  28721. }
  28722. } else {
  28723. value = Z_REFVAL_P(value);
  28724. Z_TRY_ADDREF_P(value);
  28725. }
  28726. } else if (IS_CONST == IS_CV) {
  28727. Z_TRY_ADDREF_P(value);
  28728. }
  28729. }
  28730. zend_hash_add_new(zobj->properties, name, value);
  28731. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28732. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28733. }
  28734. goto exit_assign_obj;
  28735. }
  28736. }
  28737. }
  28738. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28739. } else {
  28740. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  28741. if (UNEXPECTED(!name)) {
  28742. UNDEF_RESULT();
  28743. goto exit_assign_obj;
  28744. }
  28745. }
  28746. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  28747. ZVAL_DEREF(value);
  28748. }
  28749. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  28750. if (IS_CONST != IS_CONST) {
  28751. zend_tmp_string_release(tmp_name);
  28752. }
  28753. free_and_exit_assign_obj:
  28754. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28755. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  28756. }
  28757. exit_assign_obj:
  28758. /* assign_obj has two opcodes! */
  28759. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  28760. }
  28761. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  28762. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28763. {
  28764. USE_OPLINE
  28765. zval *object, *value, tmp;
  28766. zend_object *zobj;
  28767. zend_string *name, *tmp_name;
  28768. SAVE_OPLINE();
  28769. object = &EX(This);
  28770. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  28771. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28772. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  28773. object = Z_REFVAL_P(object);
  28774. goto assign_object;
  28775. }
  28776. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  28777. value = &EG(uninitialized_zval);
  28778. goto free_and_exit_assign_obj;
  28779. }
  28780. assign_object:
  28781. zobj = Z_OBJ_P(object);
  28782. if (IS_CONST == IS_CONST) {
  28783. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  28784. void **cache_slot = CACHE_ADDR(opline->extended_value);
  28785. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  28786. zend_object *zobj = Z_OBJ_P(object);
  28787. zval *property_val;
  28788. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  28789. property_val = OBJ_PROP(zobj, prop_offset);
  28790. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  28791. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  28792. if (UNEXPECTED(prop_info != NULL)) {
  28793. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  28794. goto free_and_exit_assign_obj;
  28795. } else {
  28796. fast_assign_obj:
  28797. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  28798. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28799. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28800. }
  28801. goto exit_assign_obj;
  28802. }
  28803. }
  28804. } else {
  28805. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28806. if (EXPECTED(zobj->properties != NULL)) {
  28807. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  28808. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  28809. GC_DELREF(zobj->properties);
  28810. }
  28811. zobj->properties = zend_array_dup(zobj->properties);
  28812. }
  28813. property_val = zend_hash_find_known_hash(zobj->properties, name);
  28814. if (property_val) {
  28815. goto fast_assign_obj;
  28816. }
  28817. }
  28818. if (!zobj->ce->__set) {
  28819. if (EXPECTED(zobj->properties == NULL)) {
  28820. rebuild_object_properties(zobj);
  28821. }
  28822. if (IS_TMP_VAR == IS_CONST) {
  28823. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  28824. Z_ADDREF_P(value);
  28825. }
  28826. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  28827. if (Z_ISREF_P(value)) {
  28828. if (IS_TMP_VAR == IS_VAR) {
  28829. zend_reference *ref = Z_REF_P(value);
  28830. if (GC_DELREF(ref) == 0) {
  28831. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  28832. efree_size(ref, sizeof(zend_reference));
  28833. value = &tmp;
  28834. } else {
  28835. value = Z_REFVAL_P(value);
  28836. Z_TRY_ADDREF_P(value);
  28837. }
  28838. } else {
  28839. value = Z_REFVAL_P(value);
  28840. Z_TRY_ADDREF_P(value);
  28841. }
  28842. } else if (IS_TMP_VAR == IS_CV) {
  28843. Z_TRY_ADDREF_P(value);
  28844. }
  28845. }
  28846. zend_hash_add_new(zobj->properties, name, value);
  28847. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28848. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28849. }
  28850. goto exit_assign_obj;
  28851. }
  28852. }
  28853. }
  28854. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28855. } else {
  28856. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  28857. if (UNEXPECTED(!name)) {
  28858. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  28859. UNDEF_RESULT();
  28860. goto exit_assign_obj;
  28861. }
  28862. }
  28863. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  28864. ZVAL_DEREF(value);
  28865. }
  28866. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  28867. if (IS_CONST != IS_CONST) {
  28868. zend_tmp_string_release(tmp_name);
  28869. }
  28870. free_and_exit_assign_obj:
  28871. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28872. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  28873. }
  28874. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  28875. exit_assign_obj:
  28876. /* assign_obj has two opcodes! */
  28877. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  28878. }
  28879. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  28880. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28881. {
  28882. USE_OPLINE
  28883. zval *object, *value, tmp;
  28884. zend_object *zobj;
  28885. zend_string *name, *tmp_name;
  28886. SAVE_OPLINE();
  28887. object = &EX(This);
  28888. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  28889. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28890. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  28891. object = Z_REFVAL_P(object);
  28892. goto assign_object;
  28893. }
  28894. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  28895. value = &EG(uninitialized_zval);
  28896. goto free_and_exit_assign_obj;
  28897. }
  28898. assign_object:
  28899. zobj = Z_OBJ_P(object);
  28900. if (IS_CONST == IS_CONST) {
  28901. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  28902. void **cache_slot = CACHE_ADDR(opline->extended_value);
  28903. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  28904. zend_object *zobj = Z_OBJ_P(object);
  28905. zval *property_val;
  28906. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  28907. property_val = OBJ_PROP(zobj, prop_offset);
  28908. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  28909. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  28910. if (UNEXPECTED(prop_info != NULL)) {
  28911. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  28912. goto free_and_exit_assign_obj;
  28913. } else {
  28914. fast_assign_obj:
  28915. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  28916. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28917. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28918. }
  28919. goto exit_assign_obj;
  28920. }
  28921. }
  28922. } else {
  28923. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28924. if (EXPECTED(zobj->properties != NULL)) {
  28925. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  28926. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  28927. GC_DELREF(zobj->properties);
  28928. }
  28929. zobj->properties = zend_array_dup(zobj->properties);
  28930. }
  28931. property_val = zend_hash_find_known_hash(zobj->properties, name);
  28932. if (property_val) {
  28933. goto fast_assign_obj;
  28934. }
  28935. }
  28936. if (!zobj->ce->__set) {
  28937. if (EXPECTED(zobj->properties == NULL)) {
  28938. rebuild_object_properties(zobj);
  28939. }
  28940. if (IS_VAR == IS_CONST) {
  28941. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  28942. Z_ADDREF_P(value);
  28943. }
  28944. } else if (IS_VAR != IS_TMP_VAR) {
  28945. if (Z_ISREF_P(value)) {
  28946. if (IS_VAR == IS_VAR) {
  28947. zend_reference *ref = Z_REF_P(value);
  28948. if (GC_DELREF(ref) == 0) {
  28949. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  28950. efree_size(ref, sizeof(zend_reference));
  28951. value = &tmp;
  28952. } else {
  28953. value = Z_REFVAL_P(value);
  28954. Z_TRY_ADDREF_P(value);
  28955. }
  28956. } else {
  28957. value = Z_REFVAL_P(value);
  28958. Z_TRY_ADDREF_P(value);
  28959. }
  28960. } else if (IS_VAR == IS_CV) {
  28961. Z_TRY_ADDREF_P(value);
  28962. }
  28963. }
  28964. zend_hash_add_new(zobj->properties, name, value);
  28965. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28966. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28967. }
  28968. goto exit_assign_obj;
  28969. }
  28970. }
  28971. }
  28972. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28973. } else {
  28974. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  28975. if (UNEXPECTED(!name)) {
  28976. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  28977. UNDEF_RESULT();
  28978. goto exit_assign_obj;
  28979. }
  28980. }
  28981. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  28982. ZVAL_DEREF(value);
  28983. }
  28984. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  28985. if (IS_CONST != IS_CONST) {
  28986. zend_tmp_string_release(tmp_name);
  28987. }
  28988. free_and_exit_assign_obj:
  28989. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28990. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  28991. }
  28992. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  28993. exit_assign_obj:
  28994. /* assign_obj has two opcodes! */
  28995. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  28996. }
  28997. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  28998. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28999. {
  29000. USE_OPLINE
  29001. zval *object, *value, tmp;
  29002. zend_object *zobj;
  29003. zend_string *name, *tmp_name;
  29004. SAVE_OPLINE();
  29005. object = &EX(This);
  29006. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  29007. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  29008. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  29009. object = Z_REFVAL_P(object);
  29010. goto assign_object;
  29011. }
  29012. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  29013. value = &EG(uninitialized_zval);
  29014. goto free_and_exit_assign_obj;
  29015. }
  29016. assign_object:
  29017. zobj = Z_OBJ_P(object);
  29018. if (IS_CONST == IS_CONST) {
  29019. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  29020. void **cache_slot = CACHE_ADDR(opline->extended_value);
  29021. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  29022. zend_object *zobj = Z_OBJ_P(object);
  29023. zval *property_val;
  29024. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  29025. property_val = OBJ_PROP(zobj, prop_offset);
  29026. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  29027. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  29028. if (UNEXPECTED(prop_info != NULL)) {
  29029. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  29030. goto free_and_exit_assign_obj;
  29031. } else {
  29032. fast_assign_obj:
  29033. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  29034. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  29035. ZVAL_COPY(EX_VAR(opline->result.var), value);
  29036. }
  29037. goto exit_assign_obj;
  29038. }
  29039. }
  29040. } else {
  29041. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  29042. if (EXPECTED(zobj->properties != NULL)) {
  29043. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  29044. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  29045. GC_DELREF(zobj->properties);
  29046. }
  29047. zobj->properties = zend_array_dup(zobj->properties);
  29048. }
  29049. property_val = zend_hash_find_known_hash(zobj->properties, name);
  29050. if (property_val) {
  29051. goto fast_assign_obj;
  29052. }
  29053. }
  29054. if (!zobj->ce->__set) {
  29055. if (EXPECTED(zobj->properties == NULL)) {
  29056. rebuild_object_properties(zobj);
  29057. }
  29058. if (IS_CV == IS_CONST) {
  29059. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  29060. Z_ADDREF_P(value);
  29061. }
  29062. } else if (IS_CV != IS_TMP_VAR) {
  29063. if (Z_ISREF_P(value)) {
  29064. if (IS_CV == IS_VAR) {
  29065. zend_reference *ref = Z_REF_P(value);
  29066. if (GC_DELREF(ref) == 0) {
  29067. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  29068. efree_size(ref, sizeof(zend_reference));
  29069. value = &tmp;
  29070. } else {
  29071. value = Z_REFVAL_P(value);
  29072. Z_TRY_ADDREF_P(value);
  29073. }
  29074. } else {
  29075. value = Z_REFVAL_P(value);
  29076. Z_TRY_ADDREF_P(value);
  29077. }
  29078. } else if (IS_CV == IS_CV) {
  29079. Z_TRY_ADDREF_P(value);
  29080. }
  29081. }
  29082. zend_hash_add_new(zobj->properties, name, value);
  29083. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  29084. ZVAL_COPY(EX_VAR(opline->result.var), value);
  29085. }
  29086. goto exit_assign_obj;
  29087. }
  29088. }
  29089. }
  29090. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  29091. } else {
  29092. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  29093. if (UNEXPECTED(!name)) {
  29094. UNDEF_RESULT();
  29095. goto exit_assign_obj;
  29096. }
  29097. }
  29098. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  29099. ZVAL_DEREF(value);
  29100. }
  29101. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  29102. if (IS_CONST != IS_CONST) {
  29103. zend_tmp_string_release(tmp_name);
  29104. }
  29105. free_and_exit_assign_obj:
  29106. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  29107. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  29108. }
  29109. exit_assign_obj:
  29110. /* assign_obj has two opcodes! */
  29111. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  29112. }
  29113. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  29114. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29115. {
  29116. USE_OPLINE
  29117. zval *property, *container, *value_ptr;
  29118. SAVE_OPLINE();
  29119. container = &EX(This);
  29120. property = RT_CONSTANT(opline, opline->op2);
  29121. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  29122. if (1) {
  29123. if (IS_UNUSED == IS_UNUSED) {
  29124. if (IS_CONST == IS_CONST) {
  29125. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29126. } else {
  29127. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29128. }
  29129. } else {
  29130. if (IS_CONST == IS_CONST) {
  29131. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29132. } else {
  29133. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29134. }
  29135. }
  29136. } else {
  29137. zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29138. }
  29139. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  29140. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  29141. }
  29142. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  29143. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29144. {
  29145. USE_OPLINE
  29146. zval *property, *container, *value_ptr;
  29147. SAVE_OPLINE();
  29148. container = &EX(This);
  29149. property = RT_CONSTANT(opline, opline->op2);
  29150. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  29151. if (1) {
  29152. if (IS_UNUSED == IS_UNUSED) {
  29153. if (IS_CONST == IS_CONST) {
  29154. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29155. } else {
  29156. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29157. }
  29158. } else {
  29159. if (IS_CONST == IS_CONST) {
  29160. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29161. } else {
  29162. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29163. }
  29164. }
  29165. } else {
  29166. zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29167. }
  29168. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  29169. }
  29170. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  29171. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29172. {
  29173. USE_OPLINE
  29174. zend_string **rope;
  29175. zval *var;
  29176. /* Compiler allocates the necessary number of zval slots to keep the rope */
  29177. rope = (zend_string**)EX_VAR(opline->result.var);
  29178. if (IS_CONST == IS_CONST) {
  29179. var = RT_CONSTANT(opline, opline->op2);
  29180. rope[0] = Z_STR_P(var);
  29181. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  29182. Z_ADDREF_P(var);
  29183. }
  29184. } else {
  29185. var = RT_CONSTANT(opline, opline->op2);
  29186. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  29187. if (IS_CONST == IS_CV) {
  29188. rope[0] = zend_string_copy(Z_STR_P(var));
  29189. } else {
  29190. rope[0] = Z_STR_P(var);
  29191. }
  29192. } else {
  29193. SAVE_OPLINE();
  29194. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  29195. ZVAL_UNDEFINED_OP2();
  29196. }
  29197. rope[0] = zval_get_string_func(var);
  29198. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29199. }
  29200. }
  29201. ZEND_VM_NEXT_OPCODE();
  29202. }
  29203. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29204. {
  29205. zval *class_name;
  29206. USE_OPLINE
  29207. SAVE_OPLINE();
  29208. if (IS_CONST == IS_UNUSED) {
  29209. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
  29210. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29211. } else if (IS_CONST == IS_CONST) {
  29212. zend_class_entry *ce = CACHED_PTR(opline->extended_value);
  29213. if (UNEXPECTED(ce == NULL)) {
  29214. class_name = RT_CONSTANT(opline, opline->op2);
  29215. ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
  29216. CACHE_PTR(opline->extended_value, ce);
  29217. }
  29218. Z_CE_P(EX_VAR(opline->result.var)) = ce;
  29219. } else {
  29220. class_name = RT_CONSTANT(opline, opline->op2);
  29221. try_class_name:
  29222. if (Z_TYPE_P(class_name) == IS_OBJECT) {
  29223. Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
  29224. } else if (Z_TYPE_P(class_name) == IS_STRING) {
  29225. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
  29226. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
  29227. class_name = Z_REFVAL_P(class_name);
  29228. goto try_class_name;
  29229. } else {
  29230. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
  29231. ZVAL_UNDEFINED_OP2();
  29232. if (UNEXPECTED(EG(exception) != NULL)) {
  29233. HANDLE_EXCEPTION();
  29234. }
  29235. }
  29236. zend_throw_error(NULL, "Class name must be a valid object or a string");
  29237. }
  29238. }
  29239. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29240. }
  29241. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29242. {
  29243. USE_OPLINE
  29244. zval *function_name;
  29245. zval *object;
  29246. zend_function *fbc;
  29247. zend_class_entry *called_scope;
  29248. zend_object *obj;
  29249. zend_execute_data *call;
  29250. uint32_t call_info;
  29251. SAVE_OPLINE();
  29252. object = &EX(This);
  29253. if (IS_CONST != IS_CONST) {
  29254. function_name = RT_CONSTANT(opline, opline->op2);
  29255. }
  29256. if (IS_CONST != IS_CONST &&
  29257. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  29258. do {
  29259. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  29260. function_name = Z_REFVAL_P(function_name);
  29261. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  29262. break;
  29263. }
  29264. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  29265. ZVAL_UNDEFINED_OP2();
  29266. if (UNEXPECTED(EG(exception) != NULL)) {
  29267. HANDLE_EXCEPTION();
  29268. }
  29269. }
  29270. zend_throw_error(NULL, "Method name must be a string");
  29271. HANDLE_EXCEPTION();
  29272. } while (0);
  29273. }
  29274. if (IS_UNUSED == IS_UNUSED) {
  29275. obj = Z_OBJ_P(object);
  29276. } else {
  29277. do {
  29278. if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  29279. obj = Z_OBJ_P(object);
  29280. } else {
  29281. if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  29282. zend_reference *ref = Z_REF_P(object);
  29283. object = &ref->val;
  29284. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  29285. obj = Z_OBJ_P(object);
  29286. if (IS_UNUSED & IS_VAR) {
  29287. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  29288. efree_size(ref, sizeof(zend_reference));
  29289. } else {
  29290. Z_ADDREF_P(object);
  29291. }
  29292. }
  29293. break;
  29294. }
  29295. }
  29296. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  29297. object = ZVAL_UNDEFINED_OP1();
  29298. if (UNEXPECTED(EG(exception) != NULL)) {
  29299. if (IS_CONST != IS_CONST) {
  29300. }
  29301. HANDLE_EXCEPTION();
  29302. }
  29303. }
  29304. if (IS_CONST == IS_CONST) {
  29305. function_name = RT_CONSTANT(opline, opline->op2);
  29306. }
  29307. zend_invalid_method_call(object, function_name);
  29308. HANDLE_EXCEPTION();
  29309. }
  29310. } while (0);
  29311. }
  29312. called_scope = obj->ce;
  29313. if (IS_CONST == IS_CONST &&
  29314. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  29315. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  29316. } else {
  29317. zend_object *orig_obj = obj;
  29318. if (IS_CONST == IS_CONST) {
  29319. function_name = RT_CONSTANT(opline, opline->op2);
  29320. }
  29321. /* First, locate the function. */
  29322. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  29323. if (UNEXPECTED(fbc == NULL)) {
  29324. if (EXPECTED(!EG(exception))) {
  29325. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  29326. }
  29327. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  29328. zend_objects_store_del(orig_obj);
  29329. }
  29330. HANDLE_EXCEPTION();
  29331. }
  29332. if (IS_CONST == IS_CONST &&
  29333. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  29334. EXPECTED(obj == orig_obj)) {
  29335. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  29336. }
  29337. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  29338. GC_ADDREF(obj); /* For $this pointer */
  29339. if (GC_DELREF(orig_obj) == 0) {
  29340. zend_objects_store_del(orig_obj);
  29341. }
  29342. }
  29343. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  29344. init_func_run_time_cache(&fbc->op_array);
  29345. }
  29346. }
  29347. if (IS_CONST != IS_CONST) {
  29348. }
  29349. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  29350. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  29351. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  29352. zend_objects_store_del(obj);
  29353. if (UNEXPECTED(EG(exception))) {
  29354. HANDLE_EXCEPTION();
  29355. }
  29356. }
  29357. /* call static method */
  29358. obj = (zend_object*)called_scope;
  29359. call_info = ZEND_CALL_NESTED_FUNCTION;
  29360. } else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  29361. if (IS_UNUSED == IS_CV) {
  29362. GC_ADDREF(obj); /* For $this pointer */
  29363. }
  29364. /* CV may be changed indirectly (e.g. when it's a reference) */
  29365. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  29366. }
  29367. call = zend_vm_stack_push_call_frame(call_info,
  29368. fbc, opline->extended_value, obj);
  29369. call->prev_execute_data = EX(call);
  29370. EX(call) = call;
  29371. ZEND_VM_NEXT_OPCODE();
  29372. }
  29373. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29374. {
  29375. USE_OPLINE
  29376. zval *function_name;
  29377. zend_class_entry *ce;
  29378. uint32_t call_info;
  29379. zend_function *fbc;
  29380. zend_execute_data *call;
  29381. SAVE_OPLINE();
  29382. if (IS_UNUSED == IS_CONST) {
  29383. /* no function found. try a static method in class */
  29384. ce = CACHED_PTR(opline->result.num);
  29385. if (UNEXPECTED(ce == NULL)) {
  29386. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  29387. if (UNEXPECTED(ce == NULL)) {
  29388. HANDLE_EXCEPTION();
  29389. }
  29390. if (IS_CONST != IS_CONST) {
  29391. CACHE_PTR(opline->result.num, ce);
  29392. }
  29393. }
  29394. } else if (IS_UNUSED == IS_UNUSED) {
  29395. ce = zend_fetch_class(NULL, opline->op1.num);
  29396. if (UNEXPECTED(ce == NULL)) {
  29397. HANDLE_EXCEPTION();
  29398. }
  29399. } else {
  29400. ce = Z_CE_P(EX_VAR(opline->op1.var));
  29401. }
  29402. if (IS_UNUSED == IS_CONST &&
  29403. IS_CONST == IS_CONST &&
  29404. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  29405. /* nothing to do */
  29406. } else if (IS_UNUSED != IS_CONST &&
  29407. IS_CONST == IS_CONST &&
  29408. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  29409. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  29410. } else if (IS_CONST != IS_UNUSED) {
  29411. function_name = RT_CONSTANT(opline, opline->op2);
  29412. if (IS_CONST != IS_CONST) {
  29413. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  29414. do {
  29415. if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  29416. function_name = Z_REFVAL_P(function_name);
  29417. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  29418. break;
  29419. }
  29420. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  29421. ZVAL_UNDEFINED_OP2();
  29422. if (UNEXPECTED(EG(exception) != NULL)) {
  29423. HANDLE_EXCEPTION();
  29424. }
  29425. }
  29426. zend_throw_error(NULL, "Method name must be a string");
  29427. HANDLE_EXCEPTION();
  29428. } while (0);
  29429. }
  29430. }
  29431. if (ce->get_static_method) {
  29432. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  29433. } else {
  29434. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  29435. }
  29436. if (UNEXPECTED(fbc == NULL)) {
  29437. if (EXPECTED(!EG(exception))) {
  29438. zend_undefined_method(ce, Z_STR_P(function_name));
  29439. }
  29440. HANDLE_EXCEPTION();
  29441. }
  29442. if (IS_CONST == IS_CONST &&
  29443. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  29444. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  29445. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  29446. }
  29447. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  29448. init_func_run_time_cache(&fbc->op_array);
  29449. }
  29450. if (IS_CONST != IS_CONST) {
  29451. }
  29452. } else {
  29453. if (UNEXPECTED(ce->constructor == NULL)) {
  29454. zend_throw_error(NULL, "Cannot call constructor");
  29455. HANDLE_EXCEPTION();
  29456. }
  29457. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  29458. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  29459. HANDLE_EXCEPTION();
  29460. }
  29461. fbc = ce->constructor;
  29462. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  29463. init_func_run_time_cache(&fbc->op_array);
  29464. }
  29465. }
  29466. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  29467. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  29468. ce = (zend_class_entry*)Z_OBJ(EX(This));
  29469. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  29470. } else {
  29471. zend_non_static_method_call(fbc);
  29472. HANDLE_EXCEPTION();
  29473. }
  29474. } else {
  29475. /* previous opcode is ZEND_FETCH_CLASS */
  29476. if (IS_UNUSED == IS_UNUSED
  29477. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  29478. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  29479. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  29480. ce = Z_OBJCE(EX(This));
  29481. } else {
  29482. ce = Z_CE(EX(This));
  29483. }
  29484. }
  29485. call_info = ZEND_CALL_NESTED_FUNCTION;
  29486. }
  29487. call = zend_vm_stack_push_call_frame(call_info,
  29488. fbc, opline->extended_value, ce);
  29489. call->prev_execute_data = EX(call);
  29490. EX(call) = call;
  29491. ZEND_VM_NEXT_OPCODE();
  29492. }
  29493. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29494. {
  29495. USE_OPLINE
  29496. uint32_t arg_num;
  29497. if (IS_CONST == IS_CONST) {
  29498. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  29499. arg_num = zend_get_arg_offset_by_name(
  29500. EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
  29501. if (UNEXPECTED(arg_num == 0)) {
  29502. /* Treat this as a by-value argument, and throw an error during SEND. */
  29503. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  29504. ZEND_VM_NEXT_OPCODE();
  29505. }
  29506. } else {
  29507. arg_num = opline->op2.num;
  29508. }
  29509. if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
  29510. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  29511. ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  29512. } else {
  29513. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  29514. }
  29515. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  29516. ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  29517. } else {
  29518. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  29519. }
  29520. ZEND_VM_NEXT_OPCODE();
  29521. }
  29522. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29523. {
  29524. USE_OPLINE
  29525. zend_constant *c;
  29526. c = CACHED_PTR(opline->extended_value);
  29527. if (EXPECTED(c != NULL) && EXPECTED(!IS_SPECIAL_CACHE_VAL(c))) {
  29528. ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), &c->value);
  29529. ZEND_VM_NEXT_OPCODE();
  29530. }
  29531. SAVE_OPLINE();
  29532. zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->op1.num OPLINE_CC EXECUTE_DATA_CC);
  29533. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29534. }
  29535. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29536. {
  29537. zend_class_entry *ce, *scope;
  29538. zend_class_constant *c;
  29539. zval *value, *zv;
  29540. USE_OPLINE
  29541. SAVE_OPLINE();
  29542. do {
  29543. if (IS_UNUSED == IS_CONST) {
  29544. if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
  29545. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  29546. break;
  29547. } else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
  29548. ce = CACHED_PTR(opline->extended_value);
  29549. } else {
  29550. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  29551. if (UNEXPECTED(ce == NULL)) {
  29552. ZVAL_UNDEF(EX_VAR(opline->result.var));
  29553. HANDLE_EXCEPTION();
  29554. }
  29555. }
  29556. } else {
  29557. if (IS_UNUSED == IS_UNUSED) {
  29558. ce = zend_fetch_class(NULL, opline->op1.num);
  29559. if (UNEXPECTED(ce == NULL)) {
  29560. ZVAL_UNDEF(EX_VAR(opline->result.var));
  29561. HANDLE_EXCEPTION();
  29562. }
  29563. } else {
  29564. ce = Z_CE_P(EX_VAR(opline->op1.var));
  29565. }
  29566. if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  29567. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  29568. break;
  29569. }
  29570. }
  29571. zv = zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), Z_STR_P(RT_CONSTANT(opline, opline->op2)));
  29572. if (EXPECTED(zv != NULL)) {
  29573. c = Z_PTR_P(zv);
  29574. scope = EX(func)->op_array.scope;
  29575. if (!zend_verify_const_access(c, scope)) {
  29576. zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
  29577. ZVAL_UNDEF(EX_VAR(opline->result.var));
  29578. HANDLE_EXCEPTION();
  29579. }
  29580. value = &c->value;
  29581. if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
  29582. zval_update_constant_ex(value, c->ce);
  29583. if (UNEXPECTED(EG(exception) != NULL)) {
  29584. ZVAL_UNDEF(EX_VAR(opline->result.var));
  29585. HANDLE_EXCEPTION();
  29586. }
  29587. }
  29588. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
  29589. } else {
  29590. zend_throw_error(NULL, "Undefined constant %s::%s",
  29591. ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
  29592. ZVAL_UNDEF(EX_VAR(opline->result.var));
  29593. HANDLE_EXCEPTION();
  29594. }
  29595. } while (0);
  29596. ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
  29597. ZEND_VM_NEXT_OPCODE();
  29598. }
  29599. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29600. {
  29601. zval *array;
  29602. uint32_t size;
  29603. USE_OPLINE
  29604. array = EX_VAR(opline->result.var);
  29605. if (IS_UNUSED != IS_UNUSED) {
  29606. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  29607. ZVAL_ARR(array, zend_new_array(size));
  29608. /* Explicitly initialize array as not-packed if flag is set */
  29609. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  29610. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  29611. }
  29612. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  29613. } else {
  29614. ZVAL_ARR(array, zend_new_array(0));
  29615. ZEND_VM_NEXT_OPCODE();
  29616. }
  29617. }
  29618. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29619. {
  29620. USE_OPLINE
  29621. zval *container;
  29622. zval *offset;
  29623. zend_string *name, *tmp_name;
  29624. SAVE_OPLINE();
  29625. container = &EX(This);
  29626. offset = RT_CONSTANT(opline, opline->op2);
  29627. do {
  29628. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  29629. if (Z_ISREF_P(container)) {
  29630. container = Z_REFVAL_P(container);
  29631. if (Z_TYPE_P(container) != IS_OBJECT) {
  29632. if (IS_UNUSED == IS_CV
  29633. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  29634. ZVAL_UNDEFINED_OP1();
  29635. }
  29636. break;
  29637. }
  29638. } else {
  29639. break;
  29640. }
  29641. }
  29642. if (IS_CONST == IS_CONST) {
  29643. name = Z_STR_P(offset);
  29644. } else {
  29645. name = zval_try_get_tmp_string(offset, &tmp_name);
  29646. if (UNEXPECTED(!name)) {
  29647. break;
  29648. }
  29649. }
  29650. Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  29651. if (IS_CONST != IS_CONST) {
  29652. zend_tmp_string_release(tmp_name);
  29653. }
  29654. } while (0);
  29655. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29656. }
  29657. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29658. {
  29659. USE_OPLINE
  29660. zval *container;
  29661. int result;
  29662. zval *offset;
  29663. zend_string *name, *tmp_name;
  29664. SAVE_OPLINE();
  29665. container = &EX(This);
  29666. offset = RT_CONSTANT(opline, opline->op2);
  29667. if (IS_UNUSED == IS_CONST ||
  29668. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  29669. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  29670. container = Z_REFVAL_P(container);
  29671. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  29672. result = (opline->extended_value & ZEND_ISEMPTY);
  29673. goto isset_object_finish;
  29674. }
  29675. } else {
  29676. result = (opline->extended_value & ZEND_ISEMPTY);
  29677. goto isset_object_finish;
  29678. }
  29679. }
  29680. if (IS_CONST == IS_CONST) {
  29681. name = Z_STR_P(offset);
  29682. } else {
  29683. name = zval_try_get_tmp_string(offset, &tmp_name);
  29684. if (UNEXPECTED(!name)) {
  29685. result = 0;
  29686. goto isset_object_finish;
  29687. }
  29688. }
  29689. result =
  29690. (opline->extended_value & ZEND_ISEMPTY) ^
  29691. Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  29692. if (IS_CONST != IS_CONST) {
  29693. zend_tmp_string_release(tmp_name);
  29694. }
  29695. isset_object_finish:
  29696. ZEND_VM_SMART_BRANCH(result, 1);
  29697. }
  29698. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29699. {
  29700. USE_OPLINE
  29701. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  29702. SAVE_OPLINE();
  29703. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  29704. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  29705. }
  29706. /* Destroy the previously yielded value */
  29707. zval_ptr_dtor(&generator->value);
  29708. /* Destroy the previously yielded key */
  29709. zval_ptr_dtor(&generator->key);
  29710. /* Set the new yielded value */
  29711. if (IS_UNUSED != IS_UNUSED) {
  29712. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  29713. /* Constants and temporary variables aren't yieldable by reference,
  29714. * but we still allow them with a notice. */
  29715. if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
  29716. zval *value;
  29717. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  29718. value = NULL;
  29719. ZVAL_COPY_VALUE(&generator->value, value);
  29720. if (IS_UNUSED == IS_CONST) {
  29721. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  29722. Z_ADDREF(generator->value);
  29723. }
  29724. }
  29725. } else {
  29726. zval *value_ptr = NULL;
  29727. /* If a function call result is yielded and the function did
  29728. * not return by reference we throw a notice. */
  29729. do {
  29730. if (IS_UNUSED == IS_VAR) {
  29731. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  29732. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  29733. && !Z_ISREF_P(value_ptr)) {
  29734. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  29735. ZVAL_COPY(&generator->value, value_ptr);
  29736. break;
  29737. }
  29738. }
  29739. if (Z_ISREF_P(value_ptr)) {
  29740. Z_ADDREF_P(value_ptr);
  29741. } else {
  29742. ZVAL_MAKE_REF_EX(value_ptr, 2);
  29743. }
  29744. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  29745. } while (0);
  29746. }
  29747. } else {
  29748. zval *value = NULL;
  29749. /* Consts, temporary variables and references need copying */
  29750. if (IS_UNUSED == IS_CONST) {
  29751. ZVAL_COPY_VALUE(&generator->value, value);
  29752. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  29753. Z_ADDREF(generator->value);
  29754. }
  29755. } else if (IS_UNUSED == IS_TMP_VAR) {
  29756. ZVAL_COPY_VALUE(&generator->value, value);
  29757. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  29758. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  29759. } else {
  29760. ZVAL_COPY_VALUE(&generator->value, value);
  29761. if (IS_UNUSED == IS_CV) {
  29762. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  29763. }
  29764. }
  29765. }
  29766. } else {
  29767. /* If no value was specified yield null */
  29768. ZVAL_NULL(&generator->value);
  29769. }
  29770. /* Set the new yielded key */
  29771. if (IS_CONST != IS_UNUSED) {
  29772. zval *key = RT_CONSTANT(opline, opline->op2);
  29773. if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  29774. key = Z_REFVAL_P(key);
  29775. }
  29776. ZVAL_COPY(&generator->key, key);
  29777. if (Z_TYPE(generator->key) == IS_LONG
  29778. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  29779. ) {
  29780. generator->largest_used_integer_key = Z_LVAL(generator->key);
  29781. }
  29782. } else {
  29783. /* If no key was specified we use auto-increment keys */
  29784. generator->largest_used_integer_key++;
  29785. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  29786. }
  29787. if (RETURN_VALUE_USED(opline)) {
  29788. /* If the return value of yield is used set the send
  29789. * target and initialize it to NULL */
  29790. generator->send_target = EX_VAR(opline->result.var);
  29791. ZVAL_NULL(generator->send_target);
  29792. } else {
  29793. generator->send_target = NULL;
  29794. }
  29795. /* We increment to the next op, so we are at the correct position when the
  29796. * generator is resumed. */
  29797. ZEND_VM_INC_OPCODE();
  29798. /* The GOTO VM uses a local opline variable. We need to set the opline
  29799. * variable in execute_data so we don't resume at an old position. */
  29800. SAVE_OPLINE();
  29801. ZEND_VM_RETURN();
  29802. }
  29803. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29804. {
  29805. USE_OPLINE
  29806. zval *object;
  29807. zval *property;
  29808. zval *value;
  29809. zval *zptr;
  29810. void **cache_slot;
  29811. zend_property_info *prop_info;
  29812. zend_object *zobj;
  29813. zend_string *name, *tmp_name;
  29814. SAVE_OPLINE();
  29815. object = &EX(This);
  29816. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  29817. do {
  29818. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  29819. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  29820. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  29821. object = Z_REFVAL_P(object);
  29822. goto assign_op_object;
  29823. }
  29824. if (IS_UNUSED == IS_CV
  29825. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  29826. ZVAL_UNDEFINED_OP1();
  29827. }
  29828. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  29829. break;
  29830. }
  29831. assign_op_object:
  29832. /* here we are sure we are dealing with an object */
  29833. zobj = Z_OBJ_P(object);
  29834. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  29835. name = Z_STR_P(property);
  29836. } else {
  29837. name = zval_try_get_tmp_string(property, &tmp_name);
  29838. if (UNEXPECTED(!name)) {
  29839. UNDEF_RESULT();
  29840. break;
  29841. }
  29842. }
  29843. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  29844. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  29845. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  29846. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  29847. ZVAL_NULL(EX_VAR(opline->result.var));
  29848. }
  29849. } else {
  29850. zval *orig_zptr = zptr;
  29851. zend_reference *ref;
  29852. do {
  29853. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  29854. ref = Z_REF_P(zptr);
  29855. zptr = Z_REFVAL_P(zptr);
  29856. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  29857. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  29858. break;
  29859. }
  29860. }
  29861. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  29862. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  29863. } else {
  29864. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  29865. }
  29866. if (UNEXPECTED(prop_info)) {
  29867. /* special case for typed properties */
  29868. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  29869. } else {
  29870. zend_binary_op(zptr, zptr, value OPLINE_CC);
  29871. }
  29872. } while (0);
  29873. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  29874. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  29875. }
  29876. }
  29877. } else {
  29878. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  29879. }
  29880. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  29881. zend_tmp_string_release(tmp_name);
  29882. }
  29883. } while (0);
  29884. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  29885. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  29886. /* assign_obj has two opcodes! */
  29887. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  29888. }
  29889. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  29890. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29891. {
  29892. USE_OPLINE
  29893. zval *object;
  29894. zval *property;
  29895. zval *zptr;
  29896. void **cache_slot;
  29897. zend_property_info *prop_info;
  29898. zend_object *zobj;
  29899. zend_string *name, *tmp_name;
  29900. SAVE_OPLINE();
  29901. object = &EX(This);
  29902. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  29903. do {
  29904. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  29905. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  29906. object = Z_REFVAL_P(object);
  29907. goto pre_incdec_object;
  29908. }
  29909. if (IS_UNUSED == IS_CV
  29910. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  29911. ZVAL_UNDEFINED_OP1();
  29912. }
  29913. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  29914. break;
  29915. }
  29916. pre_incdec_object:
  29917. /* here we are sure we are dealing with an object */
  29918. zobj = Z_OBJ_P(object);
  29919. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  29920. name = Z_STR_P(property);
  29921. } else {
  29922. name = zval_try_get_tmp_string(property, &tmp_name);
  29923. if (UNEXPECTED(!name)) {
  29924. UNDEF_RESULT();
  29925. break;
  29926. }
  29927. }
  29928. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  29929. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  29930. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  29931. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  29932. ZVAL_NULL(EX_VAR(opline->result.var));
  29933. }
  29934. } else {
  29935. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  29936. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  29937. } else {
  29938. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  29939. }
  29940. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  29941. }
  29942. } else {
  29943. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  29944. }
  29945. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  29946. zend_tmp_string_release(tmp_name);
  29947. }
  29948. } while (0);
  29949. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  29950. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29951. }
  29952. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29953. {
  29954. USE_OPLINE
  29955. zval *object;
  29956. zval *property;
  29957. zval *zptr;
  29958. void **cache_slot;
  29959. zend_property_info *prop_info;
  29960. zend_object *zobj;
  29961. zend_string *name, *tmp_name;
  29962. SAVE_OPLINE();
  29963. object = &EX(This);
  29964. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  29965. do {
  29966. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  29967. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  29968. object = Z_REFVAL_P(object);
  29969. goto post_incdec_object;
  29970. }
  29971. if (IS_UNUSED == IS_CV
  29972. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  29973. ZVAL_UNDEFINED_OP1();
  29974. }
  29975. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  29976. break;
  29977. }
  29978. post_incdec_object:
  29979. /* here we are sure we are dealing with an object */
  29980. zobj = Z_OBJ_P(object);
  29981. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  29982. name = Z_STR_P(property);
  29983. } else {
  29984. name = zval_try_get_tmp_string(property, &tmp_name);
  29985. if (UNEXPECTED(!name)) {
  29986. ZVAL_UNDEF(EX_VAR(opline->result.var));
  29987. break;
  29988. }
  29989. }
  29990. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  29991. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  29992. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  29993. ZVAL_NULL(EX_VAR(opline->result.var));
  29994. } else {
  29995. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  29996. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  29997. } else {
  29998. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  29999. }
  30000. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  30001. }
  30002. } else {
  30003. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  30004. }
  30005. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30006. zend_tmp_string_release(tmp_name);
  30007. }
  30008. } while (0);
  30009. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30010. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30011. }
  30012. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30013. {
  30014. USE_OPLINE
  30015. zval *container;
  30016. void **cache_slot = NULL;
  30017. SAVE_OPLINE();
  30018. container = &EX(This);
  30019. if (IS_UNUSED == IS_CONST ||
  30020. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  30021. do {
  30022. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  30023. container = Z_REFVAL_P(container);
  30024. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  30025. break;
  30026. }
  30027. }
  30028. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  30029. ZVAL_UNDEFINED_OP1();
  30030. }
  30031. zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30032. ZVAL_NULL(EX_VAR(opline->result.var));
  30033. goto fetch_obj_r_finish;
  30034. } while (0);
  30035. }
  30036. /* here we are sure we are dealing with an object */
  30037. do {
  30038. zend_object *zobj = Z_OBJ_P(container);
  30039. zend_string *name, *tmp_name;
  30040. zval *retval;
  30041. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30042. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  30043. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  30044. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  30045. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30046. retval = OBJ_PROP(zobj, prop_offset);
  30047. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  30048. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  30049. goto fetch_obj_r_copy;
  30050. } else {
  30051. fetch_obj_r_fast_copy:
  30052. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  30053. ZEND_VM_NEXT_OPCODE();
  30054. }
  30055. }
  30056. } else if (EXPECTED(zobj->properties != NULL)) {
  30057. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30058. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  30059. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  30060. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  30061. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  30062. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  30063. (EXPECTED(p->key == name) ||
  30064. (EXPECTED(p->h == ZSTR_H(name)) &&
  30065. EXPECTED(p->key != NULL) &&
  30066. EXPECTED(zend_string_equal_content(p->key, name))))) {
  30067. retval = &p->val;
  30068. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  30069. goto fetch_obj_r_copy;
  30070. } else {
  30071. goto fetch_obj_r_fast_copy;
  30072. }
  30073. }
  30074. }
  30075. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  30076. }
  30077. retval = zend_hash_find_known_hash(zobj->properties, name);
  30078. if (EXPECTED(retval)) {
  30079. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  30080. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  30081. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  30082. goto fetch_obj_r_copy;
  30083. } else {
  30084. goto fetch_obj_r_fast_copy;
  30085. }
  30086. }
  30087. }
  30088. }
  30089. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30090. } else {
  30091. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  30092. if (UNEXPECTED(!name)) {
  30093. ZVAL_UNDEF(EX_VAR(opline->result.var));
  30094. break;
  30095. }
  30096. }
  30097. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  30098. #if ZEND_DEBUG
  30099. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  30100. zend_verify_internal_read_property_type(zobj, name, retval);
  30101. }
  30102. #endif
  30103. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30104. zend_tmp_string_release(tmp_name);
  30105. }
  30106. if (retval != EX_VAR(opline->result.var)) {
  30107. fetch_obj_r_copy:
  30108. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  30109. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  30110. zend_unwrap_reference(retval);
  30111. }
  30112. } while (0);
  30113. fetch_obj_r_finish:
  30114. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30115. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30116. }
  30117. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30118. {
  30119. USE_OPLINE
  30120. zval *property, *container, *result;
  30121. SAVE_OPLINE();
  30122. container = &EX(This);
  30123. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30124. result = EX_VAR(opline->result.var);
  30125. zend_fetch_property_address(
  30126. result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR),
  30127. (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  30128. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
  30129. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30130. if (IS_UNUSED == IS_VAR) {
  30131. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  30132. }
  30133. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30134. }
  30135. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30136. {
  30137. USE_OPLINE
  30138. zval *property, *container, *result;
  30139. SAVE_OPLINE();
  30140. container = &EX(This);
  30141. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30142. result = EX_VAR(opline->result.var);
  30143. 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, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  30144. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30145. if (IS_UNUSED == IS_VAR) {
  30146. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  30147. }
  30148. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30149. }
  30150. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30151. {
  30152. USE_OPLINE
  30153. zval *container;
  30154. void **cache_slot = NULL;
  30155. SAVE_OPLINE();
  30156. container = &EX(This);
  30157. if (IS_UNUSED == IS_CONST ||
  30158. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  30159. do {
  30160. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  30161. container = Z_REFVAL_P(container);
  30162. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  30163. break;
  30164. }
  30165. }
  30166. if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  30167. ZVAL_UNDEFINED_OP2();
  30168. }
  30169. ZVAL_NULL(EX_VAR(opline->result.var));
  30170. goto fetch_obj_is_finish;
  30171. } while (0);
  30172. }
  30173. /* here we are sure we are dealing with an object */
  30174. do {
  30175. zend_object *zobj = Z_OBJ_P(container);
  30176. zend_string *name, *tmp_name;
  30177. zval *retval;
  30178. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30179. cache_slot = CACHE_ADDR(opline->extended_value);
  30180. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  30181. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  30182. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30183. retval = OBJ_PROP(zobj, prop_offset);
  30184. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  30185. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  30186. goto fetch_obj_is_copy;
  30187. } else {
  30188. fetch_obj_is_fast_copy:
  30189. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  30190. ZEND_VM_NEXT_OPCODE();
  30191. }
  30192. }
  30193. } else if (EXPECTED(zobj->properties != NULL)) {
  30194. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30195. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  30196. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  30197. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  30198. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  30199. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  30200. (EXPECTED(p->key == name) ||
  30201. (EXPECTED(p->h == ZSTR_H(name)) &&
  30202. EXPECTED(p->key != NULL) &&
  30203. EXPECTED(zend_string_equal_content(p->key, name))))) {
  30204. retval = &p->val;
  30205. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  30206. goto fetch_obj_is_copy;
  30207. } else {
  30208. goto fetch_obj_is_fast_copy;
  30209. }
  30210. }
  30211. }
  30212. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  30213. }
  30214. retval = zend_hash_find_known_hash(zobj->properties, name);
  30215. if (EXPECTED(retval)) {
  30216. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  30217. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  30218. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  30219. goto fetch_obj_is_copy;
  30220. } else {
  30221. goto fetch_obj_is_fast_copy;
  30222. }
  30223. }
  30224. }
  30225. }
  30226. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30227. } else {
  30228. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  30229. if (UNEXPECTED(!name)) {
  30230. ZVAL_UNDEF(EX_VAR(opline->result.var));
  30231. break;
  30232. }
  30233. }
  30234. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  30235. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30236. zend_tmp_string_release(tmp_name);
  30237. }
  30238. if (retval != EX_VAR(opline->result.var)) {
  30239. fetch_obj_is_copy:
  30240. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  30241. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  30242. zend_unwrap_reference(retval);
  30243. }
  30244. } while (0);
  30245. fetch_obj_is_finish:
  30246. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30247. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30248. }
  30249. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30250. {
  30251. #if 0
  30252. USE_OPLINE
  30253. #endif
  30254. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  30255. /* Behave like FETCH_OBJ_W */
  30256. if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
  30257. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30258. }
  30259. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30260. } else {
  30261. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30262. }
  30263. }
  30264. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30265. {
  30266. USE_OPLINE
  30267. zval *container, *property, *result;
  30268. SAVE_OPLINE();
  30269. container = &EX(This);
  30270. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30271. result = EX_VAR(opline->result.var);
  30272. 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, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  30273. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30274. if (IS_UNUSED == IS_VAR) {
  30275. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  30276. }
  30277. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30278. }
  30279. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30280. {
  30281. USE_OPLINE
  30282. zval *object, *value, tmp;
  30283. zend_object *zobj;
  30284. zend_string *name, *tmp_name;
  30285. SAVE_OPLINE();
  30286. object = &EX(This);
  30287. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  30288. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  30289. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  30290. object = Z_REFVAL_P(object);
  30291. goto assign_object;
  30292. }
  30293. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  30294. value = &EG(uninitialized_zval);
  30295. goto free_and_exit_assign_obj;
  30296. }
  30297. assign_object:
  30298. zobj = Z_OBJ_P(object);
  30299. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30300. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  30301. void **cache_slot = CACHE_ADDR(opline->extended_value);
  30302. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  30303. zend_object *zobj = Z_OBJ_P(object);
  30304. zval *property_val;
  30305. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30306. property_val = OBJ_PROP(zobj, prop_offset);
  30307. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  30308. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  30309. if (UNEXPECTED(prop_info != NULL)) {
  30310. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  30311. goto free_and_exit_assign_obj;
  30312. } else {
  30313. fast_assign_obj:
  30314. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  30315. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30316. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30317. }
  30318. goto exit_assign_obj;
  30319. }
  30320. }
  30321. } else {
  30322. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30323. if (EXPECTED(zobj->properties != NULL)) {
  30324. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  30325. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  30326. GC_DELREF(zobj->properties);
  30327. }
  30328. zobj->properties = zend_array_dup(zobj->properties);
  30329. }
  30330. property_val = zend_hash_find_known_hash(zobj->properties, name);
  30331. if (property_val) {
  30332. goto fast_assign_obj;
  30333. }
  30334. }
  30335. if (!zobj->ce->__set) {
  30336. if (EXPECTED(zobj->properties == NULL)) {
  30337. rebuild_object_properties(zobj);
  30338. }
  30339. if (IS_CONST == IS_CONST) {
  30340. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  30341. Z_ADDREF_P(value);
  30342. }
  30343. } else if (IS_CONST != IS_TMP_VAR) {
  30344. if (Z_ISREF_P(value)) {
  30345. if (IS_CONST == IS_VAR) {
  30346. zend_reference *ref = Z_REF_P(value);
  30347. if (GC_DELREF(ref) == 0) {
  30348. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  30349. efree_size(ref, sizeof(zend_reference));
  30350. value = &tmp;
  30351. } else {
  30352. value = Z_REFVAL_P(value);
  30353. Z_TRY_ADDREF_P(value);
  30354. }
  30355. } else {
  30356. value = Z_REFVAL_P(value);
  30357. Z_TRY_ADDREF_P(value);
  30358. }
  30359. } else if (IS_CONST == IS_CV) {
  30360. Z_TRY_ADDREF_P(value);
  30361. }
  30362. }
  30363. zend_hash_add_new(zobj->properties, name, value);
  30364. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30365. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30366. }
  30367. goto exit_assign_obj;
  30368. }
  30369. }
  30370. }
  30371. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30372. } else {
  30373. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  30374. if (UNEXPECTED(!name)) {
  30375. UNDEF_RESULT();
  30376. goto exit_assign_obj;
  30377. }
  30378. }
  30379. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  30380. ZVAL_DEREF(value);
  30381. }
  30382. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  30383. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30384. zend_tmp_string_release(tmp_name);
  30385. }
  30386. free_and_exit_assign_obj:
  30387. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30388. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  30389. }
  30390. exit_assign_obj:
  30391. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30392. /* assign_obj has two opcodes! */
  30393. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  30394. }
  30395. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  30396. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30397. {
  30398. USE_OPLINE
  30399. zval *object, *value, tmp;
  30400. zend_object *zobj;
  30401. zend_string *name, *tmp_name;
  30402. SAVE_OPLINE();
  30403. object = &EX(This);
  30404. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  30405. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  30406. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  30407. object = Z_REFVAL_P(object);
  30408. goto assign_object;
  30409. }
  30410. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  30411. value = &EG(uninitialized_zval);
  30412. goto free_and_exit_assign_obj;
  30413. }
  30414. assign_object:
  30415. zobj = Z_OBJ_P(object);
  30416. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30417. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  30418. void **cache_slot = CACHE_ADDR(opline->extended_value);
  30419. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  30420. zend_object *zobj = Z_OBJ_P(object);
  30421. zval *property_val;
  30422. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30423. property_val = OBJ_PROP(zobj, prop_offset);
  30424. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  30425. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  30426. if (UNEXPECTED(prop_info != NULL)) {
  30427. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  30428. goto free_and_exit_assign_obj;
  30429. } else {
  30430. fast_assign_obj:
  30431. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  30432. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30433. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30434. }
  30435. goto exit_assign_obj;
  30436. }
  30437. }
  30438. } else {
  30439. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30440. if (EXPECTED(zobj->properties != NULL)) {
  30441. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  30442. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  30443. GC_DELREF(zobj->properties);
  30444. }
  30445. zobj->properties = zend_array_dup(zobj->properties);
  30446. }
  30447. property_val = zend_hash_find_known_hash(zobj->properties, name);
  30448. if (property_val) {
  30449. goto fast_assign_obj;
  30450. }
  30451. }
  30452. if (!zobj->ce->__set) {
  30453. if (EXPECTED(zobj->properties == NULL)) {
  30454. rebuild_object_properties(zobj);
  30455. }
  30456. if (IS_TMP_VAR == IS_CONST) {
  30457. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  30458. Z_ADDREF_P(value);
  30459. }
  30460. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  30461. if (Z_ISREF_P(value)) {
  30462. if (IS_TMP_VAR == IS_VAR) {
  30463. zend_reference *ref = Z_REF_P(value);
  30464. if (GC_DELREF(ref) == 0) {
  30465. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  30466. efree_size(ref, sizeof(zend_reference));
  30467. value = &tmp;
  30468. } else {
  30469. value = Z_REFVAL_P(value);
  30470. Z_TRY_ADDREF_P(value);
  30471. }
  30472. } else {
  30473. value = Z_REFVAL_P(value);
  30474. Z_TRY_ADDREF_P(value);
  30475. }
  30476. } else if (IS_TMP_VAR == IS_CV) {
  30477. Z_TRY_ADDREF_P(value);
  30478. }
  30479. }
  30480. zend_hash_add_new(zobj->properties, name, value);
  30481. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30482. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30483. }
  30484. goto exit_assign_obj;
  30485. }
  30486. }
  30487. }
  30488. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30489. } else {
  30490. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  30491. if (UNEXPECTED(!name)) {
  30492. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  30493. UNDEF_RESULT();
  30494. goto exit_assign_obj;
  30495. }
  30496. }
  30497. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  30498. ZVAL_DEREF(value);
  30499. }
  30500. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  30501. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30502. zend_tmp_string_release(tmp_name);
  30503. }
  30504. free_and_exit_assign_obj:
  30505. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30506. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  30507. }
  30508. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  30509. exit_assign_obj:
  30510. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30511. /* assign_obj has two opcodes! */
  30512. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  30513. }
  30514. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  30515. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30516. {
  30517. USE_OPLINE
  30518. zval *object, *value, tmp;
  30519. zend_object *zobj;
  30520. zend_string *name, *tmp_name;
  30521. SAVE_OPLINE();
  30522. object = &EX(This);
  30523. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  30524. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  30525. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  30526. object = Z_REFVAL_P(object);
  30527. goto assign_object;
  30528. }
  30529. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  30530. value = &EG(uninitialized_zval);
  30531. goto free_and_exit_assign_obj;
  30532. }
  30533. assign_object:
  30534. zobj = Z_OBJ_P(object);
  30535. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30536. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  30537. void **cache_slot = CACHE_ADDR(opline->extended_value);
  30538. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  30539. zend_object *zobj = Z_OBJ_P(object);
  30540. zval *property_val;
  30541. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30542. property_val = OBJ_PROP(zobj, prop_offset);
  30543. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  30544. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  30545. if (UNEXPECTED(prop_info != NULL)) {
  30546. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  30547. goto free_and_exit_assign_obj;
  30548. } else {
  30549. fast_assign_obj:
  30550. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  30551. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30552. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30553. }
  30554. goto exit_assign_obj;
  30555. }
  30556. }
  30557. } else {
  30558. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30559. if (EXPECTED(zobj->properties != NULL)) {
  30560. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  30561. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  30562. GC_DELREF(zobj->properties);
  30563. }
  30564. zobj->properties = zend_array_dup(zobj->properties);
  30565. }
  30566. property_val = zend_hash_find_known_hash(zobj->properties, name);
  30567. if (property_val) {
  30568. goto fast_assign_obj;
  30569. }
  30570. }
  30571. if (!zobj->ce->__set) {
  30572. if (EXPECTED(zobj->properties == NULL)) {
  30573. rebuild_object_properties(zobj);
  30574. }
  30575. if (IS_VAR == IS_CONST) {
  30576. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  30577. Z_ADDREF_P(value);
  30578. }
  30579. } else if (IS_VAR != IS_TMP_VAR) {
  30580. if (Z_ISREF_P(value)) {
  30581. if (IS_VAR == IS_VAR) {
  30582. zend_reference *ref = Z_REF_P(value);
  30583. if (GC_DELREF(ref) == 0) {
  30584. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  30585. efree_size(ref, sizeof(zend_reference));
  30586. value = &tmp;
  30587. } else {
  30588. value = Z_REFVAL_P(value);
  30589. Z_TRY_ADDREF_P(value);
  30590. }
  30591. } else {
  30592. value = Z_REFVAL_P(value);
  30593. Z_TRY_ADDREF_P(value);
  30594. }
  30595. } else if (IS_VAR == IS_CV) {
  30596. Z_TRY_ADDREF_P(value);
  30597. }
  30598. }
  30599. zend_hash_add_new(zobj->properties, name, value);
  30600. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30601. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30602. }
  30603. goto exit_assign_obj;
  30604. }
  30605. }
  30606. }
  30607. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30608. } else {
  30609. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  30610. if (UNEXPECTED(!name)) {
  30611. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  30612. UNDEF_RESULT();
  30613. goto exit_assign_obj;
  30614. }
  30615. }
  30616. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  30617. ZVAL_DEREF(value);
  30618. }
  30619. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  30620. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30621. zend_tmp_string_release(tmp_name);
  30622. }
  30623. free_and_exit_assign_obj:
  30624. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30625. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  30626. }
  30627. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  30628. exit_assign_obj:
  30629. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30630. /* assign_obj has two opcodes! */
  30631. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  30632. }
  30633. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  30634. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30635. {
  30636. USE_OPLINE
  30637. zval *object, *value, tmp;
  30638. zend_object *zobj;
  30639. zend_string *name, *tmp_name;
  30640. SAVE_OPLINE();
  30641. object = &EX(This);
  30642. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  30643. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  30644. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  30645. object = Z_REFVAL_P(object);
  30646. goto assign_object;
  30647. }
  30648. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  30649. value = &EG(uninitialized_zval);
  30650. goto free_and_exit_assign_obj;
  30651. }
  30652. assign_object:
  30653. zobj = Z_OBJ_P(object);
  30654. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30655. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  30656. void **cache_slot = CACHE_ADDR(opline->extended_value);
  30657. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  30658. zend_object *zobj = Z_OBJ_P(object);
  30659. zval *property_val;
  30660. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30661. property_val = OBJ_PROP(zobj, prop_offset);
  30662. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  30663. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  30664. if (UNEXPECTED(prop_info != NULL)) {
  30665. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  30666. goto free_and_exit_assign_obj;
  30667. } else {
  30668. fast_assign_obj:
  30669. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  30670. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30671. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30672. }
  30673. goto exit_assign_obj;
  30674. }
  30675. }
  30676. } else {
  30677. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30678. if (EXPECTED(zobj->properties != NULL)) {
  30679. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  30680. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  30681. GC_DELREF(zobj->properties);
  30682. }
  30683. zobj->properties = zend_array_dup(zobj->properties);
  30684. }
  30685. property_val = zend_hash_find_known_hash(zobj->properties, name);
  30686. if (property_val) {
  30687. goto fast_assign_obj;
  30688. }
  30689. }
  30690. if (!zobj->ce->__set) {
  30691. if (EXPECTED(zobj->properties == NULL)) {
  30692. rebuild_object_properties(zobj);
  30693. }
  30694. if (IS_CV == IS_CONST) {
  30695. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  30696. Z_ADDREF_P(value);
  30697. }
  30698. } else if (IS_CV != IS_TMP_VAR) {
  30699. if (Z_ISREF_P(value)) {
  30700. if (IS_CV == IS_VAR) {
  30701. zend_reference *ref = Z_REF_P(value);
  30702. if (GC_DELREF(ref) == 0) {
  30703. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  30704. efree_size(ref, sizeof(zend_reference));
  30705. value = &tmp;
  30706. } else {
  30707. value = Z_REFVAL_P(value);
  30708. Z_TRY_ADDREF_P(value);
  30709. }
  30710. } else {
  30711. value = Z_REFVAL_P(value);
  30712. Z_TRY_ADDREF_P(value);
  30713. }
  30714. } else if (IS_CV == IS_CV) {
  30715. Z_TRY_ADDREF_P(value);
  30716. }
  30717. }
  30718. zend_hash_add_new(zobj->properties, name, value);
  30719. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30720. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30721. }
  30722. goto exit_assign_obj;
  30723. }
  30724. }
  30725. }
  30726. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30727. } else {
  30728. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  30729. if (UNEXPECTED(!name)) {
  30730. UNDEF_RESULT();
  30731. goto exit_assign_obj;
  30732. }
  30733. }
  30734. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  30735. ZVAL_DEREF(value);
  30736. }
  30737. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  30738. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30739. zend_tmp_string_release(tmp_name);
  30740. }
  30741. free_and_exit_assign_obj:
  30742. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30743. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  30744. }
  30745. exit_assign_obj:
  30746. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30747. /* assign_obj has two opcodes! */
  30748. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  30749. }
  30750. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  30751. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30752. {
  30753. USE_OPLINE
  30754. zval *property, *container, *value_ptr;
  30755. SAVE_OPLINE();
  30756. container = &EX(This);
  30757. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30758. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  30759. if (1) {
  30760. if (IS_UNUSED == IS_UNUSED) {
  30761. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30762. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30763. } else {
  30764. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30765. }
  30766. } else {
  30767. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30768. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30769. } else {
  30770. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30771. }
  30772. }
  30773. } else {
  30774. zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30775. }
  30776. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30777. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  30778. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  30779. }
  30780. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  30781. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30782. {
  30783. USE_OPLINE
  30784. zval *property, *container, *value_ptr;
  30785. SAVE_OPLINE();
  30786. container = &EX(This);
  30787. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30788. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  30789. if (1) {
  30790. if (IS_UNUSED == IS_UNUSED) {
  30791. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30792. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30793. } else {
  30794. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30795. }
  30796. } else {
  30797. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30798. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30799. } else {
  30800. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30801. }
  30802. }
  30803. } else {
  30804. zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30805. }
  30806. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30807. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  30808. }
  30809. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  30810. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30811. {
  30812. USE_OPLINE
  30813. zend_string **rope;
  30814. zval *var;
  30815. /* Compiler allocates the necessary number of zval slots to keep the rope */
  30816. rope = (zend_string**)EX_VAR(opline->result.var);
  30817. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30818. var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30819. rope[0] = Z_STR_P(var);
  30820. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  30821. Z_ADDREF_P(var);
  30822. }
  30823. } else {
  30824. var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30825. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  30826. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  30827. rope[0] = zend_string_copy(Z_STR_P(var));
  30828. } else {
  30829. rope[0] = Z_STR_P(var);
  30830. }
  30831. } else {
  30832. SAVE_OPLINE();
  30833. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  30834. ZVAL_UNDEFINED_OP2();
  30835. }
  30836. rope[0] = zval_get_string_func(var);
  30837. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30838. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30839. }
  30840. }
  30841. ZEND_VM_NEXT_OPCODE();
  30842. }
  30843. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30844. {
  30845. zval *class_name;
  30846. USE_OPLINE
  30847. SAVE_OPLINE();
  30848. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  30849. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
  30850. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30851. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30852. zend_class_entry *ce = CACHED_PTR(opline->extended_value);
  30853. if (UNEXPECTED(ce == NULL)) {
  30854. class_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30855. ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
  30856. CACHE_PTR(opline->extended_value, ce);
  30857. }
  30858. Z_CE_P(EX_VAR(opline->result.var)) = ce;
  30859. } else {
  30860. class_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30861. try_class_name:
  30862. if (Z_TYPE_P(class_name) == IS_OBJECT) {
  30863. Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
  30864. } else if (Z_TYPE_P(class_name) == IS_STRING) {
  30865. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
  30866. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
  30867. class_name = Z_REFVAL_P(class_name);
  30868. goto try_class_name;
  30869. } else {
  30870. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
  30871. ZVAL_UNDEFINED_OP2();
  30872. if (UNEXPECTED(EG(exception) != NULL)) {
  30873. HANDLE_EXCEPTION();
  30874. }
  30875. }
  30876. zend_throw_error(NULL, "Class name must be a valid object or a string");
  30877. }
  30878. }
  30879. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30880. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30881. }
  30882. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30883. {
  30884. USE_OPLINE
  30885. zval *function_name;
  30886. zval *object;
  30887. zend_function *fbc;
  30888. zend_class_entry *called_scope;
  30889. zend_object *obj;
  30890. zend_execute_data *call;
  30891. uint32_t call_info;
  30892. SAVE_OPLINE();
  30893. object = &EX(This);
  30894. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30895. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30896. }
  30897. if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
  30898. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  30899. do {
  30900. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  30901. function_name = Z_REFVAL_P(function_name);
  30902. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  30903. break;
  30904. }
  30905. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  30906. ZVAL_UNDEFINED_OP2();
  30907. if (UNEXPECTED(EG(exception) != NULL)) {
  30908. HANDLE_EXCEPTION();
  30909. }
  30910. }
  30911. zend_throw_error(NULL, "Method name must be a string");
  30912. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30913. HANDLE_EXCEPTION();
  30914. } while (0);
  30915. }
  30916. if (IS_UNUSED == IS_UNUSED) {
  30917. obj = Z_OBJ_P(object);
  30918. } else {
  30919. do {
  30920. if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  30921. obj = Z_OBJ_P(object);
  30922. } else {
  30923. if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  30924. zend_reference *ref = Z_REF_P(object);
  30925. object = &ref->val;
  30926. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  30927. obj = Z_OBJ_P(object);
  30928. if (IS_UNUSED & IS_VAR) {
  30929. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  30930. efree_size(ref, sizeof(zend_reference));
  30931. } else {
  30932. Z_ADDREF_P(object);
  30933. }
  30934. }
  30935. break;
  30936. }
  30937. }
  30938. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  30939. object = ZVAL_UNDEFINED_OP1();
  30940. if (UNEXPECTED(EG(exception) != NULL)) {
  30941. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30942. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30943. }
  30944. HANDLE_EXCEPTION();
  30945. }
  30946. }
  30947. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30948. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30949. }
  30950. zend_invalid_method_call(object, function_name);
  30951. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30952. HANDLE_EXCEPTION();
  30953. }
  30954. } while (0);
  30955. }
  30956. called_scope = obj->ce;
  30957. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  30958. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  30959. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  30960. } else {
  30961. zend_object *orig_obj = obj;
  30962. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30963. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30964. }
  30965. /* First, locate the function. */
  30966. 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));
  30967. if (UNEXPECTED(fbc == NULL)) {
  30968. if (EXPECTED(!EG(exception))) {
  30969. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  30970. }
  30971. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30972. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  30973. zend_objects_store_del(orig_obj);
  30974. }
  30975. HANDLE_EXCEPTION();
  30976. }
  30977. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  30978. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  30979. EXPECTED(obj == orig_obj)) {
  30980. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  30981. }
  30982. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  30983. GC_ADDREF(obj); /* For $this pointer */
  30984. if (GC_DELREF(orig_obj) == 0) {
  30985. zend_objects_store_del(orig_obj);
  30986. }
  30987. }
  30988. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  30989. init_func_run_time_cache(&fbc->op_array);
  30990. }
  30991. }
  30992. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30993. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30994. }
  30995. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  30996. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  30997. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  30998. zend_objects_store_del(obj);
  30999. if (UNEXPECTED(EG(exception))) {
  31000. HANDLE_EXCEPTION();
  31001. }
  31002. }
  31003. /* call static method */
  31004. obj = (zend_object*)called_scope;
  31005. call_info = ZEND_CALL_NESTED_FUNCTION;
  31006. } else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  31007. if (IS_UNUSED == IS_CV) {
  31008. GC_ADDREF(obj); /* For $this pointer */
  31009. }
  31010. /* CV may be changed indirectly (e.g. when it's a reference) */
  31011. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  31012. }
  31013. call = zend_vm_stack_push_call_frame(call_info,
  31014. fbc, opline->extended_value, obj);
  31015. call->prev_execute_data = EX(call);
  31016. EX(call) = call;
  31017. ZEND_VM_NEXT_OPCODE();
  31018. }
  31019. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31020. {
  31021. USE_OPLINE
  31022. zval *function_name;
  31023. zend_class_entry *ce;
  31024. uint32_t call_info;
  31025. zend_function *fbc;
  31026. zend_execute_data *call;
  31027. SAVE_OPLINE();
  31028. if (IS_UNUSED == IS_CONST) {
  31029. /* no function found. try a static method in class */
  31030. ce = CACHED_PTR(opline->result.num);
  31031. if (UNEXPECTED(ce == NULL)) {
  31032. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  31033. if (UNEXPECTED(ce == NULL)) {
  31034. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  31035. HANDLE_EXCEPTION();
  31036. }
  31037. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  31038. CACHE_PTR(opline->result.num, ce);
  31039. }
  31040. }
  31041. } else if (IS_UNUSED == IS_UNUSED) {
  31042. ce = zend_fetch_class(NULL, opline->op1.num);
  31043. if (UNEXPECTED(ce == NULL)) {
  31044. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  31045. HANDLE_EXCEPTION();
  31046. }
  31047. } else {
  31048. ce = Z_CE_P(EX_VAR(opline->op1.var));
  31049. }
  31050. if (IS_UNUSED == IS_CONST &&
  31051. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  31052. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  31053. /* nothing to do */
  31054. } else if (IS_UNUSED != IS_CONST &&
  31055. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  31056. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  31057. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  31058. } else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  31059. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  31060. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  31061. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  31062. do {
  31063. if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  31064. function_name = Z_REFVAL_P(function_name);
  31065. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  31066. break;
  31067. }
  31068. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  31069. ZVAL_UNDEFINED_OP2();
  31070. if (UNEXPECTED(EG(exception) != NULL)) {
  31071. HANDLE_EXCEPTION();
  31072. }
  31073. }
  31074. zend_throw_error(NULL, "Method name must be a string");
  31075. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  31076. HANDLE_EXCEPTION();
  31077. } while (0);
  31078. }
  31079. }
  31080. if (ce->get_static_method) {
  31081. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  31082. } else {
  31083. 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));
  31084. }
  31085. if (UNEXPECTED(fbc == NULL)) {
  31086. if (EXPECTED(!EG(exception))) {
  31087. zend_undefined_method(ce, Z_STR_P(function_name));
  31088. }
  31089. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  31090. HANDLE_EXCEPTION();
  31091. }
  31092. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  31093. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  31094. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  31095. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  31096. }
  31097. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  31098. init_func_run_time_cache(&fbc->op_array);
  31099. }
  31100. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  31101. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  31102. }
  31103. } else {
  31104. if (UNEXPECTED(ce->constructor == NULL)) {
  31105. zend_throw_error(NULL, "Cannot call constructor");
  31106. HANDLE_EXCEPTION();
  31107. }
  31108. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  31109. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  31110. HANDLE_EXCEPTION();
  31111. }
  31112. fbc = ce->constructor;
  31113. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  31114. init_func_run_time_cache(&fbc->op_array);
  31115. }
  31116. }
  31117. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  31118. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  31119. ce = (zend_class_entry*)Z_OBJ(EX(This));
  31120. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  31121. } else {
  31122. zend_non_static_method_call(fbc);
  31123. HANDLE_EXCEPTION();
  31124. }
  31125. } else {
  31126. /* previous opcode is ZEND_FETCH_CLASS */
  31127. if (IS_UNUSED == IS_UNUSED
  31128. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  31129. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  31130. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  31131. ce = Z_OBJCE(EX(This));
  31132. } else {
  31133. ce = Z_CE(EX(This));
  31134. }
  31135. }
  31136. call_info = ZEND_CALL_NESTED_FUNCTION;
  31137. }
  31138. call = zend_vm_stack_push_call_frame(call_info,
  31139. fbc, opline->extended_value, ce);
  31140. call->prev_execute_data = EX(call);
  31141. EX(call) = call;
  31142. ZEND_VM_NEXT_OPCODE();
  31143. }
  31144. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31145. {
  31146. zval *array;
  31147. uint32_t size;
  31148. USE_OPLINE
  31149. array = EX_VAR(opline->result.var);
  31150. if (IS_UNUSED != IS_UNUSED) {
  31151. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  31152. ZVAL_ARR(array, zend_new_array(size));
  31153. /* Explicitly initialize array as not-packed if flag is set */
  31154. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  31155. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  31156. }
  31157. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  31158. } else {
  31159. ZVAL_ARR(array, zend_new_array(0));
  31160. ZEND_VM_NEXT_OPCODE();
  31161. }
  31162. }
  31163. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31164. {
  31165. USE_OPLINE
  31166. zval *container;
  31167. zval *offset;
  31168. zend_string *name, *tmp_name;
  31169. SAVE_OPLINE();
  31170. container = &EX(This);
  31171. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  31172. do {
  31173. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  31174. if (Z_ISREF_P(container)) {
  31175. container = Z_REFVAL_P(container);
  31176. if (Z_TYPE_P(container) != IS_OBJECT) {
  31177. if (IS_UNUSED == IS_CV
  31178. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  31179. ZVAL_UNDEFINED_OP1();
  31180. }
  31181. break;
  31182. }
  31183. } else {
  31184. break;
  31185. }
  31186. }
  31187. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  31188. name = Z_STR_P(offset);
  31189. } else {
  31190. name = zval_try_get_tmp_string(offset, &tmp_name);
  31191. if (UNEXPECTED(!name)) {
  31192. break;
  31193. }
  31194. }
  31195. Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  31196. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  31197. zend_tmp_string_release(tmp_name);
  31198. }
  31199. } while (0);
  31200. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  31201. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31202. }
  31203. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31204. {
  31205. USE_OPLINE
  31206. zval *container;
  31207. int result;
  31208. zval *offset;
  31209. zend_string *name, *tmp_name;
  31210. SAVE_OPLINE();
  31211. container = &EX(This);
  31212. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  31213. if (IS_UNUSED == IS_CONST ||
  31214. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  31215. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  31216. container = Z_REFVAL_P(container);
  31217. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  31218. result = (opline->extended_value & ZEND_ISEMPTY);
  31219. goto isset_object_finish;
  31220. }
  31221. } else {
  31222. result = (opline->extended_value & ZEND_ISEMPTY);
  31223. goto isset_object_finish;
  31224. }
  31225. }
  31226. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  31227. name = Z_STR_P(offset);
  31228. } else {
  31229. name = zval_try_get_tmp_string(offset, &tmp_name);
  31230. if (UNEXPECTED(!name)) {
  31231. result = 0;
  31232. goto isset_object_finish;
  31233. }
  31234. }
  31235. result =
  31236. (opline->extended_value & ZEND_ISEMPTY) ^
  31237. Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  31238. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  31239. zend_tmp_string_release(tmp_name);
  31240. }
  31241. isset_object_finish:
  31242. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  31243. ZEND_VM_SMART_BRANCH(result, 1);
  31244. }
  31245. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31246. {
  31247. USE_OPLINE
  31248. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  31249. SAVE_OPLINE();
  31250. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  31251. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  31252. }
  31253. /* Destroy the previously yielded value */
  31254. zval_ptr_dtor(&generator->value);
  31255. /* Destroy the previously yielded key */
  31256. zval_ptr_dtor(&generator->key);
  31257. /* Set the new yielded value */
  31258. if (IS_UNUSED != IS_UNUSED) {
  31259. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  31260. /* Constants and temporary variables aren't yieldable by reference,
  31261. * but we still allow them with a notice. */
  31262. if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
  31263. zval *value;
  31264. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  31265. value = NULL;
  31266. ZVAL_COPY_VALUE(&generator->value, value);
  31267. if (IS_UNUSED == IS_CONST) {
  31268. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  31269. Z_ADDREF(generator->value);
  31270. }
  31271. }
  31272. } else {
  31273. zval *value_ptr = NULL;
  31274. /* If a function call result is yielded and the function did
  31275. * not return by reference we throw a notice. */
  31276. do {
  31277. if (IS_UNUSED == IS_VAR) {
  31278. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  31279. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  31280. && !Z_ISREF_P(value_ptr)) {
  31281. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  31282. ZVAL_COPY(&generator->value, value_ptr);
  31283. break;
  31284. }
  31285. }
  31286. if (Z_ISREF_P(value_ptr)) {
  31287. Z_ADDREF_P(value_ptr);
  31288. } else {
  31289. ZVAL_MAKE_REF_EX(value_ptr, 2);
  31290. }
  31291. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  31292. } while (0);
  31293. }
  31294. } else {
  31295. zval *value = NULL;
  31296. /* Consts, temporary variables and references need copying */
  31297. if (IS_UNUSED == IS_CONST) {
  31298. ZVAL_COPY_VALUE(&generator->value, value);
  31299. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  31300. Z_ADDREF(generator->value);
  31301. }
  31302. } else if (IS_UNUSED == IS_TMP_VAR) {
  31303. ZVAL_COPY_VALUE(&generator->value, value);
  31304. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  31305. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  31306. } else {
  31307. ZVAL_COPY_VALUE(&generator->value, value);
  31308. if (IS_UNUSED == IS_CV) {
  31309. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  31310. }
  31311. }
  31312. }
  31313. } else {
  31314. /* If no value was specified yield null */
  31315. ZVAL_NULL(&generator->value);
  31316. }
  31317. /* Set the new yielded key */
  31318. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  31319. zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  31320. if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  31321. key = Z_REFVAL_P(key);
  31322. }
  31323. ZVAL_COPY(&generator->key, key);
  31324. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  31325. if (Z_TYPE(generator->key) == IS_LONG
  31326. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  31327. ) {
  31328. generator->largest_used_integer_key = Z_LVAL(generator->key);
  31329. }
  31330. } else {
  31331. /* If no key was specified we use auto-increment keys */
  31332. generator->largest_used_integer_key++;
  31333. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  31334. }
  31335. if (RETURN_VALUE_USED(opline)) {
  31336. /* If the return value of yield is used set the send
  31337. * target and initialize it to NULL */
  31338. generator->send_target = EX_VAR(opline->result.var);
  31339. ZVAL_NULL(generator->send_target);
  31340. } else {
  31341. generator->send_target = NULL;
  31342. }
  31343. /* We increment to the next op, so we are at the correct position when the
  31344. * generator is resumed. */
  31345. ZEND_VM_INC_OPCODE();
  31346. /* The GOTO VM uses a local opline variable. We need to set the opline
  31347. * variable in execute_data so we don't resume at an old position. */
  31348. SAVE_OPLINE();
  31349. ZEND_VM_RETURN();
  31350. }
  31351. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31352. {
  31353. zval *class_name;
  31354. USE_OPLINE
  31355. SAVE_OPLINE();
  31356. if (IS_UNUSED == IS_UNUSED) {
  31357. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
  31358. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31359. } else if (IS_UNUSED == IS_CONST) {
  31360. zend_class_entry *ce = CACHED_PTR(opline->extended_value);
  31361. if (UNEXPECTED(ce == NULL)) {
  31362. class_name = NULL;
  31363. ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
  31364. CACHE_PTR(opline->extended_value, ce);
  31365. }
  31366. Z_CE_P(EX_VAR(opline->result.var)) = ce;
  31367. } else {
  31368. class_name = NULL;
  31369. try_class_name:
  31370. if (Z_TYPE_P(class_name) == IS_OBJECT) {
  31371. Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
  31372. } else if (Z_TYPE_P(class_name) == IS_STRING) {
  31373. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
  31374. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
  31375. class_name = Z_REFVAL_P(class_name);
  31376. goto try_class_name;
  31377. } else {
  31378. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
  31379. ZVAL_UNDEFINED_OP2();
  31380. if (UNEXPECTED(EG(exception) != NULL)) {
  31381. HANDLE_EXCEPTION();
  31382. }
  31383. }
  31384. zend_throw_error(NULL, "Class name must be a valid object or a string");
  31385. }
  31386. }
  31387. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31388. }
  31389. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31390. {
  31391. USE_OPLINE
  31392. zval *function_name;
  31393. zend_class_entry *ce;
  31394. uint32_t call_info;
  31395. zend_function *fbc;
  31396. zend_execute_data *call;
  31397. SAVE_OPLINE();
  31398. if (IS_UNUSED == IS_CONST) {
  31399. /* no function found. try a static method in class */
  31400. ce = CACHED_PTR(opline->result.num);
  31401. if (UNEXPECTED(ce == NULL)) {
  31402. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  31403. if (UNEXPECTED(ce == NULL)) {
  31404. HANDLE_EXCEPTION();
  31405. }
  31406. if (IS_UNUSED != IS_CONST) {
  31407. CACHE_PTR(opline->result.num, ce);
  31408. }
  31409. }
  31410. } else if (IS_UNUSED == IS_UNUSED) {
  31411. ce = zend_fetch_class(NULL, opline->op1.num);
  31412. if (UNEXPECTED(ce == NULL)) {
  31413. HANDLE_EXCEPTION();
  31414. }
  31415. } else {
  31416. ce = Z_CE_P(EX_VAR(opline->op1.var));
  31417. }
  31418. if (IS_UNUSED == IS_CONST &&
  31419. IS_UNUSED == IS_CONST &&
  31420. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  31421. /* nothing to do */
  31422. } else if (IS_UNUSED != IS_CONST &&
  31423. IS_UNUSED == IS_CONST &&
  31424. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  31425. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  31426. } else if (IS_UNUSED != IS_UNUSED) {
  31427. function_name = NULL;
  31428. if (IS_UNUSED != IS_CONST) {
  31429. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  31430. do {
  31431. if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  31432. function_name = Z_REFVAL_P(function_name);
  31433. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  31434. break;
  31435. }
  31436. } else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  31437. ZVAL_UNDEFINED_OP2();
  31438. if (UNEXPECTED(EG(exception) != NULL)) {
  31439. HANDLE_EXCEPTION();
  31440. }
  31441. }
  31442. zend_throw_error(NULL, "Method name must be a string");
  31443. HANDLE_EXCEPTION();
  31444. } while (0);
  31445. }
  31446. }
  31447. if (ce->get_static_method) {
  31448. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  31449. } else {
  31450. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  31451. }
  31452. if (UNEXPECTED(fbc == NULL)) {
  31453. if (EXPECTED(!EG(exception))) {
  31454. zend_undefined_method(ce, Z_STR_P(function_name));
  31455. }
  31456. HANDLE_EXCEPTION();
  31457. }
  31458. if (IS_UNUSED == IS_CONST &&
  31459. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  31460. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  31461. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  31462. }
  31463. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  31464. init_func_run_time_cache(&fbc->op_array);
  31465. }
  31466. if (IS_UNUSED != IS_CONST) {
  31467. }
  31468. } else {
  31469. if (UNEXPECTED(ce->constructor == NULL)) {
  31470. zend_throw_error(NULL, "Cannot call constructor");
  31471. HANDLE_EXCEPTION();
  31472. }
  31473. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  31474. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  31475. HANDLE_EXCEPTION();
  31476. }
  31477. fbc = ce->constructor;
  31478. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  31479. init_func_run_time_cache(&fbc->op_array);
  31480. }
  31481. }
  31482. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  31483. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  31484. ce = (zend_class_entry*)Z_OBJ(EX(This));
  31485. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  31486. } else {
  31487. zend_non_static_method_call(fbc);
  31488. HANDLE_EXCEPTION();
  31489. }
  31490. } else {
  31491. /* previous opcode is ZEND_FETCH_CLASS */
  31492. if (IS_UNUSED == IS_UNUSED
  31493. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  31494. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  31495. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  31496. ce = Z_OBJCE(EX(This));
  31497. } else {
  31498. ce = Z_CE(EX(This));
  31499. }
  31500. }
  31501. call_info = ZEND_CALL_NESTED_FUNCTION;
  31502. }
  31503. call = zend_vm_stack_push_call_frame(call_info,
  31504. fbc, opline->extended_value, ce);
  31505. call->prev_execute_data = EX(call);
  31506. EX(call) = call;
  31507. ZEND_VM_NEXT_OPCODE();
  31508. }
  31509. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31510. {
  31511. if (IS_UNUSED == IS_UNUSED) {
  31512. SAVE_OPLINE();
  31513. zend_verify_missing_return_type(EX(func));
  31514. HANDLE_EXCEPTION();
  31515. } else {
  31516. /* prevents "undefined variable opline" errors */
  31517. #if 0 || (IS_UNUSED != IS_UNUSED)
  31518. USE_OPLINE
  31519. zval *retval_ref, *retval_ptr;
  31520. zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
  31521. retval_ref = retval_ptr = NULL;
  31522. if (IS_UNUSED == IS_CONST) {
  31523. ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
  31524. retval_ref = retval_ptr = EX_VAR(opline->result.var);
  31525. } else if (IS_UNUSED == IS_VAR) {
  31526. if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
  31527. retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
  31528. }
  31529. ZVAL_DEREF(retval_ptr);
  31530. } else if (IS_UNUSED == IS_CV) {
  31531. ZVAL_DEREF(retval_ptr);
  31532. }
  31533. if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
  31534. ZEND_VM_NEXT_OPCODE();
  31535. }
  31536. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
  31537. SAVE_OPLINE();
  31538. retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
  31539. if (UNEXPECTED(EG(exception))) {
  31540. HANDLE_EXCEPTION();
  31541. }
  31542. if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
  31543. ZEND_VM_NEXT_OPCODE();
  31544. }
  31545. }
  31546. zend_reference *ref = NULL;
  31547. void *cache_slot = CACHE_ADDR(opline->op2.num);
  31548. if (UNEXPECTED(retval_ref != retval_ptr)) {
  31549. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  31550. ref = Z_REF_P(retval_ref);
  31551. } else {
  31552. /* A cast might happen - unwrap the reference if this is a by-value return */
  31553. if (Z_REFCOUNT_P(retval_ref) == 1) {
  31554. ZVAL_UNREF(retval_ref);
  31555. } else {
  31556. Z_DELREF_P(retval_ref);
  31557. ZVAL_COPY(retval_ref, retval_ptr);
  31558. }
  31559. retval_ptr = retval_ref;
  31560. }
  31561. }
  31562. SAVE_OPLINE();
  31563. if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
  31564. zend_verify_return_error(EX(func), retval_ptr);
  31565. HANDLE_EXCEPTION();
  31566. }
  31567. ZEND_VM_NEXT_OPCODE();
  31568. #endif
  31569. }
  31570. }
  31571. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31572. {
  31573. SAVE_OPLINE();
  31574. zend_verify_never_error(EX(func));
  31575. HANDLE_EXCEPTION();
  31576. }
  31577. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31578. {
  31579. USE_OPLINE
  31580. uint32_t arg_num;
  31581. if (IS_UNUSED == IS_CONST) {
  31582. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  31583. arg_num = zend_get_arg_offset_by_name(
  31584. EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
  31585. if (UNEXPECTED(arg_num == 0)) {
  31586. /* Treat this as a by-value argument, and throw an error during SEND. */
  31587. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31588. ZEND_VM_NEXT_OPCODE();
  31589. }
  31590. } else {
  31591. arg_num = opline->op2.num;
  31592. }
  31593. if (EXPECTED(0)) {
  31594. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  31595. ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31596. } else {
  31597. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31598. }
  31599. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  31600. ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31601. } else {
  31602. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31603. }
  31604. ZEND_VM_NEXT_OPCODE();
  31605. }
  31606. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31607. {
  31608. USE_OPLINE
  31609. uint32_t arg_num;
  31610. if (IS_UNUSED == IS_CONST) {
  31611. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  31612. arg_num = zend_get_arg_offset_by_name(
  31613. EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
  31614. if (UNEXPECTED(arg_num == 0)) {
  31615. /* Treat this as a by-value argument, and throw an error during SEND. */
  31616. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31617. ZEND_VM_NEXT_OPCODE();
  31618. }
  31619. } else {
  31620. arg_num = opline->op2.num;
  31621. }
  31622. if (EXPECTED(1)) {
  31623. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  31624. ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31625. } else {
  31626. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31627. }
  31628. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  31629. ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31630. } else {
  31631. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31632. }
  31633. ZEND_VM_NEXT_OPCODE();
  31634. }
  31635. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31636. {
  31637. USE_OPLINE
  31638. zend_execute_data *call = execute_data->call;
  31639. if (EXPECTED(!(ZEND_CALL_INFO(call) & ZEND_CALL_MAY_HAVE_UNDEF))) {
  31640. ZEND_VM_NEXT_OPCODE();
  31641. }
  31642. SAVE_OPLINE();
  31643. zend_handle_undef_args(call);
  31644. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31645. }
  31646. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31647. {
  31648. USE_OPLINE
  31649. zval *result;
  31650. zend_function *constructor;
  31651. zend_class_entry *ce;
  31652. zend_execute_data *call;
  31653. SAVE_OPLINE();
  31654. if (IS_UNUSED == IS_CONST) {
  31655. ce = CACHED_PTR(opline->op2.num);
  31656. if (UNEXPECTED(ce == NULL)) {
  31657. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  31658. if (UNEXPECTED(ce == NULL)) {
  31659. ZVAL_UNDEF(EX_VAR(opline->result.var));
  31660. HANDLE_EXCEPTION();
  31661. }
  31662. CACHE_PTR(opline->op2.num, ce);
  31663. }
  31664. } else if (IS_UNUSED == IS_UNUSED) {
  31665. ce = zend_fetch_class(NULL, opline->op1.num);
  31666. if (UNEXPECTED(ce == NULL)) {
  31667. ZVAL_UNDEF(EX_VAR(opline->result.var));
  31668. HANDLE_EXCEPTION();
  31669. }
  31670. } else {
  31671. ce = Z_CE_P(EX_VAR(opline->op1.var));
  31672. }
  31673. result = EX_VAR(opline->result.var);
  31674. if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
  31675. ZVAL_UNDEF(result);
  31676. HANDLE_EXCEPTION();
  31677. }
  31678. constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
  31679. if (constructor == NULL) {
  31680. if (UNEXPECTED(EG(exception))) {
  31681. HANDLE_EXCEPTION();
  31682. }
  31683. /* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
  31684. * opcode is DO_FCALL in case EXT instructions are used. */
  31685. if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
  31686. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  31687. }
  31688. /* Perform a dummy function call */
  31689. call = zend_vm_stack_push_call_frame(
  31690. ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
  31691. opline->extended_value, NULL);
  31692. } else {
  31693. if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
  31694. init_func_run_time_cache(&constructor->op_array);
  31695. }
  31696. /* We are not handling overloaded classes right now */
  31697. call = zend_vm_stack_push_call_frame(
  31698. ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
  31699. constructor,
  31700. opline->extended_value,
  31701. Z_OBJ_P(result));
  31702. Z_ADDREF_P(result);
  31703. }
  31704. call->prev_execute_data = EX(call);
  31705. EX(call) = call;
  31706. ZEND_VM_NEXT_OPCODE();
  31707. }
  31708. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31709. {
  31710. zval *array;
  31711. uint32_t size;
  31712. USE_OPLINE
  31713. array = EX_VAR(opline->result.var);
  31714. if (IS_UNUSED != IS_UNUSED) {
  31715. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  31716. ZVAL_ARR(array, zend_new_array(size));
  31717. /* Explicitly initialize array as not-packed if flag is set */
  31718. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  31719. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  31720. }
  31721. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  31722. } else {
  31723. ZVAL_ARR(array, zend_new_array(0));
  31724. ZEND_VM_NEXT_OPCODE();
  31725. }
  31726. }
  31727. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31728. {
  31729. USE_OPLINE
  31730. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  31731. SAVE_OPLINE();
  31732. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  31733. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  31734. }
  31735. /* Destroy the previously yielded value */
  31736. zval_ptr_dtor(&generator->value);
  31737. /* Destroy the previously yielded key */
  31738. zval_ptr_dtor(&generator->key);
  31739. /* Set the new yielded value */
  31740. if (IS_UNUSED != IS_UNUSED) {
  31741. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  31742. /* Constants and temporary variables aren't yieldable by reference,
  31743. * but we still allow them with a notice. */
  31744. if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
  31745. zval *value;
  31746. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  31747. value = NULL;
  31748. ZVAL_COPY_VALUE(&generator->value, value);
  31749. if (IS_UNUSED == IS_CONST) {
  31750. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  31751. Z_ADDREF(generator->value);
  31752. }
  31753. }
  31754. } else {
  31755. zval *value_ptr = NULL;
  31756. /* If a function call result is yielded and the function did
  31757. * not return by reference we throw a notice. */
  31758. do {
  31759. if (IS_UNUSED == IS_VAR) {
  31760. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  31761. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  31762. && !Z_ISREF_P(value_ptr)) {
  31763. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  31764. ZVAL_COPY(&generator->value, value_ptr);
  31765. break;
  31766. }
  31767. }
  31768. if (Z_ISREF_P(value_ptr)) {
  31769. Z_ADDREF_P(value_ptr);
  31770. } else {
  31771. ZVAL_MAKE_REF_EX(value_ptr, 2);
  31772. }
  31773. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  31774. } while (0);
  31775. }
  31776. } else {
  31777. zval *value = NULL;
  31778. /* Consts, temporary variables and references need copying */
  31779. if (IS_UNUSED == IS_CONST) {
  31780. ZVAL_COPY_VALUE(&generator->value, value);
  31781. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  31782. Z_ADDREF(generator->value);
  31783. }
  31784. } else if (IS_UNUSED == IS_TMP_VAR) {
  31785. ZVAL_COPY_VALUE(&generator->value, value);
  31786. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  31787. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  31788. } else {
  31789. ZVAL_COPY_VALUE(&generator->value, value);
  31790. if (IS_UNUSED == IS_CV) {
  31791. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  31792. }
  31793. }
  31794. }
  31795. } else {
  31796. /* If no value was specified yield null */
  31797. ZVAL_NULL(&generator->value);
  31798. }
  31799. /* Set the new yielded key */
  31800. if (IS_UNUSED != IS_UNUSED) {
  31801. zval *key = NULL;
  31802. if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  31803. key = Z_REFVAL_P(key);
  31804. }
  31805. ZVAL_COPY(&generator->key, key);
  31806. if (Z_TYPE(generator->key) == IS_LONG
  31807. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  31808. ) {
  31809. generator->largest_used_integer_key = Z_LVAL(generator->key);
  31810. }
  31811. } else {
  31812. /* If no key was specified we use auto-increment keys */
  31813. generator->largest_used_integer_key++;
  31814. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  31815. }
  31816. if (RETURN_VALUE_USED(opline)) {
  31817. /* If the return value of yield is used set the send
  31818. * target and initialize it to NULL */
  31819. generator->send_target = EX_VAR(opline->result.var);
  31820. ZVAL_NULL(generator->send_target);
  31821. } else {
  31822. generator->send_target = NULL;
  31823. }
  31824. /* We increment to the next op, so we are at the correct position when the
  31825. * generator is resumed. */
  31826. ZEND_VM_INC_OPCODE();
  31827. /* The GOTO VM uses a local opline variable. We need to set the opline
  31828. * variable in execute_data so we don't resume at an old position. */
  31829. SAVE_OPLINE();
  31830. ZEND_VM_RETURN();
  31831. }
  31832. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31833. {
  31834. USE_OPLINE
  31835. if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
  31836. zval *result = EX_VAR(opline->result.var);
  31837. ZVAL_OBJ(result, Z_OBJ(EX(This)));
  31838. Z_ADDREF_P(result);
  31839. ZEND_VM_NEXT_OPCODE();
  31840. } else {
  31841. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  31842. }
  31843. }
  31844. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31845. {
  31846. USE_OPLINE
  31847. /* For symbol tables we need to deal with exactly the same problems as for property tables. */
  31848. ZVAL_ARR(EX_VAR(opline->result.var),
  31849. zend_proptable_to_symtable(&EG(symbol_table), /* always_duplicate */ 1));
  31850. ZEND_VM_NEXT_OPCODE();
  31851. }
  31852. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31853. {
  31854. USE_OPLINE
  31855. ZVAL_BOOL(EX_VAR(opline->result.var),
  31856. (opline->extended_value & ZEND_ISEMPTY) ^
  31857. (Z_TYPE(EX(This)) == IS_OBJECT));
  31858. ZEND_VM_NEXT_OPCODE();
  31859. }
  31860. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31861. {
  31862. USE_OPLINE
  31863. if (IS_UNUSED == IS_UNUSED) {
  31864. if (UNEXPECTED(!EX(func)->common.scope)) {
  31865. SAVE_OPLINE();
  31866. zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
  31867. ZVAL_UNDEF(EX_VAR(opline->result.var));
  31868. HANDLE_EXCEPTION();
  31869. } else {
  31870. ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
  31871. ZEND_VM_NEXT_OPCODE();
  31872. }
  31873. } else {
  31874. zval *op1;
  31875. SAVE_OPLINE();
  31876. op1 = NULL;
  31877. while (1) {
  31878. if (Z_TYPE_P(op1) == IS_OBJECT) {
  31879. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
  31880. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
  31881. op1 = Z_REFVAL_P(op1);
  31882. continue;
  31883. } else {
  31884. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  31885. ZVAL_UNDEFINED_OP1();
  31886. }
  31887. zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_type_name(op1));
  31888. ZVAL_UNDEF(EX_VAR(opline->result.var));
  31889. }
  31890. break;
  31891. }
  31892. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31893. }
  31894. }
  31895. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31896. {
  31897. USE_OPLINE
  31898. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  31899. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE(EX(This))->name);
  31900. } else if (Z_CE(EX(This))) {
  31901. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_CE(EX(This))->name);
  31902. } else {
  31903. ZEND_ASSERT(!EX(func)->common.scope);
  31904. SAVE_OPLINE();
  31905. zend_throw_error(NULL, "get_called_class() must be called from within a class");
  31906. ZVAL_UNDEF(EX_VAR(opline->result.var));
  31907. HANDLE_EXCEPTION();
  31908. }
  31909. ZEND_VM_NEXT_OPCODE();
  31910. }
  31911. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31912. {
  31913. USE_OPLINE
  31914. ZVAL_LONG(EX_VAR(opline->result.var), EX_NUM_ARGS());
  31915. ZEND_VM_NEXT_OPCODE();
  31916. }
  31917. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31918. {
  31919. USE_OPLINE
  31920. zend_array *ht;
  31921. uint32_t arg_count, result_size, skip;
  31922. arg_count = EX_NUM_ARGS();
  31923. if (IS_UNUSED == IS_CONST) {
  31924. skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
  31925. if (arg_count < skip) {
  31926. result_size = 0;
  31927. } else {
  31928. result_size = arg_count - skip;
  31929. }
  31930. } else {
  31931. skip = 0;
  31932. result_size = arg_count;
  31933. }
  31934. if (result_size) {
  31935. uint32_t first_extra_arg = EX(func)->op_array.num_args;
  31936. ht = zend_new_array(result_size);
  31937. ZVAL_ARR(EX_VAR(opline->result.var), ht);
  31938. zend_hash_real_init_packed(ht);
  31939. ZEND_HASH_FILL_PACKED(ht) {
  31940. zval *p, *q;
  31941. uint32_t i = skip;
  31942. p = EX_VAR_NUM(i);
  31943. if (arg_count > first_extra_arg) {
  31944. while (i < first_extra_arg) {
  31945. q = p;
  31946. if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
  31947. ZVAL_DEREF(q);
  31948. if (Z_OPT_REFCOUNTED_P(q)) {
  31949. Z_ADDREF_P(q);
  31950. }
  31951. ZEND_HASH_FILL_SET(q);
  31952. } else {
  31953. ZEND_HASH_FILL_SET_NULL();
  31954. }
  31955. ZEND_HASH_FILL_NEXT();
  31956. p++;
  31957. i++;
  31958. }
  31959. if (skip < first_extra_arg) {
  31960. skip = 0;
  31961. } else {
  31962. skip -= first_extra_arg;
  31963. }
  31964. p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
  31965. }
  31966. while (i < arg_count) {
  31967. q = p;
  31968. if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
  31969. ZVAL_DEREF(q);
  31970. if (Z_OPT_REFCOUNTED_P(q)) {
  31971. Z_ADDREF_P(q);
  31972. }
  31973. ZEND_HASH_FILL_SET(q);
  31974. } else {
  31975. ZEND_HASH_FILL_SET_NULL();
  31976. }
  31977. ZEND_HASH_FILL_NEXT();
  31978. p++;
  31979. i++;
  31980. }
  31981. } ZEND_HASH_FILL_END();
  31982. ht->nNumOfElements = result_size;
  31983. } else {
  31984. ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
  31985. }
  31986. ZEND_VM_NEXT_OPCODE();
  31987. }
  31988. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31989. {
  31990. USE_OPLINE
  31991. zend_execute_data *call = EX(call);
  31992. zend_closure_from_frame(EX_VAR(opline->result.var), call);
  31993. if (ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS) {
  31994. OBJ_RELEASE(Z_OBJ(call->This));
  31995. }
  31996. EX(call) = call->prev_execute_data;
  31997. zend_vm_stack_free_call_frame(call);
  31998. ZEND_VM_NEXT_OPCODE();
  31999. }
  32000. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32001. {
  32002. USE_OPLINE
  32003. zval *object;
  32004. zval *property;
  32005. zval *value;
  32006. zval *zptr;
  32007. void **cache_slot;
  32008. zend_property_info *prop_info;
  32009. zend_object *zobj;
  32010. zend_string *name, *tmp_name;
  32011. SAVE_OPLINE();
  32012. object = &EX(This);
  32013. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  32014. do {
  32015. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  32016. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  32017. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  32018. object = Z_REFVAL_P(object);
  32019. goto assign_op_object;
  32020. }
  32021. if (IS_UNUSED == IS_CV
  32022. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  32023. ZVAL_UNDEFINED_OP1();
  32024. }
  32025. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  32026. break;
  32027. }
  32028. assign_op_object:
  32029. /* here we are sure we are dealing with an object */
  32030. zobj = Z_OBJ_P(object);
  32031. if (IS_CV == IS_CONST) {
  32032. name = Z_STR_P(property);
  32033. } else {
  32034. name = zval_try_get_tmp_string(property, &tmp_name);
  32035. if (UNEXPECTED(!name)) {
  32036. UNDEF_RESULT();
  32037. break;
  32038. }
  32039. }
  32040. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  32041. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  32042. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  32043. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32044. ZVAL_NULL(EX_VAR(opline->result.var));
  32045. }
  32046. } else {
  32047. zval *orig_zptr = zptr;
  32048. zend_reference *ref;
  32049. do {
  32050. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  32051. ref = Z_REF_P(zptr);
  32052. zptr = Z_REFVAL_P(zptr);
  32053. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  32054. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  32055. break;
  32056. }
  32057. }
  32058. if (IS_CV == IS_CONST) {
  32059. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  32060. } else {
  32061. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  32062. }
  32063. if (UNEXPECTED(prop_info)) {
  32064. /* special case for typed properties */
  32065. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  32066. } else {
  32067. zend_binary_op(zptr, zptr, value OPLINE_CC);
  32068. }
  32069. } while (0);
  32070. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32071. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  32072. }
  32073. }
  32074. } else {
  32075. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  32076. }
  32077. if (IS_CV != IS_CONST) {
  32078. zend_tmp_string_release(tmp_name);
  32079. }
  32080. } while (0);
  32081. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  32082. /* assign_obj has two opcodes! */
  32083. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  32084. }
  32085. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  32086. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32087. {
  32088. USE_OPLINE
  32089. zval *object;
  32090. zval *property;
  32091. zval *zptr;
  32092. void **cache_slot;
  32093. zend_property_info *prop_info;
  32094. zend_object *zobj;
  32095. zend_string *name, *tmp_name;
  32096. SAVE_OPLINE();
  32097. object = &EX(This);
  32098. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  32099. do {
  32100. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  32101. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  32102. object = Z_REFVAL_P(object);
  32103. goto pre_incdec_object;
  32104. }
  32105. if (IS_UNUSED == IS_CV
  32106. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  32107. ZVAL_UNDEFINED_OP1();
  32108. }
  32109. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  32110. break;
  32111. }
  32112. pre_incdec_object:
  32113. /* here we are sure we are dealing with an object */
  32114. zobj = Z_OBJ_P(object);
  32115. if (IS_CV == IS_CONST) {
  32116. name = Z_STR_P(property);
  32117. } else {
  32118. name = zval_try_get_tmp_string(property, &tmp_name);
  32119. if (UNEXPECTED(!name)) {
  32120. UNDEF_RESULT();
  32121. break;
  32122. }
  32123. }
  32124. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  32125. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  32126. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  32127. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32128. ZVAL_NULL(EX_VAR(opline->result.var));
  32129. }
  32130. } else {
  32131. if (IS_CV == IS_CONST) {
  32132. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  32133. } else {
  32134. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  32135. }
  32136. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  32137. }
  32138. } else {
  32139. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  32140. }
  32141. if (IS_CV != IS_CONST) {
  32142. zend_tmp_string_release(tmp_name);
  32143. }
  32144. } while (0);
  32145. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32146. }
  32147. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32148. {
  32149. USE_OPLINE
  32150. zval *object;
  32151. zval *property;
  32152. zval *zptr;
  32153. void **cache_slot;
  32154. zend_property_info *prop_info;
  32155. zend_object *zobj;
  32156. zend_string *name, *tmp_name;
  32157. SAVE_OPLINE();
  32158. object = &EX(This);
  32159. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  32160. do {
  32161. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  32162. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  32163. object = Z_REFVAL_P(object);
  32164. goto post_incdec_object;
  32165. }
  32166. if (IS_UNUSED == IS_CV
  32167. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  32168. ZVAL_UNDEFINED_OP1();
  32169. }
  32170. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  32171. break;
  32172. }
  32173. post_incdec_object:
  32174. /* here we are sure we are dealing with an object */
  32175. zobj = Z_OBJ_P(object);
  32176. if (IS_CV == IS_CONST) {
  32177. name = Z_STR_P(property);
  32178. } else {
  32179. name = zval_try_get_tmp_string(property, &tmp_name);
  32180. if (UNEXPECTED(!name)) {
  32181. ZVAL_UNDEF(EX_VAR(opline->result.var));
  32182. break;
  32183. }
  32184. }
  32185. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  32186. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  32187. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  32188. ZVAL_NULL(EX_VAR(opline->result.var));
  32189. } else {
  32190. if (IS_CV == IS_CONST) {
  32191. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  32192. } else {
  32193. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  32194. }
  32195. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  32196. }
  32197. } else {
  32198. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  32199. }
  32200. if (IS_CV != IS_CONST) {
  32201. zend_tmp_string_release(tmp_name);
  32202. }
  32203. } while (0);
  32204. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32205. }
  32206. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32207. {
  32208. USE_OPLINE
  32209. zval *container;
  32210. void **cache_slot = NULL;
  32211. SAVE_OPLINE();
  32212. container = &EX(This);
  32213. if (IS_UNUSED == IS_CONST ||
  32214. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  32215. do {
  32216. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  32217. container = Z_REFVAL_P(container);
  32218. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  32219. break;
  32220. }
  32221. }
  32222. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  32223. ZVAL_UNDEFINED_OP1();
  32224. }
  32225. zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32226. ZVAL_NULL(EX_VAR(opline->result.var));
  32227. goto fetch_obj_r_finish;
  32228. } while (0);
  32229. }
  32230. /* here we are sure we are dealing with an object */
  32231. do {
  32232. zend_object *zobj = Z_OBJ_P(container);
  32233. zend_string *name, *tmp_name;
  32234. zval *retval;
  32235. if (IS_CV == IS_CONST) {
  32236. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  32237. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  32238. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  32239. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  32240. retval = OBJ_PROP(zobj, prop_offset);
  32241. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  32242. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  32243. goto fetch_obj_r_copy;
  32244. } else {
  32245. fetch_obj_r_fast_copy:
  32246. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  32247. ZEND_VM_NEXT_OPCODE();
  32248. }
  32249. }
  32250. } else if (EXPECTED(zobj->properties != NULL)) {
  32251. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32252. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  32253. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  32254. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  32255. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  32256. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  32257. (EXPECTED(p->key == name) ||
  32258. (EXPECTED(p->h == ZSTR_H(name)) &&
  32259. EXPECTED(p->key != NULL) &&
  32260. EXPECTED(zend_string_equal_content(p->key, name))))) {
  32261. retval = &p->val;
  32262. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  32263. goto fetch_obj_r_copy;
  32264. } else {
  32265. goto fetch_obj_r_fast_copy;
  32266. }
  32267. }
  32268. }
  32269. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  32270. }
  32271. retval = zend_hash_find_known_hash(zobj->properties, name);
  32272. if (EXPECTED(retval)) {
  32273. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  32274. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  32275. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  32276. goto fetch_obj_r_copy;
  32277. } else {
  32278. goto fetch_obj_r_fast_copy;
  32279. }
  32280. }
  32281. }
  32282. }
  32283. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32284. } else {
  32285. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  32286. if (UNEXPECTED(!name)) {
  32287. ZVAL_UNDEF(EX_VAR(opline->result.var));
  32288. break;
  32289. }
  32290. }
  32291. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  32292. #if ZEND_DEBUG
  32293. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  32294. zend_verify_internal_read_property_type(zobj, name, retval);
  32295. }
  32296. #endif
  32297. if (IS_CV != IS_CONST) {
  32298. zend_tmp_string_release(tmp_name);
  32299. }
  32300. if (retval != EX_VAR(opline->result.var)) {
  32301. fetch_obj_r_copy:
  32302. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  32303. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  32304. zend_unwrap_reference(retval);
  32305. }
  32306. } while (0);
  32307. fetch_obj_r_finish:
  32308. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32309. }
  32310. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32311. {
  32312. USE_OPLINE
  32313. zval *property, *container, *result;
  32314. SAVE_OPLINE();
  32315. container = &EX(This);
  32316. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  32317. result = EX_VAR(opline->result.var);
  32318. zend_fetch_property_address(
  32319. result, container, IS_UNUSED, property, IS_CV,
  32320. ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  32321. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
  32322. if (IS_UNUSED == IS_VAR) {
  32323. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  32324. }
  32325. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32326. }
  32327. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32328. {
  32329. USE_OPLINE
  32330. zval *property, *container, *result;
  32331. SAVE_OPLINE();
  32332. container = &EX(This);
  32333. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  32334. result = EX_VAR(opline->result.var);
  32335. zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  32336. if (IS_UNUSED == IS_VAR) {
  32337. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  32338. }
  32339. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32340. }
  32341. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32342. {
  32343. USE_OPLINE
  32344. zval *container;
  32345. void **cache_slot = NULL;
  32346. SAVE_OPLINE();
  32347. container = &EX(This);
  32348. if (IS_UNUSED == IS_CONST ||
  32349. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  32350. do {
  32351. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  32352. container = Z_REFVAL_P(container);
  32353. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  32354. break;
  32355. }
  32356. }
  32357. if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  32358. ZVAL_UNDEFINED_OP2();
  32359. }
  32360. ZVAL_NULL(EX_VAR(opline->result.var));
  32361. goto fetch_obj_is_finish;
  32362. } while (0);
  32363. }
  32364. /* here we are sure we are dealing with an object */
  32365. do {
  32366. zend_object *zobj = Z_OBJ_P(container);
  32367. zend_string *name, *tmp_name;
  32368. zval *retval;
  32369. if (IS_CV == IS_CONST) {
  32370. cache_slot = CACHE_ADDR(opline->extended_value);
  32371. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  32372. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  32373. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  32374. retval = OBJ_PROP(zobj, prop_offset);
  32375. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  32376. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  32377. goto fetch_obj_is_copy;
  32378. } else {
  32379. fetch_obj_is_fast_copy:
  32380. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  32381. ZEND_VM_NEXT_OPCODE();
  32382. }
  32383. }
  32384. } else if (EXPECTED(zobj->properties != NULL)) {
  32385. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32386. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  32387. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  32388. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  32389. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  32390. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  32391. (EXPECTED(p->key == name) ||
  32392. (EXPECTED(p->h == ZSTR_H(name)) &&
  32393. EXPECTED(p->key != NULL) &&
  32394. EXPECTED(zend_string_equal_content(p->key, name))))) {
  32395. retval = &p->val;
  32396. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  32397. goto fetch_obj_is_copy;
  32398. } else {
  32399. goto fetch_obj_is_fast_copy;
  32400. }
  32401. }
  32402. }
  32403. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  32404. }
  32405. retval = zend_hash_find_known_hash(zobj->properties, name);
  32406. if (EXPECTED(retval)) {
  32407. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  32408. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  32409. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  32410. goto fetch_obj_is_copy;
  32411. } else {
  32412. goto fetch_obj_is_fast_copy;
  32413. }
  32414. }
  32415. }
  32416. }
  32417. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32418. } else {
  32419. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  32420. if (UNEXPECTED(!name)) {
  32421. ZVAL_UNDEF(EX_VAR(opline->result.var));
  32422. break;
  32423. }
  32424. }
  32425. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  32426. if (IS_CV != IS_CONST) {
  32427. zend_tmp_string_release(tmp_name);
  32428. }
  32429. if (retval != EX_VAR(opline->result.var)) {
  32430. fetch_obj_is_copy:
  32431. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  32432. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  32433. zend_unwrap_reference(retval);
  32434. }
  32435. } while (0);
  32436. fetch_obj_is_finish:
  32437. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32438. }
  32439. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32440. {
  32441. #if 0
  32442. USE_OPLINE
  32443. #endif
  32444. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  32445. /* Behave like FETCH_OBJ_W */
  32446. if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
  32447. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  32448. }
  32449. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  32450. } else {
  32451. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  32452. }
  32453. }
  32454. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32455. {
  32456. USE_OPLINE
  32457. zval *container, *property, *result;
  32458. SAVE_OPLINE();
  32459. container = &EX(This);
  32460. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  32461. result = EX_VAR(opline->result.var);
  32462. zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  32463. if (IS_UNUSED == IS_VAR) {
  32464. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  32465. }
  32466. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32467. }
  32468. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32469. {
  32470. USE_OPLINE
  32471. zval *object, *value, tmp;
  32472. zend_object *zobj;
  32473. zend_string *name, *tmp_name;
  32474. SAVE_OPLINE();
  32475. object = &EX(This);
  32476. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  32477. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  32478. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  32479. object = Z_REFVAL_P(object);
  32480. goto assign_object;
  32481. }
  32482. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  32483. value = &EG(uninitialized_zval);
  32484. goto free_and_exit_assign_obj;
  32485. }
  32486. assign_object:
  32487. zobj = Z_OBJ_P(object);
  32488. if (IS_CV == IS_CONST) {
  32489. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  32490. void **cache_slot = CACHE_ADDR(opline->extended_value);
  32491. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  32492. zend_object *zobj = Z_OBJ_P(object);
  32493. zval *property_val;
  32494. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  32495. property_val = OBJ_PROP(zobj, prop_offset);
  32496. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  32497. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  32498. if (UNEXPECTED(prop_info != NULL)) {
  32499. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  32500. goto free_and_exit_assign_obj;
  32501. } else {
  32502. fast_assign_obj:
  32503. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  32504. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32505. ZVAL_COPY(EX_VAR(opline->result.var), value);
  32506. }
  32507. goto exit_assign_obj;
  32508. }
  32509. }
  32510. } else {
  32511. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32512. if (EXPECTED(zobj->properties != NULL)) {
  32513. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  32514. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  32515. GC_DELREF(zobj->properties);
  32516. }
  32517. zobj->properties = zend_array_dup(zobj->properties);
  32518. }
  32519. property_val = zend_hash_find_known_hash(zobj->properties, name);
  32520. if (property_val) {
  32521. goto fast_assign_obj;
  32522. }
  32523. }
  32524. if (!zobj->ce->__set) {
  32525. if (EXPECTED(zobj->properties == NULL)) {
  32526. rebuild_object_properties(zobj);
  32527. }
  32528. if (IS_CONST == IS_CONST) {
  32529. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  32530. Z_ADDREF_P(value);
  32531. }
  32532. } else if (IS_CONST != IS_TMP_VAR) {
  32533. if (Z_ISREF_P(value)) {
  32534. if (IS_CONST == IS_VAR) {
  32535. zend_reference *ref = Z_REF_P(value);
  32536. if (GC_DELREF(ref) == 0) {
  32537. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  32538. efree_size(ref, sizeof(zend_reference));
  32539. value = &tmp;
  32540. } else {
  32541. value = Z_REFVAL_P(value);
  32542. Z_TRY_ADDREF_P(value);
  32543. }
  32544. } else {
  32545. value = Z_REFVAL_P(value);
  32546. Z_TRY_ADDREF_P(value);
  32547. }
  32548. } else if (IS_CONST == IS_CV) {
  32549. Z_TRY_ADDREF_P(value);
  32550. }
  32551. }
  32552. zend_hash_add_new(zobj->properties, name, value);
  32553. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32554. ZVAL_COPY(EX_VAR(opline->result.var), value);
  32555. }
  32556. goto exit_assign_obj;
  32557. }
  32558. }
  32559. }
  32560. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32561. } else {
  32562. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  32563. if (UNEXPECTED(!name)) {
  32564. UNDEF_RESULT();
  32565. goto exit_assign_obj;
  32566. }
  32567. }
  32568. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  32569. ZVAL_DEREF(value);
  32570. }
  32571. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  32572. if (IS_CV != IS_CONST) {
  32573. zend_tmp_string_release(tmp_name);
  32574. }
  32575. free_and_exit_assign_obj:
  32576. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32577. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  32578. }
  32579. exit_assign_obj:
  32580. /* assign_obj has two opcodes! */
  32581. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  32582. }
  32583. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  32584. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32585. {
  32586. USE_OPLINE
  32587. zval *object, *value, tmp;
  32588. zend_object *zobj;
  32589. zend_string *name, *tmp_name;
  32590. SAVE_OPLINE();
  32591. object = &EX(This);
  32592. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  32593. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  32594. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  32595. object = Z_REFVAL_P(object);
  32596. goto assign_object;
  32597. }
  32598. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  32599. value = &EG(uninitialized_zval);
  32600. goto free_and_exit_assign_obj;
  32601. }
  32602. assign_object:
  32603. zobj = Z_OBJ_P(object);
  32604. if (IS_CV == IS_CONST) {
  32605. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  32606. void **cache_slot = CACHE_ADDR(opline->extended_value);
  32607. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  32608. zend_object *zobj = Z_OBJ_P(object);
  32609. zval *property_val;
  32610. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  32611. property_val = OBJ_PROP(zobj, prop_offset);
  32612. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  32613. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  32614. if (UNEXPECTED(prop_info != NULL)) {
  32615. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  32616. goto free_and_exit_assign_obj;
  32617. } else {
  32618. fast_assign_obj:
  32619. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  32620. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32621. ZVAL_COPY(EX_VAR(opline->result.var), value);
  32622. }
  32623. goto exit_assign_obj;
  32624. }
  32625. }
  32626. } else {
  32627. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32628. if (EXPECTED(zobj->properties != NULL)) {
  32629. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  32630. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  32631. GC_DELREF(zobj->properties);
  32632. }
  32633. zobj->properties = zend_array_dup(zobj->properties);
  32634. }
  32635. property_val = zend_hash_find_known_hash(zobj->properties, name);
  32636. if (property_val) {
  32637. goto fast_assign_obj;
  32638. }
  32639. }
  32640. if (!zobj->ce->__set) {
  32641. if (EXPECTED(zobj->properties == NULL)) {
  32642. rebuild_object_properties(zobj);
  32643. }
  32644. if (IS_TMP_VAR == IS_CONST) {
  32645. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  32646. Z_ADDREF_P(value);
  32647. }
  32648. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  32649. if (Z_ISREF_P(value)) {
  32650. if (IS_TMP_VAR == IS_VAR) {
  32651. zend_reference *ref = Z_REF_P(value);
  32652. if (GC_DELREF(ref) == 0) {
  32653. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  32654. efree_size(ref, sizeof(zend_reference));
  32655. value = &tmp;
  32656. } else {
  32657. value = Z_REFVAL_P(value);
  32658. Z_TRY_ADDREF_P(value);
  32659. }
  32660. } else {
  32661. value = Z_REFVAL_P(value);
  32662. Z_TRY_ADDREF_P(value);
  32663. }
  32664. } else if (IS_TMP_VAR == IS_CV) {
  32665. Z_TRY_ADDREF_P(value);
  32666. }
  32667. }
  32668. zend_hash_add_new(zobj->properties, name, value);
  32669. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32670. ZVAL_COPY(EX_VAR(opline->result.var), value);
  32671. }
  32672. goto exit_assign_obj;
  32673. }
  32674. }
  32675. }
  32676. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32677. } else {
  32678. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  32679. if (UNEXPECTED(!name)) {
  32680. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  32681. UNDEF_RESULT();
  32682. goto exit_assign_obj;
  32683. }
  32684. }
  32685. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  32686. ZVAL_DEREF(value);
  32687. }
  32688. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  32689. if (IS_CV != IS_CONST) {
  32690. zend_tmp_string_release(tmp_name);
  32691. }
  32692. free_and_exit_assign_obj:
  32693. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32694. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  32695. }
  32696. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  32697. exit_assign_obj:
  32698. /* assign_obj has two opcodes! */
  32699. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  32700. }
  32701. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  32702. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32703. {
  32704. USE_OPLINE
  32705. zval *object, *value, tmp;
  32706. zend_object *zobj;
  32707. zend_string *name, *tmp_name;
  32708. SAVE_OPLINE();
  32709. object = &EX(This);
  32710. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  32711. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  32712. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  32713. object = Z_REFVAL_P(object);
  32714. goto assign_object;
  32715. }
  32716. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  32717. value = &EG(uninitialized_zval);
  32718. goto free_and_exit_assign_obj;
  32719. }
  32720. assign_object:
  32721. zobj = Z_OBJ_P(object);
  32722. if (IS_CV == IS_CONST) {
  32723. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  32724. void **cache_slot = CACHE_ADDR(opline->extended_value);
  32725. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  32726. zend_object *zobj = Z_OBJ_P(object);
  32727. zval *property_val;
  32728. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  32729. property_val = OBJ_PROP(zobj, prop_offset);
  32730. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  32731. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  32732. if (UNEXPECTED(prop_info != NULL)) {
  32733. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  32734. goto free_and_exit_assign_obj;
  32735. } else {
  32736. fast_assign_obj:
  32737. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  32738. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32739. ZVAL_COPY(EX_VAR(opline->result.var), value);
  32740. }
  32741. goto exit_assign_obj;
  32742. }
  32743. }
  32744. } else {
  32745. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32746. if (EXPECTED(zobj->properties != NULL)) {
  32747. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  32748. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  32749. GC_DELREF(zobj->properties);
  32750. }
  32751. zobj->properties = zend_array_dup(zobj->properties);
  32752. }
  32753. property_val = zend_hash_find_known_hash(zobj->properties, name);
  32754. if (property_val) {
  32755. goto fast_assign_obj;
  32756. }
  32757. }
  32758. if (!zobj->ce->__set) {
  32759. if (EXPECTED(zobj->properties == NULL)) {
  32760. rebuild_object_properties(zobj);
  32761. }
  32762. if (IS_VAR == IS_CONST) {
  32763. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  32764. Z_ADDREF_P(value);
  32765. }
  32766. } else if (IS_VAR != IS_TMP_VAR) {
  32767. if (Z_ISREF_P(value)) {
  32768. if (IS_VAR == IS_VAR) {
  32769. zend_reference *ref = Z_REF_P(value);
  32770. if (GC_DELREF(ref) == 0) {
  32771. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  32772. efree_size(ref, sizeof(zend_reference));
  32773. value = &tmp;
  32774. } else {
  32775. value = Z_REFVAL_P(value);
  32776. Z_TRY_ADDREF_P(value);
  32777. }
  32778. } else {
  32779. value = Z_REFVAL_P(value);
  32780. Z_TRY_ADDREF_P(value);
  32781. }
  32782. } else if (IS_VAR == IS_CV) {
  32783. Z_TRY_ADDREF_P(value);
  32784. }
  32785. }
  32786. zend_hash_add_new(zobj->properties, name, value);
  32787. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32788. ZVAL_COPY(EX_VAR(opline->result.var), value);
  32789. }
  32790. goto exit_assign_obj;
  32791. }
  32792. }
  32793. }
  32794. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32795. } else {
  32796. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  32797. if (UNEXPECTED(!name)) {
  32798. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  32799. UNDEF_RESULT();
  32800. goto exit_assign_obj;
  32801. }
  32802. }
  32803. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  32804. ZVAL_DEREF(value);
  32805. }
  32806. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  32807. if (IS_CV != IS_CONST) {
  32808. zend_tmp_string_release(tmp_name);
  32809. }
  32810. free_and_exit_assign_obj:
  32811. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32812. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  32813. }
  32814. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  32815. exit_assign_obj:
  32816. /* assign_obj has two opcodes! */
  32817. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  32818. }
  32819. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  32820. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32821. {
  32822. USE_OPLINE
  32823. zval *object, *value, tmp;
  32824. zend_object *zobj;
  32825. zend_string *name, *tmp_name;
  32826. SAVE_OPLINE();
  32827. object = &EX(This);
  32828. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  32829. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  32830. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  32831. object = Z_REFVAL_P(object);
  32832. goto assign_object;
  32833. }
  32834. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  32835. value = &EG(uninitialized_zval);
  32836. goto free_and_exit_assign_obj;
  32837. }
  32838. assign_object:
  32839. zobj = Z_OBJ_P(object);
  32840. if (IS_CV == IS_CONST) {
  32841. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  32842. void **cache_slot = CACHE_ADDR(opline->extended_value);
  32843. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  32844. zend_object *zobj = Z_OBJ_P(object);
  32845. zval *property_val;
  32846. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  32847. property_val = OBJ_PROP(zobj, prop_offset);
  32848. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  32849. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  32850. if (UNEXPECTED(prop_info != NULL)) {
  32851. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  32852. goto free_and_exit_assign_obj;
  32853. } else {
  32854. fast_assign_obj:
  32855. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  32856. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32857. ZVAL_COPY(EX_VAR(opline->result.var), value);
  32858. }
  32859. goto exit_assign_obj;
  32860. }
  32861. }
  32862. } else {
  32863. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32864. if (EXPECTED(zobj->properties != NULL)) {
  32865. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  32866. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  32867. GC_DELREF(zobj->properties);
  32868. }
  32869. zobj->properties = zend_array_dup(zobj->properties);
  32870. }
  32871. property_val = zend_hash_find_known_hash(zobj->properties, name);
  32872. if (property_val) {
  32873. goto fast_assign_obj;
  32874. }
  32875. }
  32876. if (!zobj->ce->__set) {
  32877. if (EXPECTED(zobj->properties == NULL)) {
  32878. rebuild_object_properties(zobj);
  32879. }
  32880. if (IS_CV == IS_CONST) {
  32881. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  32882. Z_ADDREF_P(value);
  32883. }
  32884. } else if (IS_CV != IS_TMP_VAR) {
  32885. if (Z_ISREF_P(value)) {
  32886. if (IS_CV == IS_VAR) {
  32887. zend_reference *ref = Z_REF_P(value);
  32888. if (GC_DELREF(ref) == 0) {
  32889. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  32890. efree_size(ref, sizeof(zend_reference));
  32891. value = &tmp;
  32892. } else {
  32893. value = Z_REFVAL_P(value);
  32894. Z_TRY_ADDREF_P(value);
  32895. }
  32896. } else {
  32897. value = Z_REFVAL_P(value);
  32898. Z_TRY_ADDREF_P(value);
  32899. }
  32900. } else if (IS_CV == IS_CV) {
  32901. Z_TRY_ADDREF_P(value);
  32902. }
  32903. }
  32904. zend_hash_add_new(zobj->properties, name, value);
  32905. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32906. ZVAL_COPY(EX_VAR(opline->result.var), value);
  32907. }
  32908. goto exit_assign_obj;
  32909. }
  32910. }
  32911. }
  32912. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32913. } else {
  32914. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  32915. if (UNEXPECTED(!name)) {
  32916. UNDEF_RESULT();
  32917. goto exit_assign_obj;
  32918. }
  32919. }
  32920. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  32921. ZVAL_DEREF(value);
  32922. }
  32923. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  32924. if (IS_CV != IS_CONST) {
  32925. zend_tmp_string_release(tmp_name);
  32926. }
  32927. free_and_exit_assign_obj:
  32928. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32929. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  32930. }
  32931. exit_assign_obj:
  32932. /* assign_obj has two opcodes! */
  32933. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  32934. }
  32935. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  32936. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32937. {
  32938. USE_OPLINE
  32939. zval *property, *container, *value_ptr;
  32940. SAVE_OPLINE();
  32941. container = &EX(This);
  32942. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  32943. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  32944. if (1) {
  32945. if (IS_UNUSED == IS_UNUSED) {
  32946. if (IS_CV == IS_CONST) {
  32947. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32948. } else {
  32949. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32950. }
  32951. } else {
  32952. if (IS_CV == IS_CONST) {
  32953. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32954. } else {
  32955. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32956. }
  32957. }
  32958. } else {
  32959. zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32960. }
  32961. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  32962. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  32963. }
  32964. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  32965. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32966. {
  32967. USE_OPLINE
  32968. zval *property, *container, *value_ptr;
  32969. SAVE_OPLINE();
  32970. container = &EX(This);
  32971. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  32972. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  32973. if (1) {
  32974. if (IS_UNUSED == IS_UNUSED) {
  32975. if (IS_CV == IS_CONST) {
  32976. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32977. } else {
  32978. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32979. }
  32980. } else {
  32981. if (IS_CV == IS_CONST) {
  32982. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32983. } else {
  32984. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32985. }
  32986. }
  32987. } else {
  32988. zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32989. }
  32990. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  32991. }
  32992. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  32993. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32994. {
  32995. USE_OPLINE
  32996. zend_string **rope;
  32997. zval *var;
  32998. /* Compiler allocates the necessary number of zval slots to keep the rope */
  32999. rope = (zend_string**)EX_VAR(opline->result.var);
  33000. if (IS_CV == IS_CONST) {
  33001. var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  33002. rope[0] = Z_STR_P(var);
  33003. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  33004. Z_ADDREF_P(var);
  33005. }
  33006. } else {
  33007. var = EX_VAR(opline->op2.var);
  33008. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  33009. if (IS_CV == IS_CV) {
  33010. rope[0] = zend_string_copy(Z_STR_P(var));
  33011. } else {
  33012. rope[0] = Z_STR_P(var);
  33013. }
  33014. } else {
  33015. SAVE_OPLINE();
  33016. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  33017. ZVAL_UNDEFINED_OP2();
  33018. }
  33019. rope[0] = zval_get_string_func(var);
  33020. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33021. }
  33022. }
  33023. ZEND_VM_NEXT_OPCODE();
  33024. }
  33025. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33026. {
  33027. zval *class_name;
  33028. USE_OPLINE
  33029. SAVE_OPLINE();
  33030. if (IS_CV == IS_UNUSED) {
  33031. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
  33032. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33033. } else if (IS_CV == IS_CONST) {
  33034. zend_class_entry *ce = CACHED_PTR(opline->extended_value);
  33035. if (UNEXPECTED(ce == NULL)) {
  33036. class_name = EX_VAR(opline->op2.var);
  33037. ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
  33038. CACHE_PTR(opline->extended_value, ce);
  33039. }
  33040. Z_CE_P(EX_VAR(opline->result.var)) = ce;
  33041. } else {
  33042. class_name = EX_VAR(opline->op2.var);
  33043. try_class_name:
  33044. if (Z_TYPE_P(class_name) == IS_OBJECT) {
  33045. Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
  33046. } else if (Z_TYPE_P(class_name) == IS_STRING) {
  33047. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
  33048. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
  33049. class_name = Z_REFVAL_P(class_name);
  33050. goto try_class_name;
  33051. } else {
  33052. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
  33053. ZVAL_UNDEFINED_OP2();
  33054. if (UNEXPECTED(EG(exception) != NULL)) {
  33055. HANDLE_EXCEPTION();
  33056. }
  33057. }
  33058. zend_throw_error(NULL, "Class name must be a valid object or a string");
  33059. }
  33060. }
  33061. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33062. }
  33063. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33064. {
  33065. USE_OPLINE
  33066. zval *function_name;
  33067. zval *object;
  33068. zend_function *fbc;
  33069. zend_class_entry *called_scope;
  33070. zend_object *obj;
  33071. zend_execute_data *call;
  33072. uint32_t call_info;
  33073. SAVE_OPLINE();
  33074. object = &EX(This);
  33075. if (IS_CV != IS_CONST) {
  33076. function_name = EX_VAR(opline->op2.var);
  33077. }
  33078. if (IS_CV != IS_CONST &&
  33079. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  33080. do {
  33081. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  33082. function_name = Z_REFVAL_P(function_name);
  33083. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  33084. break;
  33085. }
  33086. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  33087. ZVAL_UNDEFINED_OP2();
  33088. if (UNEXPECTED(EG(exception) != NULL)) {
  33089. HANDLE_EXCEPTION();
  33090. }
  33091. }
  33092. zend_throw_error(NULL, "Method name must be a string");
  33093. HANDLE_EXCEPTION();
  33094. } while (0);
  33095. }
  33096. if (IS_UNUSED == IS_UNUSED) {
  33097. obj = Z_OBJ_P(object);
  33098. } else {
  33099. do {
  33100. if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  33101. obj = Z_OBJ_P(object);
  33102. } else {
  33103. if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  33104. zend_reference *ref = Z_REF_P(object);
  33105. object = &ref->val;
  33106. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  33107. obj = Z_OBJ_P(object);
  33108. if (IS_UNUSED & IS_VAR) {
  33109. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  33110. efree_size(ref, sizeof(zend_reference));
  33111. } else {
  33112. Z_ADDREF_P(object);
  33113. }
  33114. }
  33115. break;
  33116. }
  33117. }
  33118. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  33119. object = ZVAL_UNDEFINED_OP1();
  33120. if (UNEXPECTED(EG(exception) != NULL)) {
  33121. if (IS_CV != IS_CONST) {
  33122. }
  33123. HANDLE_EXCEPTION();
  33124. }
  33125. }
  33126. if (IS_CV == IS_CONST) {
  33127. function_name = EX_VAR(opline->op2.var);
  33128. }
  33129. zend_invalid_method_call(object, function_name);
  33130. HANDLE_EXCEPTION();
  33131. }
  33132. } while (0);
  33133. }
  33134. called_scope = obj->ce;
  33135. if (IS_CV == IS_CONST &&
  33136. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  33137. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  33138. } else {
  33139. zend_object *orig_obj = obj;
  33140. if (IS_CV == IS_CONST) {
  33141. function_name = EX_VAR(opline->op2.var);
  33142. }
  33143. /* First, locate the function. */
  33144. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  33145. if (UNEXPECTED(fbc == NULL)) {
  33146. if (EXPECTED(!EG(exception))) {
  33147. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  33148. }
  33149. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  33150. zend_objects_store_del(orig_obj);
  33151. }
  33152. HANDLE_EXCEPTION();
  33153. }
  33154. if (IS_CV == IS_CONST &&
  33155. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  33156. EXPECTED(obj == orig_obj)) {
  33157. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  33158. }
  33159. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  33160. GC_ADDREF(obj); /* For $this pointer */
  33161. if (GC_DELREF(orig_obj) == 0) {
  33162. zend_objects_store_del(orig_obj);
  33163. }
  33164. }
  33165. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  33166. init_func_run_time_cache(&fbc->op_array);
  33167. }
  33168. }
  33169. if (IS_CV != IS_CONST) {
  33170. }
  33171. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  33172. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  33173. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  33174. zend_objects_store_del(obj);
  33175. if (UNEXPECTED(EG(exception))) {
  33176. HANDLE_EXCEPTION();
  33177. }
  33178. }
  33179. /* call static method */
  33180. obj = (zend_object*)called_scope;
  33181. call_info = ZEND_CALL_NESTED_FUNCTION;
  33182. } else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  33183. if (IS_UNUSED == IS_CV) {
  33184. GC_ADDREF(obj); /* For $this pointer */
  33185. }
  33186. /* CV may be changed indirectly (e.g. when it's a reference) */
  33187. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  33188. }
  33189. call = zend_vm_stack_push_call_frame(call_info,
  33190. fbc, opline->extended_value, obj);
  33191. call->prev_execute_data = EX(call);
  33192. EX(call) = call;
  33193. ZEND_VM_NEXT_OPCODE();
  33194. }
  33195. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33196. {
  33197. USE_OPLINE
  33198. zval *function_name;
  33199. zend_class_entry *ce;
  33200. uint32_t call_info;
  33201. zend_function *fbc;
  33202. zend_execute_data *call;
  33203. SAVE_OPLINE();
  33204. if (IS_UNUSED == IS_CONST) {
  33205. /* no function found. try a static method in class */
  33206. ce = CACHED_PTR(opline->result.num);
  33207. if (UNEXPECTED(ce == NULL)) {
  33208. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  33209. if (UNEXPECTED(ce == NULL)) {
  33210. HANDLE_EXCEPTION();
  33211. }
  33212. if (IS_CV != IS_CONST) {
  33213. CACHE_PTR(opline->result.num, ce);
  33214. }
  33215. }
  33216. } else if (IS_UNUSED == IS_UNUSED) {
  33217. ce = zend_fetch_class(NULL, opline->op1.num);
  33218. if (UNEXPECTED(ce == NULL)) {
  33219. HANDLE_EXCEPTION();
  33220. }
  33221. } else {
  33222. ce = Z_CE_P(EX_VAR(opline->op1.var));
  33223. }
  33224. if (IS_UNUSED == IS_CONST &&
  33225. IS_CV == IS_CONST &&
  33226. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  33227. /* nothing to do */
  33228. } else if (IS_UNUSED != IS_CONST &&
  33229. IS_CV == IS_CONST &&
  33230. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  33231. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  33232. } else if (IS_CV != IS_UNUSED) {
  33233. function_name = EX_VAR(opline->op2.var);
  33234. if (IS_CV != IS_CONST) {
  33235. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  33236. do {
  33237. if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  33238. function_name = Z_REFVAL_P(function_name);
  33239. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  33240. break;
  33241. }
  33242. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  33243. ZVAL_UNDEFINED_OP2();
  33244. if (UNEXPECTED(EG(exception) != NULL)) {
  33245. HANDLE_EXCEPTION();
  33246. }
  33247. }
  33248. zend_throw_error(NULL, "Method name must be a string");
  33249. HANDLE_EXCEPTION();
  33250. } while (0);
  33251. }
  33252. }
  33253. if (ce->get_static_method) {
  33254. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  33255. } else {
  33256. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  33257. }
  33258. if (UNEXPECTED(fbc == NULL)) {
  33259. if (EXPECTED(!EG(exception))) {
  33260. zend_undefined_method(ce, Z_STR_P(function_name));
  33261. }
  33262. HANDLE_EXCEPTION();
  33263. }
  33264. if (IS_CV == IS_CONST &&
  33265. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  33266. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  33267. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  33268. }
  33269. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  33270. init_func_run_time_cache(&fbc->op_array);
  33271. }
  33272. if (IS_CV != IS_CONST) {
  33273. }
  33274. } else {
  33275. if (UNEXPECTED(ce->constructor == NULL)) {
  33276. zend_throw_error(NULL, "Cannot call constructor");
  33277. HANDLE_EXCEPTION();
  33278. }
  33279. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  33280. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  33281. HANDLE_EXCEPTION();
  33282. }
  33283. fbc = ce->constructor;
  33284. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  33285. init_func_run_time_cache(&fbc->op_array);
  33286. }
  33287. }
  33288. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  33289. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  33290. ce = (zend_class_entry*)Z_OBJ(EX(This));
  33291. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  33292. } else {
  33293. zend_non_static_method_call(fbc);
  33294. HANDLE_EXCEPTION();
  33295. }
  33296. } else {
  33297. /* previous opcode is ZEND_FETCH_CLASS */
  33298. if (IS_UNUSED == IS_UNUSED
  33299. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  33300. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  33301. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  33302. ce = Z_OBJCE(EX(This));
  33303. } else {
  33304. ce = Z_CE(EX(This));
  33305. }
  33306. }
  33307. call_info = ZEND_CALL_NESTED_FUNCTION;
  33308. }
  33309. call = zend_vm_stack_push_call_frame(call_info,
  33310. fbc, opline->extended_value, ce);
  33311. call->prev_execute_data = EX(call);
  33312. EX(call) = call;
  33313. ZEND_VM_NEXT_OPCODE();
  33314. }
  33315. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33316. {
  33317. zval *array;
  33318. uint32_t size;
  33319. USE_OPLINE
  33320. array = EX_VAR(opline->result.var);
  33321. if (IS_UNUSED != IS_UNUSED) {
  33322. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  33323. ZVAL_ARR(array, zend_new_array(size));
  33324. /* Explicitly initialize array as not-packed if flag is set */
  33325. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  33326. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  33327. }
  33328. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33329. } else {
  33330. ZVAL_ARR(array, zend_new_array(0));
  33331. ZEND_VM_NEXT_OPCODE();
  33332. }
  33333. }
  33334. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33335. {
  33336. USE_OPLINE
  33337. zval *container;
  33338. zval *offset;
  33339. zend_string *name, *tmp_name;
  33340. SAVE_OPLINE();
  33341. container = &EX(This);
  33342. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  33343. do {
  33344. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  33345. if (Z_ISREF_P(container)) {
  33346. container = Z_REFVAL_P(container);
  33347. if (Z_TYPE_P(container) != IS_OBJECT) {
  33348. if (IS_UNUSED == IS_CV
  33349. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  33350. ZVAL_UNDEFINED_OP1();
  33351. }
  33352. break;
  33353. }
  33354. } else {
  33355. break;
  33356. }
  33357. }
  33358. if (IS_CV == IS_CONST) {
  33359. name = Z_STR_P(offset);
  33360. } else {
  33361. name = zval_try_get_tmp_string(offset, &tmp_name);
  33362. if (UNEXPECTED(!name)) {
  33363. break;
  33364. }
  33365. }
  33366. Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  33367. if (IS_CV != IS_CONST) {
  33368. zend_tmp_string_release(tmp_name);
  33369. }
  33370. } while (0);
  33371. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33372. }
  33373. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33374. {
  33375. USE_OPLINE
  33376. zval *container;
  33377. int result;
  33378. zval *offset;
  33379. zend_string *name, *tmp_name;
  33380. SAVE_OPLINE();
  33381. container = &EX(This);
  33382. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  33383. if (IS_UNUSED == IS_CONST ||
  33384. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  33385. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  33386. container = Z_REFVAL_P(container);
  33387. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  33388. result = (opline->extended_value & ZEND_ISEMPTY);
  33389. goto isset_object_finish;
  33390. }
  33391. } else {
  33392. result = (opline->extended_value & ZEND_ISEMPTY);
  33393. goto isset_object_finish;
  33394. }
  33395. }
  33396. if (IS_CV == IS_CONST) {
  33397. name = Z_STR_P(offset);
  33398. } else {
  33399. name = zval_try_get_tmp_string(offset, &tmp_name);
  33400. if (UNEXPECTED(!name)) {
  33401. result = 0;
  33402. goto isset_object_finish;
  33403. }
  33404. }
  33405. result =
  33406. (opline->extended_value & ZEND_ISEMPTY) ^
  33407. Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  33408. if (IS_CV != IS_CONST) {
  33409. zend_tmp_string_release(tmp_name);
  33410. }
  33411. isset_object_finish:
  33412. ZEND_VM_SMART_BRANCH(result, 1);
  33413. }
  33414. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33415. {
  33416. USE_OPLINE
  33417. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  33418. SAVE_OPLINE();
  33419. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  33420. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33421. }
  33422. /* Destroy the previously yielded value */
  33423. zval_ptr_dtor(&generator->value);
  33424. /* Destroy the previously yielded key */
  33425. zval_ptr_dtor(&generator->key);
  33426. /* Set the new yielded value */
  33427. if (IS_UNUSED != IS_UNUSED) {
  33428. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  33429. /* Constants and temporary variables aren't yieldable by reference,
  33430. * but we still allow them with a notice. */
  33431. if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
  33432. zval *value;
  33433. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  33434. value = NULL;
  33435. ZVAL_COPY_VALUE(&generator->value, value);
  33436. if (IS_UNUSED == IS_CONST) {
  33437. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  33438. Z_ADDREF(generator->value);
  33439. }
  33440. }
  33441. } else {
  33442. zval *value_ptr = NULL;
  33443. /* If a function call result is yielded and the function did
  33444. * not return by reference we throw a notice. */
  33445. do {
  33446. if (IS_UNUSED == IS_VAR) {
  33447. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  33448. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  33449. && !Z_ISREF_P(value_ptr)) {
  33450. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  33451. ZVAL_COPY(&generator->value, value_ptr);
  33452. break;
  33453. }
  33454. }
  33455. if (Z_ISREF_P(value_ptr)) {
  33456. Z_ADDREF_P(value_ptr);
  33457. } else {
  33458. ZVAL_MAKE_REF_EX(value_ptr, 2);
  33459. }
  33460. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  33461. } while (0);
  33462. }
  33463. } else {
  33464. zval *value = NULL;
  33465. /* Consts, temporary variables and references need copying */
  33466. if (IS_UNUSED == IS_CONST) {
  33467. ZVAL_COPY_VALUE(&generator->value, value);
  33468. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  33469. Z_ADDREF(generator->value);
  33470. }
  33471. } else if (IS_UNUSED == IS_TMP_VAR) {
  33472. ZVAL_COPY_VALUE(&generator->value, value);
  33473. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  33474. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  33475. } else {
  33476. ZVAL_COPY_VALUE(&generator->value, value);
  33477. if (IS_UNUSED == IS_CV) {
  33478. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  33479. }
  33480. }
  33481. }
  33482. } else {
  33483. /* If no value was specified yield null */
  33484. ZVAL_NULL(&generator->value);
  33485. }
  33486. /* Set the new yielded key */
  33487. if (IS_CV != IS_UNUSED) {
  33488. zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  33489. if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  33490. key = Z_REFVAL_P(key);
  33491. }
  33492. ZVAL_COPY(&generator->key, key);
  33493. if (Z_TYPE(generator->key) == IS_LONG
  33494. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  33495. ) {
  33496. generator->largest_used_integer_key = Z_LVAL(generator->key);
  33497. }
  33498. } else {
  33499. /* If no key was specified we use auto-increment keys */
  33500. generator->largest_used_integer_key++;
  33501. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  33502. }
  33503. if (RETURN_VALUE_USED(opline)) {
  33504. /* If the return value of yield is used set the send
  33505. * target and initialize it to NULL */
  33506. generator->send_target = EX_VAR(opline->result.var);
  33507. ZVAL_NULL(generator->send_target);
  33508. } else {
  33509. generator->send_target = NULL;
  33510. }
  33511. /* We increment to the next op, so we are at the correct position when the
  33512. * generator is resumed. */
  33513. ZEND_VM_INC_OPCODE();
  33514. /* The GOTO VM uses a local opline variable. We need to set the opline
  33515. * variable in execute_data so we don't resume at an old position. */
  33516. SAVE_OPLINE();
  33517. ZEND_VM_RETURN();
  33518. }
  33519. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33520. {
  33521. USE_OPLINE
  33522. zval *val;
  33523. val = EX_VAR(opline->op1.var);
  33524. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  33525. ZVAL_FALSE(EX_VAR(opline->result.var));
  33526. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  33527. /* The result and op1 can be the same cv zval */
  33528. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  33529. ZVAL_TRUE(EX_VAR(opline->result.var));
  33530. if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  33531. SAVE_OPLINE();
  33532. ZVAL_UNDEFINED_OP1();
  33533. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33534. }
  33535. } else {
  33536. SAVE_OPLINE();
  33537. ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
  33538. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33539. }
  33540. ZEND_VM_NEXT_OPCODE();
  33541. }
  33542. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
  33543. {
  33544. USE_OPLINE
  33545. zval *var_ptr;
  33546. var_ptr = EX_VAR(opline->op1.var);
  33547. SAVE_OPLINE();
  33548. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  33549. ZVAL_UNDEFINED_OP1();
  33550. ZVAL_NULL(var_ptr);
  33551. }
  33552. do {
  33553. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  33554. zend_reference *ref = Z_REF_P(var_ptr);
  33555. var_ptr = Z_REFVAL_P(var_ptr);
  33556. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  33557. zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
  33558. break;
  33559. }
  33560. }
  33561. increment_function(var_ptr);
  33562. } while (0);
  33563. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  33564. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  33565. }
  33566. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33567. }
  33568. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33569. {
  33570. USE_OPLINE
  33571. zval *var_ptr;
  33572. var_ptr = EX_VAR(opline->op1.var);
  33573. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  33574. fast_long_increment_function(var_ptr);
  33575. if (UNEXPECTED(0)) {
  33576. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  33577. }
  33578. ZEND_VM_NEXT_OPCODE();
  33579. }
  33580. ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33581. }
  33582. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33583. {
  33584. USE_OPLINE
  33585. zval *var_ptr;
  33586. var_ptr = EX_VAR(opline->op1.var);
  33587. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  33588. fast_long_increment_function(var_ptr);
  33589. if (UNEXPECTED(1)) {
  33590. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  33591. }
  33592. ZEND_VM_NEXT_OPCODE();
  33593. }
  33594. ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33595. }
  33596. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
  33597. {
  33598. USE_OPLINE
  33599. zval *var_ptr;
  33600. var_ptr = EX_VAR(opline->op1.var);
  33601. SAVE_OPLINE();
  33602. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  33603. ZVAL_UNDEFINED_OP1();
  33604. ZVAL_NULL(var_ptr);
  33605. }
  33606. do {
  33607. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  33608. zend_reference *ref = Z_REF_P(var_ptr);
  33609. var_ptr = Z_REFVAL_P(var_ptr);
  33610. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  33611. zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
  33612. break;
  33613. }
  33614. }
  33615. decrement_function(var_ptr);
  33616. } while (0);
  33617. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  33618. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  33619. }
  33620. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33621. }
  33622. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33623. {
  33624. USE_OPLINE
  33625. zval *var_ptr;
  33626. var_ptr = EX_VAR(opline->op1.var);
  33627. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  33628. fast_long_decrement_function(var_ptr);
  33629. if (UNEXPECTED(0)) {
  33630. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  33631. }
  33632. ZEND_VM_NEXT_OPCODE();
  33633. }
  33634. ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33635. }
  33636. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33637. {
  33638. USE_OPLINE
  33639. zval *var_ptr;
  33640. var_ptr = EX_VAR(opline->op1.var);
  33641. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  33642. fast_long_decrement_function(var_ptr);
  33643. if (UNEXPECTED(1)) {
  33644. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  33645. }
  33646. ZEND_VM_NEXT_OPCODE();
  33647. }
  33648. ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33649. }
  33650. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
  33651. {
  33652. USE_OPLINE
  33653. zval *var_ptr;
  33654. var_ptr = EX_VAR(opline->op1.var);
  33655. SAVE_OPLINE();
  33656. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  33657. ZVAL_UNDEFINED_OP1();
  33658. ZVAL_NULL(var_ptr);
  33659. }
  33660. do {
  33661. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  33662. zend_reference *ref = Z_REF_P(var_ptr);
  33663. var_ptr = Z_REFVAL_P(var_ptr);
  33664. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  33665. zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
  33666. break;
  33667. }
  33668. }
  33669. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  33670. increment_function(var_ptr);
  33671. } while (0);
  33672. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33673. }
  33674. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33675. {
  33676. USE_OPLINE
  33677. zval *var_ptr;
  33678. var_ptr = EX_VAR(opline->op1.var);
  33679. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  33680. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  33681. fast_long_increment_function(var_ptr);
  33682. ZEND_VM_NEXT_OPCODE();
  33683. }
  33684. ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33685. }
  33686. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
  33687. {
  33688. USE_OPLINE
  33689. zval *var_ptr;
  33690. var_ptr = EX_VAR(opline->op1.var);
  33691. SAVE_OPLINE();
  33692. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  33693. ZVAL_UNDEFINED_OP1();
  33694. ZVAL_NULL(var_ptr);
  33695. }
  33696. do {
  33697. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  33698. zend_reference *ref = Z_REF_P(var_ptr);
  33699. var_ptr = Z_REFVAL_P(var_ptr);
  33700. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  33701. zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
  33702. break;
  33703. }
  33704. }
  33705. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  33706. decrement_function(var_ptr);
  33707. } while (0);
  33708. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33709. }
  33710. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33711. {
  33712. USE_OPLINE
  33713. zval *var_ptr;
  33714. var_ptr = EX_VAR(opline->op1.var);
  33715. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  33716. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  33717. fast_long_decrement_function(var_ptr);
  33718. ZEND_VM_NEXT_OPCODE();
  33719. }
  33720. ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33721. }
  33722. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33723. {
  33724. USE_OPLINE
  33725. zval *z;
  33726. SAVE_OPLINE();
  33727. z = EX_VAR(opline->op1.var);
  33728. if (Z_TYPE_P(z) == IS_STRING) {
  33729. zend_string *str = Z_STR_P(z);
  33730. if (ZSTR_LEN(str) != 0) {
  33731. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  33732. }
  33733. } else {
  33734. zend_string *str = zval_get_string_func(z);
  33735. if (ZSTR_LEN(str) != 0) {
  33736. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  33737. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
  33738. ZVAL_UNDEFINED_OP1();
  33739. }
  33740. zend_string_release_ex(str, 0);
  33741. }
  33742. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33743. }
  33744. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33745. {
  33746. USE_OPLINE
  33747. zval *val;
  33748. zend_uchar op1_type;
  33749. val = EX_VAR(opline->op1.var);
  33750. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  33751. ZEND_VM_NEXT_OPCODE();
  33752. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  33753. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  33754. SAVE_OPLINE();
  33755. ZVAL_UNDEFINED_OP1();
  33756. if (UNEXPECTED(EG(exception))) {
  33757. HANDLE_EXCEPTION();
  33758. }
  33759. }
  33760. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  33761. }
  33762. SAVE_OPLINE();
  33763. op1_type = IS_CV;
  33764. if (i_zend_is_true(val)) {
  33765. opline++;
  33766. } else {
  33767. opline = OP_JMP_ADDR(opline, opline->op2);
  33768. }
  33769. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  33770. zval_ptr_dtor_nogc(val);
  33771. }
  33772. ZEND_VM_JMP(opline);
  33773. }
  33774. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33775. {
  33776. USE_OPLINE
  33777. zval *val;
  33778. zend_uchar op1_type;
  33779. val = EX_VAR(opline->op1.var);
  33780. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  33781. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  33782. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  33783. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  33784. SAVE_OPLINE();
  33785. ZVAL_UNDEFINED_OP1();
  33786. if (UNEXPECTED(EG(exception))) {
  33787. HANDLE_EXCEPTION();
  33788. }
  33789. }
  33790. ZEND_VM_NEXT_OPCODE();
  33791. }
  33792. SAVE_OPLINE();
  33793. op1_type = IS_CV;
  33794. if (i_zend_is_true(val)) {
  33795. opline = OP_JMP_ADDR(opline, opline->op2);
  33796. } else {
  33797. opline++;
  33798. }
  33799. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  33800. zval_ptr_dtor_nogc(val);
  33801. }
  33802. ZEND_VM_JMP(opline);
  33803. }
  33804. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33805. {
  33806. USE_OPLINE
  33807. zval *val;
  33808. zend_uchar op1_type;
  33809. val = EX_VAR(opline->op1.var);
  33810. if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
  33811. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  33812. ZEND_VM_CONTINUE();
  33813. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  33814. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  33815. SAVE_OPLINE();
  33816. ZVAL_UNDEFINED_OP1();
  33817. if (UNEXPECTED(EG(exception))) {
  33818. HANDLE_EXCEPTION();
  33819. }
  33820. }
  33821. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  33822. }
  33823. SAVE_OPLINE();
  33824. op1_type = IS_CV;
  33825. if (i_zend_is_true(val)) {
  33826. opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
  33827. } else {
  33828. opline = OP_JMP_ADDR(opline, opline->op2);
  33829. }
  33830. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  33831. zval_ptr_dtor_nogc(val);
  33832. }
  33833. ZEND_VM_JMP(opline);
  33834. }
  33835. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33836. {
  33837. USE_OPLINE
  33838. zval *val;
  33839. bool ret;
  33840. val = EX_VAR(opline->op1.var);
  33841. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  33842. ZVAL_TRUE(EX_VAR(opline->result.var));
  33843. ZEND_VM_NEXT_OPCODE();
  33844. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  33845. ZVAL_FALSE(EX_VAR(opline->result.var));
  33846. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  33847. SAVE_OPLINE();
  33848. ZVAL_UNDEFINED_OP1();
  33849. if (UNEXPECTED(EG(exception))) {
  33850. HANDLE_EXCEPTION();
  33851. }
  33852. }
  33853. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  33854. }
  33855. SAVE_OPLINE();
  33856. ret = i_zend_is_true(val);
  33857. if (ret) {
  33858. ZVAL_TRUE(EX_VAR(opline->result.var));
  33859. opline++;
  33860. } else {
  33861. ZVAL_FALSE(EX_VAR(opline->result.var));
  33862. opline = OP_JMP_ADDR(opline, opline->op2);
  33863. }
  33864. ZEND_VM_JMP(opline);
  33865. }
  33866. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33867. {
  33868. USE_OPLINE
  33869. zval *val;
  33870. bool ret;
  33871. val = EX_VAR(opline->op1.var);
  33872. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  33873. ZVAL_TRUE(EX_VAR(opline->result.var));
  33874. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  33875. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  33876. ZVAL_FALSE(EX_VAR(opline->result.var));
  33877. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  33878. SAVE_OPLINE();
  33879. ZVAL_UNDEFINED_OP1();
  33880. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33881. } else {
  33882. ZEND_VM_NEXT_OPCODE();
  33883. }
  33884. }
  33885. SAVE_OPLINE();
  33886. ret = i_zend_is_true(val);
  33887. if (ret) {
  33888. ZVAL_TRUE(EX_VAR(opline->result.var));
  33889. opline = OP_JMP_ADDR(opline, opline->op2);
  33890. } else {
  33891. ZVAL_FALSE(EX_VAR(opline->result.var));
  33892. opline++;
  33893. }
  33894. ZEND_VM_JMP(opline);
  33895. }
  33896. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33897. {
  33898. USE_OPLINE
  33899. zval *retval_ptr;
  33900. zval *return_value;
  33901. retval_ptr = EX_VAR(opline->op1.var);
  33902. return_value = EX(return_value);
  33903. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  33904. SAVE_OPLINE();
  33905. retval_ptr = ZVAL_UNDEFINED_OP1();
  33906. if (return_value) {
  33907. ZVAL_NULL(return_value);
  33908. }
  33909. } else if (!return_value) {
  33910. if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
  33911. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  33912. SAVE_OPLINE();
  33913. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  33914. }
  33915. }
  33916. } else {
  33917. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  33918. ZVAL_COPY_VALUE(return_value, retval_ptr);
  33919. if (IS_CV == IS_CONST) {
  33920. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  33921. Z_ADDREF_P(return_value);
  33922. }
  33923. }
  33924. } else if (IS_CV == IS_CV) {
  33925. do {
  33926. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  33927. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  33928. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  33929. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  33930. ZVAL_COPY_VALUE(return_value, retval_ptr);
  33931. if (GC_MAY_LEAK(ref)) {
  33932. SAVE_OPLINE();
  33933. gc_possible_root(ref);
  33934. }
  33935. ZVAL_NULL(retval_ptr);
  33936. break;
  33937. } else {
  33938. Z_ADDREF_P(retval_ptr);
  33939. }
  33940. } else {
  33941. retval_ptr = Z_REFVAL_P(retval_ptr);
  33942. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  33943. Z_ADDREF_P(retval_ptr);
  33944. }
  33945. }
  33946. }
  33947. ZVAL_COPY_VALUE(return_value, retval_ptr);
  33948. } while (0);
  33949. } else /* if (IS_CV == IS_VAR) */ {
  33950. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  33951. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  33952. retval_ptr = Z_REFVAL_P(retval_ptr);
  33953. ZVAL_COPY_VALUE(return_value, retval_ptr);
  33954. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  33955. efree_size(ref, sizeof(zend_reference));
  33956. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  33957. Z_ADDREF_P(retval_ptr);
  33958. }
  33959. } else {
  33960. ZVAL_COPY_VALUE(return_value, retval_ptr);
  33961. }
  33962. }
  33963. }
  33964. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33965. }
  33966. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33967. {
  33968. USE_OPLINE
  33969. zval *retval_ptr;
  33970. zval *return_value;
  33971. SAVE_OPLINE();
  33972. return_value = EX(return_value);
  33973. do {
  33974. if ((IS_CV & (IS_CONST|IS_TMP_VAR)) ||
  33975. (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
  33976. /* Not supposed to happen, but we'll allow it */
  33977. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  33978. retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  33979. if (!return_value) {
  33980. } else {
  33981. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  33982. ZVAL_COPY_VALUE(return_value, retval_ptr);
  33983. break;
  33984. }
  33985. ZVAL_NEW_REF(return_value, retval_ptr);
  33986. if (IS_CV == IS_CONST) {
  33987. Z_TRY_ADDREF_P(retval_ptr);
  33988. }
  33989. }
  33990. break;
  33991. }
  33992. retval_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  33993. if (IS_CV == IS_VAR) {
  33994. ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
  33995. if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
  33996. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  33997. if (return_value) {
  33998. ZVAL_NEW_REF(return_value, retval_ptr);
  33999. } else {
  34000. }
  34001. break;
  34002. }
  34003. }
  34004. if (return_value) {
  34005. if (Z_ISREF_P(retval_ptr)) {
  34006. Z_ADDREF_P(retval_ptr);
  34007. } else {
  34008. ZVAL_MAKE_REF_EX(retval_ptr, 2);
  34009. }
  34010. ZVAL_REF(return_value, Z_REF_P(retval_ptr));
  34011. }
  34012. } while (0);
  34013. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34014. }
  34015. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34016. {
  34017. USE_OPLINE
  34018. zval *retval;
  34019. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  34020. SAVE_OPLINE();
  34021. retval = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34022. /* Copy return value into generator->retval */
  34023. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  34024. ZVAL_COPY_VALUE(&generator->retval, retval);
  34025. if (IS_CV == IS_CONST) {
  34026. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
  34027. Z_ADDREF(generator->retval);
  34028. }
  34029. }
  34030. } else if (IS_CV == IS_CV) {
  34031. ZVAL_COPY_DEREF(&generator->retval, retval);
  34032. } else /* if (IS_CV == IS_VAR) */ {
  34033. if (UNEXPECTED(Z_ISREF_P(retval))) {
  34034. zend_refcounted *ref = Z_COUNTED_P(retval);
  34035. retval = Z_REFVAL_P(retval);
  34036. ZVAL_COPY_VALUE(&generator->retval, retval);
  34037. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  34038. efree_size(ref, sizeof(zend_reference));
  34039. } else if (Z_OPT_REFCOUNTED_P(retval)) {
  34040. Z_ADDREF_P(retval);
  34041. }
  34042. } else {
  34043. ZVAL_COPY_VALUE(&generator->retval, retval);
  34044. }
  34045. }
  34046. /* Close the generator to free up resources */
  34047. zend_generator_close(generator, 1);
  34048. /* Pass execution back to handling code */
  34049. ZEND_VM_RETURN();
  34050. }
  34051. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34052. {
  34053. USE_OPLINE
  34054. zval *value;
  34055. SAVE_OPLINE();
  34056. value = EX_VAR(opline->op1.var);
  34057. do {
  34058. if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
  34059. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  34060. value = Z_REFVAL_P(value);
  34061. if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
  34062. break;
  34063. }
  34064. }
  34065. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  34066. ZVAL_UNDEFINED_OP1();
  34067. if (UNEXPECTED(EG(exception) != NULL)) {
  34068. HANDLE_EXCEPTION();
  34069. }
  34070. }
  34071. zend_throw_error(NULL, "Can only throw objects");
  34072. HANDLE_EXCEPTION();
  34073. }
  34074. } while (0);
  34075. zend_exception_save();
  34076. Z_TRY_ADDREF_P(value);
  34077. zend_throw_exception_object(value);
  34078. zend_exception_restore();
  34079. HANDLE_EXCEPTION();
  34080. }
  34081. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34082. {
  34083. USE_OPLINE
  34084. zval *arg, *param;
  34085. SAVE_OPLINE();
  34086. arg = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34087. param = ZEND_CALL_VAR(EX(call), opline->result.var);
  34088. if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
  34089. zend_param_must_be_ref(EX(call)->func, opline->op2.num);
  34090. Z_TRY_ADDREF_P(arg);
  34091. ZVAL_NEW_REF(param, arg);
  34092. } else {
  34093. ZVAL_COPY(param, arg);
  34094. }
  34095. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34096. }
  34097. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34098. {
  34099. USE_OPLINE
  34100. zval *val;
  34101. val = EX_VAR(opline->op1.var);
  34102. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  34103. ZVAL_TRUE(EX_VAR(opline->result.var));
  34104. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  34105. /* The result and op1 can be the same cv zval */
  34106. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  34107. ZVAL_FALSE(EX_VAR(opline->result.var));
  34108. if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  34109. SAVE_OPLINE();
  34110. ZVAL_UNDEFINED_OP1();
  34111. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34112. }
  34113. } else {
  34114. SAVE_OPLINE();
  34115. ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
  34116. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34117. }
  34118. ZEND_VM_NEXT_OPCODE();
  34119. }
  34120. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34121. {
  34122. USE_OPLINE
  34123. zval *obj;
  34124. zend_object *zobj;
  34125. zend_class_entry *ce, *scope;
  34126. zend_function *clone;
  34127. zend_object_clone_obj_t clone_call;
  34128. SAVE_OPLINE();
  34129. obj = EX_VAR(opline->op1.var);
  34130. do {
  34131. if (IS_CV == IS_CONST ||
  34132. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
  34133. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
  34134. obj = Z_REFVAL_P(obj);
  34135. if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
  34136. break;
  34137. }
  34138. }
  34139. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34140. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
  34141. ZVAL_UNDEFINED_OP1();
  34142. if (UNEXPECTED(EG(exception) != NULL)) {
  34143. HANDLE_EXCEPTION();
  34144. }
  34145. }
  34146. zend_throw_error(NULL, "__clone method called on non-object");
  34147. HANDLE_EXCEPTION();
  34148. }
  34149. } while (0);
  34150. zobj = Z_OBJ_P(obj);
  34151. ce = zobj->ce;
  34152. clone = ce->clone;
  34153. clone_call = zobj->handlers->clone_obj;
  34154. if (UNEXPECTED(clone_call == NULL)) {
  34155. zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
  34156. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34157. HANDLE_EXCEPTION();
  34158. }
  34159. if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
  34160. scope = EX(func)->op_array.scope;
  34161. if (clone->common.scope != scope) {
  34162. if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
  34163. || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
  34164. zend_wrong_clone_call(clone, scope);
  34165. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34166. HANDLE_EXCEPTION();
  34167. }
  34168. }
  34169. }
  34170. ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
  34171. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34172. }
  34173. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34174. {
  34175. USE_OPLINE
  34176. zval *expr;
  34177. zval *result = EX_VAR(opline->result.var);
  34178. HashTable *ht;
  34179. SAVE_OPLINE();
  34180. expr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34181. switch (opline->extended_value) {
  34182. case IS_LONG:
  34183. ZVAL_LONG(result, zval_get_long(expr));
  34184. break;
  34185. case IS_DOUBLE:
  34186. ZVAL_DOUBLE(result, zval_get_double(expr));
  34187. break;
  34188. case IS_STRING:
  34189. ZVAL_STR(result, zval_get_string(expr));
  34190. break;
  34191. default:
  34192. ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
  34193. if (IS_CV & (IS_VAR|IS_CV)) {
  34194. ZVAL_DEREF(expr);
  34195. }
  34196. /* If value is already of correct type, return it directly */
  34197. if (Z_TYPE_P(expr) == opline->extended_value) {
  34198. ZVAL_COPY_VALUE(result, expr);
  34199. if (IS_CV == IS_CONST) {
  34200. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  34201. } else if (IS_CV != IS_TMP_VAR) {
  34202. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  34203. }
  34204. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34205. }
  34206. if (opline->extended_value == IS_ARRAY) {
  34207. if (IS_CV == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
  34208. if (Z_TYPE_P(expr) != IS_NULL) {
  34209. ZVAL_ARR(result, zend_new_array(1));
  34210. expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
  34211. if (IS_CV == IS_CONST) {
  34212. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  34213. } else {
  34214. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  34215. }
  34216. } else {
  34217. ZVAL_EMPTY_ARRAY(result);
  34218. }
  34219. } else if (Z_OBJ_P(expr)->properties == NULL
  34220. && Z_OBJ_HT_P(expr)->get_properties_for == NULL
  34221. && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
  34222. /* Optimized version without rebuilding properties HashTable */
  34223. ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
  34224. } else {
  34225. HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
  34226. if (obj_ht) {
  34227. /* fast copy */
  34228. ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
  34229. (Z_OBJCE_P(expr)->default_properties_count ||
  34230. Z_OBJ_P(expr)->handlers != &std_object_handlers ||
  34231. GC_IS_RECURSIVE(obj_ht))));
  34232. zend_release_properties(obj_ht);
  34233. } else {
  34234. ZVAL_EMPTY_ARRAY(result);
  34235. }
  34236. }
  34237. } else {
  34238. ZEND_ASSERT(opline->extended_value == IS_OBJECT);
  34239. ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
  34240. if (Z_TYPE_P(expr) == IS_ARRAY) {
  34241. ht = zend_symtable_to_proptable(Z_ARR_P(expr));
  34242. if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
  34243. /* TODO: try not to duplicate immutable arrays as well ??? */
  34244. ht = zend_array_dup(ht);
  34245. }
  34246. Z_OBJ_P(result)->properties = ht;
  34247. } else if (Z_TYPE_P(expr) != IS_NULL) {
  34248. Z_OBJ_P(result)->properties = ht = zend_new_array(1);
  34249. expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
  34250. if (IS_CV == IS_CONST) {
  34251. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  34252. } else {
  34253. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  34254. }
  34255. }
  34256. }
  34257. }
  34258. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34259. }
  34260. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34261. {
  34262. USE_OPLINE
  34263. zend_op_array *new_op_array;
  34264. zval *inc_filename;
  34265. SAVE_OPLINE();
  34266. inc_filename = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34267. new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
  34268. if (UNEXPECTED(EG(exception) != NULL)) {
  34269. if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
  34270. destroy_op_array(new_op_array);
  34271. efree_size(new_op_array, sizeof(zend_op_array));
  34272. }
  34273. UNDEF_RESULT();
  34274. HANDLE_EXCEPTION();
  34275. } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
  34276. if (RETURN_VALUE_USED(opline)) {
  34277. ZVAL_TRUE(EX_VAR(opline->result.var));
  34278. }
  34279. } else if (EXPECTED(new_op_array != NULL)) {
  34280. zval *return_value = NULL;
  34281. zend_execute_data *call;
  34282. if (RETURN_VALUE_USED(opline)) {
  34283. return_value = EX_VAR(opline->result.var);
  34284. }
  34285. new_op_array->scope = EX(func)->op_array.scope;
  34286. call = zend_vm_stack_push_call_frame(
  34287. (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
  34288. (zend_function*)new_op_array, 0,
  34289. Z_PTR(EX(This)));
  34290. if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
  34291. call->symbol_table = EX(symbol_table);
  34292. } else {
  34293. call->symbol_table = zend_rebuild_symbol_table();
  34294. }
  34295. call->prev_execute_data = execute_data;
  34296. i_init_code_execute_data(call, new_op_array, return_value);
  34297. if (EXPECTED(zend_execute_ex == execute_ex)) {
  34298. ZEND_VM_ENTER();
  34299. } else {
  34300. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  34301. zend_execute_ex(call);
  34302. zend_vm_stack_free_call_frame(call);
  34303. }
  34304. zend_destroy_static_vars(new_op_array);
  34305. destroy_op_array(new_op_array);
  34306. efree_size(new_op_array, sizeof(zend_op_array));
  34307. if (UNEXPECTED(EG(exception) != NULL)) {
  34308. zend_rethrow_exception(execute_data);
  34309. UNDEF_RESULT();
  34310. HANDLE_EXCEPTION();
  34311. }
  34312. } else if (RETURN_VALUE_USED(opline)) {
  34313. ZVAL_FALSE(EX_VAR(opline->result.var));
  34314. }
  34315. ZEND_VM_NEXT_OPCODE();
  34316. }
  34317. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34318. {
  34319. USE_OPLINE
  34320. zval *array_ptr, *result;
  34321. SAVE_OPLINE();
  34322. array_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34323. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  34324. result = EX_VAR(opline->result.var);
  34325. ZVAL_COPY_VALUE(result, array_ptr);
  34326. if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
  34327. Z_ADDREF_P(array_ptr);
  34328. }
  34329. Z_FE_POS_P(result) = 0;
  34330. ZEND_VM_NEXT_OPCODE();
  34331. } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  34332. zend_object *zobj = Z_OBJ_P(array_ptr);
  34333. if (!zobj->ce->get_iterator) {
  34334. HashTable *properties = zobj->properties;
  34335. if (properties) {
  34336. if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
  34337. if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
  34338. GC_DELREF(properties);
  34339. }
  34340. properties = zobj->properties = zend_array_dup(properties);
  34341. }
  34342. } else {
  34343. properties = zobj->handlers->get_properties(zobj);
  34344. }
  34345. result = EX_VAR(opline->result.var);
  34346. ZVAL_COPY_VALUE(result, array_ptr);
  34347. if (IS_CV != IS_TMP_VAR) {
  34348. Z_ADDREF_P(array_ptr);
  34349. }
  34350. if (zend_hash_num_elements(properties) == 0) {
  34351. Z_FE_ITER_P(result) = (uint32_t) -1;
  34352. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  34353. }
  34354. Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
  34355. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34356. } else {
  34357. bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
  34358. if (UNEXPECTED(EG(exception))) {
  34359. HANDLE_EXCEPTION();
  34360. } else if (is_empty) {
  34361. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  34362. } else {
  34363. ZEND_VM_NEXT_OPCODE();
  34364. }
  34365. }
  34366. } else {
  34367. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
  34368. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34369. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  34370. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  34371. }
  34372. }
  34373. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34374. {
  34375. USE_OPLINE
  34376. zval *array_ptr, *array_ref;
  34377. SAVE_OPLINE();
  34378. if (IS_CV == IS_VAR || IS_CV == IS_CV) {
  34379. array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34380. if (Z_ISREF_P(array_ref)) {
  34381. array_ptr = Z_REFVAL_P(array_ref);
  34382. }
  34383. } else {
  34384. array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34385. }
  34386. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  34387. if (IS_CV == IS_VAR || IS_CV == IS_CV) {
  34388. if (array_ptr == array_ref) {
  34389. ZVAL_NEW_REF(array_ref, array_ref);
  34390. array_ptr = Z_REFVAL_P(array_ref);
  34391. }
  34392. Z_ADDREF_P(array_ref);
  34393. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  34394. } else {
  34395. array_ref = EX_VAR(opline->result.var);
  34396. ZVAL_NEW_REF(array_ref, array_ptr);
  34397. array_ptr = Z_REFVAL_P(array_ref);
  34398. }
  34399. if (IS_CV == IS_CONST) {
  34400. ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
  34401. } else {
  34402. SEPARATE_ARRAY(array_ptr);
  34403. }
  34404. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
  34405. if (IS_CV == IS_VAR) {
  34406. }
  34407. ZEND_VM_NEXT_OPCODE();
  34408. } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  34409. if (!Z_OBJCE_P(array_ptr)->get_iterator) {
  34410. HashTable *properties;
  34411. if (IS_CV == IS_VAR || IS_CV == IS_CV) {
  34412. if (array_ptr == array_ref) {
  34413. ZVAL_NEW_REF(array_ref, array_ref);
  34414. array_ptr = Z_REFVAL_P(array_ref);
  34415. }
  34416. Z_ADDREF_P(array_ref);
  34417. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  34418. } else {
  34419. array_ptr = EX_VAR(opline->result.var);
  34420. ZVAL_COPY_VALUE(array_ptr, array_ref);
  34421. }
  34422. if (Z_OBJ_P(array_ptr)->properties
  34423. && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
  34424. if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
  34425. GC_DELREF(Z_OBJ_P(array_ptr)->properties);
  34426. }
  34427. Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
  34428. }
  34429. properties = Z_OBJPROP_P(array_ptr);
  34430. if (zend_hash_num_elements(properties) == 0) {
  34431. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
  34432. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  34433. }
  34434. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
  34435. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34436. } else {
  34437. bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
  34438. if (IS_CV == IS_VAR) {
  34439. } else {
  34440. }
  34441. if (UNEXPECTED(EG(exception))) {
  34442. HANDLE_EXCEPTION();
  34443. } else if (is_empty) {
  34444. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  34445. } else {
  34446. ZEND_VM_NEXT_OPCODE();
  34447. }
  34448. }
  34449. } else {
  34450. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
  34451. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34452. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  34453. if (IS_CV == IS_VAR) {
  34454. } else {
  34455. }
  34456. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  34457. }
  34458. }
  34459. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34460. {
  34461. USE_OPLINE
  34462. zval *value;
  34463. zend_reference *ref = NULL;
  34464. bool ret;
  34465. SAVE_OPLINE();
  34466. value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34467. if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
  34468. if (IS_CV == IS_VAR) {
  34469. ref = Z_REF_P(value);
  34470. }
  34471. value = Z_REFVAL_P(value);
  34472. }
  34473. ret = i_zend_is_true(value);
  34474. if (UNEXPECTED(EG(exception))) {
  34475. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34476. HANDLE_EXCEPTION();
  34477. }
  34478. if (ret) {
  34479. zval *result = EX_VAR(opline->result.var);
  34480. ZVAL_COPY_VALUE(result, value);
  34481. if (IS_CV == IS_CONST) {
  34482. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  34483. } else if (IS_CV == IS_CV) {
  34484. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  34485. } else if (IS_CV == IS_VAR && ref) {
  34486. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  34487. efree_size(ref, sizeof(zend_reference));
  34488. } else if (Z_OPT_REFCOUNTED_P(result)) {
  34489. Z_ADDREF_P(result);
  34490. }
  34491. }
  34492. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  34493. }
  34494. ZEND_VM_NEXT_OPCODE();
  34495. }
  34496. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34497. {
  34498. USE_OPLINE
  34499. zval *value;
  34500. zend_reference *ref = NULL;
  34501. SAVE_OPLINE();
  34502. value = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  34503. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  34504. if (IS_CV & IS_VAR) {
  34505. ref = Z_REF_P(value);
  34506. }
  34507. value = Z_REFVAL_P(value);
  34508. }
  34509. if (Z_TYPE_P(value) > IS_NULL) {
  34510. zval *result = EX_VAR(opline->result.var);
  34511. ZVAL_COPY_VALUE(result, value);
  34512. if (IS_CV == IS_CONST) {
  34513. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  34514. } else if (IS_CV == IS_CV) {
  34515. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  34516. } else if ((IS_CV & IS_VAR) && ref) {
  34517. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  34518. efree_size(ref, sizeof(zend_reference));
  34519. } else if (Z_OPT_REFCOUNTED_P(result)) {
  34520. Z_ADDREF_P(result);
  34521. }
  34522. }
  34523. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  34524. }
  34525. if ((IS_CV & IS_VAR) && ref) {
  34526. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  34527. efree_size(ref, sizeof(zend_reference));
  34528. }
  34529. }
  34530. ZEND_VM_NEXT_OPCODE();
  34531. }
  34532. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34533. {
  34534. USE_OPLINE
  34535. zval *val, *result;
  34536. val = EX_VAR(opline->op1.var);
  34537. if (Z_TYPE_P(val) > IS_NULL) {
  34538. do {
  34539. if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
  34540. val = Z_REFVAL_P(val);
  34541. if (Z_TYPE_P(val) <= IS_NULL) {
  34542. break;
  34543. }
  34544. }
  34545. ZEND_VM_NEXT_OPCODE();
  34546. } while (0);
  34547. }
  34548. result = EX_VAR(opline->result.var);
  34549. if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
  34550. ZVAL_NULL(result);
  34551. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
  34552. SAVE_OPLINE();
  34553. ZVAL_UNDEFINED_OP1();
  34554. if (UNEXPECTED(EG(exception) != NULL)) {
  34555. HANDLE_EXCEPTION();
  34556. }
  34557. }
  34558. } else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
  34559. ZVAL_FALSE(result);
  34560. } else {
  34561. ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
  34562. ZVAL_TRUE(result);
  34563. }
  34564. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  34565. }
  34566. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34567. {
  34568. USE_OPLINE
  34569. zval *value;
  34570. zval *result = EX_VAR(opline->result.var);
  34571. value = EX_VAR(opline->op1.var);
  34572. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  34573. SAVE_OPLINE();
  34574. ZVAL_UNDEFINED_OP1();
  34575. ZVAL_NULL(result);
  34576. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34577. }
  34578. if (IS_CV == IS_CV) {
  34579. ZVAL_COPY_DEREF(result, value);
  34580. } else if (IS_CV == IS_VAR) {
  34581. if (UNEXPECTED(Z_ISREF_P(value))) {
  34582. ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
  34583. if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
  34584. efree_size(Z_REF_P(value), sizeof(zend_reference));
  34585. } else if (Z_OPT_REFCOUNTED_P(result)) {
  34586. Z_ADDREF_P(result);
  34587. }
  34588. } else {
  34589. ZVAL_COPY_VALUE(result, value);
  34590. }
  34591. } else {
  34592. ZVAL_COPY_VALUE(result, value);
  34593. if (IS_CV == IS_CONST) {
  34594. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
  34595. Z_ADDREF_P(result);
  34596. }
  34597. }
  34598. }
  34599. ZEND_VM_NEXT_OPCODE();
  34600. }
  34601. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34602. {
  34603. USE_OPLINE
  34604. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  34605. zval *val;
  34606. SAVE_OPLINE();
  34607. val = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34608. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  34609. zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
  34610. UNDEF_RESULT();
  34611. HANDLE_EXCEPTION();
  34612. }
  34613. yield_from_try_again:
  34614. if (Z_TYPE_P(val) == IS_ARRAY) {
  34615. ZVAL_COPY_VALUE(&generator->values, val);
  34616. if (Z_OPT_REFCOUNTED_P(val)) {
  34617. Z_ADDREF_P(val);
  34618. }
  34619. Z_FE_POS(generator->values) = 0;
  34620. } else if (IS_CV != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
  34621. zend_class_entry *ce = Z_OBJCE_P(val);
  34622. if (ce == zend_ce_generator) {
  34623. zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
  34624. Z_ADDREF_P(val);
  34625. if (UNEXPECTED(new_gen->execute_data == NULL)) {
  34626. zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
  34627. zval_ptr_dtor(val);
  34628. UNDEF_RESULT();
  34629. HANDLE_EXCEPTION();
  34630. } else if (Z_ISUNDEF(new_gen->retval)) {
  34631. if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
  34632. zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
  34633. zval_ptr_dtor(val);
  34634. UNDEF_RESULT();
  34635. HANDLE_EXCEPTION();
  34636. } else {
  34637. zend_generator_yield_from(generator, new_gen);
  34638. }
  34639. } else {
  34640. if (RETURN_VALUE_USED(opline)) {
  34641. ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
  34642. }
  34643. ZEND_VM_NEXT_OPCODE();
  34644. }
  34645. } else {
  34646. zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
  34647. if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
  34648. if (!EG(exception)) {
  34649. zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
  34650. }
  34651. UNDEF_RESULT();
  34652. HANDLE_EXCEPTION();
  34653. }
  34654. iter->index = 0;
  34655. if (iter->funcs->rewind) {
  34656. iter->funcs->rewind(iter);
  34657. if (UNEXPECTED(EG(exception) != NULL)) {
  34658. OBJ_RELEASE(&iter->std);
  34659. UNDEF_RESULT();
  34660. HANDLE_EXCEPTION();
  34661. }
  34662. }
  34663. ZVAL_OBJ(&generator->values, &iter->std);
  34664. }
  34665. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
  34666. val = Z_REFVAL_P(val);
  34667. goto yield_from_try_again;
  34668. } else {
  34669. zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
  34670. UNDEF_RESULT();
  34671. HANDLE_EXCEPTION();
  34672. }
  34673. /* This is the default return value
  34674. * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
  34675. if (RETURN_VALUE_USED(opline)) {
  34676. ZVAL_NULL(EX_VAR(opline->result.var));
  34677. }
  34678. /* This generator has no send target (though the generator we delegate to might have one) */
  34679. generator->send_target = NULL;
  34680. /* We increment to the next op, so we are at the correct position when the
  34681. * generator is resumed. */
  34682. ZEND_VM_INC_OPCODE();
  34683. /* The GOTO VM uses a local opline variable. We need to set the opline
  34684. * variable in execute_data so we don't resume at an old position. */
  34685. SAVE_OPLINE();
  34686. ZEND_VM_RETURN();
  34687. }
  34688. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34689. {
  34690. USE_OPLINE
  34691. zval *value;
  34692. value = EX_VAR(opline->op1.var);
  34693. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  34694. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  34695. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  34696. zval_ptr_dtor_str(value);
  34697. }
  34698. ZEND_VM_NEXT_OPCODE();
  34699. } else {
  34700. bool strict;
  34701. if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
  34702. value = Z_REFVAL_P(value);
  34703. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  34704. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  34705. ZEND_VM_NEXT_OPCODE();
  34706. }
  34707. }
  34708. SAVE_OPLINE();
  34709. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  34710. value = ZVAL_UNDEFINED_OP1();
  34711. }
  34712. strict = EX_USES_STRICT_TYPES();
  34713. do {
  34714. if (EXPECTED(!strict)) {
  34715. zend_string *str;
  34716. zval tmp;
  34717. if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
  34718. zend_error(E_DEPRECATED,
  34719. "strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
  34720. ZVAL_LONG(EX_VAR(opline->result.var), 0);
  34721. if (UNEXPECTED(EG(exception))) {
  34722. HANDLE_EXCEPTION();
  34723. }
  34724. break;
  34725. }
  34726. ZVAL_COPY(&tmp, value);
  34727. if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
  34728. ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
  34729. zval_ptr_dtor(&tmp);
  34730. break;
  34731. }
  34732. zval_ptr_dtor(&tmp);
  34733. }
  34734. if (!EG(exception)) {
  34735. zend_type_error("strlen(): Argument #1 ($str) must be of type string, %s given", zend_zval_type_name(value));
  34736. }
  34737. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34738. } while (0);
  34739. }
  34740. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34741. }
  34742. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34743. {
  34744. USE_OPLINE
  34745. zval *value;
  34746. int result = 0;
  34747. value = EX_VAR(opline->op1.var);
  34748. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  34749. type_check_resource:
  34750. if (opline->extended_value != MAY_BE_RESOURCE
  34751. || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
  34752. result = 1;
  34753. }
  34754. } else if ((IS_CV & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
  34755. value = Z_REFVAL_P(value);
  34756. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  34757. goto type_check_resource;
  34758. }
  34759. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  34760. result = ((1 << IS_NULL) & opline->extended_value) != 0;
  34761. SAVE_OPLINE();
  34762. ZVAL_UNDEFINED_OP1();
  34763. if (UNEXPECTED(EG(exception))) {
  34764. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34765. HANDLE_EXCEPTION();
  34766. }
  34767. }
  34768. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  34769. SAVE_OPLINE();
  34770. ZEND_VM_SMART_BRANCH(result, 1);
  34771. } else {
  34772. ZEND_VM_SMART_BRANCH(result, 0);
  34773. }
  34774. }
  34775. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34776. {
  34777. uint32_t fetch_type;
  34778. zend_class_entry *called_scope, *scope;
  34779. USE_OPLINE
  34780. if (IS_CV != IS_UNUSED) {
  34781. SAVE_OPLINE();
  34782. zval *op = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34783. if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
  34784. ZVAL_DEREF(op);
  34785. if (Z_TYPE_P(op) != IS_OBJECT) {
  34786. zend_type_error("Cannot use \"::class\" on value of type %s", zend_zval_type_name(op));
  34787. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34788. HANDLE_EXCEPTION();
  34789. }
  34790. }
  34791. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
  34792. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34793. }
  34794. fetch_type = opline->op1.num;
  34795. scope = EX(func)->op_array.scope;
  34796. if (UNEXPECTED(scope == NULL)) {
  34797. SAVE_OPLINE();
  34798. zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
  34799. fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
  34800. fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
  34801. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34802. HANDLE_EXCEPTION();
  34803. }
  34804. switch (fetch_type) {
  34805. case ZEND_FETCH_CLASS_SELF:
  34806. ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
  34807. break;
  34808. case ZEND_FETCH_CLASS_PARENT:
  34809. if (UNEXPECTED(scope->parent == NULL)) {
  34810. SAVE_OPLINE();
  34811. zend_throw_error(NULL,
  34812. "Cannot use \"parent\" when current class scope has no parent");
  34813. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34814. HANDLE_EXCEPTION();
  34815. }
  34816. ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
  34817. break;
  34818. case ZEND_FETCH_CLASS_STATIC:
  34819. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  34820. called_scope = Z_OBJCE(EX(This));
  34821. } else {
  34822. called_scope = Z_CE(EX(This));
  34823. }
  34824. ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
  34825. break;
  34826. EMPTY_SWITCH_DEFAULT_CASE()
  34827. }
  34828. ZEND_VM_NEXT_OPCODE();
  34829. }
  34830. 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)
  34831. {
  34832. USE_OPLINE
  34833. zval *var_ptr;
  34834. var_ptr = EX_VAR(opline->op1.var);
  34835. Z_LVAL_P(var_ptr)++;
  34836. if (UNEXPECTED(0)) {
  34837. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  34838. }
  34839. ZEND_VM_NEXT_OPCODE();
  34840. }
  34841. 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)
  34842. {
  34843. USE_OPLINE
  34844. zval *var_ptr;
  34845. var_ptr = EX_VAR(opline->op1.var);
  34846. Z_LVAL_P(var_ptr)++;
  34847. if (UNEXPECTED(1)) {
  34848. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  34849. }
  34850. ZEND_VM_NEXT_OPCODE();
  34851. }
  34852. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34853. {
  34854. USE_OPLINE
  34855. zval *var_ptr;
  34856. var_ptr = EX_VAR(opline->op1.var);
  34857. fast_long_increment_function(var_ptr);
  34858. if (UNEXPECTED(0)) {
  34859. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  34860. }
  34861. ZEND_VM_NEXT_OPCODE();
  34862. }
  34863. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34864. {
  34865. USE_OPLINE
  34866. zval *var_ptr;
  34867. var_ptr = EX_VAR(opline->op1.var);
  34868. fast_long_increment_function(var_ptr);
  34869. if (UNEXPECTED(1)) {
  34870. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  34871. }
  34872. ZEND_VM_NEXT_OPCODE();
  34873. }
  34874. 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)
  34875. {
  34876. USE_OPLINE
  34877. zval *var_ptr;
  34878. var_ptr = EX_VAR(opline->op1.var);
  34879. Z_LVAL_P(var_ptr)--;
  34880. if (UNEXPECTED(0)) {
  34881. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  34882. }
  34883. ZEND_VM_NEXT_OPCODE();
  34884. }
  34885. 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)
  34886. {
  34887. USE_OPLINE
  34888. zval *var_ptr;
  34889. var_ptr = EX_VAR(opline->op1.var);
  34890. Z_LVAL_P(var_ptr)--;
  34891. if (UNEXPECTED(1)) {
  34892. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  34893. }
  34894. ZEND_VM_NEXT_OPCODE();
  34895. }
  34896. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34897. {
  34898. USE_OPLINE
  34899. zval *var_ptr;
  34900. var_ptr = EX_VAR(opline->op1.var);
  34901. fast_long_decrement_function(var_ptr);
  34902. if (UNEXPECTED(0)) {
  34903. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  34904. }
  34905. ZEND_VM_NEXT_OPCODE();
  34906. }
  34907. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34908. {
  34909. USE_OPLINE
  34910. zval *var_ptr;
  34911. var_ptr = EX_VAR(opline->op1.var);
  34912. fast_long_decrement_function(var_ptr);
  34913. if (UNEXPECTED(1)) {
  34914. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  34915. }
  34916. ZEND_VM_NEXT_OPCODE();
  34917. }
  34918. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34919. {
  34920. USE_OPLINE
  34921. zval *var_ptr;
  34922. var_ptr = EX_VAR(opline->op1.var);
  34923. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  34924. Z_LVAL_P(var_ptr)++;
  34925. ZEND_VM_NEXT_OPCODE();
  34926. }
  34927. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34928. {
  34929. USE_OPLINE
  34930. zval *var_ptr;
  34931. var_ptr = EX_VAR(opline->op1.var);
  34932. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  34933. fast_long_increment_function(var_ptr);
  34934. ZEND_VM_NEXT_OPCODE();
  34935. }
  34936. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34937. {
  34938. USE_OPLINE
  34939. zval *var_ptr;
  34940. var_ptr = EX_VAR(opline->op1.var);
  34941. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  34942. Z_LVAL_P(var_ptr)--;
  34943. ZEND_VM_NEXT_OPCODE();
  34944. }
  34945. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34946. {
  34947. USE_OPLINE
  34948. zval *var_ptr;
  34949. var_ptr = EX_VAR(opline->op1.var);
  34950. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  34951. fast_long_decrement_function(var_ptr);
  34952. ZEND_VM_NEXT_OPCODE();
  34953. }
  34954. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34955. {
  34956. USE_OPLINE
  34957. zval *varptr, *arg;
  34958. varptr = EX_VAR(opline->op1.var);
  34959. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  34960. if (IS_CV == IS_CV) {
  34961. ZVAL_COPY(arg, varptr);
  34962. } else /* if (IS_CV == IS_VAR) */ {
  34963. ZVAL_COPY_VALUE(arg, varptr);
  34964. }
  34965. ZEND_VM_NEXT_OPCODE();
  34966. }
  34967. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34968. {
  34969. USE_OPLINE
  34970. zval *op1, *op2;
  34971. SAVE_OPLINE();
  34972. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34973. op2 = RT_CONSTANT(opline, opline->op2);
  34974. div_function(EX_VAR(opline->result.var), op1, op2);
  34975. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34976. }
  34977. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34978. {
  34979. USE_OPLINE
  34980. zval *op1, *op2;
  34981. SAVE_OPLINE();
  34982. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34983. op2 = RT_CONSTANT(opline, opline->op2);
  34984. pow_function(EX_VAR(opline->result.var), op1, op2);
  34985. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34986. }
  34987. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34988. {
  34989. USE_OPLINE
  34990. zval *op1, *op2;
  34991. op1 = EX_VAR(opline->op1.var);
  34992. op2 = RT_CONSTANT(opline, opline->op2);
  34993. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  34994. (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  34995. zend_string *op1_str = Z_STR_P(op1);
  34996. zend_string *op2_str = Z_STR_P(op2);
  34997. zend_string *str;
  34998. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  34999. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  35000. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  35001. } else {
  35002. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  35003. }
  35004. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  35005. zend_string_release_ex(op1_str, 0);
  35006. }
  35007. } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  35008. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  35009. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  35010. } else {
  35011. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  35012. }
  35013. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  35014. zend_string_release_ex(op2_str, 0);
  35015. }
  35016. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  35017. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  35018. size_t len = ZSTR_LEN(op1_str);
  35019. if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
  35020. zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
  35021. }
  35022. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  35023. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  35024. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  35025. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  35026. zend_string_release_ex(op2_str, 0);
  35027. }
  35028. } else {
  35029. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  35030. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  35031. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  35032. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  35033. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  35034. zend_string_release_ex(op1_str, 0);
  35035. }
  35036. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  35037. zend_string_release_ex(op2_str, 0);
  35038. }
  35039. }
  35040. ZEND_VM_NEXT_OPCODE();
  35041. } else {
  35042. SAVE_OPLINE();
  35043. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  35044. op1 = ZVAL_UNDEFINED_OP1();
  35045. }
  35046. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  35047. op2 = ZVAL_UNDEFINED_OP2();
  35048. }
  35049. concat_function(EX_VAR(opline->result.var), op1, op2);
  35050. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35051. }
  35052. }
  35053. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35054. {
  35055. USE_OPLINE
  35056. zval *op1, *op2;
  35057. bool result;
  35058. SAVE_OPLINE();
  35059. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  35060. op2 = RT_CONSTANT(opline, opline->op2);
  35061. result = fast_is_identical_function(op1, op2);
  35062. ZEND_VM_SMART_BRANCH(result, 1);
  35063. }
  35064. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35065. {
  35066. USE_OPLINE
  35067. zval *op1, *op2;
  35068. bool result;
  35069. SAVE_OPLINE();
  35070. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  35071. op2 = RT_CONSTANT(opline, opline->op2);
  35072. result = fast_is_not_identical_function(op1, op2);
  35073. ZEND_VM_SMART_BRANCH(result, 1);
  35074. }
  35075. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35076. {
  35077. USE_OPLINE
  35078. zval *op1, *op2;
  35079. double d1, d2;
  35080. op1 = EX_VAR(opline->op1.var);
  35081. op2 = RT_CONSTANT(opline, opline->op2);
  35082. if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
  35083. /* pass */
  35084. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  35085. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35086. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  35087. is_equal_true:
  35088. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  35089. } else {
  35090. is_equal_false:
  35091. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  35092. }
  35093. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35094. d1 = (double)Z_LVAL_P(op1);
  35095. d2 = Z_DVAL_P(op2);
  35096. goto is_equal_double;
  35097. }
  35098. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  35099. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35100. d1 = Z_DVAL_P(op1);
  35101. d2 = Z_DVAL_P(op2);
  35102. is_equal_double:
  35103. if (d1 == d2) {
  35104. goto is_equal_true;
  35105. } else {
  35106. goto is_equal_false;
  35107. }
  35108. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35109. d1 = Z_DVAL_P(op1);
  35110. d2 = (double)Z_LVAL_P(op2);
  35111. goto is_equal_double;
  35112. }
  35113. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  35114. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  35115. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  35116. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  35117. zval_ptr_dtor_str(op1);
  35118. }
  35119. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  35120. zval_ptr_dtor_str(op2);
  35121. }
  35122. if (result) {
  35123. goto is_equal_true;
  35124. } else {
  35125. goto is_equal_false;
  35126. }
  35127. }
  35128. }
  35129. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  35130. }
  35131. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35132. {
  35133. USE_OPLINE
  35134. zval *op1, *op2;
  35135. double d1, d2;
  35136. op1 = EX_VAR(opline->op1.var);
  35137. op2 = RT_CONSTANT(opline, opline->op2);
  35138. if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
  35139. /* pass */
  35140. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  35141. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35142. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  35143. is_equal_true:
  35144. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  35145. } else {
  35146. is_equal_false:
  35147. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  35148. }
  35149. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35150. d1 = (double)Z_LVAL_P(op1);
  35151. d2 = Z_DVAL_P(op2);
  35152. goto is_equal_double;
  35153. }
  35154. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  35155. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35156. d1 = Z_DVAL_P(op1);
  35157. d2 = Z_DVAL_P(op2);
  35158. is_equal_double:
  35159. if (d1 == d2) {
  35160. goto is_equal_true;
  35161. } else {
  35162. goto is_equal_false;
  35163. }
  35164. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35165. d1 = Z_DVAL_P(op1);
  35166. d2 = (double)Z_LVAL_P(op2);
  35167. goto is_equal_double;
  35168. }
  35169. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  35170. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  35171. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  35172. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  35173. zval_ptr_dtor_str(op1);
  35174. }
  35175. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  35176. zval_ptr_dtor_str(op2);
  35177. }
  35178. if (result) {
  35179. goto is_equal_true;
  35180. } else {
  35181. goto is_equal_false;
  35182. }
  35183. }
  35184. }
  35185. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  35186. }
  35187. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35188. {
  35189. USE_OPLINE
  35190. zval *op1, *op2;
  35191. double d1, d2;
  35192. op1 = EX_VAR(opline->op1.var);
  35193. op2 = RT_CONSTANT(opline, opline->op2);
  35194. if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
  35195. /* pass */
  35196. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  35197. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35198. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  35199. is_equal_true:
  35200. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  35201. } else {
  35202. is_equal_false:
  35203. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  35204. }
  35205. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35206. d1 = (double)Z_LVAL_P(op1);
  35207. d2 = Z_DVAL_P(op2);
  35208. goto is_equal_double;
  35209. }
  35210. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  35211. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35212. d1 = Z_DVAL_P(op1);
  35213. d2 = Z_DVAL_P(op2);
  35214. is_equal_double:
  35215. if (d1 == d2) {
  35216. goto is_equal_true;
  35217. } else {
  35218. goto is_equal_false;
  35219. }
  35220. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35221. d1 = Z_DVAL_P(op1);
  35222. d2 = (double)Z_LVAL_P(op2);
  35223. goto is_equal_double;
  35224. }
  35225. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  35226. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  35227. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  35228. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  35229. zval_ptr_dtor_str(op1);
  35230. }
  35231. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  35232. zval_ptr_dtor_str(op2);
  35233. }
  35234. if (result) {
  35235. goto is_equal_true;
  35236. } else {
  35237. goto is_equal_false;
  35238. }
  35239. }
  35240. }
  35241. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  35242. }
  35243. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35244. {
  35245. USE_OPLINE
  35246. zval *op1, *op2;
  35247. double d1, d2;
  35248. op1 = EX_VAR(opline->op1.var);
  35249. op2 = RT_CONSTANT(opline, opline->op2);
  35250. if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
  35251. /* pass */
  35252. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  35253. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35254. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  35255. is_not_equal_true:
  35256. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  35257. } else {
  35258. is_not_equal_false:
  35259. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  35260. }
  35261. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35262. d1 = (double)Z_LVAL_P(op1);
  35263. d2 = Z_DVAL_P(op2);
  35264. goto is_not_equal_double;
  35265. }
  35266. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  35267. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35268. d1 = Z_DVAL_P(op1);
  35269. d2 = Z_DVAL_P(op2);
  35270. is_not_equal_double:
  35271. if (d1 != d2) {
  35272. goto is_not_equal_true;
  35273. } else {
  35274. goto is_not_equal_false;
  35275. }
  35276. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35277. d1 = Z_DVAL_P(op1);
  35278. d2 = (double)Z_LVAL_P(op2);
  35279. goto is_not_equal_double;
  35280. }
  35281. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  35282. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  35283. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  35284. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  35285. zval_ptr_dtor_str(op1);
  35286. }
  35287. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  35288. zval_ptr_dtor_str(op2);
  35289. }
  35290. if (!result) {
  35291. goto is_not_equal_true;
  35292. } else {
  35293. goto is_not_equal_false;
  35294. }
  35295. }
  35296. }
  35297. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  35298. }
  35299. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35300. {
  35301. USE_OPLINE
  35302. zval *op1, *op2;
  35303. double d1, d2;
  35304. op1 = EX_VAR(opline->op1.var);
  35305. op2 = RT_CONSTANT(opline, opline->op2);
  35306. if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
  35307. /* pass */
  35308. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  35309. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35310. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  35311. is_not_equal_true:
  35312. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  35313. } else {
  35314. is_not_equal_false:
  35315. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  35316. }
  35317. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35318. d1 = (double)Z_LVAL_P(op1);
  35319. d2 = Z_DVAL_P(op2);
  35320. goto is_not_equal_double;
  35321. }
  35322. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  35323. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35324. d1 = Z_DVAL_P(op1);
  35325. d2 = Z_DVAL_P(op2);
  35326. is_not_equal_double:
  35327. if (d1 != d2) {
  35328. goto is_not_equal_true;
  35329. } else {
  35330. goto is_not_equal_false;
  35331. }
  35332. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35333. d1 = Z_DVAL_P(op1);
  35334. d2 = (double)Z_LVAL_P(op2);
  35335. goto is_not_equal_double;
  35336. }
  35337. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  35338. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  35339. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  35340. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  35341. zval_ptr_dtor_str(op1);
  35342. }
  35343. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  35344. zval_ptr_dtor_str(op2);
  35345. }
  35346. if (!result) {
  35347. goto is_not_equal_true;
  35348. } else {
  35349. goto is_not_equal_false;
  35350. }
  35351. }
  35352. }
  35353. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  35354. }
  35355. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35356. {
  35357. USE_OPLINE
  35358. zval *op1, *op2;
  35359. double d1, d2;
  35360. op1 = EX_VAR(opline->op1.var);
  35361. op2 = RT_CONSTANT(opline, opline->op2);
  35362. if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
  35363. /* pass */
  35364. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  35365. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35366. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  35367. is_not_equal_true:
  35368. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  35369. } else {
  35370. is_not_equal_false:
  35371. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  35372. }
  35373. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35374. d1 = (double)Z_LVAL_P(op1);
  35375. d2 = Z_DVAL_P(op2);
  35376. goto is_not_equal_double;
  35377. }
  35378. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  35379. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35380. d1 = Z_DVAL_P(op1);
  35381. d2 = Z_DVAL_P(op2);
  35382. is_not_equal_double:
  35383. if (d1 != d2) {
  35384. goto is_not_equal_true;
  35385. } else {
  35386. goto is_not_equal_false;
  35387. }
  35388. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35389. d1 = Z_DVAL_P(op1);
  35390. d2 = (double)Z_LVAL_P(op2);
  35391. goto is_not_equal_double;
  35392. }
  35393. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  35394. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  35395. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  35396. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  35397. zval_ptr_dtor_str(op1);
  35398. }
  35399. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  35400. zval_ptr_dtor_str(op2);
  35401. }
  35402. if (!result) {
  35403. goto is_not_equal_true;
  35404. } else {
  35405. goto is_not_equal_false;
  35406. }
  35407. }
  35408. }
  35409. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  35410. }
  35411. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35412. {
  35413. USE_OPLINE
  35414. zval *op1, *op2;
  35415. SAVE_OPLINE();
  35416. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  35417. op2 = RT_CONSTANT(opline, opline->op2);
  35418. compare_function(EX_VAR(opline->result.var), op1, op2);
  35419. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35420. }
  35421. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35422. {
  35423. USE_OPLINE
  35424. zval *op1, *op2;
  35425. SAVE_OPLINE();
  35426. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  35427. op2 = RT_CONSTANT(opline, opline->op2);
  35428. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  35429. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35430. }
  35431. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35432. {
  35433. USE_OPLINE
  35434. zval *object;
  35435. zval *property;
  35436. zval *value;
  35437. zval *zptr;
  35438. void **cache_slot;
  35439. zend_property_info *prop_info;
  35440. zend_object *zobj;
  35441. zend_string *name, *tmp_name;
  35442. SAVE_OPLINE();
  35443. object = EX_VAR(opline->op1.var);
  35444. property = RT_CONSTANT(opline, opline->op2);
  35445. do {
  35446. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  35447. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  35448. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  35449. object = Z_REFVAL_P(object);
  35450. goto assign_op_object;
  35451. }
  35452. if (IS_CV == IS_CV
  35453. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  35454. ZVAL_UNDEFINED_OP1();
  35455. }
  35456. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  35457. break;
  35458. }
  35459. assign_op_object:
  35460. /* here we are sure we are dealing with an object */
  35461. zobj = Z_OBJ_P(object);
  35462. if (IS_CONST == IS_CONST) {
  35463. name = Z_STR_P(property);
  35464. } else {
  35465. name = zval_try_get_tmp_string(property, &tmp_name);
  35466. if (UNEXPECTED(!name)) {
  35467. UNDEF_RESULT();
  35468. break;
  35469. }
  35470. }
  35471. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  35472. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  35473. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  35474. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35475. ZVAL_NULL(EX_VAR(opline->result.var));
  35476. }
  35477. } else {
  35478. zval *orig_zptr = zptr;
  35479. zend_reference *ref;
  35480. do {
  35481. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  35482. ref = Z_REF_P(zptr);
  35483. zptr = Z_REFVAL_P(zptr);
  35484. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  35485. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  35486. break;
  35487. }
  35488. }
  35489. if (IS_CONST == IS_CONST) {
  35490. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  35491. } else {
  35492. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  35493. }
  35494. if (UNEXPECTED(prop_info)) {
  35495. /* special case for typed properties */
  35496. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  35497. } else {
  35498. zend_binary_op(zptr, zptr, value OPLINE_CC);
  35499. }
  35500. } while (0);
  35501. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35502. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  35503. }
  35504. }
  35505. } else {
  35506. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  35507. }
  35508. if (IS_CONST != IS_CONST) {
  35509. zend_tmp_string_release(tmp_name);
  35510. }
  35511. } while (0);
  35512. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  35513. /* assign_obj has two opcodes! */
  35514. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  35515. }
  35516. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  35517. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35518. {
  35519. USE_OPLINE
  35520. zval *var_ptr;
  35521. zval *value, *container, *dim;
  35522. HashTable *ht;
  35523. SAVE_OPLINE();
  35524. container = EX_VAR(opline->op1.var);
  35525. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  35526. assign_dim_op_array:
  35527. SEPARATE_ARRAY(container);
  35528. ht = Z_ARRVAL_P(container);
  35529. assign_dim_op_new_array:
  35530. dim = RT_CONSTANT(opline, opline->op2);
  35531. if (IS_CONST == IS_UNUSED) {
  35532. var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
  35533. if (UNEXPECTED(!var_ptr)) {
  35534. zend_cannot_add_element();
  35535. goto assign_dim_op_ret_null;
  35536. }
  35537. } else {
  35538. if (IS_CONST == IS_CONST) {
  35539. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
  35540. } else {
  35541. var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
  35542. }
  35543. if (UNEXPECTED(!var_ptr)) {
  35544. goto assign_dim_op_ret_null;
  35545. }
  35546. }
  35547. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  35548. do {
  35549. if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
  35550. zend_reference *ref = Z_REF_P(var_ptr);
  35551. var_ptr = Z_REFVAL_P(var_ptr);
  35552. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  35553. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  35554. break;
  35555. }
  35556. }
  35557. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  35558. } while (0);
  35559. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35560. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  35561. }
  35562. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  35563. } else {
  35564. if (EXPECTED(Z_ISREF_P(container))) {
  35565. container = Z_REFVAL_P(container);
  35566. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  35567. goto assign_dim_op_array;
  35568. }
  35569. }
  35570. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  35571. zend_object *obj = Z_OBJ_P(container);
  35572. dim = RT_CONSTANT(opline, opline->op2);
  35573. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  35574. dim++;
  35575. }
  35576. zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
  35577. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  35578. zend_uchar old_type;
  35579. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  35580. ZVAL_UNDEFINED_OP1();
  35581. }
  35582. ht = zend_new_array(8);
  35583. old_type = Z_TYPE_P(container);
  35584. ZVAL_ARR(container, ht);
  35585. if (UNEXPECTED(old_type == IS_FALSE)) {
  35586. GC_ADDREF(ht);
  35587. zend_false_to_array_deprecated();
  35588. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  35589. zend_array_destroy(ht);
  35590. goto assign_dim_op_ret_null;
  35591. }
  35592. }
  35593. goto assign_dim_op_new_array;
  35594. } else {
  35595. dim = RT_CONSTANT(opline, opline->op2);
  35596. zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  35597. assign_dim_op_ret_null:
  35598. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  35599. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35600. ZVAL_NULL(EX_VAR(opline->result.var));
  35601. }
  35602. }
  35603. }
  35604. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  35605. }
  35606. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35607. {
  35608. USE_OPLINE
  35609. zval *var_ptr;
  35610. zval *value;
  35611. SAVE_OPLINE();
  35612. value = RT_CONSTANT(opline, opline->op2);
  35613. var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  35614. do {
  35615. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  35616. zend_reference *ref = Z_REF_P(var_ptr);
  35617. var_ptr = Z_REFVAL_P(var_ptr);
  35618. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  35619. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  35620. break;
  35621. }
  35622. }
  35623. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  35624. } while (0);
  35625. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35626. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  35627. }
  35628. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35629. }
  35630. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35631. {
  35632. USE_OPLINE
  35633. zval *object;
  35634. zval *property;
  35635. zval *zptr;
  35636. void **cache_slot;
  35637. zend_property_info *prop_info;
  35638. zend_object *zobj;
  35639. zend_string *name, *tmp_name;
  35640. SAVE_OPLINE();
  35641. object = EX_VAR(opline->op1.var);
  35642. property = RT_CONSTANT(opline, opline->op2);
  35643. do {
  35644. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  35645. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  35646. object = Z_REFVAL_P(object);
  35647. goto pre_incdec_object;
  35648. }
  35649. if (IS_CV == IS_CV
  35650. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  35651. ZVAL_UNDEFINED_OP1();
  35652. }
  35653. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  35654. break;
  35655. }
  35656. pre_incdec_object:
  35657. /* here we are sure we are dealing with an object */
  35658. zobj = Z_OBJ_P(object);
  35659. if (IS_CONST == IS_CONST) {
  35660. name = Z_STR_P(property);
  35661. } else {
  35662. name = zval_try_get_tmp_string(property, &tmp_name);
  35663. if (UNEXPECTED(!name)) {
  35664. UNDEF_RESULT();
  35665. break;
  35666. }
  35667. }
  35668. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  35669. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  35670. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  35671. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35672. ZVAL_NULL(EX_VAR(opline->result.var));
  35673. }
  35674. } else {
  35675. if (IS_CONST == IS_CONST) {
  35676. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  35677. } else {
  35678. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  35679. }
  35680. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  35681. }
  35682. } else {
  35683. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  35684. }
  35685. if (IS_CONST != IS_CONST) {
  35686. zend_tmp_string_release(tmp_name);
  35687. }
  35688. } while (0);
  35689. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35690. }
  35691. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35692. {
  35693. USE_OPLINE
  35694. zval *object;
  35695. zval *property;
  35696. zval *zptr;
  35697. void **cache_slot;
  35698. zend_property_info *prop_info;
  35699. zend_object *zobj;
  35700. zend_string *name, *tmp_name;
  35701. SAVE_OPLINE();
  35702. object = EX_VAR(opline->op1.var);
  35703. property = RT_CONSTANT(opline, opline->op2);
  35704. do {
  35705. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  35706. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  35707. object = Z_REFVAL_P(object);
  35708. goto post_incdec_object;
  35709. }
  35710. if (IS_CV == IS_CV
  35711. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  35712. ZVAL_UNDEFINED_OP1();
  35713. }
  35714. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  35715. break;
  35716. }
  35717. post_incdec_object:
  35718. /* here we are sure we are dealing with an object */
  35719. zobj = Z_OBJ_P(object);
  35720. if (IS_CONST == IS_CONST) {
  35721. name = Z_STR_P(property);
  35722. } else {
  35723. name = zval_try_get_tmp_string(property, &tmp_name);
  35724. if (UNEXPECTED(!name)) {
  35725. ZVAL_UNDEF(EX_VAR(opline->result.var));
  35726. break;
  35727. }
  35728. }
  35729. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  35730. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  35731. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  35732. ZVAL_NULL(EX_VAR(opline->result.var));
  35733. } else {
  35734. if (IS_CONST == IS_CONST) {
  35735. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  35736. } else {
  35737. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  35738. }
  35739. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  35740. }
  35741. } else {
  35742. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  35743. }
  35744. if (IS_CONST != IS_CONST) {
  35745. zend_tmp_string_release(tmp_name);
  35746. }
  35747. } while (0);
  35748. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35749. }
  35750. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35751. {
  35752. USE_OPLINE
  35753. zval *container, *dim, *value;
  35754. SAVE_OPLINE();
  35755. container = EX_VAR(opline->op1.var);
  35756. dim = RT_CONSTANT(opline, opline->op2);
  35757. if (IS_CV != IS_CONST) {
  35758. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  35759. fetch_dim_r_array:
  35760. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
  35761. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  35762. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  35763. container = Z_REFVAL_P(container);
  35764. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  35765. goto fetch_dim_r_array;
  35766. } else {
  35767. goto fetch_dim_r_slow;
  35768. }
  35769. } else {
  35770. fetch_dim_r_slow:
  35771. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  35772. dim++;
  35773. }
  35774. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  35775. }
  35776. } else {
  35777. zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  35778. }
  35779. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35780. }
  35781. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35782. {
  35783. USE_OPLINE
  35784. zval *container;
  35785. SAVE_OPLINE();
  35786. container = EX_VAR(opline->op1.var);
  35787. zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  35788. if (IS_CV == IS_VAR) {
  35789. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  35790. }
  35791. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35792. }
  35793. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35794. {
  35795. USE_OPLINE
  35796. zval *container;
  35797. SAVE_OPLINE();
  35798. container = EX_VAR(opline->op1.var);
  35799. zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  35800. if (IS_CV == IS_VAR) {
  35801. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  35802. }
  35803. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35804. }
  35805. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35806. {
  35807. USE_OPLINE
  35808. zval *container;
  35809. SAVE_OPLINE();
  35810. container = EX_VAR(opline->op1.var);
  35811. zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  35812. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35813. }
  35814. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35815. {
  35816. #if 0
  35817. USE_OPLINE
  35818. #endif
  35819. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  35820. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  35821. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  35822. }
  35823. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  35824. } else {
  35825. if (IS_CONST == IS_UNUSED) {
  35826. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  35827. }
  35828. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  35829. }
  35830. }
  35831. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35832. {
  35833. USE_OPLINE
  35834. zval *container;
  35835. SAVE_OPLINE();
  35836. container = EX_VAR(opline->op1.var);
  35837. zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  35838. if (IS_CV == IS_VAR) {
  35839. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  35840. }
  35841. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35842. }
  35843. static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35844. {
  35845. USE_OPLINE
  35846. zval *container;
  35847. void **cache_slot = NULL;
  35848. SAVE_OPLINE();
  35849. container = EX_VAR(opline->op1.var);
  35850. if (IS_CV == IS_CONST ||
  35851. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  35852. do {
  35853. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  35854. container = Z_REFVAL_P(container);
  35855. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  35856. break;
  35857. }
  35858. }
  35859. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  35860. ZVAL_UNDEFINED_OP1();
  35861. }
  35862. zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
  35863. ZVAL_NULL(EX_VAR(opline->result.var));
  35864. goto fetch_obj_r_finish;
  35865. } while (0);
  35866. }
  35867. /* here we are sure we are dealing with an object */
  35868. do {
  35869. zend_object *zobj = Z_OBJ_P(container);
  35870. zend_string *name, *tmp_name;
  35871. zval *retval;
  35872. if (IS_CONST == IS_CONST) {
  35873. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  35874. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  35875. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  35876. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  35877. retval = OBJ_PROP(zobj, prop_offset);
  35878. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  35879. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  35880. goto fetch_obj_r_copy;
  35881. } else {
  35882. fetch_obj_r_fast_copy:
  35883. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  35884. ZEND_VM_NEXT_OPCODE();
  35885. }
  35886. }
  35887. } else if (EXPECTED(zobj->properties != NULL)) {
  35888. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  35889. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  35890. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  35891. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  35892. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  35893. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  35894. (EXPECTED(p->key == name) ||
  35895. (EXPECTED(p->h == ZSTR_H(name)) &&
  35896. EXPECTED(p->key != NULL) &&
  35897. EXPECTED(zend_string_equal_content(p->key, name))))) {
  35898. retval = &p->val;
  35899. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  35900. goto fetch_obj_r_copy;
  35901. } else {
  35902. goto fetch_obj_r_fast_copy;
  35903. }
  35904. }
  35905. }
  35906. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  35907. }
  35908. retval = zend_hash_find_known_hash(zobj->properties, name);
  35909. if (EXPECTED(retval)) {
  35910. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  35911. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  35912. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  35913. goto fetch_obj_r_copy;
  35914. } else {
  35915. goto fetch_obj_r_fast_copy;
  35916. }
  35917. }
  35918. }
  35919. }
  35920. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  35921. } else {
  35922. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  35923. if (UNEXPECTED(!name)) {
  35924. ZVAL_UNDEF(EX_VAR(opline->result.var));
  35925. break;
  35926. }
  35927. }
  35928. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  35929. #if ZEND_DEBUG
  35930. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  35931. zend_verify_internal_read_property_type(zobj, name, retval);
  35932. }
  35933. #endif
  35934. if (IS_CONST != IS_CONST) {
  35935. zend_tmp_string_release(tmp_name);
  35936. }
  35937. if (retval != EX_VAR(opline->result.var)) {
  35938. fetch_obj_r_copy:
  35939. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  35940. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  35941. zend_unwrap_reference(retval);
  35942. }
  35943. } while (0);
  35944. fetch_obj_r_finish:
  35945. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35946. }
  35947. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35948. {
  35949. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  35950. }
  35951. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35952. {
  35953. USE_OPLINE
  35954. zval *property, *container, *result;
  35955. SAVE_OPLINE();
  35956. container = EX_VAR(opline->op1.var);
  35957. property = RT_CONSTANT(opline, opline->op2);
  35958. result = EX_VAR(opline->result.var);
  35959. zend_fetch_property_address(
  35960. result, container, IS_CV, property, IS_CONST,
  35961. ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  35962. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
  35963. if (IS_CV == IS_VAR) {
  35964. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  35965. }
  35966. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35967. }
  35968. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35969. {
  35970. USE_OPLINE
  35971. zval *property, *container, *result;
  35972. SAVE_OPLINE();
  35973. container = EX_VAR(opline->op1.var);
  35974. property = RT_CONSTANT(opline, opline->op2);
  35975. result = EX_VAR(opline->result.var);
  35976. zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  35977. if (IS_CV == IS_VAR) {
  35978. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  35979. }
  35980. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35981. }
  35982. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35983. {
  35984. USE_OPLINE
  35985. zval *container;
  35986. void **cache_slot = NULL;
  35987. SAVE_OPLINE();
  35988. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  35989. if (IS_CV == IS_CONST ||
  35990. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  35991. do {
  35992. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  35993. container = Z_REFVAL_P(container);
  35994. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  35995. break;
  35996. }
  35997. }
  35998. if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  35999. ZVAL_UNDEFINED_OP2();
  36000. }
  36001. ZVAL_NULL(EX_VAR(opline->result.var));
  36002. goto fetch_obj_is_finish;
  36003. } while (0);
  36004. }
  36005. /* here we are sure we are dealing with an object */
  36006. do {
  36007. zend_object *zobj = Z_OBJ_P(container);
  36008. zend_string *name, *tmp_name;
  36009. zval *retval;
  36010. if (IS_CONST == IS_CONST) {
  36011. cache_slot = CACHE_ADDR(opline->extended_value);
  36012. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  36013. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  36014. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  36015. retval = OBJ_PROP(zobj, prop_offset);
  36016. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  36017. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  36018. goto fetch_obj_is_copy;
  36019. } else {
  36020. fetch_obj_is_fast_copy:
  36021. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  36022. ZEND_VM_NEXT_OPCODE();
  36023. }
  36024. }
  36025. } else if (EXPECTED(zobj->properties != NULL)) {
  36026. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36027. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  36028. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  36029. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  36030. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  36031. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  36032. (EXPECTED(p->key == name) ||
  36033. (EXPECTED(p->h == ZSTR_H(name)) &&
  36034. EXPECTED(p->key != NULL) &&
  36035. EXPECTED(zend_string_equal_content(p->key, name))))) {
  36036. retval = &p->val;
  36037. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  36038. goto fetch_obj_is_copy;
  36039. } else {
  36040. goto fetch_obj_is_fast_copy;
  36041. }
  36042. }
  36043. }
  36044. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  36045. }
  36046. retval = zend_hash_find_known_hash(zobj->properties, name);
  36047. if (EXPECTED(retval)) {
  36048. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  36049. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  36050. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  36051. goto fetch_obj_is_copy;
  36052. } else {
  36053. goto fetch_obj_is_fast_copy;
  36054. }
  36055. }
  36056. }
  36057. }
  36058. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36059. } else {
  36060. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  36061. if (UNEXPECTED(!name)) {
  36062. ZVAL_UNDEF(EX_VAR(opline->result.var));
  36063. break;
  36064. }
  36065. }
  36066. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  36067. if (IS_CONST != IS_CONST) {
  36068. zend_tmp_string_release(tmp_name);
  36069. }
  36070. if (retval != EX_VAR(opline->result.var)) {
  36071. fetch_obj_is_copy:
  36072. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  36073. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  36074. zend_unwrap_reference(retval);
  36075. }
  36076. } while (0);
  36077. fetch_obj_is_finish:
  36078. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36079. }
  36080. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36081. {
  36082. #if 0
  36083. USE_OPLINE
  36084. #endif
  36085. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  36086. /* Behave like FETCH_OBJ_W */
  36087. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  36088. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  36089. }
  36090. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  36091. } else {
  36092. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  36093. }
  36094. }
  36095. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36096. {
  36097. USE_OPLINE
  36098. zval *container, *property, *result;
  36099. SAVE_OPLINE();
  36100. container = EX_VAR(opline->op1.var);
  36101. property = RT_CONSTANT(opline, opline->op2);
  36102. result = EX_VAR(opline->result.var);
  36103. zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  36104. if (IS_CV == IS_VAR) {
  36105. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  36106. }
  36107. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36108. }
  36109. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36110. {
  36111. USE_OPLINE
  36112. zval *object, *value, tmp;
  36113. zend_object *zobj;
  36114. zend_string *name, *tmp_name;
  36115. SAVE_OPLINE();
  36116. object = EX_VAR(opline->op1.var);
  36117. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  36118. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  36119. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  36120. object = Z_REFVAL_P(object);
  36121. goto assign_object;
  36122. }
  36123. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  36124. value = &EG(uninitialized_zval);
  36125. goto free_and_exit_assign_obj;
  36126. }
  36127. assign_object:
  36128. zobj = Z_OBJ_P(object);
  36129. if (IS_CONST == IS_CONST) {
  36130. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  36131. void **cache_slot = CACHE_ADDR(opline->extended_value);
  36132. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  36133. zend_object *zobj = Z_OBJ_P(object);
  36134. zval *property_val;
  36135. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  36136. property_val = OBJ_PROP(zobj, prop_offset);
  36137. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  36138. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  36139. if (UNEXPECTED(prop_info != NULL)) {
  36140. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  36141. goto free_and_exit_assign_obj;
  36142. } else {
  36143. fast_assign_obj:
  36144. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  36145. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36146. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36147. }
  36148. goto exit_assign_obj;
  36149. }
  36150. }
  36151. } else {
  36152. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36153. if (EXPECTED(zobj->properties != NULL)) {
  36154. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  36155. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  36156. GC_DELREF(zobj->properties);
  36157. }
  36158. zobj->properties = zend_array_dup(zobj->properties);
  36159. }
  36160. property_val = zend_hash_find_known_hash(zobj->properties, name);
  36161. if (property_val) {
  36162. goto fast_assign_obj;
  36163. }
  36164. }
  36165. if (!zobj->ce->__set) {
  36166. if (EXPECTED(zobj->properties == NULL)) {
  36167. rebuild_object_properties(zobj);
  36168. }
  36169. if (IS_CONST == IS_CONST) {
  36170. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  36171. Z_ADDREF_P(value);
  36172. }
  36173. } else if (IS_CONST != IS_TMP_VAR) {
  36174. if (Z_ISREF_P(value)) {
  36175. if (IS_CONST == IS_VAR) {
  36176. zend_reference *ref = Z_REF_P(value);
  36177. if (GC_DELREF(ref) == 0) {
  36178. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  36179. efree_size(ref, sizeof(zend_reference));
  36180. value = &tmp;
  36181. } else {
  36182. value = Z_REFVAL_P(value);
  36183. Z_TRY_ADDREF_P(value);
  36184. }
  36185. } else {
  36186. value = Z_REFVAL_P(value);
  36187. Z_TRY_ADDREF_P(value);
  36188. }
  36189. } else if (IS_CONST == IS_CV) {
  36190. Z_TRY_ADDREF_P(value);
  36191. }
  36192. }
  36193. zend_hash_add_new(zobj->properties, name, value);
  36194. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36195. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36196. }
  36197. goto exit_assign_obj;
  36198. }
  36199. }
  36200. }
  36201. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36202. } else {
  36203. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  36204. if (UNEXPECTED(!name)) {
  36205. UNDEF_RESULT();
  36206. goto exit_assign_obj;
  36207. }
  36208. }
  36209. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  36210. ZVAL_DEREF(value);
  36211. }
  36212. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  36213. if (IS_CONST != IS_CONST) {
  36214. zend_tmp_string_release(tmp_name);
  36215. }
  36216. free_and_exit_assign_obj:
  36217. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36218. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  36219. }
  36220. exit_assign_obj:
  36221. /* assign_obj has two opcodes! */
  36222. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  36223. }
  36224. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  36225. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36226. {
  36227. USE_OPLINE
  36228. zval *object, *value, tmp;
  36229. zend_object *zobj;
  36230. zend_string *name, *tmp_name;
  36231. SAVE_OPLINE();
  36232. object = EX_VAR(opline->op1.var);
  36233. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  36234. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  36235. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  36236. object = Z_REFVAL_P(object);
  36237. goto assign_object;
  36238. }
  36239. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  36240. value = &EG(uninitialized_zval);
  36241. goto free_and_exit_assign_obj;
  36242. }
  36243. assign_object:
  36244. zobj = Z_OBJ_P(object);
  36245. if (IS_CONST == IS_CONST) {
  36246. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  36247. void **cache_slot = CACHE_ADDR(opline->extended_value);
  36248. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  36249. zend_object *zobj = Z_OBJ_P(object);
  36250. zval *property_val;
  36251. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  36252. property_val = OBJ_PROP(zobj, prop_offset);
  36253. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  36254. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  36255. if (UNEXPECTED(prop_info != NULL)) {
  36256. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  36257. goto free_and_exit_assign_obj;
  36258. } else {
  36259. fast_assign_obj:
  36260. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  36261. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36262. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36263. }
  36264. goto exit_assign_obj;
  36265. }
  36266. }
  36267. } else {
  36268. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36269. if (EXPECTED(zobj->properties != NULL)) {
  36270. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  36271. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  36272. GC_DELREF(zobj->properties);
  36273. }
  36274. zobj->properties = zend_array_dup(zobj->properties);
  36275. }
  36276. property_val = zend_hash_find_known_hash(zobj->properties, name);
  36277. if (property_val) {
  36278. goto fast_assign_obj;
  36279. }
  36280. }
  36281. if (!zobj->ce->__set) {
  36282. if (EXPECTED(zobj->properties == NULL)) {
  36283. rebuild_object_properties(zobj);
  36284. }
  36285. if (IS_TMP_VAR == IS_CONST) {
  36286. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  36287. Z_ADDREF_P(value);
  36288. }
  36289. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  36290. if (Z_ISREF_P(value)) {
  36291. if (IS_TMP_VAR == IS_VAR) {
  36292. zend_reference *ref = Z_REF_P(value);
  36293. if (GC_DELREF(ref) == 0) {
  36294. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  36295. efree_size(ref, sizeof(zend_reference));
  36296. value = &tmp;
  36297. } else {
  36298. value = Z_REFVAL_P(value);
  36299. Z_TRY_ADDREF_P(value);
  36300. }
  36301. } else {
  36302. value = Z_REFVAL_P(value);
  36303. Z_TRY_ADDREF_P(value);
  36304. }
  36305. } else if (IS_TMP_VAR == IS_CV) {
  36306. Z_TRY_ADDREF_P(value);
  36307. }
  36308. }
  36309. zend_hash_add_new(zobj->properties, name, value);
  36310. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36311. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36312. }
  36313. goto exit_assign_obj;
  36314. }
  36315. }
  36316. }
  36317. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36318. } else {
  36319. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  36320. if (UNEXPECTED(!name)) {
  36321. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36322. UNDEF_RESULT();
  36323. goto exit_assign_obj;
  36324. }
  36325. }
  36326. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  36327. ZVAL_DEREF(value);
  36328. }
  36329. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  36330. if (IS_CONST != IS_CONST) {
  36331. zend_tmp_string_release(tmp_name);
  36332. }
  36333. free_and_exit_assign_obj:
  36334. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36335. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  36336. }
  36337. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36338. exit_assign_obj:
  36339. /* assign_obj has two opcodes! */
  36340. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  36341. }
  36342. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  36343. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36344. {
  36345. USE_OPLINE
  36346. zval *object, *value, tmp;
  36347. zend_object *zobj;
  36348. zend_string *name, *tmp_name;
  36349. SAVE_OPLINE();
  36350. object = EX_VAR(opline->op1.var);
  36351. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  36352. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  36353. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  36354. object = Z_REFVAL_P(object);
  36355. goto assign_object;
  36356. }
  36357. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  36358. value = &EG(uninitialized_zval);
  36359. goto free_and_exit_assign_obj;
  36360. }
  36361. assign_object:
  36362. zobj = Z_OBJ_P(object);
  36363. if (IS_CONST == IS_CONST) {
  36364. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  36365. void **cache_slot = CACHE_ADDR(opline->extended_value);
  36366. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  36367. zend_object *zobj = Z_OBJ_P(object);
  36368. zval *property_val;
  36369. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  36370. property_val = OBJ_PROP(zobj, prop_offset);
  36371. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  36372. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  36373. if (UNEXPECTED(prop_info != NULL)) {
  36374. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  36375. goto free_and_exit_assign_obj;
  36376. } else {
  36377. fast_assign_obj:
  36378. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  36379. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36380. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36381. }
  36382. goto exit_assign_obj;
  36383. }
  36384. }
  36385. } else {
  36386. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36387. if (EXPECTED(zobj->properties != NULL)) {
  36388. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  36389. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  36390. GC_DELREF(zobj->properties);
  36391. }
  36392. zobj->properties = zend_array_dup(zobj->properties);
  36393. }
  36394. property_val = zend_hash_find_known_hash(zobj->properties, name);
  36395. if (property_val) {
  36396. goto fast_assign_obj;
  36397. }
  36398. }
  36399. if (!zobj->ce->__set) {
  36400. if (EXPECTED(zobj->properties == NULL)) {
  36401. rebuild_object_properties(zobj);
  36402. }
  36403. if (IS_VAR == IS_CONST) {
  36404. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  36405. Z_ADDREF_P(value);
  36406. }
  36407. } else if (IS_VAR != IS_TMP_VAR) {
  36408. if (Z_ISREF_P(value)) {
  36409. if (IS_VAR == IS_VAR) {
  36410. zend_reference *ref = Z_REF_P(value);
  36411. if (GC_DELREF(ref) == 0) {
  36412. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  36413. efree_size(ref, sizeof(zend_reference));
  36414. value = &tmp;
  36415. } else {
  36416. value = Z_REFVAL_P(value);
  36417. Z_TRY_ADDREF_P(value);
  36418. }
  36419. } else {
  36420. value = Z_REFVAL_P(value);
  36421. Z_TRY_ADDREF_P(value);
  36422. }
  36423. } else if (IS_VAR == IS_CV) {
  36424. Z_TRY_ADDREF_P(value);
  36425. }
  36426. }
  36427. zend_hash_add_new(zobj->properties, name, value);
  36428. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36429. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36430. }
  36431. goto exit_assign_obj;
  36432. }
  36433. }
  36434. }
  36435. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36436. } else {
  36437. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  36438. if (UNEXPECTED(!name)) {
  36439. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36440. UNDEF_RESULT();
  36441. goto exit_assign_obj;
  36442. }
  36443. }
  36444. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  36445. ZVAL_DEREF(value);
  36446. }
  36447. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  36448. if (IS_CONST != IS_CONST) {
  36449. zend_tmp_string_release(tmp_name);
  36450. }
  36451. free_and_exit_assign_obj:
  36452. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36453. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  36454. }
  36455. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36456. exit_assign_obj:
  36457. /* assign_obj has two opcodes! */
  36458. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  36459. }
  36460. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  36461. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36462. {
  36463. USE_OPLINE
  36464. zval *object, *value, tmp;
  36465. zend_object *zobj;
  36466. zend_string *name, *tmp_name;
  36467. SAVE_OPLINE();
  36468. object = EX_VAR(opline->op1.var);
  36469. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  36470. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  36471. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  36472. object = Z_REFVAL_P(object);
  36473. goto assign_object;
  36474. }
  36475. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  36476. value = &EG(uninitialized_zval);
  36477. goto free_and_exit_assign_obj;
  36478. }
  36479. assign_object:
  36480. zobj = Z_OBJ_P(object);
  36481. if (IS_CONST == IS_CONST) {
  36482. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  36483. void **cache_slot = CACHE_ADDR(opline->extended_value);
  36484. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  36485. zend_object *zobj = Z_OBJ_P(object);
  36486. zval *property_val;
  36487. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  36488. property_val = OBJ_PROP(zobj, prop_offset);
  36489. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  36490. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  36491. if (UNEXPECTED(prop_info != NULL)) {
  36492. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  36493. goto free_and_exit_assign_obj;
  36494. } else {
  36495. fast_assign_obj:
  36496. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  36497. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36498. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36499. }
  36500. goto exit_assign_obj;
  36501. }
  36502. }
  36503. } else {
  36504. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36505. if (EXPECTED(zobj->properties != NULL)) {
  36506. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  36507. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  36508. GC_DELREF(zobj->properties);
  36509. }
  36510. zobj->properties = zend_array_dup(zobj->properties);
  36511. }
  36512. property_val = zend_hash_find_known_hash(zobj->properties, name);
  36513. if (property_val) {
  36514. goto fast_assign_obj;
  36515. }
  36516. }
  36517. if (!zobj->ce->__set) {
  36518. if (EXPECTED(zobj->properties == NULL)) {
  36519. rebuild_object_properties(zobj);
  36520. }
  36521. if (IS_CV == IS_CONST) {
  36522. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  36523. Z_ADDREF_P(value);
  36524. }
  36525. } else if (IS_CV != IS_TMP_VAR) {
  36526. if (Z_ISREF_P(value)) {
  36527. if (IS_CV == IS_VAR) {
  36528. zend_reference *ref = Z_REF_P(value);
  36529. if (GC_DELREF(ref) == 0) {
  36530. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  36531. efree_size(ref, sizeof(zend_reference));
  36532. value = &tmp;
  36533. } else {
  36534. value = Z_REFVAL_P(value);
  36535. Z_TRY_ADDREF_P(value);
  36536. }
  36537. } else {
  36538. value = Z_REFVAL_P(value);
  36539. Z_TRY_ADDREF_P(value);
  36540. }
  36541. } else if (IS_CV == IS_CV) {
  36542. Z_TRY_ADDREF_P(value);
  36543. }
  36544. }
  36545. zend_hash_add_new(zobj->properties, name, value);
  36546. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36547. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36548. }
  36549. goto exit_assign_obj;
  36550. }
  36551. }
  36552. }
  36553. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36554. } else {
  36555. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  36556. if (UNEXPECTED(!name)) {
  36557. UNDEF_RESULT();
  36558. goto exit_assign_obj;
  36559. }
  36560. }
  36561. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  36562. ZVAL_DEREF(value);
  36563. }
  36564. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  36565. if (IS_CONST != IS_CONST) {
  36566. zend_tmp_string_release(tmp_name);
  36567. }
  36568. free_and_exit_assign_obj:
  36569. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36570. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  36571. }
  36572. exit_assign_obj:
  36573. /* assign_obj has two opcodes! */
  36574. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  36575. }
  36576. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  36577. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36578. {
  36579. USE_OPLINE
  36580. zval *object_ptr, *orig_object_ptr;
  36581. zval *value;
  36582. zval *variable_ptr;
  36583. zval *dim;
  36584. SAVE_OPLINE();
  36585. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  36586. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  36587. try_assign_dim_array:
  36588. SEPARATE_ARRAY(object_ptr);
  36589. if (IS_CONST == IS_UNUSED) {
  36590. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  36591. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  36592. HashTable *ht = Z_ARRVAL_P(object_ptr);
  36593. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  36594. GC_ADDREF(ht);
  36595. }
  36596. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  36597. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  36598. zend_array_destroy(ht);
  36599. goto assign_dim_error;
  36600. }
  36601. }
  36602. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  36603. ZVAL_DEREF(value);
  36604. }
  36605. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  36606. if (UNEXPECTED(value == NULL)) {
  36607. zend_cannot_add_element();
  36608. goto assign_dim_error;
  36609. } else if (IS_CONST == IS_CV) {
  36610. if (Z_REFCOUNTED_P(value)) {
  36611. Z_ADDREF_P(value);
  36612. }
  36613. } else if (IS_CONST == IS_VAR) {
  36614. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  36615. if (Z_ISREF_P(free_op_data)) {
  36616. if (Z_REFCOUNTED_P(value)) {
  36617. Z_ADDREF_P(value);
  36618. }
  36619. zval_ptr_dtor_nogc(free_op_data);
  36620. }
  36621. } else if (IS_CONST == IS_CONST) {
  36622. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  36623. Z_ADDREF_P(value);
  36624. }
  36625. }
  36626. } else {
  36627. dim = RT_CONSTANT(opline, opline->op2);
  36628. if (IS_CONST == IS_CONST) {
  36629. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  36630. } else {
  36631. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  36632. }
  36633. if (UNEXPECTED(variable_ptr == NULL)) {
  36634. goto assign_dim_error;
  36635. }
  36636. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  36637. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  36638. }
  36639. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36640. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36641. }
  36642. } else {
  36643. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  36644. object_ptr = Z_REFVAL_P(object_ptr);
  36645. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  36646. goto try_assign_dim_array;
  36647. }
  36648. }
  36649. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  36650. zend_object *obj = Z_OBJ_P(object_ptr);
  36651. GC_ADDREF(obj);
  36652. dim = RT_CONSTANT(opline, opline->op2);
  36653. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  36654. dim = ZVAL_UNDEFINED_OP2();
  36655. } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  36656. dim++;
  36657. }
  36658. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  36659. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  36660. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  36661. } else if (IS_CONST & (IS_CV|IS_VAR)) {
  36662. ZVAL_DEREF(value);
  36663. }
  36664. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  36665. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  36666. zend_objects_store_del(obj);
  36667. }
  36668. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  36669. if (IS_CONST == IS_UNUSED) {
  36670. zend_use_new_element_for_string();
  36671. UNDEF_RESULT();
  36672. } else {
  36673. dim = RT_CONSTANT(opline, opline->op2);
  36674. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  36675. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  36676. }
  36677. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  36678. if (Z_ISREF_P(orig_object_ptr)
  36679. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  36680. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  36681. dim = RT_CONSTANT(opline, opline->op2);
  36682. UNDEF_RESULT();
  36683. } else {
  36684. HashTable *ht = zend_new_array(8);
  36685. zend_uchar old_type = Z_TYPE_P(object_ptr);
  36686. ZVAL_ARR(object_ptr, ht);
  36687. if (UNEXPECTED(old_type == IS_FALSE)) {
  36688. GC_ADDREF(ht);
  36689. zend_false_to_array_deprecated();
  36690. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  36691. zend_array_destroy(ht);
  36692. goto assign_dim_error;
  36693. }
  36694. }
  36695. goto try_assign_dim_array;
  36696. }
  36697. } else {
  36698. zend_use_scalar_as_array();
  36699. dim = RT_CONSTANT(opline, opline->op2);
  36700. assign_dim_error:
  36701. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36702. ZVAL_NULL(EX_VAR(opline->result.var));
  36703. }
  36704. }
  36705. }
  36706. if (IS_CONST != IS_UNUSED) {
  36707. }
  36708. /* assign_dim has two opcodes! */
  36709. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  36710. }
  36711. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36712. {
  36713. USE_OPLINE
  36714. zval *object_ptr, *orig_object_ptr;
  36715. zval *value;
  36716. zval *variable_ptr;
  36717. zval *dim;
  36718. SAVE_OPLINE();
  36719. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  36720. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  36721. try_assign_dim_array:
  36722. SEPARATE_ARRAY(object_ptr);
  36723. if (IS_CONST == IS_UNUSED) {
  36724. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  36725. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  36726. HashTable *ht = Z_ARRVAL_P(object_ptr);
  36727. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  36728. GC_ADDREF(ht);
  36729. }
  36730. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  36731. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  36732. zend_array_destroy(ht);
  36733. goto assign_dim_error;
  36734. }
  36735. }
  36736. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  36737. ZVAL_DEREF(value);
  36738. }
  36739. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  36740. if (UNEXPECTED(value == NULL)) {
  36741. zend_cannot_add_element();
  36742. goto assign_dim_error;
  36743. } else if (IS_TMP_VAR == IS_CV) {
  36744. if (Z_REFCOUNTED_P(value)) {
  36745. Z_ADDREF_P(value);
  36746. }
  36747. } else if (IS_TMP_VAR == IS_VAR) {
  36748. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  36749. if (Z_ISREF_P(free_op_data)) {
  36750. if (Z_REFCOUNTED_P(value)) {
  36751. Z_ADDREF_P(value);
  36752. }
  36753. zval_ptr_dtor_nogc(free_op_data);
  36754. }
  36755. } else if (IS_TMP_VAR == IS_CONST) {
  36756. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  36757. Z_ADDREF_P(value);
  36758. }
  36759. }
  36760. } else {
  36761. dim = RT_CONSTANT(opline, opline->op2);
  36762. if (IS_CONST == IS_CONST) {
  36763. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  36764. } else {
  36765. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  36766. }
  36767. if (UNEXPECTED(variable_ptr == NULL)) {
  36768. goto assign_dim_error;
  36769. }
  36770. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  36771. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  36772. }
  36773. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36774. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36775. }
  36776. } else {
  36777. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  36778. object_ptr = Z_REFVAL_P(object_ptr);
  36779. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  36780. goto try_assign_dim_array;
  36781. }
  36782. }
  36783. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  36784. zend_object *obj = Z_OBJ_P(object_ptr);
  36785. GC_ADDREF(obj);
  36786. dim = RT_CONSTANT(opline, opline->op2);
  36787. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  36788. dim = ZVAL_UNDEFINED_OP2();
  36789. } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  36790. dim++;
  36791. }
  36792. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  36793. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  36794. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  36795. } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
  36796. ZVAL_DEREF(value);
  36797. }
  36798. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  36799. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36800. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  36801. zend_objects_store_del(obj);
  36802. }
  36803. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  36804. if (IS_CONST == IS_UNUSED) {
  36805. zend_use_new_element_for_string();
  36806. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36807. UNDEF_RESULT();
  36808. } else {
  36809. dim = RT_CONSTANT(opline, opline->op2);
  36810. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  36811. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  36812. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36813. }
  36814. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  36815. if (Z_ISREF_P(orig_object_ptr)
  36816. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  36817. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  36818. dim = RT_CONSTANT(opline, opline->op2);
  36819. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36820. UNDEF_RESULT();
  36821. } else {
  36822. HashTable *ht = zend_new_array(8);
  36823. zend_uchar old_type = Z_TYPE_P(object_ptr);
  36824. ZVAL_ARR(object_ptr, ht);
  36825. if (UNEXPECTED(old_type == IS_FALSE)) {
  36826. GC_ADDREF(ht);
  36827. zend_false_to_array_deprecated();
  36828. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  36829. zend_array_destroy(ht);
  36830. goto assign_dim_error;
  36831. }
  36832. }
  36833. goto try_assign_dim_array;
  36834. }
  36835. } else {
  36836. zend_use_scalar_as_array();
  36837. dim = RT_CONSTANT(opline, opline->op2);
  36838. assign_dim_error:
  36839. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36840. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36841. ZVAL_NULL(EX_VAR(opline->result.var));
  36842. }
  36843. }
  36844. }
  36845. if (IS_CONST != IS_UNUSED) {
  36846. }
  36847. /* assign_dim has two opcodes! */
  36848. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  36849. }
  36850. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36851. {
  36852. USE_OPLINE
  36853. zval *object_ptr, *orig_object_ptr;
  36854. zval *value;
  36855. zval *variable_ptr;
  36856. zval *dim;
  36857. SAVE_OPLINE();
  36858. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  36859. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  36860. try_assign_dim_array:
  36861. SEPARATE_ARRAY(object_ptr);
  36862. if (IS_CONST == IS_UNUSED) {
  36863. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  36864. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  36865. HashTable *ht = Z_ARRVAL_P(object_ptr);
  36866. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  36867. GC_ADDREF(ht);
  36868. }
  36869. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  36870. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  36871. zend_array_destroy(ht);
  36872. goto assign_dim_error;
  36873. }
  36874. }
  36875. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  36876. ZVAL_DEREF(value);
  36877. }
  36878. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  36879. if (UNEXPECTED(value == NULL)) {
  36880. zend_cannot_add_element();
  36881. goto assign_dim_error;
  36882. } else if (IS_VAR == IS_CV) {
  36883. if (Z_REFCOUNTED_P(value)) {
  36884. Z_ADDREF_P(value);
  36885. }
  36886. } else if (IS_VAR == IS_VAR) {
  36887. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  36888. if (Z_ISREF_P(free_op_data)) {
  36889. if (Z_REFCOUNTED_P(value)) {
  36890. Z_ADDREF_P(value);
  36891. }
  36892. zval_ptr_dtor_nogc(free_op_data);
  36893. }
  36894. } else if (IS_VAR == IS_CONST) {
  36895. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  36896. Z_ADDREF_P(value);
  36897. }
  36898. }
  36899. } else {
  36900. dim = RT_CONSTANT(opline, opline->op2);
  36901. if (IS_CONST == IS_CONST) {
  36902. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  36903. } else {
  36904. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  36905. }
  36906. if (UNEXPECTED(variable_ptr == NULL)) {
  36907. goto assign_dim_error;
  36908. }
  36909. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  36910. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  36911. }
  36912. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36913. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36914. }
  36915. } else {
  36916. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  36917. object_ptr = Z_REFVAL_P(object_ptr);
  36918. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  36919. goto try_assign_dim_array;
  36920. }
  36921. }
  36922. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  36923. zend_object *obj = Z_OBJ_P(object_ptr);
  36924. GC_ADDREF(obj);
  36925. dim = RT_CONSTANT(opline, opline->op2);
  36926. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  36927. dim = ZVAL_UNDEFINED_OP2();
  36928. } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  36929. dim++;
  36930. }
  36931. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  36932. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  36933. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  36934. } else if (IS_VAR & (IS_CV|IS_VAR)) {
  36935. ZVAL_DEREF(value);
  36936. }
  36937. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  36938. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36939. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  36940. zend_objects_store_del(obj);
  36941. }
  36942. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  36943. if (IS_CONST == IS_UNUSED) {
  36944. zend_use_new_element_for_string();
  36945. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36946. UNDEF_RESULT();
  36947. } else {
  36948. dim = RT_CONSTANT(opline, opline->op2);
  36949. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  36950. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  36951. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36952. }
  36953. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  36954. if (Z_ISREF_P(orig_object_ptr)
  36955. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  36956. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  36957. dim = RT_CONSTANT(opline, opline->op2);
  36958. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36959. UNDEF_RESULT();
  36960. } else {
  36961. HashTable *ht = zend_new_array(8);
  36962. zend_uchar old_type = Z_TYPE_P(object_ptr);
  36963. ZVAL_ARR(object_ptr, ht);
  36964. if (UNEXPECTED(old_type == IS_FALSE)) {
  36965. GC_ADDREF(ht);
  36966. zend_false_to_array_deprecated();
  36967. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  36968. zend_array_destroy(ht);
  36969. goto assign_dim_error;
  36970. }
  36971. }
  36972. goto try_assign_dim_array;
  36973. }
  36974. } else {
  36975. zend_use_scalar_as_array();
  36976. dim = RT_CONSTANT(opline, opline->op2);
  36977. assign_dim_error:
  36978. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36979. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36980. ZVAL_NULL(EX_VAR(opline->result.var));
  36981. }
  36982. }
  36983. }
  36984. if (IS_CONST != IS_UNUSED) {
  36985. }
  36986. /* assign_dim has two opcodes! */
  36987. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  36988. }
  36989. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36990. {
  36991. USE_OPLINE
  36992. zval *object_ptr, *orig_object_ptr;
  36993. zval *value;
  36994. zval *variable_ptr;
  36995. zval *dim;
  36996. SAVE_OPLINE();
  36997. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  36998. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  36999. try_assign_dim_array:
  37000. SEPARATE_ARRAY(object_ptr);
  37001. if (IS_CONST == IS_UNUSED) {
  37002. value = EX_VAR((opline+1)->op1.var);
  37003. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  37004. HashTable *ht = Z_ARRVAL_P(object_ptr);
  37005. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  37006. GC_ADDREF(ht);
  37007. }
  37008. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  37009. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  37010. zend_array_destroy(ht);
  37011. goto assign_dim_error;
  37012. }
  37013. }
  37014. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  37015. ZVAL_DEREF(value);
  37016. }
  37017. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  37018. if (UNEXPECTED(value == NULL)) {
  37019. zend_cannot_add_element();
  37020. goto assign_dim_error;
  37021. } else if (IS_CV == IS_CV) {
  37022. if (Z_REFCOUNTED_P(value)) {
  37023. Z_ADDREF_P(value);
  37024. }
  37025. } else if (IS_CV == IS_VAR) {
  37026. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  37027. if (Z_ISREF_P(free_op_data)) {
  37028. if (Z_REFCOUNTED_P(value)) {
  37029. Z_ADDREF_P(value);
  37030. }
  37031. zval_ptr_dtor_nogc(free_op_data);
  37032. }
  37033. } else if (IS_CV == IS_CONST) {
  37034. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  37035. Z_ADDREF_P(value);
  37036. }
  37037. }
  37038. } else {
  37039. dim = RT_CONSTANT(opline, opline->op2);
  37040. if (IS_CONST == IS_CONST) {
  37041. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  37042. } else {
  37043. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  37044. }
  37045. if (UNEXPECTED(variable_ptr == NULL)) {
  37046. goto assign_dim_error;
  37047. }
  37048. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  37049. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  37050. }
  37051. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  37052. ZVAL_COPY(EX_VAR(opline->result.var), value);
  37053. }
  37054. } else {
  37055. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  37056. object_ptr = Z_REFVAL_P(object_ptr);
  37057. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  37058. goto try_assign_dim_array;
  37059. }
  37060. }
  37061. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  37062. zend_object *obj = Z_OBJ_P(object_ptr);
  37063. GC_ADDREF(obj);
  37064. dim = RT_CONSTANT(opline, opline->op2);
  37065. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  37066. dim = ZVAL_UNDEFINED_OP2();
  37067. } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  37068. dim++;
  37069. }
  37070. value = EX_VAR((opline+1)->op1.var);
  37071. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  37072. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  37073. } else if (IS_CV & (IS_CV|IS_VAR)) {
  37074. ZVAL_DEREF(value);
  37075. }
  37076. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  37077. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  37078. zend_objects_store_del(obj);
  37079. }
  37080. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  37081. if (IS_CONST == IS_UNUSED) {
  37082. zend_use_new_element_for_string();
  37083. UNDEF_RESULT();
  37084. } else {
  37085. dim = RT_CONSTANT(opline, opline->op2);
  37086. value = EX_VAR((opline+1)->op1.var);
  37087. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  37088. }
  37089. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  37090. if (Z_ISREF_P(orig_object_ptr)
  37091. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  37092. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  37093. dim = RT_CONSTANT(opline, opline->op2);
  37094. UNDEF_RESULT();
  37095. } else {
  37096. HashTable *ht = zend_new_array(8);
  37097. zend_uchar old_type = Z_TYPE_P(object_ptr);
  37098. ZVAL_ARR(object_ptr, ht);
  37099. if (UNEXPECTED(old_type == IS_FALSE)) {
  37100. GC_ADDREF(ht);
  37101. zend_false_to_array_deprecated();
  37102. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  37103. zend_array_destroy(ht);
  37104. goto assign_dim_error;
  37105. }
  37106. }
  37107. goto try_assign_dim_array;
  37108. }
  37109. } else {
  37110. zend_use_scalar_as_array();
  37111. dim = RT_CONSTANT(opline, opline->op2);
  37112. assign_dim_error:
  37113. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  37114. ZVAL_NULL(EX_VAR(opline->result.var));
  37115. }
  37116. }
  37117. }
  37118. if (IS_CONST != IS_UNUSED) {
  37119. }
  37120. /* assign_dim has two opcodes! */
  37121. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  37122. }
  37123. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37124. {
  37125. USE_OPLINE
  37126. zval *value;
  37127. zval *variable_ptr;
  37128. SAVE_OPLINE();
  37129. value = RT_CONSTANT(opline, opline->op2);
  37130. variable_ptr = EX_VAR(opline->op1.var);
  37131. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  37132. if (UNEXPECTED(0)) {
  37133. ZVAL_COPY(EX_VAR(opline->result.var), value);
  37134. }
  37135. /* zend_assign_to_variable() always takes care of op2, never free it! */
  37136. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37137. }
  37138. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37139. {
  37140. USE_OPLINE
  37141. zval *value;
  37142. zval *variable_ptr;
  37143. SAVE_OPLINE();
  37144. value = RT_CONSTANT(opline, opline->op2);
  37145. variable_ptr = EX_VAR(opline->op1.var);
  37146. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  37147. if (UNEXPECTED(1)) {
  37148. ZVAL_COPY(EX_VAR(opline->result.var), value);
  37149. }
  37150. /* zend_assign_to_variable() always takes care of op2, never free it! */
  37151. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37152. }
  37153. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37154. {
  37155. USE_OPLINE
  37156. zval *property, *container, *value_ptr;
  37157. SAVE_OPLINE();
  37158. container = EX_VAR(opline->op1.var);
  37159. property = RT_CONSTANT(opline, opline->op2);
  37160. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  37161. if (1) {
  37162. if (IS_CV == IS_UNUSED) {
  37163. if (IS_CONST == IS_CONST) {
  37164. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37165. } else {
  37166. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37167. }
  37168. } else {
  37169. if (IS_CONST == IS_CONST) {
  37170. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37171. } else {
  37172. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37173. }
  37174. }
  37175. } else {
  37176. zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37177. }
  37178. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  37179. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  37180. }
  37181. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  37182. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37183. {
  37184. USE_OPLINE
  37185. zval *property, *container, *value_ptr;
  37186. SAVE_OPLINE();
  37187. container = EX_VAR(opline->op1.var);
  37188. property = RT_CONSTANT(opline, opline->op2);
  37189. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  37190. if (1) {
  37191. if (IS_CV == IS_UNUSED) {
  37192. if (IS_CONST == IS_CONST) {
  37193. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37194. } else {
  37195. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37196. }
  37197. } else {
  37198. if (IS_CONST == IS_CONST) {
  37199. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37200. } else {
  37201. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37202. }
  37203. }
  37204. } else {
  37205. zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37206. }
  37207. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  37208. }
  37209. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  37210. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37211. {
  37212. USE_OPLINE
  37213. zval *op1, *op2;
  37214. zend_string *op1_str, *op2_str, *str;
  37215. op1 = EX_VAR(opline->op1.var);
  37216. op2 = RT_CONSTANT(opline, opline->op2);
  37217. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  37218. (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  37219. zend_string *op1_str = Z_STR_P(op1);
  37220. zend_string *op2_str = Z_STR_P(op2);
  37221. zend_string *str;
  37222. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  37223. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  37224. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  37225. } else {
  37226. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  37227. }
  37228. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  37229. zend_string_release_ex(op1_str, 0);
  37230. }
  37231. } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  37232. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  37233. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  37234. } else {
  37235. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  37236. }
  37237. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  37238. zend_string_release_ex(op2_str, 0);
  37239. }
  37240. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  37241. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  37242. size_t len = ZSTR_LEN(op1_str);
  37243. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  37244. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  37245. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  37246. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  37247. zend_string_release_ex(op2_str, 0);
  37248. }
  37249. } else {
  37250. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  37251. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  37252. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  37253. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  37254. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  37255. zend_string_release_ex(op1_str, 0);
  37256. }
  37257. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  37258. zend_string_release_ex(op2_str, 0);
  37259. }
  37260. }
  37261. ZEND_VM_NEXT_OPCODE();
  37262. }
  37263. SAVE_OPLINE();
  37264. if (IS_CV == IS_CONST) {
  37265. op1_str = Z_STR_P(op1);
  37266. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  37267. op1_str = zend_string_copy(Z_STR_P(op1));
  37268. } else {
  37269. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  37270. ZVAL_UNDEFINED_OP1();
  37271. }
  37272. op1_str = zval_get_string_func(op1);
  37273. }
  37274. if (IS_CONST == IS_CONST) {
  37275. op2_str = Z_STR_P(op2);
  37276. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  37277. op2_str = zend_string_copy(Z_STR_P(op2));
  37278. } else {
  37279. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  37280. ZVAL_UNDEFINED_OP2();
  37281. }
  37282. op2_str = zval_get_string_func(op2);
  37283. }
  37284. do {
  37285. if (IS_CV != IS_CONST) {
  37286. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  37287. if (IS_CONST == IS_CONST) {
  37288. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  37289. GC_ADDREF(op2_str);
  37290. }
  37291. }
  37292. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  37293. zend_string_release_ex(op1_str, 0);
  37294. break;
  37295. }
  37296. }
  37297. if (IS_CONST != IS_CONST) {
  37298. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  37299. if (IS_CV == IS_CONST) {
  37300. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  37301. GC_ADDREF(op1_str);
  37302. }
  37303. }
  37304. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  37305. zend_string_release_ex(op2_str, 0);
  37306. break;
  37307. }
  37308. }
  37309. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  37310. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  37311. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  37312. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  37313. if (IS_CV != IS_CONST) {
  37314. zend_string_release_ex(op1_str, 0);
  37315. }
  37316. if (IS_CONST != IS_CONST) {
  37317. zend_string_release_ex(op2_str, 0);
  37318. }
  37319. } while (0);
  37320. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37321. }
  37322. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37323. {
  37324. USE_OPLINE
  37325. zval *function_name;
  37326. zval *object;
  37327. zend_function *fbc;
  37328. zend_class_entry *called_scope;
  37329. zend_object *obj;
  37330. zend_execute_data *call;
  37331. uint32_t call_info;
  37332. SAVE_OPLINE();
  37333. object = EX_VAR(opline->op1.var);
  37334. if (IS_CONST != IS_CONST) {
  37335. function_name = RT_CONSTANT(opline, opline->op2);
  37336. }
  37337. if (IS_CONST != IS_CONST &&
  37338. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  37339. do {
  37340. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  37341. function_name = Z_REFVAL_P(function_name);
  37342. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  37343. break;
  37344. }
  37345. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  37346. ZVAL_UNDEFINED_OP2();
  37347. if (UNEXPECTED(EG(exception) != NULL)) {
  37348. HANDLE_EXCEPTION();
  37349. }
  37350. }
  37351. zend_throw_error(NULL, "Method name must be a string");
  37352. HANDLE_EXCEPTION();
  37353. } while (0);
  37354. }
  37355. if (IS_CV == IS_UNUSED) {
  37356. obj = Z_OBJ_P(object);
  37357. } else {
  37358. do {
  37359. if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  37360. obj = Z_OBJ_P(object);
  37361. } else {
  37362. if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  37363. zend_reference *ref = Z_REF_P(object);
  37364. object = &ref->val;
  37365. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  37366. obj = Z_OBJ_P(object);
  37367. if (IS_CV & IS_VAR) {
  37368. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  37369. efree_size(ref, sizeof(zend_reference));
  37370. } else {
  37371. Z_ADDREF_P(object);
  37372. }
  37373. }
  37374. break;
  37375. }
  37376. }
  37377. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  37378. object = ZVAL_UNDEFINED_OP1();
  37379. if (UNEXPECTED(EG(exception) != NULL)) {
  37380. if (IS_CONST != IS_CONST) {
  37381. }
  37382. HANDLE_EXCEPTION();
  37383. }
  37384. }
  37385. if (IS_CONST == IS_CONST) {
  37386. function_name = RT_CONSTANT(opline, opline->op2);
  37387. }
  37388. zend_invalid_method_call(object, function_name);
  37389. HANDLE_EXCEPTION();
  37390. }
  37391. } while (0);
  37392. }
  37393. called_scope = obj->ce;
  37394. if (IS_CONST == IS_CONST &&
  37395. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  37396. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  37397. } else {
  37398. zend_object *orig_obj = obj;
  37399. if (IS_CONST == IS_CONST) {
  37400. function_name = RT_CONSTANT(opline, opline->op2);
  37401. }
  37402. /* First, locate the function. */
  37403. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  37404. if (UNEXPECTED(fbc == NULL)) {
  37405. if (EXPECTED(!EG(exception))) {
  37406. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  37407. }
  37408. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  37409. zend_objects_store_del(orig_obj);
  37410. }
  37411. HANDLE_EXCEPTION();
  37412. }
  37413. if (IS_CONST == IS_CONST &&
  37414. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  37415. EXPECTED(obj == orig_obj)) {
  37416. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  37417. }
  37418. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  37419. GC_ADDREF(obj); /* For $this pointer */
  37420. if (GC_DELREF(orig_obj) == 0) {
  37421. zend_objects_store_del(orig_obj);
  37422. }
  37423. }
  37424. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  37425. init_func_run_time_cache(&fbc->op_array);
  37426. }
  37427. }
  37428. if (IS_CONST != IS_CONST) {
  37429. }
  37430. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  37431. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  37432. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  37433. zend_objects_store_del(obj);
  37434. if (UNEXPECTED(EG(exception))) {
  37435. HANDLE_EXCEPTION();
  37436. }
  37437. }
  37438. /* call static method */
  37439. obj = (zend_object*)called_scope;
  37440. call_info = ZEND_CALL_NESTED_FUNCTION;
  37441. } else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  37442. if (IS_CV == IS_CV) {
  37443. GC_ADDREF(obj); /* For $this pointer */
  37444. }
  37445. /* CV may be changed indirectly (e.g. when it's a reference) */
  37446. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  37447. }
  37448. call = zend_vm_stack_push_call_frame(call_info,
  37449. fbc, opline->extended_value, obj);
  37450. call->prev_execute_data = EX(call);
  37451. EX(call) = call;
  37452. ZEND_VM_NEXT_OPCODE();
  37453. }
  37454. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37455. {
  37456. USE_OPLINE
  37457. zval *varptr, *arg;
  37458. if (IS_CONST == IS_CONST) {
  37459. SAVE_OPLINE();
  37460. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  37461. uint32_t arg_num;
  37462. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  37463. if (UNEXPECTED(!arg)) {
  37464. HANDLE_EXCEPTION();
  37465. }
  37466. } else {
  37467. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  37468. }
  37469. varptr = EX_VAR(opline->op1.var);
  37470. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  37471. SAVE_OPLINE();
  37472. ZVAL_UNDEFINED_OP1();
  37473. ZVAL_NULL(arg);
  37474. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37475. }
  37476. if (IS_CV == IS_CV) {
  37477. ZVAL_COPY_DEREF(arg, varptr);
  37478. } else /* if (IS_CV == IS_VAR) */ {
  37479. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  37480. zend_refcounted *ref = Z_COUNTED_P(varptr);
  37481. varptr = Z_REFVAL_P(varptr);
  37482. ZVAL_COPY_VALUE(arg, varptr);
  37483. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  37484. efree_size(ref, sizeof(zend_reference));
  37485. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  37486. Z_ADDREF_P(arg);
  37487. }
  37488. } else {
  37489. ZVAL_COPY_VALUE(arg, varptr);
  37490. }
  37491. }
  37492. ZEND_VM_NEXT_OPCODE();
  37493. }
  37494. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37495. {
  37496. USE_OPLINE
  37497. zval *varptr, *arg;
  37498. SAVE_OPLINE();
  37499. if (IS_CONST == IS_CONST) {
  37500. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  37501. uint32_t arg_num;
  37502. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  37503. if (UNEXPECTED(!arg)) {
  37504. HANDLE_EXCEPTION();
  37505. }
  37506. } else {
  37507. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  37508. }
  37509. varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  37510. if (Z_ISREF_P(varptr)) {
  37511. Z_ADDREF_P(varptr);
  37512. } else {
  37513. ZVAL_MAKE_REF_EX(varptr, 2);
  37514. }
  37515. ZVAL_REF(arg, Z_REF_P(varptr));
  37516. ZEND_VM_NEXT_OPCODE();
  37517. }
  37518. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37519. {
  37520. USE_OPLINE
  37521. zval *varptr, *arg;
  37522. uint32_t arg_num;
  37523. if (IS_CONST == IS_CONST) {
  37524. SAVE_OPLINE();
  37525. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  37526. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  37527. if (UNEXPECTED(!arg)) {
  37528. HANDLE_EXCEPTION();
  37529. }
  37530. } else {
  37531. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  37532. arg_num = opline->op2.num;
  37533. }
  37534. if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
  37535. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  37536. goto send_var_by_ref;
  37537. }
  37538. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  37539. send_var_by_ref:
  37540. varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  37541. if (Z_ISREF_P(varptr)) {
  37542. Z_ADDREF_P(varptr);
  37543. } else {
  37544. ZVAL_MAKE_REF_EX(varptr, 2);
  37545. }
  37546. ZVAL_REF(arg, Z_REF_P(varptr));
  37547. ZEND_VM_NEXT_OPCODE();
  37548. }
  37549. varptr = EX_VAR(opline->op1.var);
  37550. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  37551. SAVE_OPLINE();
  37552. ZVAL_UNDEFINED_OP1();
  37553. ZVAL_NULL(arg);
  37554. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37555. }
  37556. if (IS_CV == IS_CV) {
  37557. ZVAL_COPY_DEREF(arg, varptr);
  37558. } else /* if (IS_CV == IS_VAR) */ {
  37559. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  37560. zend_refcounted *ref = Z_COUNTED_P(varptr);
  37561. varptr = Z_REFVAL_P(varptr);
  37562. ZVAL_COPY_VALUE(arg, varptr);
  37563. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  37564. efree_size(ref, sizeof(zend_reference));
  37565. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  37566. Z_ADDREF_P(arg);
  37567. }
  37568. } else {
  37569. ZVAL_COPY_VALUE(arg, varptr);
  37570. }
  37571. }
  37572. ZEND_VM_NEXT_OPCODE();
  37573. }
  37574. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37575. {
  37576. USE_OPLINE
  37577. zval *expr_ptr, new_expr;
  37578. SAVE_OPLINE();
  37579. if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
  37580. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  37581. expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  37582. if (Z_ISREF_P(expr_ptr)) {
  37583. Z_ADDREF_P(expr_ptr);
  37584. } else {
  37585. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  37586. }
  37587. } else {
  37588. expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  37589. if (IS_CV == IS_TMP_VAR) {
  37590. /* pass */
  37591. } else if (IS_CV == IS_CONST) {
  37592. Z_TRY_ADDREF_P(expr_ptr);
  37593. } else if (IS_CV == IS_CV) {
  37594. ZVAL_DEREF(expr_ptr);
  37595. Z_TRY_ADDREF_P(expr_ptr);
  37596. } else /* if (IS_CV == IS_VAR) */ {
  37597. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  37598. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  37599. expr_ptr = Z_REFVAL_P(expr_ptr);
  37600. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  37601. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  37602. expr_ptr = &new_expr;
  37603. efree_size(ref, sizeof(zend_reference));
  37604. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  37605. Z_ADDREF_P(expr_ptr);
  37606. }
  37607. }
  37608. }
  37609. }
  37610. if (IS_CONST != IS_UNUSED) {
  37611. zval *offset = RT_CONSTANT(opline, opline->op2);
  37612. zend_string *str;
  37613. zend_ulong hval;
  37614. add_again:
  37615. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  37616. str = Z_STR_P(offset);
  37617. if (IS_CONST != IS_CONST) {
  37618. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  37619. goto num_index;
  37620. }
  37621. }
  37622. str_index:
  37623. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  37624. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  37625. hval = Z_LVAL_P(offset);
  37626. num_index:
  37627. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  37628. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  37629. offset = Z_REFVAL_P(offset);
  37630. goto add_again;
  37631. } else if (Z_TYPE_P(offset) == IS_NULL) {
  37632. str = ZSTR_EMPTY_ALLOC();
  37633. goto str_index;
  37634. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  37635. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  37636. goto num_index;
  37637. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  37638. hval = 0;
  37639. goto num_index;
  37640. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  37641. hval = 1;
  37642. goto num_index;
  37643. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  37644. zend_use_resource_as_offset(offset);
  37645. hval = Z_RES_HANDLE_P(offset);
  37646. goto num_index;
  37647. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  37648. ZVAL_UNDEFINED_OP2();
  37649. str = ZSTR_EMPTY_ALLOC();
  37650. goto str_index;
  37651. } else {
  37652. zend_illegal_offset();
  37653. zval_ptr_dtor_nogc(expr_ptr);
  37654. }
  37655. } else {
  37656. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  37657. zend_cannot_add_element();
  37658. zval_ptr_dtor_nogc(expr_ptr);
  37659. }
  37660. }
  37661. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37662. }
  37663. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37664. {
  37665. zval *array;
  37666. uint32_t size;
  37667. USE_OPLINE
  37668. array = EX_VAR(opline->result.var);
  37669. if (IS_CV != IS_UNUSED) {
  37670. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  37671. ZVAL_ARR(array, zend_new_array(size));
  37672. /* Explicitly initialize array as not-packed if flag is set */
  37673. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  37674. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  37675. }
  37676. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37677. } else {
  37678. ZVAL_ARR(array, zend_new_array(0));
  37679. ZEND_VM_NEXT_OPCODE();
  37680. }
  37681. }
  37682. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37683. {
  37684. USE_OPLINE
  37685. zval *container;
  37686. zval *offset;
  37687. zend_ulong hval;
  37688. zend_string *key;
  37689. SAVE_OPLINE();
  37690. container = EX_VAR(opline->op1.var);
  37691. offset = RT_CONSTANT(opline, opline->op2);
  37692. do {
  37693. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  37694. HashTable *ht;
  37695. unset_dim_array:
  37696. SEPARATE_ARRAY(container);
  37697. ht = Z_ARRVAL_P(container);
  37698. offset_again:
  37699. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  37700. key = Z_STR_P(offset);
  37701. if (IS_CONST != IS_CONST) {
  37702. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  37703. goto num_index_dim;
  37704. }
  37705. }
  37706. str_index_dim:
  37707. ZEND_ASSERT(ht != &EG(symbol_table));
  37708. zend_hash_del(ht, key);
  37709. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  37710. hval = Z_LVAL_P(offset);
  37711. num_index_dim:
  37712. zend_hash_index_del(ht, hval);
  37713. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  37714. offset = Z_REFVAL_P(offset);
  37715. goto offset_again;
  37716. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  37717. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  37718. goto num_index_dim;
  37719. } else if (Z_TYPE_P(offset) == IS_NULL) {
  37720. key = ZSTR_EMPTY_ALLOC();
  37721. goto str_index_dim;
  37722. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  37723. hval = 0;
  37724. goto num_index_dim;
  37725. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  37726. hval = 1;
  37727. goto num_index_dim;
  37728. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  37729. zend_use_resource_as_offset(offset);
  37730. hval = Z_RES_HANDLE_P(offset);
  37731. goto num_index_dim;
  37732. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  37733. ZVAL_UNDEFINED_OP2();
  37734. key = ZSTR_EMPTY_ALLOC();
  37735. goto str_index_dim;
  37736. } else {
  37737. zend_type_error("Illegal offset type in unset");
  37738. }
  37739. break;
  37740. } else if (Z_ISREF_P(container)) {
  37741. container = Z_REFVAL_P(container);
  37742. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  37743. goto unset_dim_array;
  37744. }
  37745. }
  37746. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  37747. container = ZVAL_UNDEFINED_OP1();
  37748. }
  37749. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  37750. offset = ZVAL_UNDEFINED_OP2();
  37751. }
  37752. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  37753. if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  37754. offset++;
  37755. }
  37756. Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
  37757. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  37758. zend_throw_error(NULL, "Cannot unset string offsets");
  37759. } else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
  37760. zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
  37761. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
  37762. zend_false_to_array_deprecated();
  37763. }
  37764. } while (0);
  37765. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37766. }
  37767. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37768. {
  37769. USE_OPLINE
  37770. zval *container;
  37771. zval *offset;
  37772. zend_string *name, *tmp_name;
  37773. SAVE_OPLINE();
  37774. container = EX_VAR(opline->op1.var);
  37775. offset = RT_CONSTANT(opline, opline->op2);
  37776. do {
  37777. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  37778. if (Z_ISREF_P(container)) {
  37779. container = Z_REFVAL_P(container);
  37780. if (Z_TYPE_P(container) != IS_OBJECT) {
  37781. if (IS_CV == IS_CV
  37782. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  37783. ZVAL_UNDEFINED_OP1();
  37784. }
  37785. break;
  37786. }
  37787. } else {
  37788. break;
  37789. }
  37790. }
  37791. if (IS_CONST == IS_CONST) {
  37792. name = Z_STR_P(offset);
  37793. } else {
  37794. name = zval_try_get_tmp_string(offset, &tmp_name);
  37795. if (UNEXPECTED(!name)) {
  37796. break;
  37797. }
  37798. }
  37799. Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  37800. if (IS_CONST != IS_CONST) {
  37801. zend_tmp_string_release(tmp_name);
  37802. }
  37803. } while (0);
  37804. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37805. }
  37806. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37807. {
  37808. USE_OPLINE
  37809. zval *container;
  37810. bool result;
  37811. zend_ulong hval;
  37812. zval *offset;
  37813. SAVE_OPLINE();
  37814. container = EX_VAR(opline->op1.var);
  37815. offset = RT_CONSTANT(opline, opline->op2);
  37816. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  37817. HashTable *ht;
  37818. zval *value;
  37819. zend_string *str;
  37820. isset_dim_obj_array:
  37821. ht = Z_ARRVAL_P(container);
  37822. isset_again:
  37823. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  37824. str = Z_STR_P(offset);
  37825. if (IS_CONST != IS_CONST) {
  37826. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  37827. goto num_index_prop;
  37828. }
  37829. }
  37830. value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
  37831. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  37832. hval = Z_LVAL_P(offset);
  37833. num_index_prop:
  37834. value = zend_hash_index_find(ht, hval);
  37835. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  37836. offset = Z_REFVAL_P(offset);
  37837. goto isset_again;
  37838. } else {
  37839. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  37840. if (UNEXPECTED(EG(exception))) {
  37841. result = 0;
  37842. goto isset_dim_obj_exit;
  37843. }
  37844. }
  37845. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  37846. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  37847. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  37848. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  37849. if (IS_CV & (IS_CONST|IS_CV)) {
  37850. /* avoid exception check */
  37851. ZEND_VM_SMART_BRANCH(result, 0);
  37852. }
  37853. } else {
  37854. result = (value == NULL || !i_zend_is_true(value));
  37855. }
  37856. goto isset_dim_obj_exit;
  37857. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  37858. container = Z_REFVAL_P(container);
  37859. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  37860. goto isset_dim_obj_array;
  37861. }
  37862. }
  37863. if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  37864. offset++;
  37865. }
  37866. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  37867. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  37868. } else {
  37869. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  37870. }
  37871. isset_dim_obj_exit:
  37872. ZEND_VM_SMART_BRANCH(result, 1);
  37873. }
  37874. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37875. {
  37876. USE_OPLINE
  37877. zval *container;
  37878. int result;
  37879. zval *offset;
  37880. zend_string *name, *tmp_name;
  37881. SAVE_OPLINE();
  37882. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  37883. offset = RT_CONSTANT(opline, opline->op2);
  37884. if (IS_CV == IS_CONST ||
  37885. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  37886. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  37887. container = Z_REFVAL_P(container);
  37888. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  37889. result = (opline->extended_value & ZEND_ISEMPTY);
  37890. goto isset_object_finish;
  37891. }
  37892. } else {
  37893. result = (opline->extended_value & ZEND_ISEMPTY);
  37894. goto isset_object_finish;
  37895. }
  37896. }
  37897. if (IS_CONST == IS_CONST) {
  37898. name = Z_STR_P(offset);
  37899. } else {
  37900. name = zval_try_get_tmp_string(offset, &tmp_name);
  37901. if (UNEXPECTED(!name)) {
  37902. result = 0;
  37903. goto isset_object_finish;
  37904. }
  37905. }
  37906. result =
  37907. (opline->extended_value & ZEND_ISEMPTY) ^
  37908. Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  37909. if (IS_CONST != IS_CONST) {
  37910. zend_tmp_string_release(tmp_name);
  37911. }
  37912. isset_object_finish:
  37913. ZEND_VM_SMART_BRANCH(result, 1);
  37914. }
  37915. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37916. {
  37917. USE_OPLINE
  37918. zval *key, *subject;
  37919. HashTable *ht;
  37920. bool result;
  37921. SAVE_OPLINE();
  37922. key = EX_VAR(opline->op1.var);
  37923. subject = RT_CONSTANT(opline, opline->op2);
  37924. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  37925. array_key_exists_array:
  37926. ht = Z_ARRVAL_P(subject);
  37927. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  37928. } else {
  37929. if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  37930. subject = Z_REFVAL_P(subject);
  37931. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  37932. goto array_key_exists_array;
  37933. }
  37934. }
  37935. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  37936. result = 0;
  37937. }
  37938. ZEND_VM_SMART_BRANCH(result, 1);
  37939. }
  37940. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  37941. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37942. {
  37943. USE_OPLINE
  37944. zval *expr;
  37945. bool result;
  37946. SAVE_OPLINE();
  37947. expr = EX_VAR(opline->op1.var);
  37948. try_instanceof:
  37949. if (Z_TYPE_P(expr) == IS_OBJECT) {
  37950. zend_class_entry *ce;
  37951. if (IS_CONST == IS_CONST) {
  37952. ce = CACHED_PTR(opline->extended_value);
  37953. if (UNEXPECTED(ce == NULL)) {
  37954. ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
  37955. if (EXPECTED(ce)) {
  37956. CACHE_PTR(opline->extended_value, ce);
  37957. }
  37958. }
  37959. } else if (IS_CONST == IS_UNUSED) {
  37960. ce = zend_fetch_class(NULL, opline->op2.num);
  37961. if (UNEXPECTED(ce == NULL)) {
  37962. ZVAL_UNDEF(EX_VAR(opline->result.var));
  37963. HANDLE_EXCEPTION();
  37964. }
  37965. } else {
  37966. ce = Z_CE_P(EX_VAR(opline->op2.var));
  37967. }
  37968. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  37969. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  37970. expr = Z_REFVAL_P(expr);
  37971. goto try_instanceof;
  37972. } else {
  37973. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  37974. ZVAL_UNDEFINED_OP1();
  37975. }
  37976. result = 0;
  37977. }
  37978. ZEND_VM_SMART_BRANCH(result, 1);
  37979. }
  37980. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37981. {
  37982. USE_OPLINE
  37983. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  37984. SAVE_OPLINE();
  37985. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  37986. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37987. }
  37988. /* Destroy the previously yielded value */
  37989. zval_ptr_dtor(&generator->value);
  37990. /* Destroy the previously yielded key */
  37991. zval_ptr_dtor(&generator->key);
  37992. /* Set the new yielded value */
  37993. if (IS_CV != IS_UNUSED) {
  37994. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  37995. /* Constants and temporary variables aren't yieldable by reference,
  37996. * but we still allow them with a notice. */
  37997. if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
  37998. zval *value;
  37999. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  38000. value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  38001. ZVAL_COPY_VALUE(&generator->value, value);
  38002. if (IS_CV == IS_CONST) {
  38003. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  38004. Z_ADDREF(generator->value);
  38005. }
  38006. }
  38007. } else {
  38008. zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  38009. /* If a function call result is yielded and the function did
  38010. * not return by reference we throw a notice. */
  38011. do {
  38012. if (IS_CV == IS_VAR) {
  38013. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  38014. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  38015. && !Z_ISREF_P(value_ptr)) {
  38016. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  38017. ZVAL_COPY(&generator->value, value_ptr);
  38018. break;
  38019. }
  38020. }
  38021. if (Z_ISREF_P(value_ptr)) {
  38022. Z_ADDREF_P(value_ptr);
  38023. } else {
  38024. ZVAL_MAKE_REF_EX(value_ptr, 2);
  38025. }
  38026. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  38027. } while (0);
  38028. }
  38029. } else {
  38030. zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  38031. /* Consts, temporary variables and references need copying */
  38032. if (IS_CV == IS_CONST) {
  38033. ZVAL_COPY_VALUE(&generator->value, value);
  38034. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  38035. Z_ADDREF(generator->value);
  38036. }
  38037. } else if (IS_CV == IS_TMP_VAR) {
  38038. ZVAL_COPY_VALUE(&generator->value, value);
  38039. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  38040. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  38041. } else {
  38042. ZVAL_COPY_VALUE(&generator->value, value);
  38043. if (IS_CV == IS_CV) {
  38044. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  38045. }
  38046. }
  38047. }
  38048. } else {
  38049. /* If no value was specified yield null */
  38050. ZVAL_NULL(&generator->value);
  38051. }
  38052. /* Set the new yielded key */
  38053. if (IS_CONST != IS_UNUSED) {
  38054. zval *key = RT_CONSTANT(opline, opline->op2);
  38055. if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  38056. key = Z_REFVAL_P(key);
  38057. }
  38058. ZVAL_COPY(&generator->key, key);
  38059. if (Z_TYPE(generator->key) == IS_LONG
  38060. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  38061. ) {
  38062. generator->largest_used_integer_key = Z_LVAL(generator->key);
  38063. }
  38064. } else {
  38065. /* If no key was specified we use auto-increment keys */
  38066. generator->largest_used_integer_key++;
  38067. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  38068. }
  38069. if (RETURN_VALUE_USED(opline)) {
  38070. /* If the return value of yield is used set the send
  38071. * target and initialize it to NULL */
  38072. generator->send_target = EX_VAR(opline->result.var);
  38073. ZVAL_NULL(generator->send_target);
  38074. } else {
  38075. generator->send_target = NULL;
  38076. }
  38077. /* We increment to the next op, so we are at the correct position when the
  38078. * generator is resumed. */
  38079. ZEND_VM_INC_OPCODE();
  38080. /* The GOTO VM uses a local opline variable. We need to set the opline
  38081. * variable in execute_data so we don't resume at an old position. */
  38082. SAVE_OPLINE();
  38083. ZEND_VM_RETURN();
  38084. }
  38085. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38086. {
  38087. USE_OPLINE
  38088. zend_string *varname;
  38089. zval *value;
  38090. zval *variable_ptr;
  38091. uintptr_t idx;
  38092. zend_reference *ref;
  38093. ZEND_VM_REPEATABLE_OPCODE
  38094. varname = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  38095. /* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
  38096. idx = (uintptr_t)CACHED_PTR(opline->extended_value) - 1;
  38097. if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) {
  38098. Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx);
  38099. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  38100. (EXPECTED(p->key == varname) ||
  38101. (EXPECTED(p->h == ZSTR_H(varname)) &&
  38102. EXPECTED(p->key != NULL) &&
  38103. EXPECTED(zend_string_equal_content(p->key, varname))))) {
  38104. value = (zval*)p; /* value = &p->val; */
  38105. goto check_indirect;
  38106. }
  38107. }
  38108. value = zend_hash_find_known_hash(&EG(symbol_table), varname);
  38109. if (UNEXPECTED(value == NULL)) {
  38110. value = zend_hash_add_new(&EG(symbol_table), varname, &EG(uninitialized_zval));
  38111. idx = (char*)value - (char*)EG(symbol_table).arData;
  38112. /* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
  38113. CACHE_PTR(opline->extended_value, (void*)(idx + 1));
  38114. } else {
  38115. idx = (char*)value - (char*)EG(symbol_table).arData;
  38116. /* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
  38117. CACHE_PTR(opline->extended_value, (void*)(idx + 1));
  38118. check_indirect:
  38119. /* GLOBAL variable may be an INDIRECT pointer to CV */
  38120. if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) {
  38121. value = Z_INDIRECT_P(value);
  38122. if (UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  38123. ZVAL_NULL(value);
  38124. }
  38125. }
  38126. }
  38127. if (UNEXPECTED(!Z_ISREF_P(value))) {
  38128. ZVAL_MAKE_REF_EX(value, 2);
  38129. ref = Z_REF_P(value);
  38130. } else {
  38131. ref = Z_REF_P(value);
  38132. GC_ADDREF(ref);
  38133. }
  38134. variable_ptr = EX_VAR(opline->op1.var);
  38135. if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
  38136. zend_refcounted *garbage = Z_COUNTED_P(variable_ptr);
  38137. ZVAL_REF(variable_ptr, ref);
  38138. SAVE_OPLINE();
  38139. if (GC_DELREF(garbage) == 0) {
  38140. rc_dtor_func(garbage);
  38141. if (UNEXPECTED(EG(exception))) {
  38142. ZVAL_NULL(variable_ptr);
  38143. HANDLE_EXCEPTION();
  38144. }
  38145. } else {
  38146. gc_check_possible_root(garbage);
  38147. }
  38148. } else {
  38149. ZVAL_REF(variable_ptr, ref);
  38150. }
  38151. ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
  38152. ZEND_VM_NEXT_OPCODE();
  38153. }
  38154. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38155. {
  38156. USE_OPLINE
  38157. zval *op1;
  38158. HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  38159. zval *result;
  38160. op1 = EX_VAR(opline->op1.var);
  38161. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38162. result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CV == IS_CONST);
  38163. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38164. zval_ptr_dtor_str(op1);
  38165. }
  38166. ZEND_VM_SMART_BRANCH(result, 0);
  38167. }
  38168. if (opline->extended_value) {
  38169. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  38170. result = zend_hash_index_find(ht, Z_LVAL_P(op1));
  38171. ZEND_VM_SMART_BRANCH(result, 0);
  38172. }
  38173. SAVE_OPLINE();
  38174. if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
  38175. op1 = Z_REFVAL_P(op1);
  38176. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38177. result = zend_hash_find(ht, Z_STR_P(op1));
  38178. ZEND_VM_SMART_BRANCH(result, 0);
  38179. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  38180. result = zend_hash_index_find(ht, Z_LVAL_P(op1));
  38181. ZEND_VM_SMART_BRANCH(result, 0);
  38182. }
  38183. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  38184. ZVAL_UNDEFINED_OP1();
  38185. }
  38186. } else if (Z_TYPE_P(op1) <= IS_FALSE) {
  38187. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  38188. SAVE_OPLINE();
  38189. ZVAL_UNDEFINED_OP1();
  38190. if (UNEXPECTED(EG(exception) != NULL)) {
  38191. HANDLE_EXCEPTION();
  38192. }
  38193. }
  38194. result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
  38195. ZEND_VM_SMART_BRANCH(result, 0);
  38196. } else {
  38197. zend_string *key;
  38198. zval key_tmp;
  38199. if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
  38200. op1 = Z_REFVAL_P(op1);
  38201. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38202. result = zend_hash_find(ht, Z_STR_P(op1));
  38203. ZEND_VM_SMART_BRANCH(result, 0);
  38204. }
  38205. }
  38206. SAVE_OPLINE();
  38207. ZEND_HASH_FOREACH_STR_KEY(ht, key) {
  38208. ZVAL_STR(&key_tmp, key);
  38209. if (zend_compare(op1, &key_tmp) == 0) {
  38210. ZEND_VM_SMART_BRANCH(1, 1);
  38211. }
  38212. } ZEND_HASH_FOREACH_END();
  38213. }
  38214. ZEND_VM_SMART_BRANCH(0, 1);
  38215. }
  38216. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38217. {
  38218. /* This is declared below the specializations for MAY_BE_LONG/MAY_BE_DOUBLE so those will be used instead if possible. */
  38219. /* This optimizes $x === SOME_CONST_EXPR and $x === $y for non-refs and non-undef, which can't throw. */
  38220. /* (Infinite recursion when comparing arrays is an uncatchable fatal error) */
  38221. USE_OPLINE
  38222. zval *op1, *op2;
  38223. bool result;
  38224. op1 = EX_VAR(opline->op1.var);
  38225. op2 = RT_CONSTANT(opline, opline->op2);
  38226. result = fast_is_identical_function(op1, op2);
  38227. /* Free is a no-op for const/cv */
  38228. ZEND_VM_SMART_BRANCH(result, 0);
  38229. }
  38230. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38231. {
  38232. USE_OPLINE
  38233. zval *op1, *op2;
  38234. bool result;
  38235. op1 = EX_VAR(opline->op1.var);
  38236. op2 = RT_CONSTANT(opline, opline->op2);
  38237. result = fast_is_identical_function(op1, op2);
  38238. /* Free is a no-op for const/cv */
  38239. ZEND_VM_SMART_BRANCH(!result, 0);
  38240. }
  38241. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38242. {
  38243. USE_OPLINE
  38244. zval *container, *dim, *value;
  38245. zend_long offset;
  38246. HashTable *ht;
  38247. container = EX_VAR(opline->op1.var);
  38248. dim = RT_CONSTANT(opline, opline->op2);
  38249. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  38250. fetch_dim_r_index_array:
  38251. if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
  38252. offset = Z_LVAL_P(dim);
  38253. } else {
  38254. SAVE_OPLINE();
  38255. zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  38256. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38257. }
  38258. ht = Z_ARRVAL_P(container);
  38259. ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
  38260. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  38261. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38262. SAVE_OPLINE();
  38263. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38264. } else {
  38265. ZEND_VM_NEXT_OPCODE();
  38266. }
  38267. } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  38268. container = Z_REFVAL_P(container);
  38269. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  38270. goto fetch_dim_r_index_array;
  38271. } else {
  38272. goto fetch_dim_r_index_slow;
  38273. }
  38274. } else {
  38275. fetch_dim_r_index_slow:
  38276. SAVE_OPLINE();
  38277. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  38278. dim++;
  38279. }
  38280. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  38281. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38282. }
  38283. fetch_dim_r_index_undef:
  38284. ZVAL_NULL(EX_VAR(opline->result.var));
  38285. SAVE_OPLINE();
  38286. zend_undefined_offset(offset);
  38287. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38288. }
  38289. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38290. {
  38291. USE_OPLINE
  38292. zval *container, *dim, *value;
  38293. zend_long offset;
  38294. HashTable *ht;
  38295. container = EX_VAR(opline->op1.var);
  38296. dim = EX_VAR(opline->op2.var);
  38297. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  38298. fetch_dim_r_index_array:
  38299. if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
  38300. offset = Z_LVAL_P(dim);
  38301. } else {
  38302. SAVE_OPLINE();
  38303. zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);
  38304. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38305. }
  38306. ht = Z_ARRVAL_P(container);
  38307. ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
  38308. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  38309. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38310. SAVE_OPLINE();
  38311. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38312. } else {
  38313. ZEND_VM_NEXT_OPCODE();
  38314. }
  38315. } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  38316. container = Z_REFVAL_P(container);
  38317. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  38318. goto fetch_dim_r_index_array;
  38319. } else {
  38320. goto fetch_dim_r_index_slow;
  38321. }
  38322. } else {
  38323. fetch_dim_r_index_slow:
  38324. SAVE_OPLINE();
  38325. if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  38326. dim++;
  38327. }
  38328. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  38329. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38330. }
  38331. fetch_dim_r_index_undef:
  38332. ZVAL_NULL(EX_VAR(opline->result.var));
  38333. SAVE_OPLINE();
  38334. zend_undefined_offset(offset);
  38335. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38336. }
  38337. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38338. {
  38339. USE_OPLINE
  38340. zval *op1, *op2;
  38341. SAVE_OPLINE();
  38342. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  38343. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38344. div_function(EX_VAR(opline->result.var), op1, op2);
  38345. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  38346. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38347. }
  38348. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38349. {
  38350. USE_OPLINE
  38351. zval *op1, *op2;
  38352. SAVE_OPLINE();
  38353. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  38354. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38355. pow_function(EX_VAR(opline->result.var), op1, op2);
  38356. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  38357. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38358. }
  38359. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38360. {
  38361. USE_OPLINE
  38362. zval *op1, *op2;
  38363. op1 = EX_VAR(opline->op1.var);
  38364. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38365. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  38366. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  38367. zend_string *op1_str = Z_STR_P(op1);
  38368. zend_string *op2_str = Z_STR_P(op2);
  38369. zend_string *str;
  38370. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  38371. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  38372. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  38373. } else {
  38374. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  38375. }
  38376. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38377. zend_string_release_ex(op1_str, 0);
  38378. }
  38379. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  38380. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  38381. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  38382. } else {
  38383. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  38384. }
  38385. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38386. zend_string_release_ex(op2_str, 0);
  38387. }
  38388. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  38389. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  38390. size_t len = ZSTR_LEN(op1_str);
  38391. if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
  38392. zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
  38393. }
  38394. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  38395. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  38396. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  38397. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38398. zend_string_release_ex(op2_str, 0);
  38399. }
  38400. } else {
  38401. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  38402. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  38403. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  38404. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  38405. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38406. zend_string_release_ex(op1_str, 0);
  38407. }
  38408. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38409. zend_string_release_ex(op2_str, 0);
  38410. }
  38411. }
  38412. ZEND_VM_NEXT_OPCODE();
  38413. } else {
  38414. SAVE_OPLINE();
  38415. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  38416. op1 = ZVAL_UNDEFINED_OP1();
  38417. }
  38418. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  38419. op2 = ZVAL_UNDEFINED_OP2();
  38420. }
  38421. concat_function(EX_VAR(opline->result.var), op1, op2);
  38422. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  38423. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38424. }
  38425. }
  38426. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38427. {
  38428. USE_OPLINE
  38429. zval *op1, *op2;
  38430. double d1, d2;
  38431. op1 = EX_VAR(opline->op1.var);
  38432. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38433. if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38434. /* pass */
  38435. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  38436. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38437. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  38438. is_equal_true:
  38439. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  38440. } else {
  38441. is_equal_false:
  38442. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  38443. }
  38444. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38445. d1 = (double)Z_LVAL_P(op1);
  38446. d2 = Z_DVAL_P(op2);
  38447. goto is_equal_double;
  38448. }
  38449. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  38450. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38451. d1 = Z_DVAL_P(op1);
  38452. d2 = Z_DVAL_P(op2);
  38453. is_equal_double:
  38454. if (d1 == d2) {
  38455. goto is_equal_true;
  38456. } else {
  38457. goto is_equal_false;
  38458. }
  38459. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38460. d1 = Z_DVAL_P(op1);
  38461. d2 = (double)Z_LVAL_P(op2);
  38462. goto is_equal_double;
  38463. }
  38464. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38465. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  38466. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  38467. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38468. zval_ptr_dtor_str(op1);
  38469. }
  38470. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38471. zval_ptr_dtor_str(op2);
  38472. }
  38473. if (result) {
  38474. goto is_equal_true;
  38475. } else {
  38476. goto is_equal_false;
  38477. }
  38478. }
  38479. }
  38480. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  38481. }
  38482. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38483. {
  38484. USE_OPLINE
  38485. zval *op1, *op2;
  38486. double d1, d2;
  38487. op1 = EX_VAR(opline->op1.var);
  38488. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38489. if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38490. /* pass */
  38491. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  38492. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38493. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  38494. is_equal_true:
  38495. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  38496. } else {
  38497. is_equal_false:
  38498. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  38499. }
  38500. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38501. d1 = (double)Z_LVAL_P(op1);
  38502. d2 = Z_DVAL_P(op2);
  38503. goto is_equal_double;
  38504. }
  38505. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  38506. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38507. d1 = Z_DVAL_P(op1);
  38508. d2 = Z_DVAL_P(op2);
  38509. is_equal_double:
  38510. if (d1 == d2) {
  38511. goto is_equal_true;
  38512. } else {
  38513. goto is_equal_false;
  38514. }
  38515. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38516. d1 = Z_DVAL_P(op1);
  38517. d2 = (double)Z_LVAL_P(op2);
  38518. goto is_equal_double;
  38519. }
  38520. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38521. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  38522. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  38523. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38524. zval_ptr_dtor_str(op1);
  38525. }
  38526. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38527. zval_ptr_dtor_str(op2);
  38528. }
  38529. if (result) {
  38530. goto is_equal_true;
  38531. } else {
  38532. goto is_equal_false;
  38533. }
  38534. }
  38535. }
  38536. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  38537. }
  38538. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38539. {
  38540. USE_OPLINE
  38541. zval *op1, *op2;
  38542. double d1, d2;
  38543. op1 = EX_VAR(opline->op1.var);
  38544. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38545. if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38546. /* pass */
  38547. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  38548. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38549. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  38550. is_equal_true:
  38551. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  38552. } else {
  38553. is_equal_false:
  38554. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  38555. }
  38556. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38557. d1 = (double)Z_LVAL_P(op1);
  38558. d2 = Z_DVAL_P(op2);
  38559. goto is_equal_double;
  38560. }
  38561. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  38562. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38563. d1 = Z_DVAL_P(op1);
  38564. d2 = Z_DVAL_P(op2);
  38565. is_equal_double:
  38566. if (d1 == d2) {
  38567. goto is_equal_true;
  38568. } else {
  38569. goto is_equal_false;
  38570. }
  38571. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38572. d1 = Z_DVAL_P(op1);
  38573. d2 = (double)Z_LVAL_P(op2);
  38574. goto is_equal_double;
  38575. }
  38576. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38577. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  38578. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  38579. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38580. zval_ptr_dtor_str(op1);
  38581. }
  38582. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38583. zval_ptr_dtor_str(op2);
  38584. }
  38585. if (result) {
  38586. goto is_equal_true;
  38587. } else {
  38588. goto is_equal_false;
  38589. }
  38590. }
  38591. }
  38592. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  38593. }
  38594. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38595. {
  38596. USE_OPLINE
  38597. zval *op1, *op2;
  38598. double d1, d2;
  38599. op1 = EX_VAR(opline->op1.var);
  38600. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38601. if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38602. /* pass */
  38603. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  38604. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38605. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  38606. is_not_equal_true:
  38607. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  38608. } else {
  38609. is_not_equal_false:
  38610. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  38611. }
  38612. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38613. d1 = (double)Z_LVAL_P(op1);
  38614. d2 = Z_DVAL_P(op2);
  38615. goto is_not_equal_double;
  38616. }
  38617. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  38618. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38619. d1 = Z_DVAL_P(op1);
  38620. d2 = Z_DVAL_P(op2);
  38621. is_not_equal_double:
  38622. if (d1 != d2) {
  38623. goto is_not_equal_true;
  38624. } else {
  38625. goto is_not_equal_false;
  38626. }
  38627. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38628. d1 = Z_DVAL_P(op1);
  38629. d2 = (double)Z_LVAL_P(op2);
  38630. goto is_not_equal_double;
  38631. }
  38632. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38633. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  38634. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  38635. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38636. zval_ptr_dtor_str(op1);
  38637. }
  38638. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38639. zval_ptr_dtor_str(op2);
  38640. }
  38641. if (!result) {
  38642. goto is_not_equal_true;
  38643. } else {
  38644. goto is_not_equal_false;
  38645. }
  38646. }
  38647. }
  38648. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  38649. }
  38650. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38651. {
  38652. USE_OPLINE
  38653. zval *op1, *op2;
  38654. double d1, d2;
  38655. op1 = EX_VAR(opline->op1.var);
  38656. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38657. if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38658. /* pass */
  38659. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  38660. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38661. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  38662. is_not_equal_true:
  38663. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  38664. } else {
  38665. is_not_equal_false:
  38666. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  38667. }
  38668. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38669. d1 = (double)Z_LVAL_P(op1);
  38670. d2 = Z_DVAL_P(op2);
  38671. goto is_not_equal_double;
  38672. }
  38673. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  38674. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38675. d1 = Z_DVAL_P(op1);
  38676. d2 = Z_DVAL_P(op2);
  38677. is_not_equal_double:
  38678. if (d1 != d2) {
  38679. goto is_not_equal_true;
  38680. } else {
  38681. goto is_not_equal_false;
  38682. }
  38683. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38684. d1 = Z_DVAL_P(op1);
  38685. d2 = (double)Z_LVAL_P(op2);
  38686. goto is_not_equal_double;
  38687. }
  38688. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38689. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  38690. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  38691. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38692. zval_ptr_dtor_str(op1);
  38693. }
  38694. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38695. zval_ptr_dtor_str(op2);
  38696. }
  38697. if (!result) {
  38698. goto is_not_equal_true;
  38699. } else {
  38700. goto is_not_equal_false;
  38701. }
  38702. }
  38703. }
  38704. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  38705. }
  38706. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38707. {
  38708. USE_OPLINE
  38709. zval *op1, *op2;
  38710. double d1, d2;
  38711. op1 = EX_VAR(opline->op1.var);
  38712. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38713. if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38714. /* pass */
  38715. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  38716. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38717. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  38718. is_not_equal_true:
  38719. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  38720. } else {
  38721. is_not_equal_false:
  38722. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  38723. }
  38724. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38725. d1 = (double)Z_LVAL_P(op1);
  38726. d2 = Z_DVAL_P(op2);
  38727. goto is_not_equal_double;
  38728. }
  38729. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  38730. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38731. d1 = Z_DVAL_P(op1);
  38732. d2 = Z_DVAL_P(op2);
  38733. is_not_equal_double:
  38734. if (d1 != d2) {
  38735. goto is_not_equal_true;
  38736. } else {
  38737. goto is_not_equal_false;
  38738. }
  38739. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38740. d1 = Z_DVAL_P(op1);
  38741. d2 = (double)Z_LVAL_P(op2);
  38742. goto is_not_equal_double;
  38743. }
  38744. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38745. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  38746. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  38747. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38748. zval_ptr_dtor_str(op1);
  38749. }
  38750. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38751. zval_ptr_dtor_str(op2);
  38752. }
  38753. if (!result) {
  38754. goto is_not_equal_true;
  38755. } else {
  38756. goto is_not_equal_false;
  38757. }
  38758. }
  38759. }
  38760. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  38761. }
  38762. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38763. {
  38764. USE_OPLINE
  38765. zval *op1, *op2;
  38766. SAVE_OPLINE();
  38767. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  38768. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38769. compare_function(EX_VAR(opline->result.var), op1, op2);
  38770. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  38771. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38772. }
  38773. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38774. {
  38775. USE_OPLINE
  38776. zval *op1, *op2;
  38777. SAVE_OPLINE();
  38778. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  38779. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38780. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  38781. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  38782. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38783. }
  38784. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38785. {
  38786. USE_OPLINE
  38787. zval *object;
  38788. zval *property;
  38789. zval *value;
  38790. zval *zptr;
  38791. void **cache_slot;
  38792. zend_property_info *prop_info;
  38793. zend_object *zobj;
  38794. zend_string *name, *tmp_name;
  38795. SAVE_OPLINE();
  38796. object = EX_VAR(opline->op1.var);
  38797. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38798. do {
  38799. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  38800. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  38801. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  38802. object = Z_REFVAL_P(object);
  38803. goto assign_op_object;
  38804. }
  38805. if (IS_CV == IS_CV
  38806. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  38807. ZVAL_UNDEFINED_OP1();
  38808. }
  38809. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  38810. break;
  38811. }
  38812. assign_op_object:
  38813. /* here we are sure we are dealing with an object */
  38814. zobj = Z_OBJ_P(object);
  38815. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38816. name = Z_STR_P(property);
  38817. } else {
  38818. name = zval_try_get_tmp_string(property, &tmp_name);
  38819. if (UNEXPECTED(!name)) {
  38820. UNDEF_RESULT();
  38821. break;
  38822. }
  38823. }
  38824. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  38825. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  38826. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  38827. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38828. ZVAL_NULL(EX_VAR(opline->result.var));
  38829. }
  38830. } else {
  38831. zval *orig_zptr = zptr;
  38832. zend_reference *ref;
  38833. do {
  38834. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  38835. ref = Z_REF_P(zptr);
  38836. zptr = Z_REFVAL_P(zptr);
  38837. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  38838. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  38839. break;
  38840. }
  38841. }
  38842. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38843. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  38844. } else {
  38845. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  38846. }
  38847. if (UNEXPECTED(prop_info)) {
  38848. /* special case for typed properties */
  38849. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  38850. } else {
  38851. zend_binary_op(zptr, zptr, value OPLINE_CC);
  38852. }
  38853. } while (0);
  38854. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38855. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  38856. }
  38857. }
  38858. } else {
  38859. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  38860. }
  38861. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  38862. zend_tmp_string_release(tmp_name);
  38863. }
  38864. } while (0);
  38865. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  38866. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  38867. /* assign_obj has two opcodes! */
  38868. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  38869. }
  38870. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  38871. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38872. {
  38873. USE_OPLINE
  38874. zval *var_ptr;
  38875. zval *value, *container, *dim;
  38876. HashTable *ht;
  38877. SAVE_OPLINE();
  38878. container = EX_VAR(opline->op1.var);
  38879. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  38880. assign_dim_op_array:
  38881. SEPARATE_ARRAY(container);
  38882. ht = Z_ARRVAL_P(container);
  38883. assign_dim_op_new_array:
  38884. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38885. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  38886. var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
  38887. if (UNEXPECTED(!var_ptr)) {
  38888. zend_cannot_add_element();
  38889. goto assign_dim_op_ret_null;
  38890. }
  38891. } else {
  38892. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38893. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
  38894. } else {
  38895. var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
  38896. }
  38897. if (UNEXPECTED(!var_ptr)) {
  38898. goto assign_dim_op_ret_null;
  38899. }
  38900. }
  38901. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  38902. do {
  38903. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
  38904. zend_reference *ref = Z_REF_P(var_ptr);
  38905. var_ptr = Z_REFVAL_P(var_ptr);
  38906. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  38907. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  38908. break;
  38909. }
  38910. }
  38911. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  38912. } while (0);
  38913. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38914. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  38915. }
  38916. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  38917. } else {
  38918. if (EXPECTED(Z_ISREF_P(container))) {
  38919. container = Z_REFVAL_P(container);
  38920. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  38921. goto assign_dim_op_array;
  38922. }
  38923. }
  38924. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  38925. zend_object *obj = Z_OBJ_P(container);
  38926. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38927. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  38928. dim++;
  38929. }
  38930. zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
  38931. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  38932. zend_uchar old_type;
  38933. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  38934. ZVAL_UNDEFINED_OP1();
  38935. }
  38936. ht = zend_new_array(8);
  38937. old_type = Z_TYPE_P(container);
  38938. ZVAL_ARR(container, ht);
  38939. if (UNEXPECTED(old_type == IS_FALSE)) {
  38940. GC_ADDREF(ht);
  38941. zend_false_to_array_deprecated();
  38942. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  38943. zend_array_destroy(ht);
  38944. goto assign_dim_op_ret_null;
  38945. }
  38946. }
  38947. goto assign_dim_op_new_array;
  38948. } else {
  38949. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38950. zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  38951. assign_dim_op_ret_null:
  38952. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  38953. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38954. ZVAL_NULL(EX_VAR(opline->result.var));
  38955. }
  38956. }
  38957. }
  38958. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  38959. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  38960. }
  38961. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38962. {
  38963. USE_OPLINE
  38964. zval *var_ptr;
  38965. zval *value;
  38966. SAVE_OPLINE();
  38967. value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38968. var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  38969. do {
  38970. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  38971. zend_reference *ref = Z_REF_P(var_ptr);
  38972. var_ptr = Z_REFVAL_P(var_ptr);
  38973. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  38974. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  38975. break;
  38976. }
  38977. }
  38978. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  38979. } while (0);
  38980. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38981. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  38982. }
  38983. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  38984. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38985. }
  38986. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38987. {
  38988. USE_OPLINE
  38989. zval *object;
  38990. zval *property;
  38991. zval *zptr;
  38992. void **cache_slot;
  38993. zend_property_info *prop_info;
  38994. zend_object *zobj;
  38995. zend_string *name, *tmp_name;
  38996. SAVE_OPLINE();
  38997. object = EX_VAR(opline->op1.var);
  38998. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38999. do {
  39000. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  39001. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  39002. object = Z_REFVAL_P(object);
  39003. goto pre_incdec_object;
  39004. }
  39005. if (IS_CV == IS_CV
  39006. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  39007. ZVAL_UNDEFINED_OP1();
  39008. }
  39009. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  39010. break;
  39011. }
  39012. pre_incdec_object:
  39013. /* here we are sure we are dealing with an object */
  39014. zobj = Z_OBJ_P(object);
  39015. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39016. name = Z_STR_P(property);
  39017. } else {
  39018. name = zval_try_get_tmp_string(property, &tmp_name);
  39019. if (UNEXPECTED(!name)) {
  39020. UNDEF_RESULT();
  39021. break;
  39022. }
  39023. }
  39024. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  39025. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  39026. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  39027. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39028. ZVAL_NULL(EX_VAR(opline->result.var));
  39029. }
  39030. } else {
  39031. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39032. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  39033. } else {
  39034. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  39035. }
  39036. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  39037. }
  39038. } else {
  39039. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  39040. }
  39041. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39042. zend_tmp_string_release(tmp_name);
  39043. }
  39044. } while (0);
  39045. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39046. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39047. }
  39048. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39049. {
  39050. USE_OPLINE
  39051. zval *object;
  39052. zval *property;
  39053. zval *zptr;
  39054. void **cache_slot;
  39055. zend_property_info *prop_info;
  39056. zend_object *zobj;
  39057. zend_string *name, *tmp_name;
  39058. SAVE_OPLINE();
  39059. object = EX_VAR(opline->op1.var);
  39060. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  39061. do {
  39062. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  39063. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  39064. object = Z_REFVAL_P(object);
  39065. goto post_incdec_object;
  39066. }
  39067. if (IS_CV == IS_CV
  39068. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  39069. ZVAL_UNDEFINED_OP1();
  39070. }
  39071. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  39072. break;
  39073. }
  39074. post_incdec_object:
  39075. /* here we are sure we are dealing with an object */
  39076. zobj = Z_OBJ_P(object);
  39077. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39078. name = Z_STR_P(property);
  39079. } else {
  39080. name = zval_try_get_tmp_string(property, &tmp_name);
  39081. if (UNEXPECTED(!name)) {
  39082. ZVAL_UNDEF(EX_VAR(opline->result.var));
  39083. break;
  39084. }
  39085. }
  39086. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  39087. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  39088. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  39089. ZVAL_NULL(EX_VAR(opline->result.var));
  39090. } else {
  39091. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39092. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  39093. } else {
  39094. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  39095. }
  39096. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  39097. }
  39098. } else {
  39099. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  39100. }
  39101. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39102. zend_tmp_string_release(tmp_name);
  39103. }
  39104. } while (0);
  39105. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39106. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39107. }
  39108. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39109. {
  39110. USE_OPLINE
  39111. zval *container, *dim, *value;
  39112. SAVE_OPLINE();
  39113. container = EX_VAR(opline->op1.var);
  39114. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  39115. if (IS_CV != IS_CONST) {
  39116. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  39117. fetch_dim_r_array:
  39118. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
  39119. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  39120. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  39121. container = Z_REFVAL_P(container);
  39122. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  39123. goto fetch_dim_r_array;
  39124. } else {
  39125. goto fetch_dim_r_slow;
  39126. }
  39127. } else {
  39128. fetch_dim_r_slow:
  39129. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  39130. dim++;
  39131. }
  39132. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  39133. }
  39134. } else {
  39135. zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  39136. }
  39137. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39138. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39139. }
  39140. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39141. {
  39142. USE_OPLINE
  39143. zval *container;
  39144. SAVE_OPLINE();
  39145. container = EX_VAR(opline->op1.var);
  39146. zend_fetch_dimension_address_W(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  39147. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39148. if (IS_CV == IS_VAR) {
  39149. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  39150. }
  39151. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39152. }
  39153. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39154. {
  39155. USE_OPLINE
  39156. zval *container;
  39157. SAVE_OPLINE();
  39158. container = EX_VAR(opline->op1.var);
  39159. zend_fetch_dimension_address_RW(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  39160. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39161. if (IS_CV == IS_VAR) {
  39162. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  39163. }
  39164. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39165. }
  39166. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39167. {
  39168. USE_OPLINE
  39169. zval *container;
  39170. SAVE_OPLINE();
  39171. container = EX_VAR(opline->op1.var);
  39172. zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  39173. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39174. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39175. }
  39176. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39177. {
  39178. #if 0
  39179. USE_OPLINE
  39180. #endif
  39181. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  39182. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  39183. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39184. }
  39185. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39186. } else {
  39187. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  39188. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39189. }
  39190. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39191. }
  39192. }
  39193. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39194. {
  39195. USE_OPLINE
  39196. zval *container;
  39197. SAVE_OPLINE();
  39198. container = EX_VAR(opline->op1.var);
  39199. zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  39200. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39201. if (IS_CV == IS_VAR) {
  39202. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  39203. }
  39204. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39205. }
  39206. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39207. {
  39208. USE_OPLINE
  39209. zval *container;
  39210. void **cache_slot = NULL;
  39211. SAVE_OPLINE();
  39212. container = EX_VAR(opline->op1.var);
  39213. if (IS_CV == IS_CONST ||
  39214. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  39215. do {
  39216. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  39217. container = Z_REFVAL_P(container);
  39218. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  39219. break;
  39220. }
  39221. }
  39222. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  39223. ZVAL_UNDEFINED_OP1();
  39224. }
  39225. zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39226. ZVAL_NULL(EX_VAR(opline->result.var));
  39227. goto fetch_obj_r_finish;
  39228. } while (0);
  39229. }
  39230. /* here we are sure we are dealing with an object */
  39231. do {
  39232. zend_object *zobj = Z_OBJ_P(container);
  39233. zend_string *name, *tmp_name;
  39234. zval *retval;
  39235. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39236. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  39237. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  39238. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  39239. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  39240. retval = OBJ_PROP(zobj, prop_offset);
  39241. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  39242. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  39243. goto fetch_obj_r_copy;
  39244. } else {
  39245. fetch_obj_r_fast_copy:
  39246. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  39247. ZEND_VM_NEXT_OPCODE();
  39248. }
  39249. }
  39250. } else if (EXPECTED(zobj->properties != NULL)) {
  39251. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39252. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  39253. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  39254. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  39255. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  39256. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  39257. (EXPECTED(p->key == name) ||
  39258. (EXPECTED(p->h == ZSTR_H(name)) &&
  39259. EXPECTED(p->key != NULL) &&
  39260. EXPECTED(zend_string_equal_content(p->key, name))))) {
  39261. retval = &p->val;
  39262. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  39263. goto fetch_obj_r_copy;
  39264. } else {
  39265. goto fetch_obj_r_fast_copy;
  39266. }
  39267. }
  39268. }
  39269. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  39270. }
  39271. retval = zend_hash_find_known_hash(zobj->properties, name);
  39272. if (EXPECTED(retval)) {
  39273. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  39274. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  39275. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  39276. goto fetch_obj_r_copy;
  39277. } else {
  39278. goto fetch_obj_r_fast_copy;
  39279. }
  39280. }
  39281. }
  39282. }
  39283. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39284. } else {
  39285. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  39286. if (UNEXPECTED(!name)) {
  39287. ZVAL_UNDEF(EX_VAR(opline->result.var));
  39288. break;
  39289. }
  39290. }
  39291. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  39292. #if ZEND_DEBUG
  39293. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  39294. zend_verify_internal_read_property_type(zobj, name, retval);
  39295. }
  39296. #endif
  39297. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39298. zend_tmp_string_release(tmp_name);
  39299. }
  39300. if (retval != EX_VAR(opline->result.var)) {
  39301. fetch_obj_r_copy:
  39302. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  39303. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  39304. zend_unwrap_reference(retval);
  39305. }
  39306. } while (0);
  39307. fetch_obj_r_finish:
  39308. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39309. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39310. }
  39311. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39312. {
  39313. USE_OPLINE
  39314. zval *property, *container, *result;
  39315. SAVE_OPLINE();
  39316. container = EX_VAR(opline->op1.var);
  39317. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  39318. result = EX_VAR(opline->result.var);
  39319. zend_fetch_property_address(
  39320. result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR),
  39321. (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  39322. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
  39323. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39324. if (IS_CV == IS_VAR) {
  39325. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  39326. }
  39327. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39328. }
  39329. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39330. {
  39331. USE_OPLINE
  39332. zval *property, *container, *result;
  39333. SAVE_OPLINE();
  39334. container = EX_VAR(opline->op1.var);
  39335. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  39336. result = EX_VAR(opline->result.var);
  39337. 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, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  39338. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39339. if (IS_CV == IS_VAR) {
  39340. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  39341. }
  39342. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39343. }
  39344. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39345. {
  39346. USE_OPLINE
  39347. zval *container;
  39348. void **cache_slot = NULL;
  39349. SAVE_OPLINE();
  39350. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  39351. if (IS_CV == IS_CONST ||
  39352. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  39353. do {
  39354. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  39355. container = Z_REFVAL_P(container);
  39356. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  39357. break;
  39358. }
  39359. }
  39360. if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  39361. ZVAL_UNDEFINED_OP2();
  39362. }
  39363. ZVAL_NULL(EX_VAR(opline->result.var));
  39364. goto fetch_obj_is_finish;
  39365. } while (0);
  39366. }
  39367. /* here we are sure we are dealing with an object */
  39368. do {
  39369. zend_object *zobj = Z_OBJ_P(container);
  39370. zend_string *name, *tmp_name;
  39371. zval *retval;
  39372. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39373. cache_slot = CACHE_ADDR(opline->extended_value);
  39374. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  39375. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  39376. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  39377. retval = OBJ_PROP(zobj, prop_offset);
  39378. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  39379. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  39380. goto fetch_obj_is_copy;
  39381. } else {
  39382. fetch_obj_is_fast_copy:
  39383. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  39384. ZEND_VM_NEXT_OPCODE();
  39385. }
  39386. }
  39387. } else if (EXPECTED(zobj->properties != NULL)) {
  39388. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39389. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  39390. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  39391. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  39392. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  39393. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  39394. (EXPECTED(p->key == name) ||
  39395. (EXPECTED(p->h == ZSTR_H(name)) &&
  39396. EXPECTED(p->key != NULL) &&
  39397. EXPECTED(zend_string_equal_content(p->key, name))))) {
  39398. retval = &p->val;
  39399. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  39400. goto fetch_obj_is_copy;
  39401. } else {
  39402. goto fetch_obj_is_fast_copy;
  39403. }
  39404. }
  39405. }
  39406. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  39407. }
  39408. retval = zend_hash_find_known_hash(zobj->properties, name);
  39409. if (EXPECTED(retval)) {
  39410. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  39411. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  39412. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  39413. goto fetch_obj_is_copy;
  39414. } else {
  39415. goto fetch_obj_is_fast_copy;
  39416. }
  39417. }
  39418. }
  39419. }
  39420. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39421. } else {
  39422. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  39423. if (UNEXPECTED(!name)) {
  39424. ZVAL_UNDEF(EX_VAR(opline->result.var));
  39425. break;
  39426. }
  39427. }
  39428. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  39429. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39430. zend_tmp_string_release(tmp_name);
  39431. }
  39432. if (retval != EX_VAR(opline->result.var)) {
  39433. fetch_obj_is_copy:
  39434. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  39435. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  39436. zend_unwrap_reference(retval);
  39437. }
  39438. } while (0);
  39439. fetch_obj_is_finish:
  39440. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39441. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39442. }
  39443. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39444. {
  39445. #if 0
  39446. USE_OPLINE
  39447. #endif
  39448. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  39449. /* Behave like FETCH_OBJ_W */
  39450. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  39451. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39452. }
  39453. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39454. } else {
  39455. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39456. }
  39457. }
  39458. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39459. {
  39460. USE_OPLINE
  39461. zval *container, *property, *result;
  39462. SAVE_OPLINE();
  39463. container = EX_VAR(opline->op1.var);
  39464. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  39465. result = EX_VAR(opline->result.var);
  39466. 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, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  39467. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39468. if (IS_CV == IS_VAR) {
  39469. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  39470. }
  39471. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39472. }
  39473. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39474. {
  39475. USE_OPLINE
  39476. zval *object, *value, tmp;
  39477. zend_object *zobj;
  39478. zend_string *name, *tmp_name;
  39479. SAVE_OPLINE();
  39480. object = EX_VAR(opline->op1.var);
  39481. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  39482. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  39483. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  39484. object = Z_REFVAL_P(object);
  39485. goto assign_object;
  39486. }
  39487. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  39488. value = &EG(uninitialized_zval);
  39489. goto free_and_exit_assign_obj;
  39490. }
  39491. assign_object:
  39492. zobj = Z_OBJ_P(object);
  39493. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39494. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  39495. void **cache_slot = CACHE_ADDR(opline->extended_value);
  39496. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  39497. zend_object *zobj = Z_OBJ_P(object);
  39498. zval *property_val;
  39499. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  39500. property_val = OBJ_PROP(zobj, prop_offset);
  39501. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  39502. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  39503. if (UNEXPECTED(prop_info != NULL)) {
  39504. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  39505. goto free_and_exit_assign_obj;
  39506. } else {
  39507. fast_assign_obj:
  39508. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  39509. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39510. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39511. }
  39512. goto exit_assign_obj;
  39513. }
  39514. }
  39515. } else {
  39516. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39517. if (EXPECTED(zobj->properties != NULL)) {
  39518. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  39519. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  39520. GC_DELREF(zobj->properties);
  39521. }
  39522. zobj->properties = zend_array_dup(zobj->properties);
  39523. }
  39524. property_val = zend_hash_find_known_hash(zobj->properties, name);
  39525. if (property_val) {
  39526. goto fast_assign_obj;
  39527. }
  39528. }
  39529. if (!zobj->ce->__set) {
  39530. if (EXPECTED(zobj->properties == NULL)) {
  39531. rebuild_object_properties(zobj);
  39532. }
  39533. if (IS_CONST == IS_CONST) {
  39534. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  39535. Z_ADDREF_P(value);
  39536. }
  39537. } else if (IS_CONST != IS_TMP_VAR) {
  39538. if (Z_ISREF_P(value)) {
  39539. if (IS_CONST == IS_VAR) {
  39540. zend_reference *ref = Z_REF_P(value);
  39541. if (GC_DELREF(ref) == 0) {
  39542. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  39543. efree_size(ref, sizeof(zend_reference));
  39544. value = &tmp;
  39545. } else {
  39546. value = Z_REFVAL_P(value);
  39547. Z_TRY_ADDREF_P(value);
  39548. }
  39549. } else {
  39550. value = Z_REFVAL_P(value);
  39551. Z_TRY_ADDREF_P(value);
  39552. }
  39553. } else if (IS_CONST == IS_CV) {
  39554. Z_TRY_ADDREF_P(value);
  39555. }
  39556. }
  39557. zend_hash_add_new(zobj->properties, name, value);
  39558. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39559. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39560. }
  39561. goto exit_assign_obj;
  39562. }
  39563. }
  39564. }
  39565. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39566. } else {
  39567. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  39568. if (UNEXPECTED(!name)) {
  39569. UNDEF_RESULT();
  39570. goto exit_assign_obj;
  39571. }
  39572. }
  39573. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  39574. ZVAL_DEREF(value);
  39575. }
  39576. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  39577. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39578. zend_tmp_string_release(tmp_name);
  39579. }
  39580. free_and_exit_assign_obj:
  39581. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39582. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  39583. }
  39584. exit_assign_obj:
  39585. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39586. /* assign_obj has two opcodes! */
  39587. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  39588. }
  39589. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  39590. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39591. {
  39592. USE_OPLINE
  39593. zval *object, *value, tmp;
  39594. zend_object *zobj;
  39595. zend_string *name, *tmp_name;
  39596. SAVE_OPLINE();
  39597. object = EX_VAR(opline->op1.var);
  39598. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  39599. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  39600. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  39601. object = Z_REFVAL_P(object);
  39602. goto assign_object;
  39603. }
  39604. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  39605. value = &EG(uninitialized_zval);
  39606. goto free_and_exit_assign_obj;
  39607. }
  39608. assign_object:
  39609. zobj = Z_OBJ_P(object);
  39610. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39611. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  39612. void **cache_slot = CACHE_ADDR(opline->extended_value);
  39613. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  39614. zend_object *zobj = Z_OBJ_P(object);
  39615. zval *property_val;
  39616. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  39617. property_val = OBJ_PROP(zobj, prop_offset);
  39618. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  39619. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  39620. if (UNEXPECTED(prop_info != NULL)) {
  39621. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  39622. goto free_and_exit_assign_obj;
  39623. } else {
  39624. fast_assign_obj:
  39625. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  39626. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39627. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39628. }
  39629. goto exit_assign_obj;
  39630. }
  39631. }
  39632. } else {
  39633. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39634. if (EXPECTED(zobj->properties != NULL)) {
  39635. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  39636. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  39637. GC_DELREF(zobj->properties);
  39638. }
  39639. zobj->properties = zend_array_dup(zobj->properties);
  39640. }
  39641. property_val = zend_hash_find_known_hash(zobj->properties, name);
  39642. if (property_val) {
  39643. goto fast_assign_obj;
  39644. }
  39645. }
  39646. if (!zobj->ce->__set) {
  39647. if (EXPECTED(zobj->properties == NULL)) {
  39648. rebuild_object_properties(zobj);
  39649. }
  39650. if (IS_TMP_VAR == IS_CONST) {
  39651. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  39652. Z_ADDREF_P(value);
  39653. }
  39654. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  39655. if (Z_ISREF_P(value)) {
  39656. if (IS_TMP_VAR == IS_VAR) {
  39657. zend_reference *ref = Z_REF_P(value);
  39658. if (GC_DELREF(ref) == 0) {
  39659. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  39660. efree_size(ref, sizeof(zend_reference));
  39661. value = &tmp;
  39662. } else {
  39663. value = Z_REFVAL_P(value);
  39664. Z_TRY_ADDREF_P(value);
  39665. }
  39666. } else {
  39667. value = Z_REFVAL_P(value);
  39668. Z_TRY_ADDREF_P(value);
  39669. }
  39670. } else if (IS_TMP_VAR == IS_CV) {
  39671. Z_TRY_ADDREF_P(value);
  39672. }
  39673. }
  39674. zend_hash_add_new(zobj->properties, name, value);
  39675. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39676. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39677. }
  39678. goto exit_assign_obj;
  39679. }
  39680. }
  39681. }
  39682. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39683. } else {
  39684. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  39685. if (UNEXPECTED(!name)) {
  39686. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  39687. UNDEF_RESULT();
  39688. goto exit_assign_obj;
  39689. }
  39690. }
  39691. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  39692. ZVAL_DEREF(value);
  39693. }
  39694. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  39695. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39696. zend_tmp_string_release(tmp_name);
  39697. }
  39698. free_and_exit_assign_obj:
  39699. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39700. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  39701. }
  39702. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  39703. exit_assign_obj:
  39704. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39705. /* assign_obj has two opcodes! */
  39706. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  39707. }
  39708. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  39709. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39710. {
  39711. USE_OPLINE
  39712. zval *object, *value, tmp;
  39713. zend_object *zobj;
  39714. zend_string *name, *tmp_name;
  39715. SAVE_OPLINE();
  39716. object = EX_VAR(opline->op1.var);
  39717. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  39718. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  39719. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  39720. object = Z_REFVAL_P(object);
  39721. goto assign_object;
  39722. }
  39723. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  39724. value = &EG(uninitialized_zval);
  39725. goto free_and_exit_assign_obj;
  39726. }
  39727. assign_object:
  39728. zobj = Z_OBJ_P(object);
  39729. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39730. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  39731. void **cache_slot = CACHE_ADDR(opline->extended_value);
  39732. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  39733. zend_object *zobj = Z_OBJ_P(object);
  39734. zval *property_val;
  39735. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  39736. property_val = OBJ_PROP(zobj, prop_offset);
  39737. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  39738. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  39739. if (UNEXPECTED(prop_info != NULL)) {
  39740. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  39741. goto free_and_exit_assign_obj;
  39742. } else {
  39743. fast_assign_obj:
  39744. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  39745. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39746. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39747. }
  39748. goto exit_assign_obj;
  39749. }
  39750. }
  39751. } else {
  39752. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39753. if (EXPECTED(zobj->properties != NULL)) {
  39754. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  39755. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  39756. GC_DELREF(zobj->properties);
  39757. }
  39758. zobj->properties = zend_array_dup(zobj->properties);
  39759. }
  39760. property_val = zend_hash_find_known_hash(zobj->properties, name);
  39761. if (property_val) {
  39762. goto fast_assign_obj;
  39763. }
  39764. }
  39765. if (!zobj->ce->__set) {
  39766. if (EXPECTED(zobj->properties == NULL)) {
  39767. rebuild_object_properties(zobj);
  39768. }
  39769. if (IS_VAR == IS_CONST) {
  39770. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  39771. Z_ADDREF_P(value);
  39772. }
  39773. } else if (IS_VAR != IS_TMP_VAR) {
  39774. if (Z_ISREF_P(value)) {
  39775. if (IS_VAR == IS_VAR) {
  39776. zend_reference *ref = Z_REF_P(value);
  39777. if (GC_DELREF(ref) == 0) {
  39778. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  39779. efree_size(ref, sizeof(zend_reference));
  39780. value = &tmp;
  39781. } else {
  39782. value = Z_REFVAL_P(value);
  39783. Z_TRY_ADDREF_P(value);
  39784. }
  39785. } else {
  39786. value = Z_REFVAL_P(value);
  39787. Z_TRY_ADDREF_P(value);
  39788. }
  39789. } else if (IS_VAR == IS_CV) {
  39790. Z_TRY_ADDREF_P(value);
  39791. }
  39792. }
  39793. zend_hash_add_new(zobj->properties, name, value);
  39794. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39795. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39796. }
  39797. goto exit_assign_obj;
  39798. }
  39799. }
  39800. }
  39801. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39802. } else {
  39803. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  39804. if (UNEXPECTED(!name)) {
  39805. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  39806. UNDEF_RESULT();
  39807. goto exit_assign_obj;
  39808. }
  39809. }
  39810. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  39811. ZVAL_DEREF(value);
  39812. }
  39813. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  39814. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39815. zend_tmp_string_release(tmp_name);
  39816. }
  39817. free_and_exit_assign_obj:
  39818. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39819. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  39820. }
  39821. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  39822. exit_assign_obj:
  39823. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39824. /* assign_obj has two opcodes! */
  39825. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  39826. }
  39827. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  39828. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39829. {
  39830. USE_OPLINE
  39831. zval *object, *value, tmp;
  39832. zend_object *zobj;
  39833. zend_string *name, *tmp_name;
  39834. SAVE_OPLINE();
  39835. object = EX_VAR(opline->op1.var);
  39836. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  39837. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  39838. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  39839. object = Z_REFVAL_P(object);
  39840. goto assign_object;
  39841. }
  39842. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  39843. value = &EG(uninitialized_zval);
  39844. goto free_and_exit_assign_obj;
  39845. }
  39846. assign_object:
  39847. zobj = Z_OBJ_P(object);
  39848. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39849. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  39850. void **cache_slot = CACHE_ADDR(opline->extended_value);
  39851. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  39852. zend_object *zobj = Z_OBJ_P(object);
  39853. zval *property_val;
  39854. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  39855. property_val = OBJ_PROP(zobj, prop_offset);
  39856. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  39857. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  39858. if (UNEXPECTED(prop_info != NULL)) {
  39859. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  39860. goto free_and_exit_assign_obj;
  39861. } else {
  39862. fast_assign_obj:
  39863. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  39864. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39865. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39866. }
  39867. goto exit_assign_obj;
  39868. }
  39869. }
  39870. } else {
  39871. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39872. if (EXPECTED(zobj->properties != NULL)) {
  39873. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  39874. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  39875. GC_DELREF(zobj->properties);
  39876. }
  39877. zobj->properties = zend_array_dup(zobj->properties);
  39878. }
  39879. property_val = zend_hash_find_known_hash(zobj->properties, name);
  39880. if (property_val) {
  39881. goto fast_assign_obj;
  39882. }
  39883. }
  39884. if (!zobj->ce->__set) {
  39885. if (EXPECTED(zobj->properties == NULL)) {
  39886. rebuild_object_properties(zobj);
  39887. }
  39888. if (IS_CV == IS_CONST) {
  39889. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  39890. Z_ADDREF_P(value);
  39891. }
  39892. } else if (IS_CV != IS_TMP_VAR) {
  39893. if (Z_ISREF_P(value)) {
  39894. if (IS_CV == IS_VAR) {
  39895. zend_reference *ref = Z_REF_P(value);
  39896. if (GC_DELREF(ref) == 0) {
  39897. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  39898. efree_size(ref, sizeof(zend_reference));
  39899. value = &tmp;
  39900. } else {
  39901. value = Z_REFVAL_P(value);
  39902. Z_TRY_ADDREF_P(value);
  39903. }
  39904. } else {
  39905. value = Z_REFVAL_P(value);
  39906. Z_TRY_ADDREF_P(value);
  39907. }
  39908. } else if (IS_CV == IS_CV) {
  39909. Z_TRY_ADDREF_P(value);
  39910. }
  39911. }
  39912. zend_hash_add_new(zobj->properties, name, value);
  39913. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39914. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39915. }
  39916. goto exit_assign_obj;
  39917. }
  39918. }
  39919. }
  39920. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39921. } else {
  39922. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  39923. if (UNEXPECTED(!name)) {
  39924. UNDEF_RESULT();
  39925. goto exit_assign_obj;
  39926. }
  39927. }
  39928. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  39929. ZVAL_DEREF(value);
  39930. }
  39931. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  39932. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39933. zend_tmp_string_release(tmp_name);
  39934. }
  39935. free_and_exit_assign_obj:
  39936. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39937. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  39938. }
  39939. exit_assign_obj:
  39940. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39941. /* assign_obj has two opcodes! */
  39942. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  39943. }
  39944. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  39945. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39946. {
  39947. USE_OPLINE
  39948. zval *object_ptr, *orig_object_ptr;
  39949. zval *value;
  39950. zval *variable_ptr;
  39951. zval *dim;
  39952. SAVE_OPLINE();
  39953. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  39954. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  39955. try_assign_dim_array:
  39956. SEPARATE_ARRAY(object_ptr);
  39957. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  39958. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  39959. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  39960. HashTable *ht = Z_ARRVAL_P(object_ptr);
  39961. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  39962. GC_ADDREF(ht);
  39963. }
  39964. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  39965. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  39966. zend_array_destroy(ht);
  39967. goto assign_dim_error;
  39968. }
  39969. }
  39970. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  39971. ZVAL_DEREF(value);
  39972. }
  39973. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  39974. if (UNEXPECTED(value == NULL)) {
  39975. zend_cannot_add_element();
  39976. goto assign_dim_error;
  39977. } else if (IS_CONST == IS_CV) {
  39978. if (Z_REFCOUNTED_P(value)) {
  39979. Z_ADDREF_P(value);
  39980. }
  39981. } else if (IS_CONST == IS_VAR) {
  39982. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  39983. if (Z_ISREF_P(free_op_data)) {
  39984. if (Z_REFCOUNTED_P(value)) {
  39985. Z_ADDREF_P(value);
  39986. }
  39987. zval_ptr_dtor_nogc(free_op_data);
  39988. }
  39989. } else if (IS_CONST == IS_CONST) {
  39990. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  39991. Z_ADDREF_P(value);
  39992. }
  39993. }
  39994. } else {
  39995. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  39996. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39997. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  39998. } else {
  39999. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40000. }
  40001. if (UNEXPECTED(variable_ptr == NULL)) {
  40002. goto assign_dim_error;
  40003. }
  40004. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  40005. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  40006. }
  40007. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40008. ZVAL_COPY(EX_VAR(opline->result.var), value);
  40009. }
  40010. } else {
  40011. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  40012. object_ptr = Z_REFVAL_P(object_ptr);
  40013. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40014. goto try_assign_dim_array;
  40015. }
  40016. }
  40017. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  40018. zend_object *obj = Z_OBJ_P(object_ptr);
  40019. GC_ADDREF(obj);
  40020. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40021. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  40022. dim = ZVAL_UNDEFINED_OP2();
  40023. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  40024. dim++;
  40025. }
  40026. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  40027. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  40028. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  40029. } else if (IS_CONST & (IS_CV|IS_VAR)) {
  40030. ZVAL_DEREF(value);
  40031. }
  40032. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40033. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  40034. zend_objects_store_del(obj);
  40035. }
  40036. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  40037. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  40038. zend_use_new_element_for_string();
  40039. UNDEF_RESULT();
  40040. } else {
  40041. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40042. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  40043. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40044. }
  40045. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  40046. if (Z_ISREF_P(orig_object_ptr)
  40047. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  40048. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  40049. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40050. UNDEF_RESULT();
  40051. } else {
  40052. HashTable *ht = zend_new_array(8);
  40053. zend_uchar old_type = Z_TYPE_P(object_ptr);
  40054. ZVAL_ARR(object_ptr, ht);
  40055. if (UNEXPECTED(old_type == IS_FALSE)) {
  40056. GC_ADDREF(ht);
  40057. zend_false_to_array_deprecated();
  40058. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  40059. zend_array_destroy(ht);
  40060. goto assign_dim_error;
  40061. }
  40062. }
  40063. goto try_assign_dim_array;
  40064. }
  40065. } else {
  40066. zend_use_scalar_as_array();
  40067. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40068. assign_dim_error:
  40069. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40070. ZVAL_NULL(EX_VAR(opline->result.var));
  40071. }
  40072. }
  40073. }
  40074. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  40075. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40076. }
  40077. /* assign_dim has two opcodes! */
  40078. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  40079. }
  40080. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40081. {
  40082. USE_OPLINE
  40083. zval *object_ptr, *orig_object_ptr;
  40084. zval *value;
  40085. zval *variable_ptr;
  40086. zval *dim;
  40087. SAVE_OPLINE();
  40088. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  40089. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40090. try_assign_dim_array:
  40091. SEPARATE_ARRAY(object_ptr);
  40092. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  40093. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  40094. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  40095. HashTable *ht = Z_ARRVAL_P(object_ptr);
  40096. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  40097. GC_ADDREF(ht);
  40098. }
  40099. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  40100. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  40101. zend_array_destroy(ht);
  40102. goto assign_dim_error;
  40103. }
  40104. }
  40105. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  40106. ZVAL_DEREF(value);
  40107. }
  40108. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  40109. if (UNEXPECTED(value == NULL)) {
  40110. zend_cannot_add_element();
  40111. goto assign_dim_error;
  40112. } else if (IS_TMP_VAR == IS_CV) {
  40113. if (Z_REFCOUNTED_P(value)) {
  40114. Z_ADDREF_P(value);
  40115. }
  40116. } else if (IS_TMP_VAR == IS_VAR) {
  40117. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  40118. if (Z_ISREF_P(free_op_data)) {
  40119. if (Z_REFCOUNTED_P(value)) {
  40120. Z_ADDREF_P(value);
  40121. }
  40122. zval_ptr_dtor_nogc(free_op_data);
  40123. }
  40124. } else if (IS_TMP_VAR == IS_CONST) {
  40125. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  40126. Z_ADDREF_P(value);
  40127. }
  40128. }
  40129. } else {
  40130. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40131. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40132. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40133. } else {
  40134. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40135. }
  40136. if (UNEXPECTED(variable_ptr == NULL)) {
  40137. goto assign_dim_error;
  40138. }
  40139. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  40140. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  40141. }
  40142. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40143. ZVAL_COPY(EX_VAR(opline->result.var), value);
  40144. }
  40145. } else {
  40146. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  40147. object_ptr = Z_REFVAL_P(object_ptr);
  40148. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40149. goto try_assign_dim_array;
  40150. }
  40151. }
  40152. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  40153. zend_object *obj = Z_OBJ_P(object_ptr);
  40154. GC_ADDREF(obj);
  40155. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40156. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  40157. dim = ZVAL_UNDEFINED_OP2();
  40158. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  40159. dim++;
  40160. }
  40161. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  40162. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  40163. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  40164. } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
  40165. ZVAL_DEREF(value);
  40166. }
  40167. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40168. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40169. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  40170. zend_objects_store_del(obj);
  40171. }
  40172. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  40173. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  40174. zend_use_new_element_for_string();
  40175. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40176. UNDEF_RESULT();
  40177. } else {
  40178. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40179. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  40180. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40181. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40182. }
  40183. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  40184. if (Z_ISREF_P(orig_object_ptr)
  40185. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  40186. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  40187. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40188. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40189. UNDEF_RESULT();
  40190. } else {
  40191. HashTable *ht = zend_new_array(8);
  40192. zend_uchar old_type = Z_TYPE_P(object_ptr);
  40193. ZVAL_ARR(object_ptr, ht);
  40194. if (UNEXPECTED(old_type == IS_FALSE)) {
  40195. GC_ADDREF(ht);
  40196. zend_false_to_array_deprecated();
  40197. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  40198. zend_array_destroy(ht);
  40199. goto assign_dim_error;
  40200. }
  40201. }
  40202. goto try_assign_dim_array;
  40203. }
  40204. } else {
  40205. zend_use_scalar_as_array();
  40206. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40207. assign_dim_error:
  40208. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40209. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40210. ZVAL_NULL(EX_VAR(opline->result.var));
  40211. }
  40212. }
  40213. }
  40214. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  40215. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40216. }
  40217. /* assign_dim has two opcodes! */
  40218. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  40219. }
  40220. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40221. {
  40222. USE_OPLINE
  40223. zval *object_ptr, *orig_object_ptr;
  40224. zval *value;
  40225. zval *variable_ptr;
  40226. zval *dim;
  40227. SAVE_OPLINE();
  40228. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  40229. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40230. try_assign_dim_array:
  40231. SEPARATE_ARRAY(object_ptr);
  40232. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  40233. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  40234. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  40235. HashTable *ht = Z_ARRVAL_P(object_ptr);
  40236. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  40237. GC_ADDREF(ht);
  40238. }
  40239. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  40240. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  40241. zend_array_destroy(ht);
  40242. goto assign_dim_error;
  40243. }
  40244. }
  40245. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  40246. ZVAL_DEREF(value);
  40247. }
  40248. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  40249. if (UNEXPECTED(value == NULL)) {
  40250. zend_cannot_add_element();
  40251. goto assign_dim_error;
  40252. } else if (IS_VAR == IS_CV) {
  40253. if (Z_REFCOUNTED_P(value)) {
  40254. Z_ADDREF_P(value);
  40255. }
  40256. } else if (IS_VAR == IS_VAR) {
  40257. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  40258. if (Z_ISREF_P(free_op_data)) {
  40259. if (Z_REFCOUNTED_P(value)) {
  40260. Z_ADDREF_P(value);
  40261. }
  40262. zval_ptr_dtor_nogc(free_op_data);
  40263. }
  40264. } else if (IS_VAR == IS_CONST) {
  40265. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  40266. Z_ADDREF_P(value);
  40267. }
  40268. }
  40269. } else {
  40270. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40271. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40272. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40273. } else {
  40274. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40275. }
  40276. if (UNEXPECTED(variable_ptr == NULL)) {
  40277. goto assign_dim_error;
  40278. }
  40279. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  40280. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  40281. }
  40282. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40283. ZVAL_COPY(EX_VAR(opline->result.var), value);
  40284. }
  40285. } else {
  40286. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  40287. object_ptr = Z_REFVAL_P(object_ptr);
  40288. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40289. goto try_assign_dim_array;
  40290. }
  40291. }
  40292. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  40293. zend_object *obj = Z_OBJ_P(object_ptr);
  40294. GC_ADDREF(obj);
  40295. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40296. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  40297. dim = ZVAL_UNDEFINED_OP2();
  40298. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  40299. dim++;
  40300. }
  40301. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  40302. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  40303. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  40304. } else if (IS_VAR & (IS_CV|IS_VAR)) {
  40305. ZVAL_DEREF(value);
  40306. }
  40307. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40308. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40309. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  40310. zend_objects_store_del(obj);
  40311. }
  40312. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  40313. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  40314. zend_use_new_element_for_string();
  40315. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40316. UNDEF_RESULT();
  40317. } else {
  40318. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40319. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  40320. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40321. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40322. }
  40323. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  40324. if (Z_ISREF_P(orig_object_ptr)
  40325. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  40326. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  40327. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40328. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40329. UNDEF_RESULT();
  40330. } else {
  40331. HashTable *ht = zend_new_array(8);
  40332. zend_uchar old_type = Z_TYPE_P(object_ptr);
  40333. ZVAL_ARR(object_ptr, ht);
  40334. if (UNEXPECTED(old_type == IS_FALSE)) {
  40335. GC_ADDREF(ht);
  40336. zend_false_to_array_deprecated();
  40337. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  40338. zend_array_destroy(ht);
  40339. goto assign_dim_error;
  40340. }
  40341. }
  40342. goto try_assign_dim_array;
  40343. }
  40344. } else {
  40345. zend_use_scalar_as_array();
  40346. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40347. assign_dim_error:
  40348. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40349. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40350. ZVAL_NULL(EX_VAR(opline->result.var));
  40351. }
  40352. }
  40353. }
  40354. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  40355. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40356. }
  40357. /* assign_dim has two opcodes! */
  40358. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  40359. }
  40360. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40361. {
  40362. USE_OPLINE
  40363. zval *object_ptr, *orig_object_ptr;
  40364. zval *value;
  40365. zval *variable_ptr;
  40366. zval *dim;
  40367. SAVE_OPLINE();
  40368. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  40369. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40370. try_assign_dim_array:
  40371. SEPARATE_ARRAY(object_ptr);
  40372. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  40373. value = EX_VAR((opline+1)->op1.var);
  40374. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  40375. HashTable *ht = Z_ARRVAL_P(object_ptr);
  40376. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  40377. GC_ADDREF(ht);
  40378. }
  40379. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  40380. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  40381. zend_array_destroy(ht);
  40382. goto assign_dim_error;
  40383. }
  40384. }
  40385. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  40386. ZVAL_DEREF(value);
  40387. }
  40388. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  40389. if (UNEXPECTED(value == NULL)) {
  40390. zend_cannot_add_element();
  40391. goto assign_dim_error;
  40392. } else if (IS_CV == IS_CV) {
  40393. if (Z_REFCOUNTED_P(value)) {
  40394. Z_ADDREF_P(value);
  40395. }
  40396. } else if (IS_CV == IS_VAR) {
  40397. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  40398. if (Z_ISREF_P(free_op_data)) {
  40399. if (Z_REFCOUNTED_P(value)) {
  40400. Z_ADDREF_P(value);
  40401. }
  40402. zval_ptr_dtor_nogc(free_op_data);
  40403. }
  40404. } else if (IS_CV == IS_CONST) {
  40405. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  40406. Z_ADDREF_P(value);
  40407. }
  40408. }
  40409. } else {
  40410. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40411. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40412. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40413. } else {
  40414. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40415. }
  40416. if (UNEXPECTED(variable_ptr == NULL)) {
  40417. goto assign_dim_error;
  40418. }
  40419. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  40420. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  40421. }
  40422. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40423. ZVAL_COPY(EX_VAR(opline->result.var), value);
  40424. }
  40425. } else {
  40426. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  40427. object_ptr = Z_REFVAL_P(object_ptr);
  40428. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40429. goto try_assign_dim_array;
  40430. }
  40431. }
  40432. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  40433. zend_object *obj = Z_OBJ_P(object_ptr);
  40434. GC_ADDREF(obj);
  40435. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40436. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  40437. dim = ZVAL_UNDEFINED_OP2();
  40438. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  40439. dim++;
  40440. }
  40441. value = EX_VAR((opline+1)->op1.var);
  40442. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  40443. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  40444. } else if (IS_CV & (IS_CV|IS_VAR)) {
  40445. ZVAL_DEREF(value);
  40446. }
  40447. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40448. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  40449. zend_objects_store_del(obj);
  40450. }
  40451. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  40452. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  40453. zend_use_new_element_for_string();
  40454. UNDEF_RESULT();
  40455. } else {
  40456. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40457. value = EX_VAR((opline+1)->op1.var);
  40458. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40459. }
  40460. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  40461. if (Z_ISREF_P(orig_object_ptr)
  40462. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  40463. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  40464. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40465. UNDEF_RESULT();
  40466. } else {
  40467. HashTable *ht = zend_new_array(8);
  40468. zend_uchar old_type = Z_TYPE_P(object_ptr);
  40469. ZVAL_ARR(object_ptr, ht);
  40470. if (UNEXPECTED(old_type == IS_FALSE)) {
  40471. GC_ADDREF(ht);
  40472. zend_false_to_array_deprecated();
  40473. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  40474. zend_array_destroy(ht);
  40475. goto assign_dim_error;
  40476. }
  40477. }
  40478. goto try_assign_dim_array;
  40479. }
  40480. } else {
  40481. zend_use_scalar_as_array();
  40482. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40483. assign_dim_error:
  40484. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40485. ZVAL_NULL(EX_VAR(opline->result.var));
  40486. }
  40487. }
  40488. }
  40489. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  40490. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40491. }
  40492. /* assign_dim has two opcodes! */
  40493. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  40494. }
  40495. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40496. {
  40497. USE_OPLINE
  40498. zval *property, *container, *value_ptr;
  40499. SAVE_OPLINE();
  40500. container = EX_VAR(opline->op1.var);
  40501. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40502. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  40503. if (1) {
  40504. if (IS_CV == IS_UNUSED) {
  40505. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40506. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40507. } else {
  40508. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40509. }
  40510. } else {
  40511. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40512. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40513. } else {
  40514. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40515. }
  40516. }
  40517. } else {
  40518. zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40519. }
  40520. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40521. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  40522. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  40523. }
  40524. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  40525. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40526. {
  40527. USE_OPLINE
  40528. zval *property, *container, *value_ptr;
  40529. SAVE_OPLINE();
  40530. container = EX_VAR(opline->op1.var);
  40531. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40532. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  40533. if (1) {
  40534. if (IS_CV == IS_UNUSED) {
  40535. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40536. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40537. } else {
  40538. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40539. }
  40540. } else {
  40541. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40542. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40543. } else {
  40544. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40545. }
  40546. }
  40547. } else {
  40548. zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40549. }
  40550. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40551. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  40552. }
  40553. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  40554. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40555. {
  40556. USE_OPLINE
  40557. zval *op1, *op2;
  40558. zend_string *op1_str, *op2_str, *str;
  40559. op1 = EX_VAR(opline->op1.var);
  40560. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40561. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  40562. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  40563. zend_string *op1_str = Z_STR_P(op1);
  40564. zend_string *op2_str = Z_STR_P(op2);
  40565. zend_string *str;
  40566. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  40567. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  40568. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  40569. } else {
  40570. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  40571. }
  40572. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  40573. zend_string_release_ex(op1_str, 0);
  40574. }
  40575. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  40576. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  40577. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  40578. } else {
  40579. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  40580. }
  40581. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  40582. zend_string_release_ex(op2_str, 0);
  40583. }
  40584. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  40585. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  40586. size_t len = ZSTR_LEN(op1_str);
  40587. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  40588. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  40589. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  40590. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  40591. zend_string_release_ex(op2_str, 0);
  40592. }
  40593. } else {
  40594. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  40595. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  40596. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  40597. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  40598. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  40599. zend_string_release_ex(op1_str, 0);
  40600. }
  40601. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  40602. zend_string_release_ex(op2_str, 0);
  40603. }
  40604. }
  40605. ZEND_VM_NEXT_OPCODE();
  40606. }
  40607. SAVE_OPLINE();
  40608. if (IS_CV == IS_CONST) {
  40609. op1_str = Z_STR_P(op1);
  40610. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  40611. op1_str = zend_string_copy(Z_STR_P(op1));
  40612. } else {
  40613. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  40614. ZVAL_UNDEFINED_OP1();
  40615. }
  40616. op1_str = zval_get_string_func(op1);
  40617. }
  40618. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40619. op2_str = Z_STR_P(op2);
  40620. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  40621. op2_str = zend_string_copy(Z_STR_P(op2));
  40622. } else {
  40623. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  40624. ZVAL_UNDEFINED_OP2();
  40625. }
  40626. op2_str = zval_get_string_func(op2);
  40627. }
  40628. do {
  40629. if (IS_CV != IS_CONST) {
  40630. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  40631. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40632. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  40633. GC_ADDREF(op2_str);
  40634. }
  40635. }
  40636. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  40637. zend_string_release_ex(op1_str, 0);
  40638. break;
  40639. }
  40640. }
  40641. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  40642. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  40643. if (IS_CV == IS_CONST) {
  40644. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  40645. GC_ADDREF(op1_str);
  40646. }
  40647. }
  40648. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  40649. zend_string_release_ex(op2_str, 0);
  40650. break;
  40651. }
  40652. }
  40653. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  40654. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  40655. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  40656. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  40657. if (IS_CV != IS_CONST) {
  40658. zend_string_release_ex(op1_str, 0);
  40659. }
  40660. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  40661. zend_string_release_ex(op2_str, 0);
  40662. }
  40663. } while (0);
  40664. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40665. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  40666. }
  40667. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40668. {
  40669. USE_OPLINE
  40670. zval *function_name;
  40671. zval *object;
  40672. zend_function *fbc;
  40673. zend_class_entry *called_scope;
  40674. zend_object *obj;
  40675. zend_execute_data *call;
  40676. uint32_t call_info;
  40677. SAVE_OPLINE();
  40678. object = EX_VAR(opline->op1.var);
  40679. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  40680. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40681. }
  40682. if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
  40683. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  40684. do {
  40685. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  40686. function_name = Z_REFVAL_P(function_name);
  40687. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  40688. break;
  40689. }
  40690. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  40691. ZVAL_UNDEFINED_OP2();
  40692. if (UNEXPECTED(EG(exception) != NULL)) {
  40693. HANDLE_EXCEPTION();
  40694. }
  40695. }
  40696. zend_throw_error(NULL, "Method name must be a string");
  40697. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40698. HANDLE_EXCEPTION();
  40699. } while (0);
  40700. }
  40701. if (IS_CV == IS_UNUSED) {
  40702. obj = Z_OBJ_P(object);
  40703. } else {
  40704. do {
  40705. if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  40706. obj = Z_OBJ_P(object);
  40707. } else {
  40708. if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  40709. zend_reference *ref = Z_REF_P(object);
  40710. object = &ref->val;
  40711. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  40712. obj = Z_OBJ_P(object);
  40713. if (IS_CV & IS_VAR) {
  40714. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  40715. efree_size(ref, sizeof(zend_reference));
  40716. } else {
  40717. Z_ADDREF_P(object);
  40718. }
  40719. }
  40720. break;
  40721. }
  40722. }
  40723. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  40724. object = ZVAL_UNDEFINED_OP1();
  40725. if (UNEXPECTED(EG(exception) != NULL)) {
  40726. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  40727. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40728. }
  40729. HANDLE_EXCEPTION();
  40730. }
  40731. }
  40732. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40733. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40734. }
  40735. zend_invalid_method_call(object, function_name);
  40736. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40737. HANDLE_EXCEPTION();
  40738. }
  40739. } while (0);
  40740. }
  40741. called_scope = obj->ce;
  40742. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  40743. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  40744. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  40745. } else {
  40746. zend_object *orig_obj = obj;
  40747. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40748. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40749. }
  40750. /* First, locate the function. */
  40751. 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));
  40752. if (UNEXPECTED(fbc == NULL)) {
  40753. if (EXPECTED(!EG(exception))) {
  40754. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  40755. }
  40756. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40757. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  40758. zend_objects_store_del(orig_obj);
  40759. }
  40760. HANDLE_EXCEPTION();
  40761. }
  40762. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  40763. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  40764. EXPECTED(obj == orig_obj)) {
  40765. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  40766. }
  40767. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  40768. GC_ADDREF(obj); /* For $this pointer */
  40769. if (GC_DELREF(orig_obj) == 0) {
  40770. zend_objects_store_del(orig_obj);
  40771. }
  40772. }
  40773. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  40774. init_func_run_time_cache(&fbc->op_array);
  40775. }
  40776. }
  40777. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  40778. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40779. }
  40780. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  40781. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  40782. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  40783. zend_objects_store_del(obj);
  40784. if (UNEXPECTED(EG(exception))) {
  40785. HANDLE_EXCEPTION();
  40786. }
  40787. }
  40788. /* call static method */
  40789. obj = (zend_object*)called_scope;
  40790. call_info = ZEND_CALL_NESTED_FUNCTION;
  40791. } else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  40792. if (IS_CV == IS_CV) {
  40793. GC_ADDREF(obj); /* For $this pointer */
  40794. }
  40795. /* CV may be changed indirectly (e.g. when it's a reference) */
  40796. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  40797. }
  40798. call = zend_vm_stack_push_call_frame(call_info,
  40799. fbc, opline->extended_value, obj);
  40800. call->prev_execute_data = EX(call);
  40801. EX(call) = call;
  40802. ZEND_VM_NEXT_OPCODE();
  40803. }
  40804. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40805. {
  40806. USE_OPLINE
  40807. zval *expr_ptr, new_expr;
  40808. SAVE_OPLINE();
  40809. if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
  40810. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  40811. expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  40812. if (Z_ISREF_P(expr_ptr)) {
  40813. Z_ADDREF_P(expr_ptr);
  40814. } else {
  40815. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  40816. }
  40817. } else {
  40818. expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  40819. if (IS_CV == IS_TMP_VAR) {
  40820. /* pass */
  40821. } else if (IS_CV == IS_CONST) {
  40822. Z_TRY_ADDREF_P(expr_ptr);
  40823. } else if (IS_CV == IS_CV) {
  40824. ZVAL_DEREF(expr_ptr);
  40825. Z_TRY_ADDREF_P(expr_ptr);
  40826. } else /* if (IS_CV == IS_VAR) */ {
  40827. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  40828. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  40829. expr_ptr = Z_REFVAL_P(expr_ptr);
  40830. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  40831. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  40832. expr_ptr = &new_expr;
  40833. efree_size(ref, sizeof(zend_reference));
  40834. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  40835. Z_ADDREF_P(expr_ptr);
  40836. }
  40837. }
  40838. }
  40839. }
  40840. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  40841. zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40842. zend_string *str;
  40843. zend_ulong hval;
  40844. add_again:
  40845. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  40846. str = Z_STR_P(offset);
  40847. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  40848. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  40849. goto num_index;
  40850. }
  40851. }
  40852. str_index:
  40853. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  40854. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  40855. hval = Z_LVAL_P(offset);
  40856. num_index:
  40857. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  40858. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  40859. offset = Z_REFVAL_P(offset);
  40860. goto add_again;
  40861. } else if (Z_TYPE_P(offset) == IS_NULL) {
  40862. str = ZSTR_EMPTY_ALLOC();
  40863. goto str_index;
  40864. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  40865. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  40866. goto num_index;
  40867. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  40868. hval = 0;
  40869. goto num_index;
  40870. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  40871. hval = 1;
  40872. goto num_index;
  40873. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  40874. zend_use_resource_as_offset(offset);
  40875. hval = Z_RES_HANDLE_P(offset);
  40876. goto num_index;
  40877. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  40878. ZVAL_UNDEFINED_OP2();
  40879. str = ZSTR_EMPTY_ALLOC();
  40880. goto str_index;
  40881. } else {
  40882. zend_illegal_offset();
  40883. zval_ptr_dtor_nogc(expr_ptr);
  40884. }
  40885. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40886. } else {
  40887. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  40888. zend_cannot_add_element();
  40889. zval_ptr_dtor_nogc(expr_ptr);
  40890. }
  40891. }
  40892. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  40893. }
  40894. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40895. {
  40896. zval *array;
  40897. uint32_t size;
  40898. USE_OPLINE
  40899. array = EX_VAR(opline->result.var);
  40900. if (IS_CV != IS_UNUSED) {
  40901. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  40902. ZVAL_ARR(array, zend_new_array(size));
  40903. /* Explicitly initialize array as not-packed if flag is set */
  40904. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  40905. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  40906. }
  40907. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  40908. } else {
  40909. ZVAL_ARR(array, zend_new_array(0));
  40910. ZEND_VM_NEXT_OPCODE();
  40911. }
  40912. }
  40913. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40914. {
  40915. USE_OPLINE
  40916. zval *container;
  40917. zval *offset;
  40918. zend_ulong hval;
  40919. zend_string *key;
  40920. SAVE_OPLINE();
  40921. container = EX_VAR(opline->op1.var);
  40922. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40923. do {
  40924. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  40925. HashTable *ht;
  40926. unset_dim_array:
  40927. SEPARATE_ARRAY(container);
  40928. ht = Z_ARRVAL_P(container);
  40929. offset_again:
  40930. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  40931. key = Z_STR_P(offset);
  40932. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  40933. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  40934. goto num_index_dim;
  40935. }
  40936. }
  40937. str_index_dim:
  40938. ZEND_ASSERT(ht != &EG(symbol_table));
  40939. zend_hash_del(ht, key);
  40940. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  40941. hval = Z_LVAL_P(offset);
  40942. num_index_dim:
  40943. zend_hash_index_del(ht, hval);
  40944. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  40945. offset = Z_REFVAL_P(offset);
  40946. goto offset_again;
  40947. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  40948. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  40949. goto num_index_dim;
  40950. } else if (Z_TYPE_P(offset) == IS_NULL) {
  40951. key = ZSTR_EMPTY_ALLOC();
  40952. goto str_index_dim;
  40953. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  40954. hval = 0;
  40955. goto num_index_dim;
  40956. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  40957. hval = 1;
  40958. goto num_index_dim;
  40959. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  40960. zend_use_resource_as_offset(offset);
  40961. hval = Z_RES_HANDLE_P(offset);
  40962. goto num_index_dim;
  40963. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  40964. ZVAL_UNDEFINED_OP2();
  40965. key = ZSTR_EMPTY_ALLOC();
  40966. goto str_index_dim;
  40967. } else {
  40968. zend_type_error("Illegal offset type in unset");
  40969. }
  40970. break;
  40971. } else if (Z_ISREF_P(container)) {
  40972. container = Z_REFVAL_P(container);
  40973. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  40974. goto unset_dim_array;
  40975. }
  40976. }
  40977. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  40978. container = ZVAL_UNDEFINED_OP1();
  40979. }
  40980. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  40981. offset = ZVAL_UNDEFINED_OP2();
  40982. }
  40983. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  40984. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  40985. offset++;
  40986. }
  40987. Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
  40988. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  40989. zend_throw_error(NULL, "Cannot unset string offsets");
  40990. } else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
  40991. zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
  40992. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
  40993. zend_false_to_array_deprecated();
  40994. }
  40995. } while (0);
  40996. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40997. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  40998. }
  40999. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41000. {
  41001. USE_OPLINE
  41002. zval *container;
  41003. zval *offset;
  41004. zend_string *name, *tmp_name;
  41005. SAVE_OPLINE();
  41006. container = EX_VAR(opline->op1.var);
  41007. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  41008. do {
  41009. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  41010. if (Z_ISREF_P(container)) {
  41011. container = Z_REFVAL_P(container);
  41012. if (Z_TYPE_P(container) != IS_OBJECT) {
  41013. if (IS_CV == IS_CV
  41014. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  41015. ZVAL_UNDEFINED_OP1();
  41016. }
  41017. break;
  41018. }
  41019. } else {
  41020. break;
  41021. }
  41022. }
  41023. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  41024. name = Z_STR_P(offset);
  41025. } else {
  41026. name = zval_try_get_tmp_string(offset, &tmp_name);
  41027. if (UNEXPECTED(!name)) {
  41028. break;
  41029. }
  41030. }
  41031. Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  41032. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  41033. zend_tmp_string_release(tmp_name);
  41034. }
  41035. } while (0);
  41036. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41037. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41038. }
  41039. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41040. {
  41041. USE_OPLINE
  41042. zval *container;
  41043. bool result;
  41044. zend_ulong hval;
  41045. zval *offset;
  41046. SAVE_OPLINE();
  41047. container = EX_VAR(opline->op1.var);
  41048. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  41049. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  41050. HashTable *ht;
  41051. zval *value;
  41052. zend_string *str;
  41053. isset_dim_obj_array:
  41054. ht = Z_ARRVAL_P(container);
  41055. isset_again:
  41056. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  41057. str = Z_STR_P(offset);
  41058. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  41059. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  41060. goto num_index_prop;
  41061. }
  41062. }
  41063. value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
  41064. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  41065. hval = Z_LVAL_P(offset);
  41066. num_index_prop:
  41067. value = zend_hash_index_find(ht, hval);
  41068. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  41069. offset = Z_REFVAL_P(offset);
  41070. goto isset_again;
  41071. } else {
  41072. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  41073. if (UNEXPECTED(EG(exception))) {
  41074. result = 0;
  41075. goto isset_dim_obj_exit;
  41076. }
  41077. }
  41078. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  41079. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  41080. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  41081. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  41082. if (IS_CV & (IS_CONST|IS_CV)) {
  41083. /* avoid exception check */
  41084. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41085. ZEND_VM_SMART_BRANCH(result, 0);
  41086. }
  41087. } else {
  41088. result = (value == NULL || !i_zend_is_true(value));
  41089. }
  41090. goto isset_dim_obj_exit;
  41091. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  41092. container = Z_REFVAL_P(container);
  41093. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  41094. goto isset_dim_obj_array;
  41095. }
  41096. }
  41097. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  41098. offset++;
  41099. }
  41100. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  41101. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  41102. } else {
  41103. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  41104. }
  41105. isset_dim_obj_exit:
  41106. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41107. ZEND_VM_SMART_BRANCH(result, 1);
  41108. }
  41109. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41110. {
  41111. USE_OPLINE
  41112. zval *container;
  41113. int result;
  41114. zval *offset;
  41115. zend_string *name, *tmp_name;
  41116. SAVE_OPLINE();
  41117. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  41118. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  41119. if (IS_CV == IS_CONST ||
  41120. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  41121. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  41122. container = Z_REFVAL_P(container);
  41123. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  41124. result = (opline->extended_value & ZEND_ISEMPTY);
  41125. goto isset_object_finish;
  41126. }
  41127. } else {
  41128. result = (opline->extended_value & ZEND_ISEMPTY);
  41129. goto isset_object_finish;
  41130. }
  41131. }
  41132. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  41133. name = Z_STR_P(offset);
  41134. } else {
  41135. name = zval_try_get_tmp_string(offset, &tmp_name);
  41136. if (UNEXPECTED(!name)) {
  41137. result = 0;
  41138. goto isset_object_finish;
  41139. }
  41140. }
  41141. result =
  41142. (opline->extended_value & ZEND_ISEMPTY) ^
  41143. Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  41144. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  41145. zend_tmp_string_release(tmp_name);
  41146. }
  41147. isset_object_finish:
  41148. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41149. ZEND_VM_SMART_BRANCH(result, 1);
  41150. }
  41151. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41152. {
  41153. USE_OPLINE
  41154. zval *key, *subject;
  41155. HashTable *ht;
  41156. bool result;
  41157. SAVE_OPLINE();
  41158. key = EX_VAR(opline->op1.var);
  41159. subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  41160. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  41161. array_key_exists_array:
  41162. ht = Z_ARRVAL_P(subject);
  41163. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  41164. } else {
  41165. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  41166. subject = Z_REFVAL_P(subject);
  41167. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  41168. goto array_key_exists_array;
  41169. }
  41170. }
  41171. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  41172. result = 0;
  41173. }
  41174. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41175. ZEND_VM_SMART_BRANCH(result, 1);
  41176. }
  41177. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  41178. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41179. {
  41180. USE_OPLINE
  41181. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  41182. SAVE_OPLINE();
  41183. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  41184. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  41185. }
  41186. /* Destroy the previously yielded value */
  41187. zval_ptr_dtor(&generator->value);
  41188. /* Destroy the previously yielded key */
  41189. zval_ptr_dtor(&generator->key);
  41190. /* Set the new yielded value */
  41191. if (IS_CV != IS_UNUSED) {
  41192. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  41193. /* Constants and temporary variables aren't yieldable by reference,
  41194. * but we still allow them with a notice. */
  41195. if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
  41196. zval *value;
  41197. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  41198. value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41199. ZVAL_COPY_VALUE(&generator->value, value);
  41200. if (IS_CV == IS_CONST) {
  41201. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  41202. Z_ADDREF(generator->value);
  41203. }
  41204. }
  41205. } else {
  41206. zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  41207. /* If a function call result is yielded and the function did
  41208. * not return by reference we throw a notice. */
  41209. do {
  41210. if (IS_CV == IS_VAR) {
  41211. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  41212. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  41213. && !Z_ISREF_P(value_ptr)) {
  41214. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  41215. ZVAL_COPY(&generator->value, value_ptr);
  41216. break;
  41217. }
  41218. }
  41219. if (Z_ISREF_P(value_ptr)) {
  41220. Z_ADDREF_P(value_ptr);
  41221. } else {
  41222. ZVAL_MAKE_REF_EX(value_ptr, 2);
  41223. }
  41224. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  41225. } while (0);
  41226. }
  41227. } else {
  41228. zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41229. /* Consts, temporary variables and references need copying */
  41230. if (IS_CV == IS_CONST) {
  41231. ZVAL_COPY_VALUE(&generator->value, value);
  41232. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  41233. Z_ADDREF(generator->value);
  41234. }
  41235. } else if (IS_CV == IS_TMP_VAR) {
  41236. ZVAL_COPY_VALUE(&generator->value, value);
  41237. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  41238. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  41239. } else {
  41240. ZVAL_COPY_VALUE(&generator->value, value);
  41241. if (IS_CV == IS_CV) {
  41242. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  41243. }
  41244. }
  41245. }
  41246. } else {
  41247. /* If no value was specified yield null */
  41248. ZVAL_NULL(&generator->value);
  41249. }
  41250. /* Set the new yielded key */
  41251. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  41252. zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  41253. if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  41254. key = Z_REFVAL_P(key);
  41255. }
  41256. ZVAL_COPY(&generator->key, key);
  41257. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41258. if (Z_TYPE(generator->key) == IS_LONG
  41259. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  41260. ) {
  41261. generator->largest_used_integer_key = Z_LVAL(generator->key);
  41262. }
  41263. } else {
  41264. /* If no key was specified we use auto-increment keys */
  41265. generator->largest_used_integer_key++;
  41266. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  41267. }
  41268. if (RETURN_VALUE_USED(opline)) {
  41269. /* If the return value of yield is used set the send
  41270. * target and initialize it to NULL */
  41271. generator->send_target = EX_VAR(opline->result.var);
  41272. ZVAL_NULL(generator->send_target);
  41273. } else {
  41274. generator->send_target = NULL;
  41275. }
  41276. /* We increment to the next op, so we are at the correct position when the
  41277. * generator is resumed. */
  41278. ZEND_VM_INC_OPCODE();
  41279. /* The GOTO VM uses a local opline variable. We need to set the opline
  41280. * variable in execute_data so we don't resume at an old position. */
  41281. SAVE_OPLINE();
  41282. ZEND_VM_RETURN();
  41283. }
  41284. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41285. {
  41286. USE_OPLINE
  41287. zval *op1, *op2;
  41288. bool result;
  41289. SAVE_OPLINE();
  41290. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41291. op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  41292. result = fast_is_identical_function(op1, op2);
  41293. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41294. ZEND_VM_SMART_BRANCH(result, 1);
  41295. }
  41296. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41297. {
  41298. USE_OPLINE
  41299. zval *op1, *op2;
  41300. bool result;
  41301. SAVE_OPLINE();
  41302. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41303. op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  41304. result = fast_is_not_identical_function(op1, op2);
  41305. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41306. ZEND_VM_SMART_BRANCH(result, 1);
  41307. }
  41308. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41309. {
  41310. USE_OPLINE
  41311. zval *value;
  41312. zval *variable_ptr;
  41313. SAVE_OPLINE();
  41314. value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  41315. variable_ptr = EX_VAR(opline->op1.var);
  41316. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  41317. if (UNEXPECTED(0)) {
  41318. ZVAL_COPY(EX_VAR(opline->result.var), value);
  41319. }
  41320. /* zend_assign_to_variable() always takes care of op2, never free it! */
  41321. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41322. }
  41323. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41324. {
  41325. USE_OPLINE
  41326. zval *value;
  41327. zval *variable_ptr;
  41328. SAVE_OPLINE();
  41329. value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  41330. variable_ptr = EX_VAR(opline->op1.var);
  41331. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  41332. if (UNEXPECTED(1)) {
  41333. ZVAL_COPY(EX_VAR(opline->result.var), value);
  41334. }
  41335. /* zend_assign_to_variable() always takes care of op2, never free it! */
  41336. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41337. }
  41338. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41339. {
  41340. USE_OPLINE
  41341. zval *op1, *op2;
  41342. bool result;
  41343. SAVE_OPLINE();
  41344. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41345. op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
  41346. result = fast_is_identical_function(op1, op2);
  41347. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41348. ZEND_VM_SMART_BRANCH(result, 1);
  41349. }
  41350. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41351. {
  41352. USE_OPLINE
  41353. zval *op1, *op2;
  41354. bool result;
  41355. SAVE_OPLINE();
  41356. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41357. op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
  41358. result = fast_is_not_identical_function(op1, op2);
  41359. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41360. ZEND_VM_SMART_BRANCH(result, 1);
  41361. }
  41362. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41363. {
  41364. USE_OPLINE
  41365. zval *value;
  41366. zval *variable_ptr;
  41367. SAVE_OPLINE();
  41368. value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  41369. variable_ptr = EX_VAR(opline->op1.var);
  41370. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  41371. if (UNEXPECTED(0)) {
  41372. ZVAL_COPY(EX_VAR(opline->result.var), value);
  41373. }
  41374. /* zend_assign_to_variable() always takes care of op2, never free it! */
  41375. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41376. }
  41377. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41378. {
  41379. USE_OPLINE
  41380. zval *value;
  41381. zval *variable_ptr;
  41382. SAVE_OPLINE();
  41383. value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  41384. variable_ptr = EX_VAR(opline->op1.var);
  41385. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  41386. if (UNEXPECTED(1)) {
  41387. ZVAL_COPY(EX_VAR(opline->result.var), value);
  41388. }
  41389. /* zend_assign_to_variable() always takes care of op2, never free it! */
  41390. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41391. }
  41392. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41393. {
  41394. USE_OPLINE
  41395. zval *variable_ptr;
  41396. zval *value_ptr;
  41397. SAVE_OPLINE();
  41398. value_ptr = _get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  41399. variable_ptr = EX_VAR(opline->op1.var);
  41400. if (IS_CV == IS_VAR &&
  41401. UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
  41402. zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
  41403. variable_ptr = &EG(uninitialized_zval);
  41404. } else if (IS_VAR == IS_VAR &&
  41405. opline->extended_value == ZEND_RETURNS_FUNCTION &&
  41406. UNEXPECTED(!Z_ISREF_P(value_ptr))) {
  41407. variable_ptr = zend_wrong_assign_to_variable_reference(
  41408. variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  41409. } else {
  41410. zend_assign_to_variable_reference(variable_ptr, value_ptr);
  41411. }
  41412. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  41413. ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
  41414. }
  41415. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41416. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41417. }
  41418. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41419. {
  41420. USE_OPLINE
  41421. zval *expr;
  41422. bool result;
  41423. SAVE_OPLINE();
  41424. expr = EX_VAR(opline->op1.var);
  41425. try_instanceof:
  41426. if (Z_TYPE_P(expr) == IS_OBJECT) {
  41427. zend_class_entry *ce;
  41428. if (IS_VAR == IS_CONST) {
  41429. ce = CACHED_PTR(opline->extended_value);
  41430. if (UNEXPECTED(ce == NULL)) {
  41431. ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
  41432. if (EXPECTED(ce)) {
  41433. CACHE_PTR(opline->extended_value, ce);
  41434. }
  41435. }
  41436. } else if (IS_VAR == IS_UNUSED) {
  41437. ce = zend_fetch_class(NULL, opline->op2.num);
  41438. if (UNEXPECTED(ce == NULL)) {
  41439. ZVAL_UNDEF(EX_VAR(opline->result.var));
  41440. HANDLE_EXCEPTION();
  41441. }
  41442. } else {
  41443. ce = Z_CE_P(EX_VAR(opline->op2.var));
  41444. }
  41445. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  41446. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  41447. expr = Z_REFVAL_P(expr);
  41448. goto try_instanceof;
  41449. } else {
  41450. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  41451. ZVAL_UNDEFINED_OP1();
  41452. }
  41453. result = 0;
  41454. }
  41455. ZEND_VM_SMART_BRANCH(result, 1);
  41456. }
  41457. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41458. {
  41459. USE_OPLINE
  41460. zval *var_ptr;
  41461. zval *value, *container, *dim;
  41462. HashTable *ht;
  41463. SAVE_OPLINE();
  41464. container = EX_VAR(opline->op1.var);
  41465. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  41466. assign_dim_op_array:
  41467. SEPARATE_ARRAY(container);
  41468. ht = Z_ARRVAL_P(container);
  41469. assign_dim_op_new_array:
  41470. dim = NULL;
  41471. if (IS_UNUSED == IS_UNUSED) {
  41472. var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
  41473. if (UNEXPECTED(!var_ptr)) {
  41474. zend_cannot_add_element();
  41475. goto assign_dim_op_ret_null;
  41476. }
  41477. } else {
  41478. if (IS_UNUSED == IS_CONST) {
  41479. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
  41480. } else {
  41481. var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
  41482. }
  41483. if (UNEXPECTED(!var_ptr)) {
  41484. goto assign_dim_op_ret_null;
  41485. }
  41486. }
  41487. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  41488. do {
  41489. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
  41490. zend_reference *ref = Z_REF_P(var_ptr);
  41491. var_ptr = Z_REFVAL_P(var_ptr);
  41492. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  41493. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  41494. break;
  41495. }
  41496. }
  41497. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  41498. } while (0);
  41499. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  41500. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  41501. }
  41502. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  41503. } else {
  41504. if (EXPECTED(Z_ISREF_P(container))) {
  41505. container = Z_REFVAL_P(container);
  41506. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  41507. goto assign_dim_op_array;
  41508. }
  41509. }
  41510. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  41511. zend_object *obj = Z_OBJ_P(container);
  41512. dim = NULL;
  41513. if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  41514. dim++;
  41515. }
  41516. zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
  41517. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  41518. zend_uchar old_type;
  41519. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  41520. ZVAL_UNDEFINED_OP1();
  41521. }
  41522. ht = zend_new_array(8);
  41523. old_type = Z_TYPE_P(container);
  41524. ZVAL_ARR(container, ht);
  41525. if (UNEXPECTED(old_type == IS_FALSE)) {
  41526. GC_ADDREF(ht);
  41527. zend_false_to_array_deprecated();
  41528. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  41529. zend_array_destroy(ht);
  41530. goto assign_dim_op_ret_null;
  41531. }
  41532. }
  41533. goto assign_dim_op_new_array;
  41534. } else {
  41535. dim = NULL;
  41536. zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  41537. assign_dim_op_ret_null:
  41538. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  41539. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  41540. ZVAL_NULL(EX_VAR(opline->result.var));
  41541. }
  41542. }
  41543. }
  41544. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  41545. }
  41546. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
  41547. {
  41548. USE_OPLINE
  41549. zval *varname;
  41550. zval *retval;
  41551. zend_string *name, *tmp_name;
  41552. HashTable *target_symbol_table;
  41553. SAVE_OPLINE();
  41554. varname = EX_VAR(opline->op1.var);
  41555. if (IS_CV == IS_CONST) {
  41556. name = Z_STR_P(varname);
  41557. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  41558. name = Z_STR_P(varname);
  41559. tmp_name = NULL;
  41560. } else {
  41561. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  41562. ZVAL_UNDEFINED_OP1();
  41563. }
  41564. name = zval_try_get_tmp_string(varname, &tmp_name);
  41565. if (UNEXPECTED(!name)) {
  41566. if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
  41567. }
  41568. ZVAL_UNDEF(EX_VAR(opline->result.var));
  41569. HANDLE_EXCEPTION();
  41570. }
  41571. }
  41572. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  41573. retval = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
  41574. if (retval == NULL) {
  41575. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  41576. fetch_this:
  41577. zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
  41578. if (IS_CV != IS_CONST) {
  41579. zend_tmp_string_release(tmp_name);
  41580. }
  41581. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41582. }
  41583. if (type == BP_VAR_W) {
  41584. retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
  41585. } else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
  41586. retval = &EG(uninitialized_zval);
  41587. } else {
  41588. zend_error(E_WARNING, "Undefined %svariable $%s",
  41589. (opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
  41590. if (type == BP_VAR_RW && !EG(exception)) {
  41591. retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
  41592. } else {
  41593. retval = &EG(uninitialized_zval);
  41594. }
  41595. }
  41596. /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
  41597. } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
  41598. retval = Z_INDIRECT_P(retval);
  41599. if (Z_TYPE_P(retval) == IS_UNDEF) {
  41600. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  41601. goto fetch_this;
  41602. }
  41603. if (type == BP_VAR_W) {
  41604. ZVAL_NULL(retval);
  41605. } else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
  41606. retval = &EG(uninitialized_zval);
  41607. } else {
  41608. zend_error(E_WARNING, "Undefined %svariable $%s",
  41609. (opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
  41610. if (type == BP_VAR_RW && !EG(exception)) {
  41611. ZVAL_NULL(retval);
  41612. } else {
  41613. retval = &EG(uninitialized_zval);
  41614. }
  41615. }
  41616. }
  41617. }
  41618. if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
  41619. }
  41620. if (IS_CV != IS_CONST) {
  41621. zend_tmp_string_release(tmp_name);
  41622. }
  41623. ZEND_ASSERT(retval != NULL);
  41624. if (type == BP_VAR_R || type == BP_VAR_IS) {
  41625. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  41626. } else {
  41627. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  41628. }
  41629. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41630. }
  41631. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41632. {
  41633. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  41634. }
  41635. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41636. {
  41637. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  41638. }
  41639. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41640. {
  41641. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  41642. }
  41643. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41644. {
  41645. int fetch_type =
  41646. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  41647. BP_VAR_W : BP_VAR_R;
  41648. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  41649. }
  41650. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41651. {
  41652. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  41653. }
  41654. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41655. {
  41656. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  41657. }
  41658. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  41659. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41660. {
  41661. USE_OPLINE
  41662. zval *container;
  41663. SAVE_OPLINE();
  41664. container = EX_VAR(opline->op1.var);
  41665. zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
  41666. if (IS_CV == IS_VAR) {
  41667. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  41668. }
  41669. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41670. }
  41671. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41672. {
  41673. USE_OPLINE
  41674. zval *container;
  41675. SAVE_OPLINE();
  41676. container = EX_VAR(opline->op1.var);
  41677. zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
  41678. if (IS_CV == IS_VAR) {
  41679. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  41680. }
  41681. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41682. }
  41683. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41684. {
  41685. #if 0
  41686. USE_OPLINE
  41687. #endif
  41688. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  41689. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  41690. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  41691. }
  41692. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  41693. } else {
  41694. if (IS_UNUSED == IS_UNUSED) {
  41695. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  41696. }
  41697. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  41698. }
  41699. }
  41700. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41701. {
  41702. USE_OPLINE
  41703. zval *object_ptr, *orig_object_ptr;
  41704. zval *value;
  41705. zval *variable_ptr;
  41706. zval *dim;
  41707. SAVE_OPLINE();
  41708. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  41709. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  41710. try_assign_dim_array:
  41711. SEPARATE_ARRAY(object_ptr);
  41712. if (IS_UNUSED == IS_UNUSED) {
  41713. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  41714. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  41715. HashTable *ht = Z_ARRVAL_P(object_ptr);
  41716. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  41717. GC_ADDREF(ht);
  41718. }
  41719. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  41720. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  41721. zend_array_destroy(ht);
  41722. goto assign_dim_error;
  41723. }
  41724. }
  41725. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  41726. ZVAL_DEREF(value);
  41727. }
  41728. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  41729. if (UNEXPECTED(value == NULL)) {
  41730. zend_cannot_add_element();
  41731. goto assign_dim_error;
  41732. } else if (IS_CONST == IS_CV) {
  41733. if (Z_REFCOUNTED_P(value)) {
  41734. Z_ADDREF_P(value);
  41735. }
  41736. } else if (IS_CONST == IS_VAR) {
  41737. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  41738. if (Z_ISREF_P(free_op_data)) {
  41739. if (Z_REFCOUNTED_P(value)) {
  41740. Z_ADDREF_P(value);
  41741. }
  41742. zval_ptr_dtor_nogc(free_op_data);
  41743. }
  41744. } else if (IS_CONST == IS_CONST) {
  41745. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  41746. Z_ADDREF_P(value);
  41747. }
  41748. }
  41749. } else {
  41750. dim = NULL;
  41751. if (IS_UNUSED == IS_CONST) {
  41752. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  41753. } else {
  41754. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  41755. }
  41756. if (UNEXPECTED(variable_ptr == NULL)) {
  41757. goto assign_dim_error;
  41758. }
  41759. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  41760. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  41761. }
  41762. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  41763. ZVAL_COPY(EX_VAR(opline->result.var), value);
  41764. }
  41765. } else {
  41766. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  41767. object_ptr = Z_REFVAL_P(object_ptr);
  41768. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  41769. goto try_assign_dim_array;
  41770. }
  41771. }
  41772. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  41773. zend_object *obj = Z_OBJ_P(object_ptr);
  41774. GC_ADDREF(obj);
  41775. dim = NULL;
  41776. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  41777. dim = ZVAL_UNDEFINED_OP2();
  41778. } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  41779. dim++;
  41780. }
  41781. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  41782. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  41783. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  41784. } else if (IS_CONST & (IS_CV|IS_VAR)) {
  41785. ZVAL_DEREF(value);
  41786. }
  41787. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  41788. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  41789. zend_objects_store_del(obj);
  41790. }
  41791. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  41792. if (IS_UNUSED == IS_UNUSED) {
  41793. zend_use_new_element_for_string();
  41794. UNDEF_RESULT();
  41795. } else {
  41796. dim = NULL;
  41797. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  41798. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  41799. }
  41800. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  41801. if (Z_ISREF_P(orig_object_ptr)
  41802. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  41803. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  41804. dim = NULL;
  41805. UNDEF_RESULT();
  41806. } else {
  41807. HashTable *ht = zend_new_array(8);
  41808. zend_uchar old_type = Z_TYPE_P(object_ptr);
  41809. ZVAL_ARR(object_ptr, ht);
  41810. if (UNEXPECTED(old_type == IS_FALSE)) {
  41811. GC_ADDREF(ht);
  41812. zend_false_to_array_deprecated();
  41813. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  41814. zend_array_destroy(ht);
  41815. goto assign_dim_error;
  41816. }
  41817. }
  41818. goto try_assign_dim_array;
  41819. }
  41820. } else {
  41821. zend_use_scalar_as_array();
  41822. dim = NULL;
  41823. assign_dim_error:
  41824. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  41825. ZVAL_NULL(EX_VAR(opline->result.var));
  41826. }
  41827. }
  41828. }
  41829. if (IS_UNUSED != IS_UNUSED) {
  41830. }
  41831. /* assign_dim has two opcodes! */
  41832. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  41833. }
  41834. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41835. {
  41836. USE_OPLINE
  41837. zval *object_ptr, *orig_object_ptr;
  41838. zval *value;
  41839. zval *variable_ptr;
  41840. zval *dim;
  41841. SAVE_OPLINE();
  41842. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  41843. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  41844. try_assign_dim_array:
  41845. SEPARATE_ARRAY(object_ptr);
  41846. if (IS_UNUSED == IS_UNUSED) {
  41847. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  41848. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  41849. HashTable *ht = Z_ARRVAL_P(object_ptr);
  41850. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  41851. GC_ADDREF(ht);
  41852. }
  41853. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  41854. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  41855. zend_array_destroy(ht);
  41856. goto assign_dim_error;
  41857. }
  41858. }
  41859. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  41860. ZVAL_DEREF(value);
  41861. }
  41862. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  41863. if (UNEXPECTED(value == NULL)) {
  41864. zend_cannot_add_element();
  41865. goto assign_dim_error;
  41866. } else if (IS_TMP_VAR == IS_CV) {
  41867. if (Z_REFCOUNTED_P(value)) {
  41868. Z_ADDREF_P(value);
  41869. }
  41870. } else if (IS_TMP_VAR == IS_VAR) {
  41871. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  41872. if (Z_ISREF_P(free_op_data)) {
  41873. if (Z_REFCOUNTED_P(value)) {
  41874. Z_ADDREF_P(value);
  41875. }
  41876. zval_ptr_dtor_nogc(free_op_data);
  41877. }
  41878. } else if (IS_TMP_VAR == IS_CONST) {
  41879. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  41880. Z_ADDREF_P(value);
  41881. }
  41882. }
  41883. } else {
  41884. dim = NULL;
  41885. if (IS_UNUSED == IS_CONST) {
  41886. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  41887. } else {
  41888. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  41889. }
  41890. if (UNEXPECTED(variable_ptr == NULL)) {
  41891. goto assign_dim_error;
  41892. }
  41893. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  41894. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  41895. }
  41896. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  41897. ZVAL_COPY(EX_VAR(opline->result.var), value);
  41898. }
  41899. } else {
  41900. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  41901. object_ptr = Z_REFVAL_P(object_ptr);
  41902. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  41903. goto try_assign_dim_array;
  41904. }
  41905. }
  41906. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  41907. zend_object *obj = Z_OBJ_P(object_ptr);
  41908. GC_ADDREF(obj);
  41909. dim = NULL;
  41910. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  41911. dim = ZVAL_UNDEFINED_OP2();
  41912. } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  41913. dim++;
  41914. }
  41915. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  41916. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  41917. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  41918. } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
  41919. ZVAL_DEREF(value);
  41920. }
  41921. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  41922. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  41923. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  41924. zend_objects_store_del(obj);
  41925. }
  41926. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  41927. if (IS_UNUSED == IS_UNUSED) {
  41928. zend_use_new_element_for_string();
  41929. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  41930. UNDEF_RESULT();
  41931. } else {
  41932. dim = NULL;
  41933. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  41934. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  41935. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  41936. }
  41937. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  41938. if (Z_ISREF_P(orig_object_ptr)
  41939. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  41940. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  41941. dim = NULL;
  41942. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  41943. UNDEF_RESULT();
  41944. } else {
  41945. HashTable *ht = zend_new_array(8);
  41946. zend_uchar old_type = Z_TYPE_P(object_ptr);
  41947. ZVAL_ARR(object_ptr, ht);
  41948. if (UNEXPECTED(old_type == IS_FALSE)) {
  41949. GC_ADDREF(ht);
  41950. zend_false_to_array_deprecated();
  41951. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  41952. zend_array_destroy(ht);
  41953. goto assign_dim_error;
  41954. }
  41955. }
  41956. goto try_assign_dim_array;
  41957. }
  41958. } else {
  41959. zend_use_scalar_as_array();
  41960. dim = NULL;
  41961. assign_dim_error:
  41962. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  41963. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  41964. ZVAL_NULL(EX_VAR(opline->result.var));
  41965. }
  41966. }
  41967. }
  41968. if (IS_UNUSED != IS_UNUSED) {
  41969. }
  41970. /* assign_dim has two opcodes! */
  41971. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  41972. }
  41973. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41974. {
  41975. USE_OPLINE
  41976. zval *object_ptr, *orig_object_ptr;
  41977. zval *value;
  41978. zval *variable_ptr;
  41979. zval *dim;
  41980. SAVE_OPLINE();
  41981. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  41982. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  41983. try_assign_dim_array:
  41984. SEPARATE_ARRAY(object_ptr);
  41985. if (IS_UNUSED == IS_UNUSED) {
  41986. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  41987. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  41988. HashTable *ht = Z_ARRVAL_P(object_ptr);
  41989. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  41990. GC_ADDREF(ht);
  41991. }
  41992. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  41993. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  41994. zend_array_destroy(ht);
  41995. goto assign_dim_error;
  41996. }
  41997. }
  41998. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  41999. ZVAL_DEREF(value);
  42000. }
  42001. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  42002. if (UNEXPECTED(value == NULL)) {
  42003. zend_cannot_add_element();
  42004. goto assign_dim_error;
  42005. } else if (IS_VAR == IS_CV) {
  42006. if (Z_REFCOUNTED_P(value)) {
  42007. Z_ADDREF_P(value);
  42008. }
  42009. } else if (IS_VAR == IS_VAR) {
  42010. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  42011. if (Z_ISREF_P(free_op_data)) {
  42012. if (Z_REFCOUNTED_P(value)) {
  42013. Z_ADDREF_P(value);
  42014. }
  42015. zval_ptr_dtor_nogc(free_op_data);
  42016. }
  42017. } else if (IS_VAR == IS_CONST) {
  42018. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  42019. Z_ADDREF_P(value);
  42020. }
  42021. }
  42022. } else {
  42023. dim = NULL;
  42024. if (IS_UNUSED == IS_CONST) {
  42025. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  42026. } else {
  42027. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  42028. }
  42029. if (UNEXPECTED(variable_ptr == NULL)) {
  42030. goto assign_dim_error;
  42031. }
  42032. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  42033. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  42034. }
  42035. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42036. ZVAL_COPY(EX_VAR(opline->result.var), value);
  42037. }
  42038. } else {
  42039. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  42040. object_ptr = Z_REFVAL_P(object_ptr);
  42041. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  42042. goto try_assign_dim_array;
  42043. }
  42044. }
  42045. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  42046. zend_object *obj = Z_OBJ_P(object_ptr);
  42047. GC_ADDREF(obj);
  42048. dim = NULL;
  42049. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  42050. dim = ZVAL_UNDEFINED_OP2();
  42051. } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  42052. dim++;
  42053. }
  42054. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  42055. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  42056. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  42057. } else if (IS_VAR & (IS_CV|IS_VAR)) {
  42058. ZVAL_DEREF(value);
  42059. }
  42060. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  42061. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  42062. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  42063. zend_objects_store_del(obj);
  42064. }
  42065. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  42066. if (IS_UNUSED == IS_UNUSED) {
  42067. zend_use_new_element_for_string();
  42068. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  42069. UNDEF_RESULT();
  42070. } else {
  42071. dim = NULL;
  42072. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  42073. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  42074. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  42075. }
  42076. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  42077. if (Z_ISREF_P(orig_object_ptr)
  42078. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  42079. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  42080. dim = NULL;
  42081. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  42082. UNDEF_RESULT();
  42083. } else {
  42084. HashTable *ht = zend_new_array(8);
  42085. zend_uchar old_type = Z_TYPE_P(object_ptr);
  42086. ZVAL_ARR(object_ptr, ht);
  42087. if (UNEXPECTED(old_type == IS_FALSE)) {
  42088. GC_ADDREF(ht);
  42089. zend_false_to_array_deprecated();
  42090. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  42091. zend_array_destroy(ht);
  42092. goto assign_dim_error;
  42093. }
  42094. }
  42095. goto try_assign_dim_array;
  42096. }
  42097. } else {
  42098. zend_use_scalar_as_array();
  42099. dim = NULL;
  42100. assign_dim_error:
  42101. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  42102. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42103. ZVAL_NULL(EX_VAR(opline->result.var));
  42104. }
  42105. }
  42106. }
  42107. if (IS_UNUSED != IS_UNUSED) {
  42108. }
  42109. /* assign_dim has two opcodes! */
  42110. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  42111. }
  42112. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42113. {
  42114. USE_OPLINE
  42115. zval *object_ptr, *orig_object_ptr;
  42116. zval *value;
  42117. zval *variable_ptr;
  42118. zval *dim;
  42119. SAVE_OPLINE();
  42120. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  42121. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  42122. try_assign_dim_array:
  42123. SEPARATE_ARRAY(object_ptr);
  42124. if (IS_UNUSED == IS_UNUSED) {
  42125. value = EX_VAR((opline+1)->op1.var);
  42126. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  42127. HashTable *ht = Z_ARRVAL_P(object_ptr);
  42128. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  42129. GC_ADDREF(ht);
  42130. }
  42131. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  42132. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  42133. zend_array_destroy(ht);
  42134. goto assign_dim_error;
  42135. }
  42136. }
  42137. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  42138. ZVAL_DEREF(value);
  42139. }
  42140. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  42141. if (UNEXPECTED(value == NULL)) {
  42142. zend_cannot_add_element();
  42143. goto assign_dim_error;
  42144. } else if (IS_CV == IS_CV) {
  42145. if (Z_REFCOUNTED_P(value)) {
  42146. Z_ADDREF_P(value);
  42147. }
  42148. } else if (IS_CV == IS_VAR) {
  42149. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  42150. if (Z_ISREF_P(free_op_data)) {
  42151. if (Z_REFCOUNTED_P(value)) {
  42152. Z_ADDREF_P(value);
  42153. }
  42154. zval_ptr_dtor_nogc(free_op_data);
  42155. }
  42156. } else if (IS_CV == IS_CONST) {
  42157. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  42158. Z_ADDREF_P(value);
  42159. }
  42160. }
  42161. } else {
  42162. dim = NULL;
  42163. if (IS_UNUSED == IS_CONST) {
  42164. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  42165. } else {
  42166. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  42167. }
  42168. if (UNEXPECTED(variable_ptr == NULL)) {
  42169. goto assign_dim_error;
  42170. }
  42171. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  42172. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  42173. }
  42174. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42175. ZVAL_COPY(EX_VAR(opline->result.var), value);
  42176. }
  42177. } else {
  42178. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  42179. object_ptr = Z_REFVAL_P(object_ptr);
  42180. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  42181. goto try_assign_dim_array;
  42182. }
  42183. }
  42184. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  42185. zend_object *obj = Z_OBJ_P(object_ptr);
  42186. GC_ADDREF(obj);
  42187. dim = NULL;
  42188. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  42189. dim = ZVAL_UNDEFINED_OP2();
  42190. } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  42191. dim++;
  42192. }
  42193. value = EX_VAR((opline+1)->op1.var);
  42194. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  42195. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  42196. } else if (IS_CV & (IS_CV|IS_VAR)) {
  42197. ZVAL_DEREF(value);
  42198. }
  42199. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  42200. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  42201. zend_objects_store_del(obj);
  42202. }
  42203. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  42204. if (IS_UNUSED == IS_UNUSED) {
  42205. zend_use_new_element_for_string();
  42206. UNDEF_RESULT();
  42207. } else {
  42208. dim = NULL;
  42209. value = EX_VAR((opline+1)->op1.var);
  42210. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  42211. }
  42212. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  42213. if (Z_ISREF_P(orig_object_ptr)
  42214. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  42215. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  42216. dim = NULL;
  42217. UNDEF_RESULT();
  42218. } else {
  42219. HashTable *ht = zend_new_array(8);
  42220. zend_uchar old_type = Z_TYPE_P(object_ptr);
  42221. ZVAL_ARR(object_ptr, ht);
  42222. if (UNEXPECTED(old_type == IS_FALSE)) {
  42223. GC_ADDREF(ht);
  42224. zend_false_to_array_deprecated();
  42225. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  42226. zend_array_destroy(ht);
  42227. goto assign_dim_error;
  42228. }
  42229. }
  42230. goto try_assign_dim_array;
  42231. }
  42232. } else {
  42233. zend_use_scalar_as_array();
  42234. dim = NULL;
  42235. assign_dim_error:
  42236. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42237. ZVAL_NULL(EX_VAR(opline->result.var));
  42238. }
  42239. }
  42240. }
  42241. if (IS_UNUSED != IS_UNUSED) {
  42242. }
  42243. /* assign_dim has two opcodes! */
  42244. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  42245. }
  42246. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42247. {
  42248. if (IS_CV == IS_UNUSED) {
  42249. SAVE_OPLINE();
  42250. zend_verify_missing_return_type(EX(func));
  42251. HANDLE_EXCEPTION();
  42252. } else {
  42253. /* prevents "undefined variable opline" errors */
  42254. #if 0 || (IS_CV != IS_UNUSED)
  42255. USE_OPLINE
  42256. zval *retval_ref, *retval_ptr;
  42257. zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
  42258. retval_ref = retval_ptr = EX_VAR(opline->op1.var);
  42259. if (IS_CV == IS_CONST) {
  42260. ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
  42261. retval_ref = retval_ptr = EX_VAR(opline->result.var);
  42262. } else if (IS_CV == IS_VAR) {
  42263. if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
  42264. retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
  42265. }
  42266. ZVAL_DEREF(retval_ptr);
  42267. } else if (IS_CV == IS_CV) {
  42268. ZVAL_DEREF(retval_ptr);
  42269. }
  42270. if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
  42271. ZEND_VM_NEXT_OPCODE();
  42272. }
  42273. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
  42274. SAVE_OPLINE();
  42275. retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
  42276. if (UNEXPECTED(EG(exception))) {
  42277. HANDLE_EXCEPTION();
  42278. }
  42279. if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
  42280. ZEND_VM_NEXT_OPCODE();
  42281. }
  42282. }
  42283. zend_reference *ref = NULL;
  42284. void *cache_slot = CACHE_ADDR(opline->op2.num);
  42285. if (UNEXPECTED(retval_ref != retval_ptr)) {
  42286. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  42287. ref = Z_REF_P(retval_ref);
  42288. } else {
  42289. /* A cast might happen - unwrap the reference if this is a by-value return */
  42290. if (Z_REFCOUNT_P(retval_ref) == 1) {
  42291. ZVAL_UNREF(retval_ref);
  42292. } else {
  42293. Z_DELREF_P(retval_ref);
  42294. ZVAL_COPY(retval_ref, retval_ptr);
  42295. }
  42296. retval_ptr = retval_ref;
  42297. }
  42298. }
  42299. SAVE_OPLINE();
  42300. if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
  42301. zend_verify_return_error(EX(func), retval_ptr);
  42302. HANDLE_EXCEPTION();
  42303. }
  42304. ZEND_VM_NEXT_OPCODE();
  42305. #endif
  42306. }
  42307. }
  42308. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42309. {
  42310. USE_OPLINE
  42311. zval *varptr, *arg;
  42312. if (IS_UNUSED == IS_CONST) {
  42313. SAVE_OPLINE();
  42314. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  42315. uint32_t arg_num;
  42316. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  42317. if (UNEXPECTED(!arg)) {
  42318. HANDLE_EXCEPTION();
  42319. }
  42320. } else {
  42321. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  42322. }
  42323. varptr = EX_VAR(opline->op1.var);
  42324. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  42325. SAVE_OPLINE();
  42326. ZVAL_UNDEFINED_OP1();
  42327. ZVAL_NULL(arg);
  42328. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42329. }
  42330. if (IS_CV == IS_CV) {
  42331. ZVAL_COPY_DEREF(arg, varptr);
  42332. } else /* if (IS_CV == IS_VAR) */ {
  42333. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  42334. zend_refcounted *ref = Z_COUNTED_P(varptr);
  42335. varptr = Z_REFVAL_P(varptr);
  42336. ZVAL_COPY_VALUE(arg, varptr);
  42337. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  42338. efree_size(ref, sizeof(zend_reference));
  42339. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  42340. Z_ADDREF_P(arg);
  42341. }
  42342. } else {
  42343. ZVAL_COPY_VALUE(arg, varptr);
  42344. }
  42345. }
  42346. ZEND_VM_NEXT_OPCODE();
  42347. }
  42348. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42349. {
  42350. USE_OPLINE
  42351. zval *varptr, *arg;
  42352. SAVE_OPLINE();
  42353. if (IS_UNUSED == IS_CONST) {
  42354. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  42355. uint32_t arg_num;
  42356. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  42357. if (UNEXPECTED(!arg)) {
  42358. HANDLE_EXCEPTION();
  42359. }
  42360. } else {
  42361. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  42362. }
  42363. varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  42364. if (Z_ISREF_P(varptr)) {
  42365. Z_ADDREF_P(varptr);
  42366. } else {
  42367. ZVAL_MAKE_REF_EX(varptr, 2);
  42368. }
  42369. ZVAL_REF(arg, Z_REF_P(varptr));
  42370. ZEND_VM_NEXT_OPCODE();
  42371. }
  42372. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42373. {
  42374. USE_OPLINE
  42375. zval *varptr, *arg;
  42376. uint32_t arg_num;
  42377. if (IS_UNUSED == IS_CONST) {
  42378. SAVE_OPLINE();
  42379. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  42380. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  42381. if (UNEXPECTED(!arg)) {
  42382. HANDLE_EXCEPTION();
  42383. }
  42384. } else {
  42385. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  42386. arg_num = opline->op2.num;
  42387. }
  42388. if (EXPECTED(0)) {
  42389. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  42390. goto send_var_by_ref;
  42391. }
  42392. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  42393. send_var_by_ref:
  42394. varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  42395. if (Z_ISREF_P(varptr)) {
  42396. Z_ADDREF_P(varptr);
  42397. } else {
  42398. ZVAL_MAKE_REF_EX(varptr, 2);
  42399. }
  42400. ZVAL_REF(arg, Z_REF_P(varptr));
  42401. ZEND_VM_NEXT_OPCODE();
  42402. }
  42403. varptr = EX_VAR(opline->op1.var);
  42404. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  42405. SAVE_OPLINE();
  42406. ZVAL_UNDEFINED_OP1();
  42407. ZVAL_NULL(arg);
  42408. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42409. }
  42410. if (IS_CV == IS_CV) {
  42411. ZVAL_COPY_DEREF(arg, varptr);
  42412. } else /* if (IS_CV == IS_VAR) */ {
  42413. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  42414. zend_refcounted *ref = Z_COUNTED_P(varptr);
  42415. varptr = Z_REFVAL_P(varptr);
  42416. ZVAL_COPY_VALUE(arg, varptr);
  42417. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  42418. efree_size(ref, sizeof(zend_reference));
  42419. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  42420. Z_ADDREF_P(arg);
  42421. }
  42422. } else {
  42423. ZVAL_COPY_VALUE(arg, varptr);
  42424. }
  42425. }
  42426. ZEND_VM_NEXT_OPCODE();
  42427. }
  42428. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42429. {
  42430. USE_OPLINE
  42431. zval *varptr, *arg;
  42432. uint32_t arg_num;
  42433. if (IS_UNUSED == IS_CONST) {
  42434. SAVE_OPLINE();
  42435. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  42436. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  42437. if (UNEXPECTED(!arg)) {
  42438. HANDLE_EXCEPTION();
  42439. }
  42440. } else {
  42441. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  42442. arg_num = opline->op2.num;
  42443. }
  42444. if (EXPECTED(1)) {
  42445. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  42446. goto send_var_by_ref;
  42447. }
  42448. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  42449. send_var_by_ref:
  42450. varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  42451. if (Z_ISREF_P(varptr)) {
  42452. Z_ADDREF_P(varptr);
  42453. } else {
  42454. ZVAL_MAKE_REF_EX(varptr, 2);
  42455. }
  42456. ZVAL_REF(arg, Z_REF_P(varptr));
  42457. ZEND_VM_NEXT_OPCODE();
  42458. }
  42459. varptr = EX_VAR(opline->op1.var);
  42460. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  42461. SAVE_OPLINE();
  42462. ZVAL_UNDEFINED_OP1();
  42463. ZVAL_NULL(arg);
  42464. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42465. }
  42466. if (IS_CV == IS_CV) {
  42467. ZVAL_COPY_DEREF(arg, varptr);
  42468. } else /* if (IS_CV == IS_VAR) */ {
  42469. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  42470. zend_refcounted *ref = Z_COUNTED_P(varptr);
  42471. varptr = Z_REFVAL_P(varptr);
  42472. ZVAL_COPY_VALUE(arg, varptr);
  42473. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  42474. efree_size(ref, sizeof(zend_reference));
  42475. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  42476. Z_ADDREF_P(arg);
  42477. }
  42478. } else {
  42479. ZVAL_COPY_VALUE(arg, varptr);
  42480. }
  42481. }
  42482. ZEND_VM_NEXT_OPCODE();
  42483. }
  42484. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42485. {
  42486. USE_OPLINE
  42487. zval *expr_ptr, new_expr;
  42488. SAVE_OPLINE();
  42489. if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
  42490. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  42491. expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  42492. if (Z_ISREF_P(expr_ptr)) {
  42493. Z_ADDREF_P(expr_ptr);
  42494. } else {
  42495. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  42496. }
  42497. } else {
  42498. expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  42499. if (IS_CV == IS_TMP_VAR) {
  42500. /* pass */
  42501. } else if (IS_CV == IS_CONST) {
  42502. Z_TRY_ADDREF_P(expr_ptr);
  42503. } else if (IS_CV == IS_CV) {
  42504. ZVAL_DEREF(expr_ptr);
  42505. Z_TRY_ADDREF_P(expr_ptr);
  42506. } else /* if (IS_CV == IS_VAR) */ {
  42507. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  42508. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  42509. expr_ptr = Z_REFVAL_P(expr_ptr);
  42510. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  42511. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  42512. expr_ptr = &new_expr;
  42513. efree_size(ref, sizeof(zend_reference));
  42514. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  42515. Z_ADDREF_P(expr_ptr);
  42516. }
  42517. }
  42518. }
  42519. }
  42520. if (IS_UNUSED != IS_UNUSED) {
  42521. zval *offset = NULL;
  42522. zend_string *str;
  42523. zend_ulong hval;
  42524. add_again:
  42525. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  42526. str = Z_STR_P(offset);
  42527. if (IS_UNUSED != IS_CONST) {
  42528. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  42529. goto num_index;
  42530. }
  42531. }
  42532. str_index:
  42533. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  42534. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  42535. hval = Z_LVAL_P(offset);
  42536. num_index:
  42537. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  42538. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  42539. offset = Z_REFVAL_P(offset);
  42540. goto add_again;
  42541. } else if (Z_TYPE_P(offset) == IS_NULL) {
  42542. str = ZSTR_EMPTY_ALLOC();
  42543. goto str_index;
  42544. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  42545. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  42546. goto num_index;
  42547. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  42548. hval = 0;
  42549. goto num_index;
  42550. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  42551. hval = 1;
  42552. goto num_index;
  42553. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  42554. zend_use_resource_as_offset(offset);
  42555. hval = Z_RES_HANDLE_P(offset);
  42556. goto num_index;
  42557. } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  42558. ZVAL_UNDEFINED_OP2();
  42559. str = ZSTR_EMPTY_ALLOC();
  42560. goto str_index;
  42561. } else {
  42562. zend_illegal_offset();
  42563. zval_ptr_dtor_nogc(expr_ptr);
  42564. }
  42565. } else {
  42566. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  42567. zend_cannot_add_element();
  42568. zval_ptr_dtor_nogc(expr_ptr);
  42569. }
  42570. }
  42571. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42572. }
  42573. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42574. {
  42575. zval *array;
  42576. uint32_t size;
  42577. USE_OPLINE
  42578. array = EX_VAR(opline->result.var);
  42579. if (IS_CV != IS_UNUSED) {
  42580. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  42581. ZVAL_ARR(array, zend_new_array(size));
  42582. /* Explicitly initialize array as not-packed if flag is set */
  42583. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  42584. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  42585. }
  42586. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42587. } else {
  42588. ZVAL_ARR(array, zend_new_array(0));
  42589. ZEND_VM_NEXT_OPCODE();
  42590. }
  42591. }
  42592. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42593. {
  42594. USE_OPLINE
  42595. zval *var = EX_VAR(opline->op1.var);
  42596. if (Z_REFCOUNTED_P(var)) {
  42597. zend_refcounted *garbage = Z_COUNTED_P(var);
  42598. ZVAL_UNDEF(var);
  42599. SAVE_OPLINE();
  42600. if (!GC_DELREF(garbage)) {
  42601. rc_dtor_func(garbage);
  42602. } else {
  42603. gc_check_possible_root(garbage);
  42604. }
  42605. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42606. } else {
  42607. ZVAL_UNDEF(var);
  42608. }
  42609. ZEND_VM_NEXT_OPCODE();
  42610. }
  42611. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42612. {
  42613. USE_OPLINE
  42614. zval *varname;
  42615. zend_string *name, *tmp_name;
  42616. HashTable *target_symbol_table;
  42617. SAVE_OPLINE();
  42618. varname = EX_VAR(opline->op1.var);
  42619. if (IS_CV == IS_CONST) {
  42620. name = Z_STR_P(varname);
  42621. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  42622. name = Z_STR_P(varname);
  42623. tmp_name = NULL;
  42624. } else {
  42625. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  42626. varname = ZVAL_UNDEFINED_OP1();
  42627. }
  42628. name = zval_try_get_tmp_string(varname, &tmp_name);
  42629. if (UNEXPECTED(!name)) {
  42630. HANDLE_EXCEPTION();
  42631. }
  42632. }
  42633. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  42634. zend_hash_del_ind(target_symbol_table, name);
  42635. if (IS_CV != IS_CONST) {
  42636. zend_tmp_string_release(tmp_name);
  42637. }
  42638. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42639. }
  42640. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  42641. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42642. {
  42643. USE_OPLINE
  42644. zval *value;
  42645. value = EX_VAR(opline->op1.var);
  42646. if (!(0)) {
  42647. if (Z_TYPE_P(value) > IS_NULL &&
  42648. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
  42649. ZEND_VM_SMART_BRANCH_TRUE();
  42650. } else {
  42651. ZEND_VM_SMART_BRANCH_FALSE();
  42652. }
  42653. } else {
  42654. bool result;
  42655. SAVE_OPLINE();
  42656. result = !i_zend_is_true(value);
  42657. ZEND_VM_SMART_BRANCH(result, 1);
  42658. }
  42659. }
  42660. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42661. {
  42662. USE_OPLINE
  42663. zval *value;
  42664. value = EX_VAR(opline->op1.var);
  42665. if (!(1)) {
  42666. if (Z_TYPE_P(value) > IS_NULL &&
  42667. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
  42668. ZEND_VM_SMART_BRANCH_TRUE();
  42669. } else {
  42670. ZEND_VM_SMART_BRANCH_FALSE();
  42671. }
  42672. } else {
  42673. bool result;
  42674. SAVE_OPLINE();
  42675. result = !i_zend_is_true(value);
  42676. ZEND_VM_SMART_BRANCH(result, 1);
  42677. }
  42678. }
  42679. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42680. {
  42681. USE_OPLINE
  42682. zval *value;
  42683. /* Should be bool result? as below got: result = (opline->extended_value & ZEND_ISEMPTY) */
  42684. int result;
  42685. zval *varname;
  42686. zend_string *name, *tmp_name;
  42687. HashTable *target_symbol_table;
  42688. SAVE_OPLINE();
  42689. varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  42690. if (IS_CV == IS_CONST) {
  42691. name = Z_STR_P(varname);
  42692. } else {
  42693. name = zval_get_tmp_string(varname, &tmp_name);
  42694. }
  42695. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  42696. value = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
  42697. if (IS_CV != IS_CONST) {
  42698. zend_tmp_string_release(tmp_name);
  42699. }
  42700. if (!value) {
  42701. result = (opline->extended_value & ZEND_ISEMPTY);
  42702. } else {
  42703. if (Z_TYPE_P(value) == IS_INDIRECT) {
  42704. value = Z_INDIRECT_P(value);
  42705. }
  42706. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  42707. if (Z_ISREF_P(value)) {
  42708. value = Z_REFVAL_P(value);
  42709. }
  42710. result = Z_TYPE_P(value) > IS_NULL;
  42711. } else {
  42712. result = !i_zend_is_true(value);
  42713. }
  42714. }
  42715. ZEND_VM_SMART_BRANCH(result, 1);
  42716. }
  42717. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  42718. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42719. {
  42720. USE_OPLINE
  42721. zval *expr;
  42722. bool result;
  42723. SAVE_OPLINE();
  42724. expr = EX_VAR(opline->op1.var);
  42725. try_instanceof:
  42726. if (Z_TYPE_P(expr) == IS_OBJECT) {
  42727. zend_class_entry *ce;
  42728. if (IS_UNUSED == IS_CONST) {
  42729. ce = CACHED_PTR(opline->extended_value);
  42730. if (UNEXPECTED(ce == NULL)) {
  42731. ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
  42732. if (EXPECTED(ce)) {
  42733. CACHE_PTR(opline->extended_value, ce);
  42734. }
  42735. }
  42736. } else if (IS_UNUSED == IS_UNUSED) {
  42737. ce = zend_fetch_class(NULL, opline->op2.num);
  42738. if (UNEXPECTED(ce == NULL)) {
  42739. ZVAL_UNDEF(EX_VAR(opline->result.var));
  42740. HANDLE_EXCEPTION();
  42741. }
  42742. } else {
  42743. ce = Z_CE_P(EX_VAR(opline->op2.var));
  42744. }
  42745. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  42746. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  42747. expr = Z_REFVAL_P(expr);
  42748. goto try_instanceof;
  42749. } else {
  42750. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  42751. ZVAL_UNDEFINED_OP1();
  42752. }
  42753. result = 0;
  42754. }
  42755. ZEND_VM_SMART_BRANCH(result, 1);
  42756. }
  42757. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42758. {
  42759. USE_OPLINE
  42760. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  42761. SAVE_OPLINE();
  42762. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  42763. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42764. }
  42765. /* Destroy the previously yielded value */
  42766. zval_ptr_dtor(&generator->value);
  42767. /* Destroy the previously yielded key */
  42768. zval_ptr_dtor(&generator->key);
  42769. /* Set the new yielded value */
  42770. if (IS_CV != IS_UNUSED) {
  42771. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  42772. /* Constants and temporary variables aren't yieldable by reference,
  42773. * but we still allow them with a notice. */
  42774. if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
  42775. zval *value;
  42776. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  42777. value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  42778. ZVAL_COPY_VALUE(&generator->value, value);
  42779. if (IS_CV == IS_CONST) {
  42780. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  42781. Z_ADDREF(generator->value);
  42782. }
  42783. }
  42784. } else {
  42785. zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  42786. /* If a function call result is yielded and the function did
  42787. * not return by reference we throw a notice. */
  42788. do {
  42789. if (IS_CV == IS_VAR) {
  42790. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  42791. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  42792. && !Z_ISREF_P(value_ptr)) {
  42793. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  42794. ZVAL_COPY(&generator->value, value_ptr);
  42795. break;
  42796. }
  42797. }
  42798. if (Z_ISREF_P(value_ptr)) {
  42799. Z_ADDREF_P(value_ptr);
  42800. } else {
  42801. ZVAL_MAKE_REF_EX(value_ptr, 2);
  42802. }
  42803. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  42804. } while (0);
  42805. }
  42806. } else {
  42807. zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  42808. /* Consts, temporary variables and references need copying */
  42809. if (IS_CV == IS_CONST) {
  42810. ZVAL_COPY_VALUE(&generator->value, value);
  42811. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  42812. Z_ADDREF(generator->value);
  42813. }
  42814. } else if (IS_CV == IS_TMP_VAR) {
  42815. ZVAL_COPY_VALUE(&generator->value, value);
  42816. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  42817. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  42818. } else {
  42819. ZVAL_COPY_VALUE(&generator->value, value);
  42820. if (IS_CV == IS_CV) {
  42821. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  42822. }
  42823. }
  42824. }
  42825. } else {
  42826. /* If no value was specified yield null */
  42827. ZVAL_NULL(&generator->value);
  42828. }
  42829. /* Set the new yielded key */
  42830. if (IS_UNUSED != IS_UNUSED) {
  42831. zval *key = NULL;
  42832. if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  42833. key = Z_REFVAL_P(key);
  42834. }
  42835. ZVAL_COPY(&generator->key, key);
  42836. if (Z_TYPE(generator->key) == IS_LONG
  42837. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  42838. ) {
  42839. generator->largest_used_integer_key = Z_LVAL(generator->key);
  42840. }
  42841. } else {
  42842. /* If no key was specified we use auto-increment keys */
  42843. generator->largest_used_integer_key++;
  42844. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  42845. }
  42846. if (RETURN_VALUE_USED(opline)) {
  42847. /* If the return value of yield is used set the send
  42848. * target and initialize it to NULL */
  42849. generator->send_target = EX_VAR(opline->result.var);
  42850. ZVAL_NULL(generator->send_target);
  42851. } else {
  42852. generator->send_target = NULL;
  42853. }
  42854. /* We increment to the next op, so we are at the correct position when the
  42855. * generator is resumed. */
  42856. ZEND_VM_INC_OPCODE();
  42857. /* The GOTO VM uses a local opline variable. We need to set the opline
  42858. * variable in execute_data so we don't resume at an old position. */
  42859. SAVE_OPLINE();
  42860. ZEND_VM_RETURN();
  42861. }
  42862. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42863. {
  42864. USE_OPLINE
  42865. HashTable *ht;
  42866. zval *value;
  42867. zval *variable_ptr;
  42868. variable_ptr = EX_VAR(opline->op1.var);
  42869. ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
  42870. if (!ht) {
  42871. ht = zend_array_dup(EX(func)->op_array.static_variables);
  42872. ZEND_MAP_PTR_SET(EX(func)->op_array.static_variables_ptr, ht);
  42873. }
  42874. ZEND_ASSERT(GC_REFCOUNT(ht) == 1);
  42875. value = (zval*)((char*)ht->arData + (opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT|ZEND_BIND_EXPLICIT)));
  42876. SAVE_OPLINE();
  42877. if (opline->extended_value & ZEND_BIND_REF) {
  42878. if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
  42879. if (UNEXPECTED(zval_update_constant_ex(value, EX(func)->op_array.scope) != SUCCESS)) {
  42880. HANDLE_EXCEPTION();
  42881. }
  42882. }
  42883. i_zval_ptr_dtor(variable_ptr);
  42884. if (UNEXPECTED(!Z_ISREF_P(value))) {
  42885. zend_reference *ref = (zend_reference*)emalloc(sizeof(zend_reference));
  42886. GC_SET_REFCOUNT(ref, 2);
  42887. GC_TYPE_INFO(ref) = GC_REFERENCE;
  42888. ZVAL_COPY_VALUE(&ref->val, value);
  42889. ref->sources.ptr = NULL;
  42890. Z_REF_P(value) = ref;
  42891. Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
  42892. ZVAL_REF(variable_ptr, ref);
  42893. } else {
  42894. Z_ADDREF_P(value);
  42895. ZVAL_REF(variable_ptr, Z_REF_P(value));
  42896. }
  42897. } else {
  42898. i_zval_ptr_dtor(variable_ptr);
  42899. ZVAL_COPY(variable_ptr, value);
  42900. }
  42901. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42902. }
  42903. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42904. {
  42905. USE_OPLINE
  42906. zval *op1 = EX_VAR(opline->op1.var);
  42907. if (UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  42908. SAVE_OPLINE();
  42909. ZVAL_UNDEFINED_OP1();
  42910. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42911. }
  42912. ZEND_VM_NEXT_OPCODE();
  42913. }
  42914. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42915. {
  42916. USE_OPLINE
  42917. zval *op1 = EX_VAR(opline->op1.var);
  42918. if (IS_CV == IS_CV) {
  42919. if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  42920. ZVAL_NEW_EMPTY_REF(op1);
  42921. Z_SET_REFCOUNT_P(op1, 2);
  42922. ZVAL_NULL(Z_REFVAL_P(op1));
  42923. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  42924. } else {
  42925. if (Z_ISREF_P(op1)) {
  42926. Z_ADDREF_P(op1);
  42927. } else {
  42928. ZVAL_MAKE_REF_EX(op1, 2);
  42929. }
  42930. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  42931. }
  42932. } else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
  42933. op1 = Z_INDIRECT_P(op1);
  42934. if (EXPECTED(!Z_ISREF_P(op1))) {
  42935. ZVAL_MAKE_REF_EX(op1, 2);
  42936. } else {
  42937. GC_ADDREF(Z_REF_P(op1));
  42938. }
  42939. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  42940. } else {
  42941. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
  42942. }
  42943. ZEND_VM_NEXT_OPCODE();
  42944. }
  42945. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42946. {
  42947. USE_OPLINE
  42948. zval *op1;
  42949. zend_long count;
  42950. SAVE_OPLINE();
  42951. op1 = EX_VAR(opline->op1.var);
  42952. while (1) {
  42953. if (Z_TYPE_P(op1) == IS_ARRAY) {
  42954. count = zend_hash_num_elements(Z_ARRVAL_P(op1));
  42955. break;
  42956. } else if (Z_TYPE_P(op1) == IS_OBJECT) {
  42957. zend_object *zobj = Z_OBJ_P(op1);
  42958. /* first, we check if the handler is defined */
  42959. if (zobj->handlers->count_elements) {
  42960. if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
  42961. break;
  42962. }
  42963. if (UNEXPECTED(EG(exception))) {
  42964. count = 0;
  42965. break;
  42966. }
  42967. }
  42968. /* if not and the object implements Countable we call its count() method */
  42969. if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
  42970. zval retval;
  42971. zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
  42972. count = zval_get_long(&retval);
  42973. zval_ptr_dtor(&retval);
  42974. break;
  42975. }
  42976. /* If There's no handler and it doesn't implement Countable then emit a TypeError */
  42977. } else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
  42978. op1 = Z_REFVAL_P(op1);
  42979. continue;
  42980. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  42981. ZVAL_UNDEFINED_OP1();
  42982. }
  42983. count = 0;
  42984. zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_type_name(op1));
  42985. break;
  42986. }
  42987. ZVAL_LONG(EX_VAR(opline->result.var), count);
  42988. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42989. }
  42990. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42991. {
  42992. USE_OPLINE
  42993. if (IS_CV == IS_UNUSED) {
  42994. if (UNEXPECTED(!EX(func)->common.scope)) {
  42995. SAVE_OPLINE();
  42996. zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
  42997. ZVAL_UNDEF(EX_VAR(opline->result.var));
  42998. HANDLE_EXCEPTION();
  42999. } else {
  43000. ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
  43001. ZEND_VM_NEXT_OPCODE();
  43002. }
  43003. } else {
  43004. zval *op1;
  43005. SAVE_OPLINE();
  43006. op1 = EX_VAR(opline->op1.var);
  43007. while (1) {
  43008. if (Z_TYPE_P(op1) == IS_OBJECT) {
  43009. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
  43010. } else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
  43011. op1 = Z_REFVAL_P(op1);
  43012. continue;
  43013. } else {
  43014. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  43015. ZVAL_UNDEFINED_OP1();
  43016. }
  43017. zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_type_name(op1));
  43018. ZVAL_UNDEF(EX_VAR(opline->result.var));
  43019. }
  43020. break;
  43021. }
  43022. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43023. }
  43024. }
  43025. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43026. {
  43027. USE_OPLINE
  43028. zval *op1;
  43029. zend_string *type;
  43030. SAVE_OPLINE();
  43031. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  43032. type = zend_zval_get_legacy_type(op1);
  43033. if (EXPECTED(type)) {
  43034. ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
  43035. } else {
  43036. ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
  43037. }
  43038. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43039. }
  43040. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43041. {
  43042. USE_OPLINE
  43043. zval *varptr, *arg;
  43044. uint32_t arg_num = opline->op2.num;
  43045. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  43046. ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  43047. }
  43048. varptr = EX_VAR(opline->op1.var);
  43049. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  43050. if (IS_CV == IS_CV) {
  43051. ZVAL_COPY(arg, varptr);
  43052. } else /* if (IS_CV == IS_VAR) */ {
  43053. ZVAL_COPY_VALUE(arg, varptr);
  43054. }
  43055. ZEND_VM_NEXT_OPCODE();
  43056. }
  43057. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43058. {
  43059. USE_OPLINE
  43060. zval *op1, *op2;
  43061. SAVE_OPLINE();
  43062. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  43063. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43064. div_function(EX_VAR(opline->result.var), op1, op2);
  43065. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43066. }
  43067. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43068. {
  43069. USE_OPLINE
  43070. zval *op1, *op2;
  43071. SAVE_OPLINE();
  43072. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  43073. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43074. pow_function(EX_VAR(opline->result.var), op1, op2);
  43075. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43076. }
  43077. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43078. {
  43079. USE_OPLINE
  43080. zval *op1, *op2;
  43081. op1 = EX_VAR(opline->op1.var);
  43082. op2 = EX_VAR(opline->op2.var);
  43083. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  43084. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  43085. zend_string *op1_str = Z_STR_P(op1);
  43086. zend_string *op2_str = Z_STR_P(op2);
  43087. zend_string *str;
  43088. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  43089. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  43090. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  43091. } else {
  43092. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  43093. }
  43094. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43095. zend_string_release_ex(op1_str, 0);
  43096. }
  43097. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  43098. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  43099. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  43100. } else {
  43101. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  43102. }
  43103. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43104. zend_string_release_ex(op2_str, 0);
  43105. }
  43106. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  43107. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  43108. size_t len = ZSTR_LEN(op1_str);
  43109. if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
  43110. zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
  43111. }
  43112. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  43113. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  43114. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  43115. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43116. zend_string_release_ex(op2_str, 0);
  43117. }
  43118. } else {
  43119. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  43120. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  43121. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  43122. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  43123. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43124. zend_string_release_ex(op1_str, 0);
  43125. }
  43126. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43127. zend_string_release_ex(op2_str, 0);
  43128. }
  43129. }
  43130. ZEND_VM_NEXT_OPCODE();
  43131. } else {
  43132. SAVE_OPLINE();
  43133. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  43134. op1 = ZVAL_UNDEFINED_OP1();
  43135. }
  43136. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  43137. op2 = ZVAL_UNDEFINED_OP2();
  43138. }
  43139. concat_function(EX_VAR(opline->result.var), op1, op2);
  43140. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43141. }
  43142. }
  43143. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43144. {
  43145. USE_OPLINE
  43146. zval *op1, *op2;
  43147. bool result;
  43148. SAVE_OPLINE();
  43149. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  43150. op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43151. result = fast_is_identical_function(op1, op2);
  43152. ZEND_VM_SMART_BRANCH(result, 1);
  43153. }
  43154. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43155. {
  43156. USE_OPLINE
  43157. zval *op1, *op2;
  43158. bool result;
  43159. SAVE_OPLINE();
  43160. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  43161. op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43162. result = fast_is_not_identical_function(op1, op2);
  43163. ZEND_VM_SMART_BRANCH(result, 1);
  43164. }
  43165. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43166. {
  43167. USE_OPLINE
  43168. zval *op1, *op2;
  43169. double d1, d2;
  43170. op1 = EX_VAR(opline->op1.var);
  43171. op2 = EX_VAR(opline->op2.var);
  43172. if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
  43173. /* pass */
  43174. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  43175. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43176. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  43177. is_equal_true:
  43178. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  43179. } else {
  43180. is_equal_false:
  43181. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  43182. }
  43183. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43184. d1 = (double)Z_LVAL_P(op1);
  43185. d2 = Z_DVAL_P(op2);
  43186. goto is_equal_double;
  43187. }
  43188. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  43189. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43190. d1 = Z_DVAL_P(op1);
  43191. d2 = Z_DVAL_P(op2);
  43192. is_equal_double:
  43193. if (d1 == d2) {
  43194. goto is_equal_true;
  43195. } else {
  43196. goto is_equal_false;
  43197. }
  43198. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43199. d1 = Z_DVAL_P(op1);
  43200. d2 = (double)Z_LVAL_P(op2);
  43201. goto is_equal_double;
  43202. }
  43203. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  43204. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  43205. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  43206. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43207. zval_ptr_dtor_str(op1);
  43208. }
  43209. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43210. zval_ptr_dtor_str(op2);
  43211. }
  43212. if (result) {
  43213. goto is_equal_true;
  43214. } else {
  43215. goto is_equal_false;
  43216. }
  43217. }
  43218. }
  43219. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  43220. }
  43221. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43222. {
  43223. USE_OPLINE
  43224. zval *op1, *op2;
  43225. double d1, d2;
  43226. op1 = EX_VAR(opline->op1.var);
  43227. op2 = EX_VAR(opline->op2.var);
  43228. if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
  43229. /* pass */
  43230. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  43231. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43232. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  43233. is_equal_true:
  43234. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  43235. } else {
  43236. is_equal_false:
  43237. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  43238. }
  43239. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43240. d1 = (double)Z_LVAL_P(op1);
  43241. d2 = Z_DVAL_P(op2);
  43242. goto is_equal_double;
  43243. }
  43244. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  43245. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43246. d1 = Z_DVAL_P(op1);
  43247. d2 = Z_DVAL_P(op2);
  43248. is_equal_double:
  43249. if (d1 == d2) {
  43250. goto is_equal_true;
  43251. } else {
  43252. goto is_equal_false;
  43253. }
  43254. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43255. d1 = Z_DVAL_P(op1);
  43256. d2 = (double)Z_LVAL_P(op2);
  43257. goto is_equal_double;
  43258. }
  43259. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  43260. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  43261. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  43262. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43263. zval_ptr_dtor_str(op1);
  43264. }
  43265. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43266. zval_ptr_dtor_str(op2);
  43267. }
  43268. if (result) {
  43269. goto is_equal_true;
  43270. } else {
  43271. goto is_equal_false;
  43272. }
  43273. }
  43274. }
  43275. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  43276. }
  43277. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43278. {
  43279. USE_OPLINE
  43280. zval *op1, *op2;
  43281. double d1, d2;
  43282. op1 = EX_VAR(opline->op1.var);
  43283. op2 = EX_VAR(opline->op2.var);
  43284. if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
  43285. /* pass */
  43286. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  43287. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43288. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  43289. is_equal_true:
  43290. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  43291. } else {
  43292. is_equal_false:
  43293. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  43294. }
  43295. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43296. d1 = (double)Z_LVAL_P(op1);
  43297. d2 = Z_DVAL_P(op2);
  43298. goto is_equal_double;
  43299. }
  43300. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  43301. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43302. d1 = Z_DVAL_P(op1);
  43303. d2 = Z_DVAL_P(op2);
  43304. is_equal_double:
  43305. if (d1 == d2) {
  43306. goto is_equal_true;
  43307. } else {
  43308. goto is_equal_false;
  43309. }
  43310. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43311. d1 = Z_DVAL_P(op1);
  43312. d2 = (double)Z_LVAL_P(op2);
  43313. goto is_equal_double;
  43314. }
  43315. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  43316. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  43317. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  43318. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43319. zval_ptr_dtor_str(op1);
  43320. }
  43321. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43322. zval_ptr_dtor_str(op2);
  43323. }
  43324. if (result) {
  43325. goto is_equal_true;
  43326. } else {
  43327. goto is_equal_false;
  43328. }
  43329. }
  43330. }
  43331. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  43332. }
  43333. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43334. {
  43335. USE_OPLINE
  43336. zval *op1, *op2;
  43337. double d1, d2;
  43338. op1 = EX_VAR(opline->op1.var);
  43339. op2 = EX_VAR(opline->op2.var);
  43340. if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
  43341. /* pass */
  43342. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  43343. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43344. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  43345. is_not_equal_true:
  43346. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  43347. } else {
  43348. is_not_equal_false:
  43349. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  43350. }
  43351. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43352. d1 = (double)Z_LVAL_P(op1);
  43353. d2 = Z_DVAL_P(op2);
  43354. goto is_not_equal_double;
  43355. }
  43356. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  43357. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43358. d1 = Z_DVAL_P(op1);
  43359. d2 = Z_DVAL_P(op2);
  43360. is_not_equal_double:
  43361. if (d1 != d2) {
  43362. goto is_not_equal_true;
  43363. } else {
  43364. goto is_not_equal_false;
  43365. }
  43366. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43367. d1 = Z_DVAL_P(op1);
  43368. d2 = (double)Z_LVAL_P(op2);
  43369. goto is_not_equal_double;
  43370. }
  43371. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  43372. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  43373. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  43374. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43375. zval_ptr_dtor_str(op1);
  43376. }
  43377. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43378. zval_ptr_dtor_str(op2);
  43379. }
  43380. if (!result) {
  43381. goto is_not_equal_true;
  43382. } else {
  43383. goto is_not_equal_false;
  43384. }
  43385. }
  43386. }
  43387. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  43388. }
  43389. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43390. {
  43391. USE_OPLINE
  43392. zval *op1, *op2;
  43393. double d1, d2;
  43394. op1 = EX_VAR(opline->op1.var);
  43395. op2 = EX_VAR(opline->op2.var);
  43396. if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
  43397. /* pass */
  43398. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  43399. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43400. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  43401. is_not_equal_true:
  43402. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  43403. } else {
  43404. is_not_equal_false:
  43405. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  43406. }
  43407. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43408. d1 = (double)Z_LVAL_P(op1);
  43409. d2 = Z_DVAL_P(op2);
  43410. goto is_not_equal_double;
  43411. }
  43412. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  43413. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43414. d1 = Z_DVAL_P(op1);
  43415. d2 = Z_DVAL_P(op2);
  43416. is_not_equal_double:
  43417. if (d1 != d2) {
  43418. goto is_not_equal_true;
  43419. } else {
  43420. goto is_not_equal_false;
  43421. }
  43422. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43423. d1 = Z_DVAL_P(op1);
  43424. d2 = (double)Z_LVAL_P(op2);
  43425. goto is_not_equal_double;
  43426. }
  43427. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  43428. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  43429. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  43430. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43431. zval_ptr_dtor_str(op1);
  43432. }
  43433. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43434. zval_ptr_dtor_str(op2);
  43435. }
  43436. if (!result) {
  43437. goto is_not_equal_true;
  43438. } else {
  43439. goto is_not_equal_false;
  43440. }
  43441. }
  43442. }
  43443. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  43444. }
  43445. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43446. {
  43447. USE_OPLINE
  43448. zval *op1, *op2;
  43449. double d1, d2;
  43450. op1 = EX_VAR(opline->op1.var);
  43451. op2 = EX_VAR(opline->op2.var);
  43452. if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
  43453. /* pass */
  43454. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  43455. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43456. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  43457. is_not_equal_true:
  43458. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  43459. } else {
  43460. is_not_equal_false:
  43461. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  43462. }
  43463. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43464. d1 = (double)Z_LVAL_P(op1);
  43465. d2 = Z_DVAL_P(op2);
  43466. goto is_not_equal_double;
  43467. }
  43468. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  43469. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43470. d1 = Z_DVAL_P(op1);
  43471. d2 = Z_DVAL_P(op2);
  43472. is_not_equal_double:
  43473. if (d1 != d2) {
  43474. goto is_not_equal_true;
  43475. } else {
  43476. goto is_not_equal_false;
  43477. }
  43478. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43479. d1 = Z_DVAL_P(op1);
  43480. d2 = (double)Z_LVAL_P(op2);
  43481. goto is_not_equal_double;
  43482. }
  43483. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  43484. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  43485. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  43486. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43487. zval_ptr_dtor_str(op1);
  43488. }
  43489. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43490. zval_ptr_dtor_str(op2);
  43491. }
  43492. if (!result) {
  43493. goto is_not_equal_true;
  43494. } else {
  43495. goto is_not_equal_false;
  43496. }
  43497. }
  43498. }
  43499. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  43500. }
  43501. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43502. {
  43503. USE_OPLINE
  43504. zval *op1, *op2;
  43505. SAVE_OPLINE();
  43506. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  43507. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43508. compare_function(EX_VAR(opline->result.var), op1, op2);
  43509. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43510. }
  43511. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43512. {
  43513. USE_OPLINE
  43514. zval *op1, *op2;
  43515. SAVE_OPLINE();
  43516. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  43517. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43518. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  43519. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43520. }
  43521. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43522. {
  43523. USE_OPLINE
  43524. zval *object;
  43525. zval *property;
  43526. zval *value;
  43527. zval *zptr;
  43528. void **cache_slot;
  43529. zend_property_info *prop_info;
  43530. zend_object *zobj;
  43531. zend_string *name, *tmp_name;
  43532. SAVE_OPLINE();
  43533. object = EX_VAR(opline->op1.var);
  43534. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43535. do {
  43536. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  43537. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  43538. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  43539. object = Z_REFVAL_P(object);
  43540. goto assign_op_object;
  43541. }
  43542. if (IS_CV == IS_CV
  43543. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  43544. ZVAL_UNDEFINED_OP1();
  43545. }
  43546. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  43547. break;
  43548. }
  43549. assign_op_object:
  43550. /* here we are sure we are dealing with an object */
  43551. zobj = Z_OBJ_P(object);
  43552. if (IS_CV == IS_CONST) {
  43553. name = Z_STR_P(property);
  43554. } else {
  43555. name = zval_try_get_tmp_string(property, &tmp_name);
  43556. if (UNEXPECTED(!name)) {
  43557. UNDEF_RESULT();
  43558. break;
  43559. }
  43560. }
  43561. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  43562. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  43563. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  43564. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43565. ZVAL_NULL(EX_VAR(opline->result.var));
  43566. }
  43567. } else {
  43568. zval *orig_zptr = zptr;
  43569. zend_reference *ref;
  43570. do {
  43571. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  43572. ref = Z_REF_P(zptr);
  43573. zptr = Z_REFVAL_P(zptr);
  43574. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  43575. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  43576. break;
  43577. }
  43578. }
  43579. if (IS_CV == IS_CONST) {
  43580. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  43581. } else {
  43582. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  43583. }
  43584. if (UNEXPECTED(prop_info)) {
  43585. /* special case for typed properties */
  43586. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  43587. } else {
  43588. zend_binary_op(zptr, zptr, value OPLINE_CC);
  43589. }
  43590. } while (0);
  43591. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43592. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  43593. }
  43594. }
  43595. } else {
  43596. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  43597. }
  43598. if (IS_CV != IS_CONST) {
  43599. zend_tmp_string_release(tmp_name);
  43600. }
  43601. } while (0);
  43602. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  43603. /* assign_obj has two opcodes! */
  43604. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  43605. }
  43606. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  43607. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43608. {
  43609. USE_OPLINE
  43610. zval *var_ptr;
  43611. zval *value, *container, *dim;
  43612. HashTable *ht;
  43613. SAVE_OPLINE();
  43614. container = EX_VAR(opline->op1.var);
  43615. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  43616. assign_dim_op_array:
  43617. SEPARATE_ARRAY(container);
  43618. ht = Z_ARRVAL_P(container);
  43619. assign_dim_op_new_array:
  43620. dim = EX_VAR(opline->op2.var);
  43621. if (IS_CV == IS_UNUSED) {
  43622. var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
  43623. if (UNEXPECTED(!var_ptr)) {
  43624. zend_cannot_add_element();
  43625. goto assign_dim_op_ret_null;
  43626. }
  43627. } else {
  43628. if (IS_CV == IS_CONST) {
  43629. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
  43630. } else {
  43631. var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
  43632. }
  43633. if (UNEXPECTED(!var_ptr)) {
  43634. goto assign_dim_op_ret_null;
  43635. }
  43636. }
  43637. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  43638. do {
  43639. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
  43640. zend_reference *ref = Z_REF_P(var_ptr);
  43641. var_ptr = Z_REFVAL_P(var_ptr);
  43642. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  43643. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  43644. break;
  43645. }
  43646. }
  43647. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  43648. } while (0);
  43649. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43650. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  43651. }
  43652. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  43653. } else {
  43654. if (EXPECTED(Z_ISREF_P(container))) {
  43655. container = Z_REFVAL_P(container);
  43656. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  43657. goto assign_dim_op_array;
  43658. }
  43659. }
  43660. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  43661. zend_object *obj = Z_OBJ_P(container);
  43662. dim = EX_VAR(opline->op2.var);
  43663. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  43664. dim++;
  43665. }
  43666. zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
  43667. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  43668. zend_uchar old_type;
  43669. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  43670. ZVAL_UNDEFINED_OP1();
  43671. }
  43672. ht = zend_new_array(8);
  43673. old_type = Z_TYPE_P(container);
  43674. ZVAL_ARR(container, ht);
  43675. if (UNEXPECTED(old_type == IS_FALSE)) {
  43676. GC_ADDREF(ht);
  43677. zend_false_to_array_deprecated();
  43678. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  43679. zend_array_destroy(ht);
  43680. goto assign_dim_op_ret_null;
  43681. }
  43682. }
  43683. goto assign_dim_op_new_array;
  43684. } else {
  43685. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43686. zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  43687. assign_dim_op_ret_null:
  43688. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  43689. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43690. ZVAL_NULL(EX_VAR(opline->result.var));
  43691. }
  43692. }
  43693. }
  43694. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  43695. }
  43696. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43697. {
  43698. USE_OPLINE
  43699. zval *var_ptr;
  43700. zval *value;
  43701. SAVE_OPLINE();
  43702. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43703. var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  43704. do {
  43705. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  43706. zend_reference *ref = Z_REF_P(var_ptr);
  43707. var_ptr = Z_REFVAL_P(var_ptr);
  43708. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  43709. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  43710. break;
  43711. }
  43712. }
  43713. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  43714. } while (0);
  43715. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43716. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  43717. }
  43718. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43719. }
  43720. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43721. {
  43722. USE_OPLINE
  43723. zval *object;
  43724. zval *property;
  43725. zval *zptr;
  43726. void **cache_slot;
  43727. zend_property_info *prop_info;
  43728. zend_object *zobj;
  43729. zend_string *name, *tmp_name;
  43730. SAVE_OPLINE();
  43731. object = EX_VAR(opline->op1.var);
  43732. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43733. do {
  43734. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  43735. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  43736. object = Z_REFVAL_P(object);
  43737. goto pre_incdec_object;
  43738. }
  43739. if (IS_CV == IS_CV
  43740. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  43741. ZVAL_UNDEFINED_OP1();
  43742. }
  43743. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  43744. break;
  43745. }
  43746. pre_incdec_object:
  43747. /* here we are sure we are dealing with an object */
  43748. zobj = Z_OBJ_P(object);
  43749. if (IS_CV == IS_CONST) {
  43750. name = Z_STR_P(property);
  43751. } else {
  43752. name = zval_try_get_tmp_string(property, &tmp_name);
  43753. if (UNEXPECTED(!name)) {
  43754. UNDEF_RESULT();
  43755. break;
  43756. }
  43757. }
  43758. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  43759. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  43760. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  43761. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43762. ZVAL_NULL(EX_VAR(opline->result.var));
  43763. }
  43764. } else {
  43765. if (IS_CV == IS_CONST) {
  43766. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  43767. } else {
  43768. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  43769. }
  43770. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  43771. }
  43772. } else {
  43773. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  43774. }
  43775. if (IS_CV != IS_CONST) {
  43776. zend_tmp_string_release(tmp_name);
  43777. }
  43778. } while (0);
  43779. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43780. }
  43781. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43782. {
  43783. USE_OPLINE
  43784. zval *object;
  43785. zval *property;
  43786. zval *zptr;
  43787. void **cache_slot;
  43788. zend_property_info *prop_info;
  43789. zend_object *zobj;
  43790. zend_string *name, *tmp_name;
  43791. SAVE_OPLINE();
  43792. object = EX_VAR(opline->op1.var);
  43793. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43794. do {
  43795. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  43796. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  43797. object = Z_REFVAL_P(object);
  43798. goto post_incdec_object;
  43799. }
  43800. if (IS_CV == IS_CV
  43801. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  43802. ZVAL_UNDEFINED_OP1();
  43803. }
  43804. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  43805. break;
  43806. }
  43807. post_incdec_object:
  43808. /* here we are sure we are dealing with an object */
  43809. zobj = Z_OBJ_P(object);
  43810. if (IS_CV == IS_CONST) {
  43811. name = Z_STR_P(property);
  43812. } else {
  43813. name = zval_try_get_tmp_string(property, &tmp_name);
  43814. if (UNEXPECTED(!name)) {
  43815. ZVAL_UNDEF(EX_VAR(opline->result.var));
  43816. break;
  43817. }
  43818. }
  43819. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  43820. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  43821. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  43822. ZVAL_NULL(EX_VAR(opline->result.var));
  43823. } else {
  43824. if (IS_CV == IS_CONST) {
  43825. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  43826. } else {
  43827. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  43828. }
  43829. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  43830. }
  43831. } else {
  43832. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  43833. }
  43834. if (IS_CV != IS_CONST) {
  43835. zend_tmp_string_release(tmp_name);
  43836. }
  43837. } while (0);
  43838. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43839. }
  43840. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43841. {
  43842. USE_OPLINE
  43843. zval *container, *dim, *value;
  43844. SAVE_OPLINE();
  43845. container = EX_VAR(opline->op1.var);
  43846. dim = EX_VAR(opline->op2.var);
  43847. if (IS_CV != IS_CONST) {
  43848. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  43849. fetch_dim_r_array:
  43850. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
  43851. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  43852. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  43853. container = Z_REFVAL_P(container);
  43854. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  43855. goto fetch_dim_r_array;
  43856. } else {
  43857. goto fetch_dim_r_slow;
  43858. }
  43859. } else {
  43860. fetch_dim_r_slow:
  43861. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  43862. dim++;
  43863. }
  43864. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  43865. }
  43866. } else {
  43867. zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
  43868. }
  43869. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43870. }
  43871. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43872. {
  43873. USE_OPLINE
  43874. zval *container;
  43875. SAVE_OPLINE();
  43876. container = EX_VAR(opline->op1.var);
  43877. zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  43878. if (IS_CV == IS_VAR) {
  43879. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  43880. }
  43881. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43882. }
  43883. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43884. {
  43885. USE_OPLINE
  43886. zval *container;
  43887. SAVE_OPLINE();
  43888. container = EX_VAR(opline->op1.var);
  43889. zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  43890. if (IS_CV == IS_VAR) {
  43891. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  43892. }
  43893. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43894. }
  43895. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43896. {
  43897. USE_OPLINE
  43898. zval *container;
  43899. SAVE_OPLINE();
  43900. container = EX_VAR(opline->op1.var);
  43901. zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  43902. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43903. }
  43904. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43905. {
  43906. #if 0
  43907. USE_OPLINE
  43908. #endif
  43909. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  43910. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  43911. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  43912. }
  43913. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  43914. } else {
  43915. if (IS_CV == IS_UNUSED) {
  43916. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  43917. }
  43918. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  43919. }
  43920. }
  43921. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43922. {
  43923. USE_OPLINE
  43924. zval *container;
  43925. SAVE_OPLINE();
  43926. container = EX_VAR(opline->op1.var);
  43927. zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  43928. if (IS_CV == IS_VAR) {
  43929. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  43930. }
  43931. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43932. }
  43933. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43934. {
  43935. USE_OPLINE
  43936. zval *container;
  43937. void **cache_slot = NULL;
  43938. SAVE_OPLINE();
  43939. container = EX_VAR(opline->op1.var);
  43940. if (IS_CV == IS_CONST ||
  43941. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  43942. do {
  43943. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  43944. container = Z_REFVAL_P(container);
  43945. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  43946. break;
  43947. }
  43948. }
  43949. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  43950. ZVAL_UNDEFINED_OP1();
  43951. }
  43952. zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  43953. ZVAL_NULL(EX_VAR(opline->result.var));
  43954. goto fetch_obj_r_finish;
  43955. } while (0);
  43956. }
  43957. /* here we are sure we are dealing with an object */
  43958. do {
  43959. zend_object *zobj = Z_OBJ_P(container);
  43960. zend_string *name, *tmp_name;
  43961. zval *retval;
  43962. if (IS_CV == IS_CONST) {
  43963. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  43964. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  43965. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  43966. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  43967. retval = OBJ_PROP(zobj, prop_offset);
  43968. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  43969. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  43970. goto fetch_obj_r_copy;
  43971. } else {
  43972. fetch_obj_r_fast_copy:
  43973. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  43974. ZEND_VM_NEXT_OPCODE();
  43975. }
  43976. }
  43977. } else if (EXPECTED(zobj->properties != NULL)) {
  43978. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  43979. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  43980. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  43981. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  43982. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  43983. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  43984. (EXPECTED(p->key == name) ||
  43985. (EXPECTED(p->h == ZSTR_H(name)) &&
  43986. EXPECTED(p->key != NULL) &&
  43987. EXPECTED(zend_string_equal_content(p->key, name))))) {
  43988. retval = &p->val;
  43989. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  43990. goto fetch_obj_r_copy;
  43991. } else {
  43992. goto fetch_obj_r_fast_copy;
  43993. }
  43994. }
  43995. }
  43996. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  43997. }
  43998. retval = zend_hash_find_known_hash(zobj->properties, name);
  43999. if (EXPECTED(retval)) {
  44000. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  44001. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  44002. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  44003. goto fetch_obj_r_copy;
  44004. } else {
  44005. goto fetch_obj_r_fast_copy;
  44006. }
  44007. }
  44008. }
  44009. }
  44010. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44011. } else {
  44012. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  44013. if (UNEXPECTED(!name)) {
  44014. ZVAL_UNDEF(EX_VAR(opline->result.var));
  44015. break;
  44016. }
  44017. }
  44018. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  44019. #if ZEND_DEBUG
  44020. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  44021. zend_verify_internal_read_property_type(zobj, name, retval);
  44022. }
  44023. #endif
  44024. if (IS_CV != IS_CONST) {
  44025. zend_tmp_string_release(tmp_name);
  44026. }
  44027. if (retval != EX_VAR(opline->result.var)) {
  44028. fetch_obj_r_copy:
  44029. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  44030. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  44031. zend_unwrap_reference(retval);
  44032. }
  44033. } while (0);
  44034. fetch_obj_r_finish:
  44035. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  44036. }
  44037. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44038. {
  44039. USE_OPLINE
  44040. zval *property, *container, *result;
  44041. SAVE_OPLINE();
  44042. container = EX_VAR(opline->op1.var);
  44043. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  44044. result = EX_VAR(opline->result.var);
  44045. zend_fetch_property_address(
  44046. result, container, IS_CV, property, IS_CV,
  44047. ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  44048. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
  44049. if (IS_CV == IS_VAR) {
  44050. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  44051. }
  44052. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  44053. }
  44054. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44055. {
  44056. USE_OPLINE
  44057. zval *property, *container, *result;
  44058. SAVE_OPLINE();
  44059. container = EX_VAR(opline->op1.var);
  44060. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  44061. result = EX_VAR(opline->result.var);
  44062. zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  44063. if (IS_CV == IS_VAR) {
  44064. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  44065. }
  44066. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  44067. }
  44068. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44069. {
  44070. USE_OPLINE
  44071. zval *container;
  44072. void **cache_slot = NULL;
  44073. SAVE_OPLINE();
  44074. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  44075. if (IS_CV == IS_CONST ||
  44076. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  44077. do {
  44078. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  44079. container = Z_REFVAL_P(container);
  44080. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  44081. break;
  44082. }
  44083. }
  44084. if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  44085. ZVAL_UNDEFINED_OP2();
  44086. }
  44087. ZVAL_NULL(EX_VAR(opline->result.var));
  44088. goto fetch_obj_is_finish;
  44089. } while (0);
  44090. }
  44091. /* here we are sure we are dealing with an object */
  44092. do {
  44093. zend_object *zobj = Z_OBJ_P(container);
  44094. zend_string *name, *tmp_name;
  44095. zval *retval;
  44096. if (IS_CV == IS_CONST) {
  44097. cache_slot = CACHE_ADDR(opline->extended_value);
  44098. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  44099. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  44100. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  44101. retval = OBJ_PROP(zobj, prop_offset);
  44102. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  44103. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  44104. goto fetch_obj_is_copy;
  44105. } else {
  44106. fetch_obj_is_fast_copy:
  44107. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  44108. ZEND_VM_NEXT_OPCODE();
  44109. }
  44110. }
  44111. } else if (EXPECTED(zobj->properties != NULL)) {
  44112. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44113. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  44114. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  44115. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  44116. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  44117. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  44118. (EXPECTED(p->key == name) ||
  44119. (EXPECTED(p->h == ZSTR_H(name)) &&
  44120. EXPECTED(p->key != NULL) &&
  44121. EXPECTED(zend_string_equal_content(p->key, name))))) {
  44122. retval = &p->val;
  44123. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  44124. goto fetch_obj_is_copy;
  44125. } else {
  44126. goto fetch_obj_is_fast_copy;
  44127. }
  44128. }
  44129. }
  44130. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  44131. }
  44132. retval = zend_hash_find_known_hash(zobj->properties, name);
  44133. if (EXPECTED(retval)) {
  44134. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  44135. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  44136. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  44137. goto fetch_obj_is_copy;
  44138. } else {
  44139. goto fetch_obj_is_fast_copy;
  44140. }
  44141. }
  44142. }
  44143. }
  44144. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44145. } else {
  44146. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  44147. if (UNEXPECTED(!name)) {
  44148. ZVAL_UNDEF(EX_VAR(opline->result.var));
  44149. break;
  44150. }
  44151. }
  44152. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  44153. if (IS_CV != IS_CONST) {
  44154. zend_tmp_string_release(tmp_name);
  44155. }
  44156. if (retval != EX_VAR(opline->result.var)) {
  44157. fetch_obj_is_copy:
  44158. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  44159. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  44160. zend_unwrap_reference(retval);
  44161. }
  44162. } while (0);
  44163. fetch_obj_is_finish:
  44164. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  44165. }
  44166. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44167. {
  44168. #if 0
  44169. USE_OPLINE
  44170. #endif
  44171. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  44172. /* Behave like FETCH_OBJ_W */
  44173. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  44174. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  44175. }
  44176. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  44177. } else {
  44178. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  44179. }
  44180. }
  44181. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44182. {
  44183. USE_OPLINE
  44184. zval *container, *property, *result;
  44185. SAVE_OPLINE();
  44186. container = EX_VAR(opline->op1.var);
  44187. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  44188. result = EX_VAR(opline->result.var);
  44189. zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
  44190. if (IS_CV == IS_VAR) {
  44191. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  44192. }
  44193. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  44194. }
  44195. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44196. {
  44197. USE_OPLINE
  44198. zval *object, *value, tmp;
  44199. zend_object *zobj;
  44200. zend_string *name, *tmp_name;
  44201. SAVE_OPLINE();
  44202. object = EX_VAR(opline->op1.var);
  44203. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  44204. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  44205. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  44206. object = Z_REFVAL_P(object);
  44207. goto assign_object;
  44208. }
  44209. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  44210. value = &EG(uninitialized_zval);
  44211. goto free_and_exit_assign_obj;
  44212. }
  44213. assign_object:
  44214. zobj = Z_OBJ_P(object);
  44215. if (IS_CV == IS_CONST) {
  44216. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  44217. void **cache_slot = CACHE_ADDR(opline->extended_value);
  44218. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  44219. zend_object *zobj = Z_OBJ_P(object);
  44220. zval *property_val;
  44221. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  44222. property_val = OBJ_PROP(zobj, prop_offset);
  44223. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  44224. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  44225. if (UNEXPECTED(prop_info != NULL)) {
  44226. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  44227. goto free_and_exit_assign_obj;
  44228. } else {
  44229. fast_assign_obj:
  44230. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  44231. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44232. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44233. }
  44234. goto exit_assign_obj;
  44235. }
  44236. }
  44237. } else {
  44238. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44239. if (EXPECTED(zobj->properties != NULL)) {
  44240. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  44241. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  44242. GC_DELREF(zobj->properties);
  44243. }
  44244. zobj->properties = zend_array_dup(zobj->properties);
  44245. }
  44246. property_val = zend_hash_find_known_hash(zobj->properties, name);
  44247. if (property_val) {
  44248. goto fast_assign_obj;
  44249. }
  44250. }
  44251. if (!zobj->ce->__set) {
  44252. if (EXPECTED(zobj->properties == NULL)) {
  44253. rebuild_object_properties(zobj);
  44254. }
  44255. if (IS_CONST == IS_CONST) {
  44256. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  44257. Z_ADDREF_P(value);
  44258. }
  44259. } else if (IS_CONST != IS_TMP_VAR) {
  44260. if (Z_ISREF_P(value)) {
  44261. if (IS_CONST == IS_VAR) {
  44262. zend_reference *ref = Z_REF_P(value);
  44263. if (GC_DELREF(ref) == 0) {
  44264. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  44265. efree_size(ref, sizeof(zend_reference));
  44266. value = &tmp;
  44267. } else {
  44268. value = Z_REFVAL_P(value);
  44269. Z_TRY_ADDREF_P(value);
  44270. }
  44271. } else {
  44272. value = Z_REFVAL_P(value);
  44273. Z_TRY_ADDREF_P(value);
  44274. }
  44275. } else if (IS_CONST == IS_CV) {
  44276. Z_TRY_ADDREF_P(value);
  44277. }
  44278. }
  44279. zend_hash_add_new(zobj->properties, name, value);
  44280. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44281. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44282. }
  44283. goto exit_assign_obj;
  44284. }
  44285. }
  44286. }
  44287. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44288. } else {
  44289. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  44290. if (UNEXPECTED(!name)) {
  44291. UNDEF_RESULT();
  44292. goto exit_assign_obj;
  44293. }
  44294. }
  44295. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  44296. ZVAL_DEREF(value);
  44297. }
  44298. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  44299. if (IS_CV != IS_CONST) {
  44300. zend_tmp_string_release(tmp_name);
  44301. }
  44302. free_and_exit_assign_obj:
  44303. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44304. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  44305. }
  44306. exit_assign_obj:
  44307. /* assign_obj has two opcodes! */
  44308. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  44309. }
  44310. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  44311. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44312. {
  44313. USE_OPLINE
  44314. zval *object, *value, tmp;
  44315. zend_object *zobj;
  44316. zend_string *name, *tmp_name;
  44317. SAVE_OPLINE();
  44318. object = EX_VAR(opline->op1.var);
  44319. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  44320. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  44321. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  44322. object = Z_REFVAL_P(object);
  44323. goto assign_object;
  44324. }
  44325. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  44326. value = &EG(uninitialized_zval);
  44327. goto free_and_exit_assign_obj;
  44328. }
  44329. assign_object:
  44330. zobj = Z_OBJ_P(object);
  44331. if (IS_CV == IS_CONST) {
  44332. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  44333. void **cache_slot = CACHE_ADDR(opline->extended_value);
  44334. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  44335. zend_object *zobj = Z_OBJ_P(object);
  44336. zval *property_val;
  44337. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  44338. property_val = OBJ_PROP(zobj, prop_offset);
  44339. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  44340. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  44341. if (UNEXPECTED(prop_info != NULL)) {
  44342. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  44343. goto free_and_exit_assign_obj;
  44344. } else {
  44345. fast_assign_obj:
  44346. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  44347. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44348. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44349. }
  44350. goto exit_assign_obj;
  44351. }
  44352. }
  44353. } else {
  44354. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44355. if (EXPECTED(zobj->properties != NULL)) {
  44356. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  44357. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  44358. GC_DELREF(zobj->properties);
  44359. }
  44360. zobj->properties = zend_array_dup(zobj->properties);
  44361. }
  44362. property_val = zend_hash_find_known_hash(zobj->properties, name);
  44363. if (property_val) {
  44364. goto fast_assign_obj;
  44365. }
  44366. }
  44367. if (!zobj->ce->__set) {
  44368. if (EXPECTED(zobj->properties == NULL)) {
  44369. rebuild_object_properties(zobj);
  44370. }
  44371. if (IS_TMP_VAR == IS_CONST) {
  44372. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  44373. Z_ADDREF_P(value);
  44374. }
  44375. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  44376. if (Z_ISREF_P(value)) {
  44377. if (IS_TMP_VAR == IS_VAR) {
  44378. zend_reference *ref = Z_REF_P(value);
  44379. if (GC_DELREF(ref) == 0) {
  44380. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  44381. efree_size(ref, sizeof(zend_reference));
  44382. value = &tmp;
  44383. } else {
  44384. value = Z_REFVAL_P(value);
  44385. Z_TRY_ADDREF_P(value);
  44386. }
  44387. } else {
  44388. value = Z_REFVAL_P(value);
  44389. Z_TRY_ADDREF_P(value);
  44390. }
  44391. } else if (IS_TMP_VAR == IS_CV) {
  44392. Z_TRY_ADDREF_P(value);
  44393. }
  44394. }
  44395. zend_hash_add_new(zobj->properties, name, value);
  44396. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44397. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44398. }
  44399. goto exit_assign_obj;
  44400. }
  44401. }
  44402. }
  44403. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44404. } else {
  44405. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  44406. if (UNEXPECTED(!name)) {
  44407. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44408. UNDEF_RESULT();
  44409. goto exit_assign_obj;
  44410. }
  44411. }
  44412. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  44413. ZVAL_DEREF(value);
  44414. }
  44415. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  44416. if (IS_CV != IS_CONST) {
  44417. zend_tmp_string_release(tmp_name);
  44418. }
  44419. free_and_exit_assign_obj:
  44420. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44421. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  44422. }
  44423. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44424. exit_assign_obj:
  44425. /* assign_obj has two opcodes! */
  44426. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  44427. }
  44428. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  44429. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44430. {
  44431. USE_OPLINE
  44432. zval *object, *value, tmp;
  44433. zend_object *zobj;
  44434. zend_string *name, *tmp_name;
  44435. SAVE_OPLINE();
  44436. object = EX_VAR(opline->op1.var);
  44437. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  44438. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  44439. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  44440. object = Z_REFVAL_P(object);
  44441. goto assign_object;
  44442. }
  44443. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  44444. value = &EG(uninitialized_zval);
  44445. goto free_and_exit_assign_obj;
  44446. }
  44447. assign_object:
  44448. zobj = Z_OBJ_P(object);
  44449. if (IS_CV == IS_CONST) {
  44450. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  44451. void **cache_slot = CACHE_ADDR(opline->extended_value);
  44452. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  44453. zend_object *zobj = Z_OBJ_P(object);
  44454. zval *property_val;
  44455. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  44456. property_val = OBJ_PROP(zobj, prop_offset);
  44457. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  44458. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  44459. if (UNEXPECTED(prop_info != NULL)) {
  44460. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  44461. goto free_and_exit_assign_obj;
  44462. } else {
  44463. fast_assign_obj:
  44464. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  44465. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44466. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44467. }
  44468. goto exit_assign_obj;
  44469. }
  44470. }
  44471. } else {
  44472. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44473. if (EXPECTED(zobj->properties != NULL)) {
  44474. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  44475. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  44476. GC_DELREF(zobj->properties);
  44477. }
  44478. zobj->properties = zend_array_dup(zobj->properties);
  44479. }
  44480. property_val = zend_hash_find_known_hash(zobj->properties, name);
  44481. if (property_val) {
  44482. goto fast_assign_obj;
  44483. }
  44484. }
  44485. if (!zobj->ce->__set) {
  44486. if (EXPECTED(zobj->properties == NULL)) {
  44487. rebuild_object_properties(zobj);
  44488. }
  44489. if (IS_VAR == IS_CONST) {
  44490. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  44491. Z_ADDREF_P(value);
  44492. }
  44493. } else if (IS_VAR != IS_TMP_VAR) {
  44494. if (Z_ISREF_P(value)) {
  44495. if (IS_VAR == IS_VAR) {
  44496. zend_reference *ref = Z_REF_P(value);
  44497. if (GC_DELREF(ref) == 0) {
  44498. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  44499. efree_size(ref, sizeof(zend_reference));
  44500. value = &tmp;
  44501. } else {
  44502. value = Z_REFVAL_P(value);
  44503. Z_TRY_ADDREF_P(value);
  44504. }
  44505. } else {
  44506. value = Z_REFVAL_P(value);
  44507. Z_TRY_ADDREF_P(value);
  44508. }
  44509. } else if (IS_VAR == IS_CV) {
  44510. Z_TRY_ADDREF_P(value);
  44511. }
  44512. }
  44513. zend_hash_add_new(zobj->properties, name, value);
  44514. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44515. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44516. }
  44517. goto exit_assign_obj;
  44518. }
  44519. }
  44520. }
  44521. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44522. } else {
  44523. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  44524. if (UNEXPECTED(!name)) {
  44525. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44526. UNDEF_RESULT();
  44527. goto exit_assign_obj;
  44528. }
  44529. }
  44530. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  44531. ZVAL_DEREF(value);
  44532. }
  44533. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  44534. if (IS_CV != IS_CONST) {
  44535. zend_tmp_string_release(tmp_name);
  44536. }
  44537. free_and_exit_assign_obj:
  44538. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44539. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  44540. }
  44541. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44542. exit_assign_obj:
  44543. /* assign_obj has two opcodes! */
  44544. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  44545. }
  44546. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  44547. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44548. {
  44549. USE_OPLINE
  44550. zval *object, *value, tmp;
  44551. zend_object *zobj;
  44552. zend_string *name, *tmp_name;
  44553. SAVE_OPLINE();
  44554. object = EX_VAR(opline->op1.var);
  44555. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  44556. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  44557. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  44558. object = Z_REFVAL_P(object);
  44559. goto assign_object;
  44560. }
  44561. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  44562. value = &EG(uninitialized_zval);
  44563. goto free_and_exit_assign_obj;
  44564. }
  44565. assign_object:
  44566. zobj = Z_OBJ_P(object);
  44567. if (IS_CV == IS_CONST) {
  44568. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  44569. void **cache_slot = CACHE_ADDR(opline->extended_value);
  44570. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  44571. zend_object *zobj = Z_OBJ_P(object);
  44572. zval *property_val;
  44573. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  44574. property_val = OBJ_PROP(zobj, prop_offset);
  44575. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  44576. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  44577. if (UNEXPECTED(prop_info != NULL)) {
  44578. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  44579. goto free_and_exit_assign_obj;
  44580. } else {
  44581. fast_assign_obj:
  44582. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  44583. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44584. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44585. }
  44586. goto exit_assign_obj;
  44587. }
  44588. }
  44589. } else {
  44590. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44591. if (EXPECTED(zobj->properties != NULL)) {
  44592. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  44593. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  44594. GC_DELREF(zobj->properties);
  44595. }
  44596. zobj->properties = zend_array_dup(zobj->properties);
  44597. }
  44598. property_val = zend_hash_find_known_hash(zobj->properties, name);
  44599. if (property_val) {
  44600. goto fast_assign_obj;
  44601. }
  44602. }
  44603. if (!zobj->ce->__set) {
  44604. if (EXPECTED(zobj->properties == NULL)) {
  44605. rebuild_object_properties(zobj);
  44606. }
  44607. if (IS_CV == IS_CONST) {
  44608. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  44609. Z_ADDREF_P(value);
  44610. }
  44611. } else if (IS_CV != IS_TMP_VAR) {
  44612. if (Z_ISREF_P(value)) {
  44613. if (IS_CV == IS_VAR) {
  44614. zend_reference *ref = Z_REF_P(value);
  44615. if (GC_DELREF(ref) == 0) {
  44616. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  44617. efree_size(ref, sizeof(zend_reference));
  44618. value = &tmp;
  44619. } else {
  44620. value = Z_REFVAL_P(value);
  44621. Z_TRY_ADDREF_P(value);
  44622. }
  44623. } else {
  44624. value = Z_REFVAL_P(value);
  44625. Z_TRY_ADDREF_P(value);
  44626. }
  44627. } else if (IS_CV == IS_CV) {
  44628. Z_TRY_ADDREF_P(value);
  44629. }
  44630. }
  44631. zend_hash_add_new(zobj->properties, name, value);
  44632. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44633. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44634. }
  44635. goto exit_assign_obj;
  44636. }
  44637. }
  44638. }
  44639. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44640. } else {
  44641. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  44642. if (UNEXPECTED(!name)) {
  44643. UNDEF_RESULT();
  44644. goto exit_assign_obj;
  44645. }
  44646. }
  44647. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  44648. ZVAL_DEREF(value);
  44649. }
  44650. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  44651. if (IS_CV != IS_CONST) {
  44652. zend_tmp_string_release(tmp_name);
  44653. }
  44654. free_and_exit_assign_obj:
  44655. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44656. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  44657. }
  44658. exit_assign_obj:
  44659. /* assign_obj has two opcodes! */
  44660. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  44661. }
  44662. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  44663. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44664. {
  44665. USE_OPLINE
  44666. zval *object_ptr, *orig_object_ptr;
  44667. zval *value;
  44668. zval *variable_ptr;
  44669. zval *dim;
  44670. SAVE_OPLINE();
  44671. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  44672. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  44673. try_assign_dim_array:
  44674. SEPARATE_ARRAY(object_ptr);
  44675. if (IS_CV == IS_UNUSED) {
  44676. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  44677. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  44678. HashTable *ht = Z_ARRVAL_P(object_ptr);
  44679. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  44680. GC_ADDREF(ht);
  44681. }
  44682. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  44683. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  44684. zend_array_destroy(ht);
  44685. goto assign_dim_error;
  44686. }
  44687. }
  44688. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  44689. ZVAL_DEREF(value);
  44690. }
  44691. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  44692. if (UNEXPECTED(value == NULL)) {
  44693. zend_cannot_add_element();
  44694. goto assign_dim_error;
  44695. } else if (IS_CONST == IS_CV) {
  44696. if (Z_REFCOUNTED_P(value)) {
  44697. Z_ADDREF_P(value);
  44698. }
  44699. } else if (IS_CONST == IS_VAR) {
  44700. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  44701. if (Z_ISREF_P(free_op_data)) {
  44702. if (Z_REFCOUNTED_P(value)) {
  44703. Z_ADDREF_P(value);
  44704. }
  44705. zval_ptr_dtor_nogc(free_op_data);
  44706. }
  44707. } else if (IS_CONST == IS_CONST) {
  44708. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  44709. Z_ADDREF_P(value);
  44710. }
  44711. }
  44712. } else {
  44713. dim = EX_VAR(opline->op2.var);
  44714. if (IS_CV == IS_CONST) {
  44715. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  44716. } else {
  44717. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  44718. }
  44719. if (UNEXPECTED(variable_ptr == NULL)) {
  44720. goto assign_dim_error;
  44721. }
  44722. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  44723. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  44724. }
  44725. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44726. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44727. }
  44728. } else {
  44729. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  44730. object_ptr = Z_REFVAL_P(object_ptr);
  44731. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  44732. goto try_assign_dim_array;
  44733. }
  44734. }
  44735. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  44736. zend_object *obj = Z_OBJ_P(object_ptr);
  44737. GC_ADDREF(obj);
  44738. dim = EX_VAR(opline->op2.var);
  44739. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  44740. dim = ZVAL_UNDEFINED_OP2();
  44741. } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  44742. dim++;
  44743. }
  44744. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  44745. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  44746. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  44747. } else if (IS_CONST & (IS_CV|IS_VAR)) {
  44748. ZVAL_DEREF(value);
  44749. }
  44750. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  44751. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  44752. zend_objects_store_del(obj);
  44753. }
  44754. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  44755. if (IS_CV == IS_UNUSED) {
  44756. zend_use_new_element_for_string();
  44757. UNDEF_RESULT();
  44758. } else {
  44759. dim = EX_VAR(opline->op2.var);
  44760. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  44761. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  44762. }
  44763. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  44764. if (Z_ISREF_P(orig_object_ptr)
  44765. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  44766. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  44767. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  44768. UNDEF_RESULT();
  44769. } else {
  44770. HashTable *ht = zend_new_array(8);
  44771. zend_uchar old_type = Z_TYPE_P(object_ptr);
  44772. ZVAL_ARR(object_ptr, ht);
  44773. if (UNEXPECTED(old_type == IS_FALSE)) {
  44774. GC_ADDREF(ht);
  44775. zend_false_to_array_deprecated();
  44776. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  44777. zend_array_destroy(ht);
  44778. goto assign_dim_error;
  44779. }
  44780. }
  44781. goto try_assign_dim_array;
  44782. }
  44783. } else {
  44784. zend_use_scalar_as_array();
  44785. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  44786. assign_dim_error:
  44787. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44788. ZVAL_NULL(EX_VAR(opline->result.var));
  44789. }
  44790. }
  44791. }
  44792. if (IS_CV != IS_UNUSED) {
  44793. }
  44794. /* assign_dim has two opcodes! */
  44795. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  44796. }
  44797. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44798. {
  44799. USE_OPLINE
  44800. zval *object_ptr, *orig_object_ptr;
  44801. zval *value;
  44802. zval *variable_ptr;
  44803. zval *dim;
  44804. SAVE_OPLINE();
  44805. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  44806. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  44807. try_assign_dim_array:
  44808. SEPARATE_ARRAY(object_ptr);
  44809. if (IS_CV == IS_UNUSED) {
  44810. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  44811. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  44812. HashTable *ht = Z_ARRVAL_P(object_ptr);
  44813. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  44814. GC_ADDREF(ht);
  44815. }
  44816. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  44817. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  44818. zend_array_destroy(ht);
  44819. goto assign_dim_error;
  44820. }
  44821. }
  44822. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  44823. ZVAL_DEREF(value);
  44824. }
  44825. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  44826. if (UNEXPECTED(value == NULL)) {
  44827. zend_cannot_add_element();
  44828. goto assign_dim_error;
  44829. } else if (IS_TMP_VAR == IS_CV) {
  44830. if (Z_REFCOUNTED_P(value)) {
  44831. Z_ADDREF_P(value);
  44832. }
  44833. } else if (IS_TMP_VAR == IS_VAR) {
  44834. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  44835. if (Z_ISREF_P(free_op_data)) {
  44836. if (Z_REFCOUNTED_P(value)) {
  44837. Z_ADDREF_P(value);
  44838. }
  44839. zval_ptr_dtor_nogc(free_op_data);
  44840. }
  44841. } else if (IS_TMP_VAR == IS_CONST) {
  44842. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  44843. Z_ADDREF_P(value);
  44844. }
  44845. }
  44846. } else {
  44847. dim = EX_VAR(opline->op2.var);
  44848. if (IS_CV == IS_CONST) {
  44849. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  44850. } else {
  44851. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  44852. }
  44853. if (UNEXPECTED(variable_ptr == NULL)) {
  44854. goto assign_dim_error;
  44855. }
  44856. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  44857. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  44858. }
  44859. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44860. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44861. }
  44862. } else {
  44863. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  44864. object_ptr = Z_REFVAL_P(object_ptr);
  44865. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  44866. goto try_assign_dim_array;
  44867. }
  44868. }
  44869. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  44870. zend_object *obj = Z_OBJ_P(object_ptr);
  44871. GC_ADDREF(obj);
  44872. dim = EX_VAR(opline->op2.var);
  44873. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  44874. dim = ZVAL_UNDEFINED_OP2();
  44875. } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  44876. dim++;
  44877. }
  44878. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  44879. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  44880. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  44881. } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
  44882. ZVAL_DEREF(value);
  44883. }
  44884. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  44885. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44886. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  44887. zend_objects_store_del(obj);
  44888. }
  44889. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  44890. if (IS_CV == IS_UNUSED) {
  44891. zend_use_new_element_for_string();
  44892. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44893. UNDEF_RESULT();
  44894. } else {
  44895. dim = EX_VAR(opline->op2.var);
  44896. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  44897. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  44898. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44899. }
  44900. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  44901. if (Z_ISREF_P(orig_object_ptr)
  44902. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  44903. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  44904. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  44905. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44906. UNDEF_RESULT();
  44907. } else {
  44908. HashTable *ht = zend_new_array(8);
  44909. zend_uchar old_type = Z_TYPE_P(object_ptr);
  44910. ZVAL_ARR(object_ptr, ht);
  44911. if (UNEXPECTED(old_type == IS_FALSE)) {
  44912. GC_ADDREF(ht);
  44913. zend_false_to_array_deprecated();
  44914. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  44915. zend_array_destroy(ht);
  44916. goto assign_dim_error;
  44917. }
  44918. }
  44919. goto try_assign_dim_array;
  44920. }
  44921. } else {
  44922. zend_use_scalar_as_array();
  44923. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  44924. assign_dim_error:
  44925. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44926. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44927. ZVAL_NULL(EX_VAR(opline->result.var));
  44928. }
  44929. }
  44930. }
  44931. if (IS_CV != IS_UNUSED) {
  44932. }
  44933. /* assign_dim has two opcodes! */
  44934. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  44935. }
  44936. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44937. {
  44938. USE_OPLINE
  44939. zval *object_ptr, *orig_object_ptr;
  44940. zval *value;
  44941. zval *variable_ptr;
  44942. zval *dim;
  44943. SAVE_OPLINE();
  44944. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  44945. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  44946. try_assign_dim_array:
  44947. SEPARATE_ARRAY(object_ptr);
  44948. if (IS_CV == IS_UNUSED) {
  44949. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  44950. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  44951. HashTable *ht = Z_ARRVAL_P(object_ptr);
  44952. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  44953. GC_ADDREF(ht);
  44954. }
  44955. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  44956. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  44957. zend_array_destroy(ht);
  44958. goto assign_dim_error;
  44959. }
  44960. }
  44961. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  44962. ZVAL_DEREF(value);
  44963. }
  44964. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  44965. if (UNEXPECTED(value == NULL)) {
  44966. zend_cannot_add_element();
  44967. goto assign_dim_error;
  44968. } else if (IS_VAR == IS_CV) {
  44969. if (Z_REFCOUNTED_P(value)) {
  44970. Z_ADDREF_P(value);
  44971. }
  44972. } else if (IS_VAR == IS_VAR) {
  44973. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  44974. if (Z_ISREF_P(free_op_data)) {
  44975. if (Z_REFCOUNTED_P(value)) {
  44976. Z_ADDREF_P(value);
  44977. }
  44978. zval_ptr_dtor_nogc(free_op_data);
  44979. }
  44980. } else if (IS_VAR == IS_CONST) {
  44981. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  44982. Z_ADDREF_P(value);
  44983. }
  44984. }
  44985. } else {
  44986. dim = EX_VAR(opline->op2.var);
  44987. if (IS_CV == IS_CONST) {
  44988. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  44989. } else {
  44990. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  44991. }
  44992. if (UNEXPECTED(variable_ptr == NULL)) {
  44993. goto assign_dim_error;
  44994. }
  44995. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  44996. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  44997. }
  44998. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44999. ZVAL_COPY(EX_VAR(opline->result.var), value);
  45000. }
  45001. } else {
  45002. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  45003. object_ptr = Z_REFVAL_P(object_ptr);
  45004. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  45005. goto try_assign_dim_array;
  45006. }
  45007. }
  45008. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  45009. zend_object *obj = Z_OBJ_P(object_ptr);
  45010. GC_ADDREF(obj);
  45011. dim = EX_VAR(opline->op2.var);
  45012. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  45013. dim = ZVAL_UNDEFINED_OP2();
  45014. } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  45015. dim++;
  45016. }
  45017. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  45018. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  45019. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  45020. } else if (IS_VAR & (IS_CV|IS_VAR)) {
  45021. ZVAL_DEREF(value);
  45022. }
  45023. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  45024. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  45025. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  45026. zend_objects_store_del(obj);
  45027. }
  45028. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  45029. if (IS_CV == IS_UNUSED) {
  45030. zend_use_new_element_for_string();
  45031. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  45032. UNDEF_RESULT();
  45033. } else {
  45034. dim = EX_VAR(opline->op2.var);
  45035. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  45036. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  45037. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  45038. }
  45039. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  45040. if (Z_ISREF_P(orig_object_ptr)
  45041. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  45042. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  45043. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45044. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  45045. UNDEF_RESULT();
  45046. } else {
  45047. HashTable *ht = zend_new_array(8);
  45048. zend_uchar old_type = Z_TYPE_P(object_ptr);
  45049. ZVAL_ARR(object_ptr, ht);
  45050. if (UNEXPECTED(old_type == IS_FALSE)) {
  45051. GC_ADDREF(ht);
  45052. zend_false_to_array_deprecated();
  45053. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  45054. zend_array_destroy(ht);
  45055. goto assign_dim_error;
  45056. }
  45057. }
  45058. goto try_assign_dim_array;
  45059. }
  45060. } else {
  45061. zend_use_scalar_as_array();
  45062. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45063. assign_dim_error:
  45064. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  45065. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  45066. ZVAL_NULL(EX_VAR(opline->result.var));
  45067. }
  45068. }
  45069. }
  45070. if (IS_CV != IS_UNUSED) {
  45071. }
  45072. /* assign_dim has two opcodes! */
  45073. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  45074. }
  45075. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45076. {
  45077. USE_OPLINE
  45078. zval *object_ptr, *orig_object_ptr;
  45079. zval *value;
  45080. zval *variable_ptr;
  45081. zval *dim;
  45082. SAVE_OPLINE();
  45083. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  45084. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  45085. try_assign_dim_array:
  45086. SEPARATE_ARRAY(object_ptr);
  45087. if (IS_CV == IS_UNUSED) {
  45088. value = EX_VAR((opline+1)->op1.var);
  45089. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  45090. HashTable *ht = Z_ARRVAL_P(object_ptr);
  45091. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  45092. GC_ADDREF(ht);
  45093. }
  45094. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  45095. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  45096. zend_array_destroy(ht);
  45097. goto assign_dim_error;
  45098. }
  45099. }
  45100. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  45101. ZVAL_DEREF(value);
  45102. }
  45103. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  45104. if (UNEXPECTED(value == NULL)) {
  45105. zend_cannot_add_element();
  45106. goto assign_dim_error;
  45107. } else if (IS_CV == IS_CV) {
  45108. if (Z_REFCOUNTED_P(value)) {
  45109. Z_ADDREF_P(value);
  45110. }
  45111. } else if (IS_CV == IS_VAR) {
  45112. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  45113. if (Z_ISREF_P(free_op_data)) {
  45114. if (Z_REFCOUNTED_P(value)) {
  45115. Z_ADDREF_P(value);
  45116. }
  45117. zval_ptr_dtor_nogc(free_op_data);
  45118. }
  45119. } else if (IS_CV == IS_CONST) {
  45120. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  45121. Z_ADDREF_P(value);
  45122. }
  45123. }
  45124. } else {
  45125. dim = EX_VAR(opline->op2.var);
  45126. if (IS_CV == IS_CONST) {
  45127. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  45128. } else {
  45129. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  45130. }
  45131. if (UNEXPECTED(variable_ptr == NULL)) {
  45132. goto assign_dim_error;
  45133. }
  45134. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  45135. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  45136. }
  45137. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  45138. ZVAL_COPY(EX_VAR(opline->result.var), value);
  45139. }
  45140. } else {
  45141. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  45142. object_ptr = Z_REFVAL_P(object_ptr);
  45143. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  45144. goto try_assign_dim_array;
  45145. }
  45146. }
  45147. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  45148. zend_object *obj = Z_OBJ_P(object_ptr);
  45149. GC_ADDREF(obj);
  45150. dim = EX_VAR(opline->op2.var);
  45151. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  45152. dim = ZVAL_UNDEFINED_OP2();
  45153. } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  45154. dim++;
  45155. }
  45156. value = EX_VAR((opline+1)->op1.var);
  45157. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  45158. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  45159. } else if (IS_CV & (IS_CV|IS_VAR)) {
  45160. ZVAL_DEREF(value);
  45161. }
  45162. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  45163. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  45164. zend_objects_store_del(obj);
  45165. }
  45166. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  45167. if (IS_CV == IS_UNUSED) {
  45168. zend_use_new_element_for_string();
  45169. UNDEF_RESULT();
  45170. } else {
  45171. dim = EX_VAR(opline->op2.var);
  45172. value = EX_VAR((opline+1)->op1.var);
  45173. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  45174. }
  45175. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  45176. if (Z_ISREF_P(orig_object_ptr)
  45177. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  45178. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  45179. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45180. UNDEF_RESULT();
  45181. } else {
  45182. HashTable *ht = zend_new_array(8);
  45183. zend_uchar old_type = Z_TYPE_P(object_ptr);
  45184. ZVAL_ARR(object_ptr, ht);
  45185. if (UNEXPECTED(old_type == IS_FALSE)) {
  45186. GC_ADDREF(ht);
  45187. zend_false_to_array_deprecated();
  45188. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  45189. zend_array_destroy(ht);
  45190. goto assign_dim_error;
  45191. }
  45192. }
  45193. goto try_assign_dim_array;
  45194. }
  45195. } else {
  45196. zend_use_scalar_as_array();
  45197. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45198. assign_dim_error:
  45199. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  45200. ZVAL_NULL(EX_VAR(opline->result.var));
  45201. }
  45202. }
  45203. }
  45204. if (IS_CV != IS_UNUSED) {
  45205. }
  45206. /* assign_dim has two opcodes! */
  45207. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  45208. }
  45209. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45210. {
  45211. USE_OPLINE
  45212. zval *value;
  45213. zval *variable_ptr;
  45214. SAVE_OPLINE();
  45215. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45216. variable_ptr = EX_VAR(opline->op1.var);
  45217. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  45218. if (UNEXPECTED(0)) {
  45219. ZVAL_COPY(EX_VAR(opline->result.var), value);
  45220. }
  45221. /* zend_assign_to_variable() always takes care of op2, never free it! */
  45222. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  45223. }
  45224. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45225. {
  45226. USE_OPLINE
  45227. zval *value;
  45228. zval *variable_ptr;
  45229. SAVE_OPLINE();
  45230. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45231. variable_ptr = EX_VAR(opline->op1.var);
  45232. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  45233. if (UNEXPECTED(1)) {
  45234. ZVAL_COPY(EX_VAR(opline->result.var), value);
  45235. }
  45236. /* zend_assign_to_variable() always takes care of op2, never free it! */
  45237. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  45238. }
  45239. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45240. {
  45241. USE_OPLINE
  45242. zval *variable_ptr;
  45243. zval *value_ptr;
  45244. SAVE_OPLINE();
  45245. value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
  45246. variable_ptr = EX_VAR(opline->op1.var);
  45247. if (IS_CV == IS_VAR &&
  45248. UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
  45249. zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
  45250. variable_ptr = &EG(uninitialized_zval);
  45251. } else if (IS_CV == IS_VAR &&
  45252. opline->extended_value == ZEND_RETURNS_FUNCTION &&
  45253. UNEXPECTED(!Z_ISREF_P(value_ptr))) {
  45254. variable_ptr = zend_wrong_assign_to_variable_reference(
  45255. variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45256. } else {
  45257. zend_assign_to_variable_reference(variable_ptr, value_ptr);
  45258. }
  45259. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  45260. ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
  45261. }
  45262. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  45263. }
  45264. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45265. {
  45266. USE_OPLINE
  45267. zval *property, *container, *value_ptr;
  45268. SAVE_OPLINE();
  45269. container = EX_VAR(opline->op1.var);
  45270. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45271. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  45272. if (1) {
  45273. if (IS_CV == IS_UNUSED) {
  45274. if (IS_CV == IS_CONST) {
  45275. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45276. } else {
  45277. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45278. }
  45279. } else {
  45280. if (IS_CV == IS_CONST) {
  45281. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45282. } else {
  45283. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45284. }
  45285. }
  45286. } else {
  45287. zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45288. }
  45289. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  45290. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  45291. }
  45292. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  45293. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45294. {
  45295. USE_OPLINE
  45296. zval *property, *container, *value_ptr;
  45297. SAVE_OPLINE();
  45298. container = EX_VAR(opline->op1.var);
  45299. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45300. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  45301. if (1) {
  45302. if (IS_CV == IS_UNUSED) {
  45303. if (IS_CV == IS_CONST) {
  45304. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45305. } else {
  45306. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45307. }
  45308. } else {
  45309. if (IS_CV == IS_CONST) {
  45310. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45311. } else {
  45312. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45313. }
  45314. }
  45315. } else {
  45316. zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45317. }
  45318. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  45319. }
  45320. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  45321. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45322. {
  45323. USE_OPLINE
  45324. zval *op1, *op2;
  45325. zend_string *op1_str, *op2_str, *str;
  45326. op1 = EX_VAR(opline->op1.var);
  45327. op2 = EX_VAR(opline->op2.var);
  45328. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  45329. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  45330. zend_string *op1_str = Z_STR_P(op1);
  45331. zend_string *op2_str = Z_STR_P(op2);
  45332. zend_string *str;
  45333. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  45334. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  45335. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  45336. } else {
  45337. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  45338. }
  45339. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  45340. zend_string_release_ex(op1_str, 0);
  45341. }
  45342. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  45343. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  45344. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  45345. } else {
  45346. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  45347. }
  45348. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  45349. zend_string_release_ex(op2_str, 0);
  45350. }
  45351. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  45352. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  45353. size_t len = ZSTR_LEN(op1_str);
  45354. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  45355. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  45356. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  45357. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  45358. zend_string_release_ex(op2_str, 0);
  45359. }
  45360. } else {
  45361. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  45362. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  45363. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  45364. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  45365. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  45366. zend_string_release_ex(op1_str, 0);
  45367. }
  45368. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  45369. zend_string_release_ex(op2_str, 0);
  45370. }
  45371. }
  45372. ZEND_VM_NEXT_OPCODE();
  45373. }
  45374. SAVE_OPLINE();
  45375. if (IS_CV == IS_CONST) {
  45376. op1_str = Z_STR_P(op1);
  45377. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  45378. op1_str = zend_string_copy(Z_STR_P(op1));
  45379. } else {
  45380. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  45381. ZVAL_UNDEFINED_OP1();
  45382. }
  45383. op1_str = zval_get_string_func(op1);
  45384. }
  45385. if (IS_CV == IS_CONST) {
  45386. op2_str = Z_STR_P(op2);
  45387. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  45388. op2_str = zend_string_copy(Z_STR_P(op2));
  45389. } else {
  45390. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  45391. ZVAL_UNDEFINED_OP2();
  45392. }
  45393. op2_str = zval_get_string_func(op2);
  45394. }
  45395. do {
  45396. if (IS_CV != IS_CONST) {
  45397. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  45398. if (IS_CV == IS_CONST) {
  45399. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  45400. GC_ADDREF(op2_str);
  45401. }
  45402. }
  45403. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  45404. zend_string_release_ex(op1_str, 0);
  45405. break;
  45406. }
  45407. }
  45408. if (IS_CV != IS_CONST) {
  45409. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  45410. if (IS_CV == IS_CONST) {
  45411. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  45412. GC_ADDREF(op1_str);
  45413. }
  45414. }
  45415. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  45416. zend_string_release_ex(op2_str, 0);
  45417. break;
  45418. }
  45419. }
  45420. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  45421. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  45422. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  45423. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  45424. if (IS_CV != IS_CONST) {
  45425. zend_string_release_ex(op1_str, 0);
  45426. }
  45427. if (IS_CV != IS_CONST) {
  45428. zend_string_release_ex(op2_str, 0);
  45429. }
  45430. } while (0);
  45431. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  45432. }
  45433. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45434. {
  45435. USE_OPLINE
  45436. zval *function_name;
  45437. zval *object;
  45438. zend_function *fbc;
  45439. zend_class_entry *called_scope;
  45440. zend_object *obj;
  45441. zend_execute_data *call;
  45442. uint32_t call_info;
  45443. SAVE_OPLINE();
  45444. object = EX_VAR(opline->op1.var);
  45445. if (IS_CV != IS_CONST) {
  45446. function_name = EX_VAR(opline->op2.var);
  45447. }
  45448. if (IS_CV != IS_CONST &&
  45449. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  45450. do {
  45451. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  45452. function_name = Z_REFVAL_P(function_name);
  45453. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  45454. break;
  45455. }
  45456. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  45457. ZVAL_UNDEFINED_OP2();
  45458. if (UNEXPECTED(EG(exception) != NULL)) {
  45459. HANDLE_EXCEPTION();
  45460. }
  45461. }
  45462. zend_throw_error(NULL, "Method name must be a string");
  45463. HANDLE_EXCEPTION();
  45464. } while (0);
  45465. }
  45466. if (IS_CV == IS_UNUSED) {
  45467. obj = Z_OBJ_P(object);
  45468. } else {
  45469. do {
  45470. if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  45471. obj = Z_OBJ_P(object);
  45472. } else {
  45473. if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  45474. zend_reference *ref = Z_REF_P(object);
  45475. object = &ref->val;
  45476. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  45477. obj = Z_OBJ_P(object);
  45478. if (IS_CV & IS_VAR) {
  45479. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  45480. efree_size(ref, sizeof(zend_reference));
  45481. } else {
  45482. Z_ADDREF_P(object);
  45483. }
  45484. }
  45485. break;
  45486. }
  45487. }
  45488. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  45489. object = ZVAL_UNDEFINED_OP1();
  45490. if (UNEXPECTED(EG(exception) != NULL)) {
  45491. if (IS_CV != IS_CONST) {
  45492. }
  45493. HANDLE_EXCEPTION();
  45494. }
  45495. }
  45496. if (IS_CV == IS_CONST) {
  45497. function_name = EX_VAR(opline->op2.var);
  45498. }
  45499. zend_invalid_method_call(object, function_name);
  45500. HANDLE_EXCEPTION();
  45501. }
  45502. } while (0);
  45503. }
  45504. called_scope = obj->ce;
  45505. if (IS_CV == IS_CONST &&
  45506. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  45507. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  45508. } else {
  45509. zend_object *orig_obj = obj;
  45510. if (IS_CV == IS_CONST) {
  45511. function_name = EX_VAR(opline->op2.var);
  45512. }
  45513. /* First, locate the function. */
  45514. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  45515. if (UNEXPECTED(fbc == NULL)) {
  45516. if (EXPECTED(!EG(exception))) {
  45517. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  45518. }
  45519. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  45520. zend_objects_store_del(orig_obj);
  45521. }
  45522. HANDLE_EXCEPTION();
  45523. }
  45524. if (IS_CV == IS_CONST &&
  45525. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  45526. EXPECTED(obj == orig_obj)) {
  45527. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  45528. }
  45529. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  45530. GC_ADDREF(obj); /* For $this pointer */
  45531. if (GC_DELREF(orig_obj) == 0) {
  45532. zend_objects_store_del(orig_obj);
  45533. }
  45534. }
  45535. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  45536. init_func_run_time_cache(&fbc->op_array);
  45537. }
  45538. }
  45539. if (IS_CV != IS_CONST) {
  45540. }
  45541. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  45542. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  45543. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  45544. zend_objects_store_del(obj);
  45545. if (UNEXPECTED(EG(exception))) {
  45546. HANDLE_EXCEPTION();
  45547. }
  45548. }
  45549. /* call static method */
  45550. obj = (zend_object*)called_scope;
  45551. call_info = ZEND_CALL_NESTED_FUNCTION;
  45552. } else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  45553. if (IS_CV == IS_CV) {
  45554. GC_ADDREF(obj); /* For $this pointer */
  45555. }
  45556. /* CV may be changed indirectly (e.g. when it's a reference) */
  45557. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  45558. }
  45559. call = zend_vm_stack_push_call_frame(call_info,
  45560. fbc, opline->extended_value, obj);
  45561. call->prev_execute_data = EX(call);
  45562. EX(call) = call;
  45563. ZEND_VM_NEXT_OPCODE();
  45564. }
  45565. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45566. {
  45567. USE_OPLINE
  45568. zval *expr_ptr, new_expr;
  45569. SAVE_OPLINE();
  45570. if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
  45571. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  45572. expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  45573. if (Z_ISREF_P(expr_ptr)) {
  45574. Z_ADDREF_P(expr_ptr);
  45575. } else {
  45576. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  45577. }
  45578. } else {
  45579. expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  45580. if (IS_CV == IS_TMP_VAR) {
  45581. /* pass */
  45582. } else if (IS_CV == IS_CONST) {
  45583. Z_TRY_ADDREF_P(expr_ptr);
  45584. } else if (IS_CV == IS_CV) {
  45585. ZVAL_DEREF(expr_ptr);
  45586. Z_TRY_ADDREF_P(expr_ptr);
  45587. } else /* if (IS_CV == IS_VAR) */ {
  45588. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  45589. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  45590. expr_ptr = Z_REFVAL_P(expr_ptr);
  45591. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  45592. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  45593. expr_ptr = &new_expr;
  45594. efree_size(ref, sizeof(zend_reference));
  45595. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  45596. Z_ADDREF_P(expr_ptr);
  45597. }
  45598. }
  45599. }
  45600. }
  45601. if (IS_CV != IS_UNUSED) {
  45602. zval *offset = EX_VAR(opline->op2.var);
  45603. zend_string *str;
  45604. zend_ulong hval;
  45605. add_again:
  45606. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  45607. str = Z_STR_P(offset);
  45608. if (IS_CV != IS_CONST) {
  45609. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  45610. goto num_index;
  45611. }
  45612. }
  45613. str_index:
  45614. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  45615. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  45616. hval = Z_LVAL_P(offset);
  45617. num_index:
  45618. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  45619. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  45620. offset = Z_REFVAL_P(offset);
  45621. goto add_again;
  45622. } else if (Z_TYPE_P(offset) == IS_NULL) {
  45623. str = ZSTR_EMPTY_ALLOC();
  45624. goto str_index;
  45625. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  45626. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  45627. goto num_index;
  45628. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  45629. hval = 0;
  45630. goto num_index;
  45631. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  45632. hval = 1;
  45633. goto num_index;
  45634. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  45635. zend_use_resource_as_offset(offset);
  45636. hval = Z_RES_HANDLE_P(offset);
  45637. goto num_index;
  45638. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  45639. ZVAL_UNDEFINED_OP2();
  45640. str = ZSTR_EMPTY_ALLOC();
  45641. goto str_index;
  45642. } else {
  45643. zend_illegal_offset();
  45644. zval_ptr_dtor_nogc(expr_ptr);
  45645. }
  45646. } else {
  45647. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  45648. zend_cannot_add_element();
  45649. zval_ptr_dtor_nogc(expr_ptr);
  45650. }
  45651. }
  45652. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  45653. }
  45654. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45655. {
  45656. zval *array;
  45657. uint32_t size;
  45658. USE_OPLINE
  45659. array = EX_VAR(opline->result.var);
  45660. if (IS_CV != IS_UNUSED) {
  45661. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  45662. ZVAL_ARR(array, zend_new_array(size));
  45663. /* Explicitly initialize array as not-packed if flag is set */
  45664. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  45665. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  45666. }
  45667. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  45668. } else {
  45669. ZVAL_ARR(array, zend_new_array(0));
  45670. ZEND_VM_NEXT_OPCODE();
  45671. }
  45672. }
  45673. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45674. {
  45675. USE_OPLINE
  45676. zval *container;
  45677. zval *offset;
  45678. zend_ulong hval;
  45679. zend_string *key;
  45680. SAVE_OPLINE();
  45681. container = EX_VAR(opline->op1.var);
  45682. offset = EX_VAR(opline->op2.var);
  45683. do {
  45684. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  45685. HashTable *ht;
  45686. unset_dim_array:
  45687. SEPARATE_ARRAY(container);
  45688. ht = Z_ARRVAL_P(container);
  45689. offset_again:
  45690. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  45691. key = Z_STR_P(offset);
  45692. if (IS_CV != IS_CONST) {
  45693. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  45694. goto num_index_dim;
  45695. }
  45696. }
  45697. str_index_dim:
  45698. ZEND_ASSERT(ht != &EG(symbol_table));
  45699. zend_hash_del(ht, key);
  45700. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  45701. hval = Z_LVAL_P(offset);
  45702. num_index_dim:
  45703. zend_hash_index_del(ht, hval);
  45704. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  45705. offset = Z_REFVAL_P(offset);
  45706. goto offset_again;
  45707. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  45708. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  45709. goto num_index_dim;
  45710. } else if (Z_TYPE_P(offset) == IS_NULL) {
  45711. key = ZSTR_EMPTY_ALLOC();
  45712. goto str_index_dim;
  45713. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  45714. hval = 0;
  45715. goto num_index_dim;
  45716. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  45717. hval = 1;
  45718. goto num_index_dim;
  45719. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  45720. zend_use_resource_as_offset(offset);
  45721. hval = Z_RES_HANDLE_P(offset);
  45722. goto num_index_dim;
  45723. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  45724. ZVAL_UNDEFINED_OP2();
  45725. key = ZSTR_EMPTY_ALLOC();
  45726. goto str_index_dim;
  45727. } else {
  45728. zend_type_error("Illegal offset type in unset");
  45729. }
  45730. break;
  45731. } else if (Z_ISREF_P(container)) {
  45732. container = Z_REFVAL_P(container);
  45733. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  45734. goto unset_dim_array;
  45735. }
  45736. }
  45737. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  45738. container = ZVAL_UNDEFINED_OP1();
  45739. }
  45740. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  45741. offset = ZVAL_UNDEFINED_OP2();
  45742. }
  45743. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  45744. if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  45745. offset++;
  45746. }
  45747. Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
  45748. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  45749. zend_throw_error(NULL, "Cannot unset string offsets");
  45750. } else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
  45751. zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
  45752. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
  45753. zend_false_to_array_deprecated();
  45754. }
  45755. } while (0);
  45756. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  45757. }
  45758. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45759. {
  45760. USE_OPLINE
  45761. zval *container;
  45762. zval *offset;
  45763. zend_string *name, *tmp_name;
  45764. SAVE_OPLINE();
  45765. container = EX_VAR(opline->op1.var);
  45766. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45767. do {
  45768. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  45769. if (Z_ISREF_P(container)) {
  45770. container = Z_REFVAL_P(container);
  45771. if (Z_TYPE_P(container) != IS_OBJECT) {
  45772. if (IS_CV == IS_CV
  45773. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  45774. ZVAL_UNDEFINED_OP1();
  45775. }
  45776. break;
  45777. }
  45778. } else {
  45779. break;
  45780. }
  45781. }
  45782. if (IS_CV == IS_CONST) {
  45783. name = Z_STR_P(offset);
  45784. } else {
  45785. name = zval_try_get_tmp_string(offset, &tmp_name);
  45786. if (UNEXPECTED(!name)) {
  45787. break;
  45788. }
  45789. }
  45790. Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  45791. if (IS_CV != IS_CONST) {
  45792. zend_tmp_string_release(tmp_name);
  45793. }
  45794. } while (0);
  45795. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  45796. }
  45797. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45798. {
  45799. USE_OPLINE
  45800. zval *container;
  45801. bool result;
  45802. zend_ulong hval;
  45803. zval *offset;
  45804. SAVE_OPLINE();
  45805. container = EX_VAR(opline->op1.var);
  45806. offset = EX_VAR(opline->op2.var);
  45807. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  45808. HashTable *ht;
  45809. zval *value;
  45810. zend_string *str;
  45811. isset_dim_obj_array:
  45812. ht = Z_ARRVAL_P(container);
  45813. isset_again:
  45814. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  45815. str = Z_STR_P(offset);
  45816. if (IS_CV != IS_CONST) {
  45817. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  45818. goto num_index_prop;
  45819. }
  45820. }
  45821. value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
  45822. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  45823. hval = Z_LVAL_P(offset);
  45824. num_index_prop:
  45825. value = zend_hash_index_find(ht, hval);
  45826. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  45827. offset = Z_REFVAL_P(offset);
  45828. goto isset_again;
  45829. } else {
  45830. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  45831. if (UNEXPECTED(EG(exception))) {
  45832. result = 0;
  45833. goto isset_dim_obj_exit;
  45834. }
  45835. }
  45836. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  45837. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  45838. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  45839. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  45840. if (IS_CV & (IS_CONST|IS_CV)) {
  45841. /* avoid exception check */
  45842. ZEND_VM_SMART_BRANCH(result, 0);
  45843. }
  45844. } else {
  45845. result = (value == NULL || !i_zend_is_true(value));
  45846. }
  45847. goto isset_dim_obj_exit;
  45848. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  45849. container = Z_REFVAL_P(container);
  45850. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  45851. goto isset_dim_obj_array;
  45852. }
  45853. }
  45854. if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  45855. offset++;
  45856. }
  45857. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  45858. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  45859. } else {
  45860. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  45861. }
  45862. isset_dim_obj_exit:
  45863. ZEND_VM_SMART_BRANCH(result, 1);
  45864. }
  45865. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45866. {
  45867. USE_OPLINE
  45868. zval *container;
  45869. int result;
  45870. zval *offset;
  45871. zend_string *name, *tmp_name;
  45872. SAVE_OPLINE();
  45873. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  45874. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45875. if (IS_CV == IS_CONST ||
  45876. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  45877. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  45878. container = Z_REFVAL_P(container);
  45879. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  45880. result = (opline->extended_value & ZEND_ISEMPTY);
  45881. goto isset_object_finish;
  45882. }
  45883. } else {
  45884. result = (opline->extended_value & ZEND_ISEMPTY);
  45885. goto isset_object_finish;
  45886. }
  45887. }
  45888. if (IS_CV == IS_CONST) {
  45889. name = Z_STR_P(offset);
  45890. } else {
  45891. name = zval_try_get_tmp_string(offset, &tmp_name);
  45892. if (UNEXPECTED(!name)) {
  45893. result = 0;
  45894. goto isset_object_finish;
  45895. }
  45896. }
  45897. result =
  45898. (opline->extended_value & ZEND_ISEMPTY) ^
  45899. Z_OBJ_HT_P(container)->has_property(Z_OBJ_P(container), name, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  45900. if (IS_CV != IS_CONST) {
  45901. zend_tmp_string_release(tmp_name);
  45902. }
  45903. isset_object_finish:
  45904. ZEND_VM_SMART_BRANCH(result, 1);
  45905. }
  45906. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45907. {
  45908. USE_OPLINE
  45909. zval *key, *subject;
  45910. HashTable *ht;
  45911. bool result;
  45912. SAVE_OPLINE();
  45913. key = EX_VAR(opline->op1.var);
  45914. subject = EX_VAR(opline->op2.var);
  45915. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  45916. array_key_exists_array:
  45917. ht = Z_ARRVAL_P(subject);
  45918. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  45919. } else {
  45920. if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  45921. subject = Z_REFVAL_P(subject);
  45922. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  45923. goto array_key_exists_array;
  45924. }
  45925. }
  45926. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  45927. result = 0;
  45928. }
  45929. ZEND_VM_SMART_BRANCH(result, 1);
  45930. }
  45931. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  45932. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45933. {
  45934. USE_OPLINE
  45935. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  45936. SAVE_OPLINE();
  45937. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  45938. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  45939. }
  45940. /* Destroy the previously yielded value */
  45941. zval_ptr_dtor(&generator->value);
  45942. /* Destroy the previously yielded key */
  45943. zval_ptr_dtor(&generator->key);
  45944. /* Set the new yielded value */
  45945. if (IS_CV != IS_UNUSED) {
  45946. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  45947. /* Constants and temporary variables aren't yieldable by reference,
  45948. * but we still allow them with a notice. */
  45949. if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
  45950. zval *value;
  45951. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  45952. value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  45953. ZVAL_COPY_VALUE(&generator->value, value);
  45954. if (IS_CV == IS_CONST) {
  45955. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  45956. Z_ADDREF(generator->value);
  45957. }
  45958. }
  45959. } else {
  45960. zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  45961. /* If a function call result is yielded and the function did
  45962. * not return by reference we throw a notice. */
  45963. do {
  45964. if (IS_CV == IS_VAR) {
  45965. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  45966. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  45967. && !Z_ISREF_P(value_ptr)) {
  45968. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  45969. ZVAL_COPY(&generator->value, value_ptr);
  45970. break;
  45971. }
  45972. }
  45973. if (Z_ISREF_P(value_ptr)) {
  45974. Z_ADDREF_P(value_ptr);
  45975. } else {
  45976. ZVAL_MAKE_REF_EX(value_ptr, 2);
  45977. }
  45978. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  45979. } while (0);
  45980. }
  45981. } else {
  45982. zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  45983. /* Consts, temporary variables and references need copying */
  45984. if (IS_CV == IS_CONST) {
  45985. ZVAL_COPY_VALUE(&generator->value, value);
  45986. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  45987. Z_ADDREF(generator->value);
  45988. }
  45989. } else if (IS_CV == IS_TMP_VAR) {
  45990. ZVAL_COPY_VALUE(&generator->value, value);
  45991. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  45992. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  45993. } else {
  45994. ZVAL_COPY_VALUE(&generator->value, value);
  45995. if (IS_CV == IS_CV) {
  45996. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  45997. }
  45998. }
  45999. }
  46000. } else {
  46001. /* If no value was specified yield null */
  46002. ZVAL_NULL(&generator->value);
  46003. }
  46004. /* Set the new yielded key */
  46005. if (IS_CV != IS_UNUSED) {
  46006. zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  46007. if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  46008. key = Z_REFVAL_P(key);
  46009. }
  46010. ZVAL_COPY(&generator->key, key);
  46011. if (Z_TYPE(generator->key) == IS_LONG
  46012. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  46013. ) {
  46014. generator->largest_used_integer_key = Z_LVAL(generator->key);
  46015. }
  46016. } else {
  46017. /* If no key was specified we use auto-increment keys */
  46018. generator->largest_used_integer_key++;
  46019. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  46020. }
  46021. if (RETURN_VALUE_USED(opline)) {
  46022. /* If the return value of yield is used set the send
  46023. * target and initialize it to NULL */
  46024. generator->send_target = EX_VAR(opline->result.var);
  46025. ZVAL_NULL(generator->send_target);
  46026. } else {
  46027. generator->send_target = NULL;
  46028. }
  46029. /* We increment to the next op, so we are at the correct position when the
  46030. * generator is resumed. */
  46031. ZEND_VM_INC_OPCODE();
  46032. /* The GOTO VM uses a local opline variable. We need to set the opline
  46033. * variable in execute_data so we don't resume at an old position. */
  46034. SAVE_OPLINE();
  46035. ZEND_VM_RETURN();
  46036. }
  46037. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  46038. {
  46039. /* This is declared below the specializations for MAY_BE_LONG/MAY_BE_DOUBLE so those will be used instead if possible. */
  46040. /* This optimizes $x === SOME_CONST_EXPR and $x === $y for non-refs and non-undef, which can't throw. */
  46041. /* (Infinite recursion when comparing arrays is an uncatchable fatal error) */
  46042. USE_OPLINE
  46043. zval *op1, *op2;
  46044. bool result;
  46045. op1 = EX_VAR(opline->op1.var);
  46046. op2 = EX_VAR(opline->op2.var);
  46047. result = fast_is_identical_function(op1, op2);
  46048. /* Free is a no-op for const/cv */
  46049. ZEND_VM_SMART_BRANCH(result, 0);
  46050. }
  46051. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  46052. {
  46053. USE_OPLINE
  46054. zval *op1, *op2;
  46055. bool result;
  46056. op1 = EX_VAR(opline->op1.var);
  46057. op2 = EX_VAR(opline->op2.var);
  46058. result = fast_is_identical_function(op1, op2);
  46059. /* Free is a no-op for const/cv */
  46060. ZEND_VM_SMART_BRANCH(!result, 0);
  46061. }
  46062. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  46063. {
  46064. USE_OPLINE
  46065. SAVE_OPLINE();
  46066. zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);
  46067. ZEND_VM_NEXT_OPCODE(); /* Never reached */
  46068. }
  46069. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  46070. # undef ZEND_VM_TAIL_CALL
  46071. # undef ZEND_VM_CONTINUE
  46072. # undef ZEND_VM_RETURN
  46073. # define ZEND_VM_TAIL_CALL(call) call; ZEND_VM_CONTINUE()
  46074. # define ZEND_VM_CONTINUE() HYBRID_NEXT()
  46075. # define ZEND_VM_RETURN() goto HYBRID_HALT_LABEL
  46076. #endif
  46077. #if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__)
  46078. # pragma GCC push_options
  46079. # pragma GCC optimize("no-gcse")
  46080. # pragma GCC optimize("no-ivopts")
  46081. #endif
  46082. ZEND_API void execute_ex(zend_execute_data *ex)
  46083. {
  46084. DCL_OPLINE
  46085. #if defined(ZEND_VM_IP_GLOBAL_REG) || defined(ZEND_VM_FP_GLOBAL_REG)
  46086. struct {
  46087. #ifdef ZEND_VM_IP_GLOBAL_REG
  46088. const zend_op *orig_opline;
  46089. #endif
  46090. #ifdef ZEND_VM_FP_GLOBAL_REG
  46091. zend_execute_data *orig_execute_data;
  46092. #ifdef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE
  46093. char hybrid_jit_red_zone[ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE];
  46094. #endif
  46095. #endif
  46096. } vm_stack_data;
  46097. #endif
  46098. #ifdef ZEND_VM_IP_GLOBAL_REG
  46099. vm_stack_data.orig_opline = opline;
  46100. #endif
  46101. #ifdef ZEND_VM_FP_GLOBAL_REG
  46102. vm_stack_data.orig_execute_data = execute_data;
  46103. execute_data = ex;
  46104. #else
  46105. zend_execute_data *execute_data = ex;
  46106. #endif
  46107. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  46108. if (UNEXPECTED(execute_data == NULL)) {
  46109. static const void * const labels[] = {
  46110. (void*)&&ZEND_NOP_SPEC_LABEL,
  46111. (void*)&&ZEND_ADD_SPEC_CONST_CONST_LABEL,
  46112. (void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
  46113. (void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
  46114. (void*)&&ZEND_NULL_LABEL,
  46115. (void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
  46116. (void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
  46117. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46118. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46119. (void*)&&ZEND_NULL_LABEL,
  46120. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46121. (void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
  46122. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46123. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46124. (void*)&&ZEND_NULL_LABEL,
  46125. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46126. (void*)&&ZEND_NULL_LABEL,
  46127. (void*)&&ZEND_NULL_LABEL,
  46128. (void*)&&ZEND_NULL_LABEL,
  46129. (void*)&&ZEND_NULL_LABEL,
  46130. (void*)&&ZEND_NULL_LABEL,
  46131. (void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
  46132. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46133. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46134. (void*)&&ZEND_NULL_LABEL,
  46135. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46136. (void*)&&ZEND_SUB_SPEC_CONST_CONST_LABEL,
  46137. (void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
  46138. (void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
  46139. (void*)&&ZEND_NULL_LABEL,
  46140. (void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
  46141. (void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
  46142. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46143. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46144. (void*)&&ZEND_NULL_LABEL,
  46145. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46146. (void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
  46147. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46148. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46149. (void*)&&ZEND_NULL_LABEL,
  46150. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46151. (void*)&&ZEND_NULL_LABEL,
  46152. (void*)&&ZEND_NULL_LABEL,
  46153. (void*)&&ZEND_NULL_LABEL,
  46154. (void*)&&ZEND_NULL_LABEL,
  46155. (void*)&&ZEND_NULL_LABEL,
  46156. (void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
  46157. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46158. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46159. (void*)&&ZEND_NULL_LABEL,
  46160. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46161. (void*)&&ZEND_MUL_SPEC_CONST_CONST_LABEL,
  46162. (void*)&&ZEND_NULL_LABEL,
  46163. (void*)&&ZEND_NULL_LABEL,
  46164. (void*)&&ZEND_NULL_LABEL,
  46165. (void*)&&ZEND_NULL_LABEL,
  46166. (void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
  46167. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46168. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46169. (void*)&&ZEND_NULL_LABEL,
  46170. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46171. (void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
  46172. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46173. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46174. (void*)&&ZEND_NULL_LABEL,
  46175. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46176. (void*)&&ZEND_NULL_LABEL,
  46177. (void*)&&ZEND_NULL_LABEL,
  46178. (void*)&&ZEND_NULL_LABEL,
  46179. (void*)&&ZEND_NULL_LABEL,
  46180. (void*)&&ZEND_NULL_LABEL,
  46181. (void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
  46182. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46183. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46184. (void*)&&ZEND_NULL_LABEL,
  46185. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46186. (void*)&&ZEND_DIV_SPEC_CONST_CONST_LABEL,
  46187. (void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
  46188. (void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
  46189. (void*)&&ZEND_NULL_LABEL,
  46190. (void*)&&ZEND_DIV_SPEC_CONST_CV_LABEL,
  46191. (void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
  46192. (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
  46193. (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
  46194. (void*)&&ZEND_NULL_LABEL,
  46195. (void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
  46196. (void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
  46197. (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
  46198. (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
  46199. (void*)&&ZEND_NULL_LABEL,
  46200. (void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
  46201. (void*)&&ZEND_NULL_LABEL,
  46202. (void*)&&ZEND_NULL_LABEL,
  46203. (void*)&&ZEND_NULL_LABEL,
  46204. (void*)&&ZEND_NULL_LABEL,
  46205. (void*)&&ZEND_NULL_LABEL,
  46206. (void*)&&ZEND_DIV_SPEC_CV_CONST_LABEL,
  46207. (void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
  46208. (void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
  46209. (void*)&&ZEND_NULL_LABEL,
  46210. (void*)&&ZEND_DIV_SPEC_CV_CV_LABEL,
  46211. (void*)&&ZEND_MOD_SPEC_CONST_CONST_LABEL,
  46212. (void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
  46213. (void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
  46214. (void*)&&ZEND_NULL_LABEL,
  46215. (void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
  46216. (void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
  46217. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46218. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46219. (void*)&&ZEND_NULL_LABEL,
  46220. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46221. (void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
  46222. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46223. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46224. (void*)&&ZEND_NULL_LABEL,
  46225. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46226. (void*)&&ZEND_NULL_LABEL,
  46227. (void*)&&ZEND_NULL_LABEL,
  46228. (void*)&&ZEND_NULL_LABEL,
  46229. (void*)&&ZEND_NULL_LABEL,
  46230. (void*)&&ZEND_NULL_LABEL,
  46231. (void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
  46232. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46233. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46234. (void*)&&ZEND_NULL_LABEL,
  46235. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46236. (void*)&&ZEND_SL_SPEC_CONST_CONST_LABEL,
  46237. (void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
  46238. (void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
  46239. (void*)&&ZEND_NULL_LABEL,
  46240. (void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
  46241. (void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
  46242. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46243. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46244. (void*)&&ZEND_NULL_LABEL,
  46245. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46246. (void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
  46247. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46248. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46249. (void*)&&ZEND_NULL_LABEL,
  46250. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46251. (void*)&&ZEND_NULL_LABEL,
  46252. (void*)&&ZEND_NULL_LABEL,
  46253. (void*)&&ZEND_NULL_LABEL,
  46254. (void*)&&ZEND_NULL_LABEL,
  46255. (void*)&&ZEND_NULL_LABEL,
  46256. (void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
  46257. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46258. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46259. (void*)&&ZEND_NULL_LABEL,
  46260. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46261. (void*)&&ZEND_SR_SPEC_CONST_CONST_LABEL,
  46262. (void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
  46263. (void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
  46264. (void*)&&ZEND_NULL_LABEL,
  46265. (void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
  46266. (void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
  46267. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46268. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46269. (void*)&&ZEND_NULL_LABEL,
  46270. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46271. (void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
  46272. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46273. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46274. (void*)&&ZEND_NULL_LABEL,
  46275. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46276. (void*)&&ZEND_NULL_LABEL,
  46277. (void*)&&ZEND_NULL_LABEL,
  46278. (void*)&&ZEND_NULL_LABEL,
  46279. (void*)&&ZEND_NULL_LABEL,
  46280. (void*)&&ZEND_NULL_LABEL,
  46281. (void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
  46282. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46283. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46284. (void*)&&ZEND_NULL_LABEL,
  46285. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46286. (void*)&&ZEND_NULL_LABEL,
  46287. (void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
  46288. (void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
  46289. (void*)&&ZEND_NULL_LABEL,
  46290. (void*)&&ZEND_CONCAT_SPEC_CONST_CV_LABEL,
  46291. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
  46292. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  46293. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  46294. (void*)&&ZEND_NULL_LABEL,
  46295. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
  46296. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
  46297. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  46298. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  46299. (void*)&&ZEND_NULL_LABEL,
  46300. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
  46301. (void*)&&ZEND_NULL_LABEL,
  46302. (void*)&&ZEND_NULL_LABEL,
  46303. (void*)&&ZEND_NULL_LABEL,
  46304. (void*)&&ZEND_NULL_LABEL,
  46305. (void*)&&ZEND_NULL_LABEL,
  46306. (void*)&&ZEND_CONCAT_SPEC_CV_CONST_LABEL,
  46307. (void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
  46308. (void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
  46309. (void*)&&ZEND_NULL_LABEL,
  46310. (void*)&&ZEND_CONCAT_SPEC_CV_CV_LABEL,
  46311. (void*)&&ZEND_BW_OR_SPEC_CONST_CONST_LABEL,
  46312. (void*)&&ZEND_NULL_LABEL,
  46313. (void*)&&ZEND_NULL_LABEL,
  46314. (void*)&&ZEND_NULL_LABEL,
  46315. (void*)&&ZEND_NULL_LABEL,
  46316. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
  46317. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46318. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46319. (void*)&&ZEND_NULL_LABEL,
  46320. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46321. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
  46322. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46323. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46324. (void*)&&ZEND_NULL_LABEL,
  46325. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46326. (void*)&&ZEND_NULL_LABEL,
  46327. (void*)&&ZEND_NULL_LABEL,
  46328. (void*)&&ZEND_NULL_LABEL,
  46329. (void*)&&ZEND_NULL_LABEL,
  46330. (void*)&&ZEND_NULL_LABEL,
  46331. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
  46332. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46333. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46334. (void*)&&ZEND_NULL_LABEL,
  46335. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46336. (void*)&&ZEND_BW_AND_SPEC_CONST_CONST_LABEL,
  46337. (void*)&&ZEND_NULL_LABEL,
  46338. (void*)&&ZEND_NULL_LABEL,
  46339. (void*)&&ZEND_NULL_LABEL,
  46340. (void*)&&ZEND_NULL_LABEL,
  46341. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
  46342. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46343. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46344. (void*)&&ZEND_NULL_LABEL,
  46345. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46346. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
  46347. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46348. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46349. (void*)&&ZEND_NULL_LABEL,
  46350. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46351. (void*)&&ZEND_NULL_LABEL,
  46352. (void*)&&ZEND_NULL_LABEL,
  46353. (void*)&&ZEND_NULL_LABEL,
  46354. (void*)&&ZEND_NULL_LABEL,
  46355. (void*)&&ZEND_NULL_LABEL,
  46356. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
  46357. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46358. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46359. (void*)&&ZEND_NULL_LABEL,
  46360. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46361. (void*)&&ZEND_BW_XOR_SPEC_CONST_CONST_LABEL,
  46362. (void*)&&ZEND_NULL_LABEL,
  46363. (void*)&&ZEND_NULL_LABEL,
  46364. (void*)&&ZEND_NULL_LABEL,
  46365. (void*)&&ZEND_NULL_LABEL,
  46366. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
  46367. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46368. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46369. (void*)&&ZEND_NULL_LABEL,
  46370. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46371. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
  46372. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46373. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46374. (void*)&&ZEND_NULL_LABEL,
  46375. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46376. (void*)&&ZEND_NULL_LABEL,
  46377. (void*)&&ZEND_NULL_LABEL,
  46378. (void*)&&ZEND_NULL_LABEL,
  46379. (void*)&&ZEND_NULL_LABEL,
  46380. (void*)&&ZEND_NULL_LABEL,
  46381. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
  46382. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46383. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46384. (void*)&&ZEND_NULL_LABEL,
  46385. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46386. (void*)&&ZEND_POW_SPEC_CONST_CONST_LABEL,
  46387. (void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
  46388. (void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
  46389. (void*)&&ZEND_NULL_LABEL,
  46390. (void*)&&ZEND_POW_SPEC_CONST_CV_LABEL,
  46391. (void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
  46392. (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
  46393. (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
  46394. (void*)&&ZEND_NULL_LABEL,
  46395. (void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
  46396. (void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
  46397. (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
  46398. (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
  46399. (void*)&&ZEND_NULL_LABEL,
  46400. (void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
  46401. (void*)&&ZEND_NULL_LABEL,
  46402. (void*)&&ZEND_NULL_LABEL,
  46403. (void*)&&ZEND_NULL_LABEL,
  46404. (void*)&&ZEND_NULL_LABEL,
  46405. (void*)&&ZEND_NULL_LABEL,
  46406. (void*)&&ZEND_POW_SPEC_CV_CONST_LABEL,
  46407. (void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
  46408. (void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
  46409. (void*)&&ZEND_NULL_LABEL,
  46410. (void*)&&ZEND_POW_SPEC_CV_CV_LABEL,
  46411. (void*)&&ZEND_BW_NOT_SPEC_CONST_LABEL,
  46412. (void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
  46413. (void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
  46414. (void*)&&ZEND_NULL_LABEL,
  46415. (void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
  46416. (void*)&&ZEND_BOOL_NOT_SPEC_CONST_LABEL,
  46417. (void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
  46418. (void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
  46419. (void*)&&ZEND_NULL_LABEL,
  46420. (void*)&&ZEND_BOOL_NOT_SPEC_CV_LABEL,
  46421. (void*)&&ZEND_BOOL_XOR_SPEC_CONST_CONST_LABEL,
  46422. (void*)&&ZEND_NULL_LABEL,
  46423. (void*)&&ZEND_NULL_LABEL,
  46424. (void*)&&ZEND_NULL_LABEL,
  46425. (void*)&&ZEND_NULL_LABEL,
  46426. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
  46427. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
  46428. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
  46429. (void*)&&ZEND_NULL_LABEL,
  46430. (void*)&&ZEND_NULL_LABEL,
  46431. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
  46432. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
  46433. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
  46434. (void*)&&ZEND_NULL_LABEL,
  46435. (void*)&&ZEND_NULL_LABEL,
  46436. (void*)&&ZEND_NULL_LABEL,
  46437. (void*)&&ZEND_NULL_LABEL,
  46438. (void*)&&ZEND_NULL_LABEL,
  46439. (void*)&&ZEND_NULL_LABEL,
  46440. (void*)&&ZEND_NULL_LABEL,
  46441. (void*)&&ZEND_BOOL_XOR_SPEC_CV_CONST_LABEL,
  46442. (void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
  46443. (void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
  46444. (void*)&&ZEND_NULL_LABEL,
  46445. (void*)&&ZEND_BOOL_XOR_SPEC_CV_CV_LABEL,
  46446. (void*)&&ZEND_IS_IDENTICAL_SPEC_CONST_CONST_LABEL,
  46447. (void*)&&ZEND_NULL_LABEL,
  46448. (void*)&&ZEND_NULL_LABEL,
  46449. (void*)&&ZEND_NULL_LABEL,
  46450. (void*)&&ZEND_NULL_LABEL,
  46451. (void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_CONST_LABEL,
  46452. (void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_TMP_LABEL,
  46453. (void*)&&ZEND_NULL_LABEL,
  46454. (void*)&&ZEND_NULL_LABEL,
  46455. (void*)&&ZEND_NULL_LABEL,
  46456. (void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_CONST_LABEL,
  46457. (void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_TMP_LABEL,
  46458. (void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_VAR_LABEL,
  46459. (void*)&&ZEND_NULL_LABEL,
  46460. (void*)&&ZEND_NULL_LABEL,
  46461. (void*)&&ZEND_NULL_LABEL,
  46462. (void*)&&ZEND_NULL_LABEL,
  46463. (void*)&&ZEND_NULL_LABEL,
  46464. (void*)&&ZEND_NULL_LABEL,
  46465. (void*)&&ZEND_NULL_LABEL,
  46466. (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CONST_LABEL,
  46467. (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_TMP_LABEL,
  46468. (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_VAR_LABEL,
  46469. (void*)&&ZEND_NULL_LABEL,
  46470. (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CV_LABEL,
  46471. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_LABEL,
  46472. (void*)&&ZEND_NULL_LABEL,
  46473. (void*)&&ZEND_NULL_LABEL,
  46474. (void*)&&ZEND_NULL_LABEL,
  46475. (void*)&&ZEND_NULL_LABEL,
  46476. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_LABEL,
  46477. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_LABEL,
  46478. (void*)&&ZEND_NULL_LABEL,
  46479. (void*)&&ZEND_NULL_LABEL,
  46480. (void*)&&ZEND_NULL_LABEL,
  46481. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_LABEL,
  46482. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_LABEL,
  46483. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_LABEL,
  46484. (void*)&&ZEND_NULL_LABEL,
  46485. (void*)&&ZEND_NULL_LABEL,
  46486. (void*)&&ZEND_NULL_LABEL,
  46487. (void*)&&ZEND_NULL_LABEL,
  46488. (void*)&&ZEND_NULL_LABEL,
  46489. (void*)&&ZEND_NULL_LABEL,
  46490. (void*)&&ZEND_NULL_LABEL,
  46491. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_LABEL,
  46492. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_LABEL,
  46493. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_LABEL,
  46494. (void*)&&ZEND_NULL_LABEL,
  46495. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_LABEL,
  46496. (void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
  46497. (void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
  46498. (void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
  46499. (void*)&&ZEND_NULL_LABEL,
  46500. (void*)&&ZEND_NULL_LABEL,
  46501. (void*)&&ZEND_NULL_LABEL,
  46502. (void*)&&ZEND_NULL_LABEL,
  46503. (void*)&&ZEND_NULL_LABEL,
  46504. (void*)&&ZEND_NULL_LABEL,
  46505. (void*)&&ZEND_NULL_LABEL,
  46506. (void*)&&ZEND_NULL_LABEL,
  46507. (void*)&&ZEND_NULL_LABEL,
  46508. (void*)&&ZEND_NULL_LABEL,
  46509. (void*)&&ZEND_NULL_LABEL,
  46510. (void*)&&ZEND_NULL_LABEL,
  46511. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
  46512. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
  46513. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
  46514. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  46515. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
  46516. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
  46517. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  46518. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
  46519. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
  46520. (void*)&&ZEND_NULL_LABEL,
  46521. (void*)&&ZEND_NULL_LABEL,
  46522. (void*)&&ZEND_NULL_LABEL,
  46523. (void*)&&ZEND_NULL_LABEL,
  46524. (void*)&&ZEND_NULL_LABEL,
  46525. (void*)&&ZEND_NULL_LABEL,
  46526. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
  46527. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
  46528. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
  46529. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  46530. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
  46531. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
  46532. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  46533. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
  46534. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
  46535. (void*)&&ZEND_NULL_LABEL,
  46536. (void*)&&ZEND_NULL_LABEL,
  46537. (void*)&&ZEND_NULL_LABEL,
  46538. (void*)&&ZEND_NULL_LABEL,
  46539. (void*)&&ZEND_NULL_LABEL,
  46540. (void*)&&ZEND_NULL_LABEL,
  46541. (void*)&&ZEND_NULL_LABEL,
  46542. (void*)&&ZEND_NULL_LABEL,
  46543. (void*)&&ZEND_NULL_LABEL,
  46544. (void*)&&ZEND_NULL_LABEL,
  46545. (void*)&&ZEND_NULL_LABEL,
  46546. (void*)&&ZEND_NULL_LABEL,
  46547. (void*)&&ZEND_NULL_LABEL,
  46548. (void*)&&ZEND_NULL_LABEL,
  46549. (void*)&&ZEND_NULL_LABEL,
  46550. (void*)&&ZEND_NULL_LABEL,
  46551. (void*)&&ZEND_NULL_LABEL,
  46552. (void*)&&ZEND_NULL_LABEL,
  46553. (void*)&&ZEND_NULL_LABEL,
  46554. (void*)&&ZEND_NULL_LABEL,
  46555. (void*)&&ZEND_NULL_LABEL,
  46556. (void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_LABEL,
  46557. (void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_LABEL,
  46558. (void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_LABEL,
  46559. (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
  46560. (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
  46561. (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
  46562. (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
  46563. (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
  46564. (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
  46565. (void*)&&ZEND_NULL_LABEL,
  46566. (void*)&&ZEND_NULL_LABEL,
  46567. (void*)&&ZEND_NULL_LABEL,
  46568. (void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_LABEL,
  46569. (void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_LABEL,
  46570. (void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_LABEL,
  46571. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
  46572. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
  46573. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
  46574. (void*)&&ZEND_NULL_LABEL,
  46575. (void*)&&ZEND_NULL_LABEL,
  46576. (void*)&&ZEND_NULL_LABEL,
  46577. (void*)&&ZEND_NULL_LABEL,
  46578. (void*)&&ZEND_NULL_LABEL,
  46579. (void*)&&ZEND_NULL_LABEL,
  46580. (void*)&&ZEND_NULL_LABEL,
  46581. (void*)&&ZEND_NULL_LABEL,
  46582. (void*)&&ZEND_NULL_LABEL,
  46583. (void*)&&ZEND_NULL_LABEL,
  46584. (void*)&&ZEND_NULL_LABEL,
  46585. (void*)&&ZEND_NULL_LABEL,
  46586. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
  46587. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
  46588. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
  46589. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  46590. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
  46591. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
  46592. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  46593. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
  46594. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
  46595. (void*)&&ZEND_NULL_LABEL,
  46596. (void*)&&ZEND_NULL_LABEL,
  46597. (void*)&&ZEND_NULL_LABEL,
  46598. (void*)&&ZEND_NULL_LABEL,
  46599. (void*)&&ZEND_NULL_LABEL,
  46600. (void*)&&ZEND_NULL_LABEL,
  46601. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
  46602. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
  46603. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
  46604. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  46605. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
  46606. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
  46607. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  46608. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
  46609. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
  46610. (void*)&&ZEND_NULL_LABEL,
  46611. (void*)&&ZEND_NULL_LABEL,
  46612. (void*)&&ZEND_NULL_LABEL,
  46613. (void*)&&ZEND_NULL_LABEL,
  46614. (void*)&&ZEND_NULL_LABEL,
  46615. (void*)&&ZEND_NULL_LABEL,
  46616. (void*)&&ZEND_NULL_LABEL,
  46617. (void*)&&ZEND_NULL_LABEL,
  46618. (void*)&&ZEND_NULL_LABEL,
  46619. (void*)&&ZEND_NULL_LABEL,
  46620. (void*)&&ZEND_NULL_LABEL,
  46621. (void*)&&ZEND_NULL_LABEL,
  46622. (void*)&&ZEND_NULL_LABEL,
  46623. (void*)&&ZEND_NULL_LABEL,
  46624. (void*)&&ZEND_NULL_LABEL,
  46625. (void*)&&ZEND_NULL_LABEL,
  46626. (void*)&&ZEND_NULL_LABEL,
  46627. (void*)&&ZEND_NULL_LABEL,
  46628. (void*)&&ZEND_NULL_LABEL,
  46629. (void*)&&ZEND_NULL_LABEL,
  46630. (void*)&&ZEND_NULL_LABEL,
  46631. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_LABEL,
  46632. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_LABEL,
  46633. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_LABEL,
  46634. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
  46635. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
  46636. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
  46637. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
  46638. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
  46639. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
  46640. (void*)&&ZEND_NULL_LABEL,
  46641. (void*)&&ZEND_NULL_LABEL,
  46642. (void*)&&ZEND_NULL_LABEL,
  46643. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_LABEL,
  46644. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_LABEL,
  46645. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_LABEL,
  46646. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
  46647. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
  46648. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
  46649. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
  46650. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  46651. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  46652. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
  46653. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  46654. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  46655. (void*)&&ZEND_NULL_LABEL,
  46656. (void*)&&ZEND_NULL_LABEL,
  46657. (void*)&&ZEND_NULL_LABEL,
  46658. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
  46659. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  46660. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  46661. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
  46662. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  46663. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  46664. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46665. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46666. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46667. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46668. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46669. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46670. (void*)&&ZEND_NULL_LABEL,
  46671. (void*)&&ZEND_NULL_LABEL,
  46672. (void*)&&ZEND_NULL_LABEL,
  46673. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46674. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46675. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46676. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
  46677. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  46678. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  46679. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46680. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46681. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46682. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46683. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46684. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46685. (void*)&&ZEND_NULL_LABEL,
  46686. (void*)&&ZEND_NULL_LABEL,
  46687. (void*)&&ZEND_NULL_LABEL,
  46688. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46689. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46690. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46691. (void*)&&ZEND_NULL_LABEL,
  46692. (void*)&&ZEND_NULL_LABEL,
  46693. (void*)&&ZEND_NULL_LABEL,
  46694. (void*)&&ZEND_NULL_LABEL,
  46695. (void*)&&ZEND_NULL_LABEL,
  46696. (void*)&&ZEND_NULL_LABEL,
  46697. (void*)&&ZEND_NULL_LABEL,
  46698. (void*)&&ZEND_NULL_LABEL,
  46699. (void*)&&ZEND_NULL_LABEL,
  46700. (void*)&&ZEND_NULL_LABEL,
  46701. (void*)&&ZEND_NULL_LABEL,
  46702. (void*)&&ZEND_NULL_LABEL,
  46703. (void*)&&ZEND_NULL_LABEL,
  46704. (void*)&&ZEND_NULL_LABEL,
  46705. (void*)&&ZEND_NULL_LABEL,
  46706. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
  46707. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  46708. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  46709. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46710. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46711. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46712. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46713. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46714. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46715. (void*)&&ZEND_NULL_LABEL,
  46716. (void*)&&ZEND_NULL_LABEL,
  46717. (void*)&&ZEND_NULL_LABEL,
  46718. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46719. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46720. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46721. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
  46722. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
  46723. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
  46724. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
  46725. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  46726. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  46727. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
  46728. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  46729. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  46730. (void*)&&ZEND_NULL_LABEL,
  46731. (void*)&&ZEND_NULL_LABEL,
  46732. (void*)&&ZEND_NULL_LABEL,
  46733. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
  46734. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  46735. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  46736. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
  46737. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  46738. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  46739. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46740. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46741. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46742. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46743. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46744. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46745. (void*)&&ZEND_NULL_LABEL,
  46746. (void*)&&ZEND_NULL_LABEL,
  46747. (void*)&&ZEND_NULL_LABEL,
  46748. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46749. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46750. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46751. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
  46752. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  46753. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  46754. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46755. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46756. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46757. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46758. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46759. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46760. (void*)&&ZEND_NULL_LABEL,
  46761. (void*)&&ZEND_NULL_LABEL,
  46762. (void*)&&ZEND_NULL_LABEL,
  46763. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46764. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46765. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46766. (void*)&&ZEND_NULL_LABEL,
  46767. (void*)&&ZEND_NULL_LABEL,
  46768. (void*)&&ZEND_NULL_LABEL,
  46769. (void*)&&ZEND_NULL_LABEL,
  46770. (void*)&&ZEND_NULL_LABEL,
  46771. (void*)&&ZEND_NULL_LABEL,
  46772. (void*)&&ZEND_NULL_LABEL,
  46773. (void*)&&ZEND_NULL_LABEL,
  46774. (void*)&&ZEND_NULL_LABEL,
  46775. (void*)&&ZEND_NULL_LABEL,
  46776. (void*)&&ZEND_NULL_LABEL,
  46777. (void*)&&ZEND_NULL_LABEL,
  46778. (void*)&&ZEND_NULL_LABEL,
  46779. (void*)&&ZEND_NULL_LABEL,
  46780. (void*)&&ZEND_NULL_LABEL,
  46781. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
  46782. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  46783. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  46784. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46785. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46786. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46787. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46788. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46789. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46790. (void*)&&ZEND_NULL_LABEL,
  46791. (void*)&&ZEND_NULL_LABEL,
  46792. (void*)&&ZEND_NULL_LABEL,
  46793. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46794. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46795. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46796. (void*)&&ZEND_NULL_LABEL,
  46797. (void*)&&ZEND_NULL_LABEL,
  46798. (void*)&&ZEND_NULL_LABEL,
  46799. (void*)&&ZEND_NULL_LABEL,
  46800. (void*)&&ZEND_NULL_LABEL,
  46801. (void*)&&ZEND_NULL_LABEL,
  46802. (void*)&&ZEND_NULL_LABEL,
  46803. (void*)&&ZEND_NULL_LABEL,
  46804. (void*)&&ZEND_NULL_LABEL,
  46805. (void*)&&ZEND_NULL_LABEL,
  46806. (void*)&&ZEND_NULL_LABEL,
  46807. (void*)&&ZEND_NULL_LABEL,
  46808. (void*)&&ZEND_NULL_LABEL,
  46809. (void*)&&ZEND_NULL_LABEL,
  46810. (void*)&&ZEND_NULL_LABEL,
  46811. (void*)&&ZEND_NULL_LABEL,
  46812. (void*)&&ZEND_NULL_LABEL,
  46813. (void*)&&ZEND_NULL_LABEL,
  46814. (void*)&&ZEND_NULL_LABEL,
  46815. (void*)&&ZEND_NULL_LABEL,
  46816. (void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_LABEL,
  46817. (void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_LABEL,
  46818. (void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_LABEL,
  46819. (void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_LABEL,
  46820. (void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_LABEL,
  46821. (void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_LABEL,
  46822. (void*)&&ZEND_NULL_LABEL,
  46823. (void*)&&ZEND_NULL_LABEL,
  46824. (void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
  46825. (void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_LABEL,
  46826. (void*)&&ZEND_NULL_LABEL,
  46827. (void*)&&ZEND_NULL_LABEL,
  46828. (void*)&&ZEND_NULL_LABEL,
  46829. (void*)&&ZEND_NULL_LABEL,
  46830. (void*)&&ZEND_NULL_LABEL,
  46831. (void*)&&ZEND_NULL_LABEL,
  46832. (void*)&&ZEND_NULL_LABEL,
  46833. (void*)&&ZEND_NULL_LABEL,
  46834. (void*)&&ZEND_NULL_LABEL,
  46835. (void*)&&ZEND_NULL_LABEL,
  46836. (void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_LABEL,
  46837. (void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_LABEL,
  46838. (void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_LABEL,
  46839. (void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_LABEL,
  46840. (void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_LABEL,
  46841. (void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_LABEL,
  46842. (void*)&&ZEND_NULL_LABEL,
  46843. (void*)&&ZEND_NULL_LABEL,
  46844. (void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_LABEL,
  46845. (void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_LABEL,
  46846. (void*)&&ZEND_NULL_LABEL,
  46847. (void*)&&ZEND_NULL_LABEL,
  46848. (void*)&&ZEND_NULL_LABEL,
  46849. (void*)&&ZEND_NULL_LABEL,
  46850. (void*)&&ZEND_NULL_LABEL,
  46851. (void*)&&ZEND_NULL_LABEL,
  46852. (void*)&&ZEND_NULL_LABEL,
  46853. (void*)&&ZEND_NULL_LABEL,
  46854. (void*)&&ZEND_NULL_LABEL,
  46855. (void*)&&ZEND_NULL_LABEL,
  46856. (void*)&&ZEND_NULL_LABEL,
  46857. (void*)&&ZEND_NULL_LABEL,
  46858. (void*)&&ZEND_NULL_LABEL,
  46859. (void*)&&ZEND_NULL_LABEL,
  46860. (void*)&&ZEND_NULL_LABEL,
  46861. (void*)&&ZEND_NULL_LABEL,
  46862. (void*)&&ZEND_NULL_LABEL,
  46863. (void*)&&ZEND_NULL_LABEL,
  46864. (void*)&&ZEND_NULL_LABEL,
  46865. (void*)&&ZEND_NULL_LABEL,
  46866. (void*)&&ZEND_NULL_LABEL,
  46867. (void*)&&ZEND_NULL_LABEL,
  46868. (void*)&&ZEND_NULL_LABEL,
  46869. (void*)&&ZEND_NULL_LABEL,
  46870. (void*)&&ZEND_NULL_LABEL,
  46871. (void*)&&ZEND_NULL_LABEL,
  46872. (void*)&&ZEND_NULL_LABEL,
  46873. (void*)&&ZEND_NULL_LABEL,
  46874. (void*)&&ZEND_NULL_LABEL,
  46875. (void*)&&ZEND_NULL_LABEL,
  46876. (void*)&&ZEND_NULL_LABEL,
  46877. (void*)&&ZEND_NULL_LABEL,
  46878. (void*)&&ZEND_NULL_LABEL,
  46879. (void*)&&ZEND_NULL_LABEL,
  46880. (void*)&&ZEND_NULL_LABEL,
  46881. (void*)&&ZEND_NULL_LABEL,
  46882. (void*)&&ZEND_NULL_LABEL,
  46883. (void*)&&ZEND_NULL_LABEL,
  46884. (void*)&&ZEND_NULL_LABEL,
  46885. (void*)&&ZEND_NULL_LABEL,
  46886. (void*)&&ZEND_NULL_LABEL,
  46887. (void*)&&ZEND_NULL_LABEL,
  46888. (void*)&&ZEND_NULL_LABEL,
  46889. (void*)&&ZEND_NULL_LABEL,
  46890. (void*)&&ZEND_NULL_LABEL,
  46891. (void*)&&ZEND_NULL_LABEL,
  46892. (void*)&&ZEND_NULL_LABEL,
  46893. (void*)&&ZEND_NULL_LABEL,
  46894. (void*)&&ZEND_NULL_LABEL,
  46895. (void*)&&ZEND_NULL_LABEL,
  46896. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
  46897. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
  46898. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
  46899. (void*)&&ZEND_NULL_LABEL,
  46900. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
  46901. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
  46902. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
  46903. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
  46904. (void*)&&ZEND_NULL_LABEL,
  46905. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
  46906. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
  46907. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
  46908. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
  46909. (void*)&&ZEND_NULL_LABEL,
  46910. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
  46911. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_LABEL,
  46912. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_LABEL,
  46913. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_LABEL,
  46914. (void*)&&ZEND_NULL_LABEL,
  46915. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_LABEL,
  46916. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
  46917. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
  46918. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
  46919. (void*)&&ZEND_NULL_LABEL,
  46920. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_LABEL,
  46921. (void*)&&ZEND_NULL_LABEL,
  46922. (void*)&&ZEND_NULL_LABEL,
  46923. (void*)&&ZEND_NULL_LABEL,
  46924. (void*)&&ZEND_NULL_LABEL,
  46925. (void*)&&ZEND_NULL_LABEL,
  46926. (void*)&&ZEND_NULL_LABEL,
  46927. (void*)&&ZEND_NULL_LABEL,
  46928. (void*)&&ZEND_NULL_LABEL,
  46929. (void*)&&ZEND_NULL_LABEL,
  46930. (void*)&&ZEND_NULL_LABEL,
  46931. (void*)&&ZEND_NULL_LABEL,
  46932. (void*)&&ZEND_NULL_LABEL,
  46933. (void*)&&ZEND_NULL_LABEL,
  46934. (void*)&&ZEND_NULL_LABEL,
  46935. (void*)&&ZEND_NULL_LABEL,
  46936. (void*)&&ZEND_NULL_LABEL,
  46937. (void*)&&ZEND_NULL_LABEL,
  46938. (void*)&&ZEND_NULL_LABEL,
  46939. (void*)&&ZEND_NULL_LABEL,
  46940. (void*)&&ZEND_NULL_LABEL,
  46941. (void*)&&ZEND_NULL_LABEL,
  46942. (void*)&&ZEND_NULL_LABEL,
  46943. (void*)&&ZEND_NULL_LABEL,
  46944. (void*)&&ZEND_NULL_LABEL,
  46945. (void*)&&ZEND_NULL_LABEL,
  46946. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
  46947. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
  46948. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
  46949. (void*)&&ZEND_NULL_LABEL,
  46950. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_LABEL,
  46951. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
  46952. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
  46953. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
  46954. (void*)&&ZEND_NULL_LABEL,
  46955. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
  46956. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
  46957. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
  46958. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
  46959. (void*)&&ZEND_NULL_LABEL,
  46960. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
  46961. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_LABEL,
  46962. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_LABEL,
  46963. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_LABEL,
  46964. (void*)&&ZEND_NULL_LABEL,
  46965. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_LABEL,
  46966. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_LABEL,
  46967. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_LABEL,
  46968. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_LABEL,
  46969. (void*)&&ZEND_NULL_LABEL,
  46970. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_LABEL,
  46971. (void*)&&ZEND_NULL_LABEL,
  46972. (void*)&&ZEND_NULL_LABEL,
  46973. (void*)&&ZEND_NULL_LABEL,
  46974. (void*)&&ZEND_NULL_LABEL,
  46975. (void*)&&ZEND_NULL_LABEL,
  46976. (void*)&&ZEND_NULL_LABEL,
  46977. (void*)&&ZEND_NULL_LABEL,
  46978. (void*)&&ZEND_NULL_LABEL,
  46979. (void*)&&ZEND_NULL_LABEL,
  46980. (void*)&&ZEND_NULL_LABEL,
  46981. (void*)&&ZEND_NULL_LABEL,
  46982. (void*)&&ZEND_NULL_LABEL,
  46983. (void*)&&ZEND_NULL_LABEL,
  46984. (void*)&&ZEND_NULL_LABEL,
  46985. (void*)&&ZEND_NULL_LABEL,
  46986. (void*)&&ZEND_NULL_LABEL,
  46987. (void*)&&ZEND_NULL_LABEL,
  46988. (void*)&&ZEND_NULL_LABEL,
  46989. (void*)&&ZEND_NULL_LABEL,
  46990. (void*)&&ZEND_NULL_LABEL,
  46991. (void*)&&ZEND_NULL_LABEL,
  46992. (void*)&&ZEND_NULL_LABEL,
  46993. (void*)&&ZEND_NULL_LABEL,
  46994. (void*)&&ZEND_NULL_LABEL,
  46995. (void*)&&ZEND_NULL_LABEL,
  46996. (void*)&&ZEND_NULL_LABEL,
  46997. (void*)&&ZEND_NULL_LABEL,
  46998. (void*)&&ZEND_NULL_LABEL,
  46999. (void*)&&ZEND_NULL_LABEL,
  47000. (void*)&&ZEND_NULL_LABEL,
  47001. (void*)&&ZEND_NULL_LABEL,
  47002. (void*)&&ZEND_NULL_LABEL,
  47003. (void*)&&ZEND_NULL_LABEL,
  47004. (void*)&&ZEND_NULL_LABEL,
  47005. (void*)&&ZEND_NULL_LABEL,
  47006. (void*)&&ZEND_NULL_LABEL,
  47007. (void*)&&ZEND_NULL_LABEL,
  47008. (void*)&&ZEND_NULL_LABEL,
  47009. (void*)&&ZEND_NULL_LABEL,
  47010. (void*)&&ZEND_NULL_LABEL,
  47011. (void*)&&ZEND_NULL_LABEL,
  47012. (void*)&&ZEND_NULL_LABEL,
  47013. (void*)&&ZEND_NULL_LABEL,
  47014. (void*)&&ZEND_NULL_LABEL,
  47015. (void*)&&ZEND_NULL_LABEL,
  47016. (void*)&&ZEND_NULL_LABEL,
  47017. (void*)&&ZEND_NULL_LABEL,
  47018. (void*)&&ZEND_NULL_LABEL,
  47019. (void*)&&ZEND_NULL_LABEL,
  47020. (void*)&&ZEND_NULL_LABEL,
  47021. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
  47022. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
  47023. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
  47024. (void*)&&ZEND_NULL_LABEL,
  47025. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
  47026. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
  47027. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
  47028. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
  47029. (void*)&&ZEND_NULL_LABEL,
  47030. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
  47031. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
  47032. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
  47033. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
  47034. (void*)&&ZEND_NULL_LABEL,
  47035. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
  47036. (void*)&&ZEND_NULL_LABEL,
  47037. (void*)&&ZEND_NULL_LABEL,
  47038. (void*)&&ZEND_NULL_LABEL,
  47039. (void*)&&ZEND_NULL_LABEL,
  47040. (void*)&&ZEND_NULL_LABEL,
  47041. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
  47042. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
  47043. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
  47044. (void*)&&ZEND_NULL_LABEL,
  47045. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_LABEL,
  47046. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_LABEL,
  47047. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_LABEL,
  47048. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
  47049. (void*)&&ZEND_NULL_LABEL,
  47050. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
  47051. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
  47052. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
  47053. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
  47054. (void*)&&ZEND_NULL_LABEL,
  47055. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
  47056. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
  47057. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
  47058. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
  47059. (void*)&&ZEND_NULL_LABEL,
  47060. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
  47061. (void*)&&ZEND_NULL_LABEL,
  47062. (void*)&&ZEND_NULL_LABEL,
  47063. (void*)&&ZEND_NULL_LABEL,
  47064. (void*)&&ZEND_NULL_LABEL,
  47065. (void*)&&ZEND_NULL_LABEL,
  47066. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_LABEL,
  47067. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_LABEL,
  47068. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
  47069. (void*)&&ZEND_NULL_LABEL,
  47070. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
  47071. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
  47072. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
  47073. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
  47074. (void*)&&ZEND_NULL_LABEL,
  47075. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_LABEL,
  47076. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
  47077. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
  47078. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
  47079. (void*)&&ZEND_NULL_LABEL,
  47080. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
  47081. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
  47082. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
  47083. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
  47084. (void*)&&ZEND_NULL_LABEL,
  47085. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
  47086. (void*)&&ZEND_NULL_LABEL,
  47087. (void*)&&ZEND_NULL_LABEL,
  47088. (void*)&&ZEND_NULL_LABEL,
  47089. (void*)&&ZEND_NULL_LABEL,
  47090. (void*)&&ZEND_NULL_LABEL,
  47091. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_LABEL,
  47092. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_LABEL,
  47093. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_LABEL,
  47094. (void*)&&ZEND_NULL_LABEL,
  47095. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_LABEL,
  47096. (void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_LABEL,
  47097. (void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_LABEL,
  47098. (void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_LABEL,
  47099. (void*)&&ZEND_NULL_LABEL,
  47100. (void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_LABEL,
  47101. (void*)&&ZEND_NULL_LABEL,
  47102. (void*)&&ZEND_NULL_LABEL,
  47103. (void*)&&ZEND_NULL_LABEL,
  47104. (void*)&&ZEND_NULL_LABEL,
  47105. (void*)&&ZEND_NULL_LABEL,
  47106. (void*)&&ZEND_NULL_LABEL,
  47107. (void*)&&ZEND_NULL_LABEL,
  47108. (void*)&&ZEND_NULL_LABEL,
  47109. (void*)&&ZEND_NULL_LABEL,
  47110. (void*)&&ZEND_NULL_LABEL,
  47111. (void*)&&ZEND_ASSIGN_OP_SPEC_VAR_CONST_LABEL,
  47112. (void*)&&ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_LABEL,
  47113. (void*)&&ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_LABEL,
  47114. (void*)&&ZEND_NULL_LABEL,
  47115. (void*)&&ZEND_ASSIGN_OP_SPEC_VAR_CV_LABEL,
  47116. (void*)&&ZEND_NULL_LABEL,
  47117. (void*)&&ZEND_NULL_LABEL,
  47118. (void*)&&ZEND_NULL_LABEL,
  47119. (void*)&&ZEND_NULL_LABEL,
  47120. (void*)&&ZEND_NULL_LABEL,
  47121. (void*)&&ZEND_ASSIGN_OP_SPEC_CV_CONST_LABEL,
  47122. (void*)&&ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_LABEL,
  47123. (void*)&&ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_LABEL,
  47124. (void*)&&ZEND_NULL_LABEL,
  47125. (void*)&&ZEND_ASSIGN_OP_SPEC_CV_CV_LABEL,
  47126. (void*)&&ZEND_NULL_LABEL,
  47127. (void*)&&ZEND_NULL_LABEL,
  47128. (void*)&&ZEND_NULL_LABEL,
  47129. (void*)&&ZEND_NULL_LABEL,
  47130. (void*)&&ZEND_NULL_LABEL,
  47131. (void*)&&ZEND_NULL_LABEL,
  47132. (void*)&&ZEND_NULL_LABEL,
  47133. (void*)&&ZEND_NULL_LABEL,
  47134. (void*)&&ZEND_NULL_LABEL,
  47135. (void*)&&ZEND_NULL_LABEL,
  47136. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_LABEL,
  47137. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_LABEL,
  47138. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_LABEL,
  47139. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_LABEL,
  47140. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_LABEL,
  47141. (void*)&&ZEND_NULL_LABEL,
  47142. (void*)&&ZEND_NULL_LABEL,
  47143. (void*)&&ZEND_NULL_LABEL,
  47144. (void*)&&ZEND_NULL_LABEL,
  47145. (void*)&&ZEND_NULL_LABEL,
  47146. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_LABEL,
  47147. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_LABEL,
  47148. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_LABEL,
  47149. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_LABEL,
  47150. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_LABEL,
  47151. (void*)&&ZEND_NULL_LABEL,
  47152. (void*)&&ZEND_NULL_LABEL,
  47153. (void*)&&ZEND_NULL_LABEL,
  47154. (void*)&&ZEND_NULL_LABEL,
  47155. (void*)&&ZEND_NULL_LABEL,
  47156. (void*)&&ZEND_NULL_LABEL,
  47157. (void*)&&ZEND_NULL_LABEL,
  47158. (void*)&&ZEND_NULL_LABEL,
  47159. (void*)&&ZEND_NULL_LABEL,
  47160. (void*)&&ZEND_NULL_LABEL,
  47161. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_LABEL,
  47162. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
  47163. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
  47164. (void*)&&ZEND_NULL_LABEL,
  47165. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_LABEL,
  47166. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_LABEL,
  47167. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
  47168. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
  47169. (void*)&&ZEND_NULL_LABEL,
  47170. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_LABEL,
  47171. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_LABEL,
  47172. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_LABEL,
  47173. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_LABEL,
  47174. (void*)&&ZEND_NULL_LABEL,
  47175. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_LABEL,
  47176. (void*)&&ZEND_ASSIGN_STATIC_PROP_OP_SPEC_LABEL,
  47177. (void*)&&ZEND_NULL_LABEL,
  47178. (void*)&&ZEND_NULL_LABEL,
  47179. (void*)&&ZEND_NULL_LABEL,
  47180. (void*)&&ZEND_NULL_LABEL,
  47181. (void*)&&ZEND_NULL_LABEL,
  47182. (void*)&&ZEND_NULL_LABEL,
  47183. (void*)&&ZEND_NULL_LABEL,
  47184. (void*)&&ZEND_NULL_LABEL,
  47185. (void*)&&ZEND_NULL_LABEL,
  47186. (void*)&&ZEND_NULL_LABEL,
  47187. (void*)&&ZEND_NULL_LABEL,
  47188. (void*)&&ZEND_NULL_LABEL,
  47189. (void*)&&ZEND_ASSIGN_REF_SPEC_VAR_VAR_LABEL,
  47190. (void*)&&ZEND_NULL_LABEL,
  47191. (void*)&&ZEND_ASSIGN_REF_SPEC_VAR_CV_LABEL,
  47192. (void*)&&ZEND_NULL_LABEL,
  47193. (void*)&&ZEND_NULL_LABEL,
  47194. (void*)&&ZEND_NULL_LABEL,
  47195. (void*)&&ZEND_NULL_LABEL,
  47196. (void*)&&ZEND_NULL_LABEL,
  47197. (void*)&&ZEND_NULL_LABEL,
  47198. (void*)&&ZEND_NULL_LABEL,
  47199. (void*)&&ZEND_ASSIGN_REF_SPEC_CV_VAR_LABEL,
  47200. (void*)&&ZEND_NULL_LABEL,
  47201. (void*)&&ZEND_ASSIGN_REF_SPEC_CV_CV_LABEL,
  47202. (void*)&&ZEND_QM_ASSIGN_SPEC_CONST_LABEL,
  47203. (void*)&&ZEND_QM_ASSIGN_SPEC_TMP_LABEL,
  47204. (void*)&&ZEND_QM_ASSIGN_SPEC_VAR_LABEL,
  47205. (void*)&&ZEND_NULL_LABEL,
  47206. (void*)&&ZEND_QM_ASSIGN_SPEC_CV_LABEL,
  47207. (void*)&&ZEND_NULL_LABEL,
  47208. (void*)&&ZEND_NULL_LABEL,
  47209. (void*)&&ZEND_NULL_LABEL,
  47210. (void*)&&ZEND_NULL_LABEL,
  47211. (void*)&&ZEND_NULL_LABEL,
  47212. (void*)&&ZEND_NULL_LABEL,
  47213. (void*)&&ZEND_NULL_LABEL,
  47214. (void*)&&ZEND_NULL_LABEL,
  47215. (void*)&&ZEND_NULL_LABEL,
  47216. (void*)&&ZEND_NULL_LABEL,
  47217. (void*)&&ZEND_NULL_LABEL,
  47218. (void*)&&ZEND_NULL_LABEL,
  47219. (void*)&&ZEND_NULL_LABEL,
  47220. (void*)&&ZEND_NULL_LABEL,
  47221. (void*)&&ZEND_NULL_LABEL,
  47222. (void*)&&ZEND_NULL_LABEL,
  47223. (void*)&&ZEND_NULL_LABEL,
  47224. (void*)&&ZEND_NULL_LABEL,
  47225. (void*)&&ZEND_NULL_LABEL,
  47226. (void*)&&ZEND_NULL_LABEL,
  47227. (void*)&&ZEND_NULL_LABEL,
  47228. (void*)&&ZEND_NULL_LABEL,
  47229. (void*)&&ZEND_NULL_LABEL,
  47230. (void*)&&ZEND_NULL_LABEL,
  47231. (void*)&&ZEND_NULL_LABEL,
  47232. (void*)&&ZEND_NULL_LABEL,
  47233. (void*)&&ZEND_NULL_LABEL,
  47234. (void*)&&ZEND_NULL_LABEL,
  47235. (void*)&&ZEND_NULL_LABEL,
  47236. (void*)&&ZEND_NULL_LABEL,
  47237. (void*)&&ZEND_NULL_LABEL,
  47238. (void*)&&ZEND_NULL_LABEL,
  47239. (void*)&&ZEND_NULL_LABEL,
  47240. (void*)&&ZEND_NULL_LABEL,
  47241. (void*)&&ZEND_NULL_LABEL,
  47242. (void*)&&ZEND_NULL_LABEL,
  47243. (void*)&&ZEND_NULL_LABEL,
  47244. (void*)&&ZEND_NULL_LABEL,
  47245. (void*)&&ZEND_NULL_LABEL,
  47246. (void*)&&ZEND_NULL_LABEL,
  47247. (void*)&&ZEND_NULL_LABEL,
  47248. (void*)&&ZEND_NULL_LABEL,
  47249. (void*)&&ZEND_NULL_LABEL,
  47250. (void*)&&ZEND_NULL_LABEL,
  47251. (void*)&&ZEND_NULL_LABEL,
  47252. (void*)&&ZEND_NULL_LABEL,
  47253. (void*)&&ZEND_NULL_LABEL,
  47254. (void*)&&ZEND_NULL_LABEL,
  47255. (void*)&&ZEND_NULL_LABEL,
  47256. (void*)&&ZEND_NULL_LABEL,
  47257. (void*)&&ZEND_NULL_LABEL,
  47258. (void*)&&ZEND_NULL_LABEL,
  47259. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
  47260. (void*)&&ZEND_NULL_LABEL,
  47261. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
  47262. (void*)&&ZEND_NULL_LABEL,
  47263. (void*)&&ZEND_NULL_LABEL,
  47264. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
  47265. (void*)&&ZEND_NULL_LABEL,
  47266. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
  47267. (void*)&&ZEND_NULL_LABEL,
  47268. (void*)&&ZEND_NULL_LABEL,
  47269. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
  47270. (void*)&&ZEND_NULL_LABEL,
  47271. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
  47272. (void*)&&ZEND_NULL_LABEL,
  47273. (void*)&&ZEND_NULL_LABEL,
  47274. (void*)&&ZEND_NULL_LABEL,
  47275. (void*)&&ZEND_NULL_LABEL,
  47276. (void*)&&ZEND_NULL_LABEL,
  47277. (void*)&&ZEND_NULL_LABEL,
  47278. (void*)&&ZEND_NULL_LABEL,
  47279. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
  47280. (void*)&&ZEND_NULL_LABEL,
  47281. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_LABEL,
  47282. (void*)&&ZEND_NULL_LABEL,
  47283. (void*)&&ZEND_NULL_LABEL,
  47284. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
  47285. (void*)&&ZEND_NULL_LABEL,
  47286. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
  47287. (void*)&&ZEND_NULL_LABEL,
  47288. (void*)&&ZEND_NULL_LABEL,
  47289. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
  47290. (void*)&&ZEND_NULL_LABEL,
  47291. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
  47292. (void*)&&ZEND_NULL_LABEL,
  47293. (void*)&&ZEND_NULL_LABEL,
  47294. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
  47295. (void*)&&ZEND_NULL_LABEL,
  47296. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
  47297. (void*)&&ZEND_NULL_LABEL,
  47298. (void*)&&ZEND_NULL_LABEL,
  47299. (void*)&&ZEND_NULL_LABEL,
  47300. (void*)&&ZEND_NULL_LABEL,
  47301. (void*)&&ZEND_NULL_LABEL,
  47302. (void*)&&ZEND_NULL_LABEL,
  47303. (void*)&&ZEND_NULL_LABEL,
  47304. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
  47305. (void*)&&ZEND_NULL_LABEL,
  47306. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
  47307. (void*)&&ZEND_NULL_LABEL,
  47308. (void*)&&ZEND_NULL_LABEL,
  47309. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
  47310. (void*)&&ZEND_NULL_LABEL,
  47311. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_LABEL,
  47312. (void*)&&ZEND_NULL_LABEL,
  47313. (void*)&&ZEND_NULL_LABEL,
  47314. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
  47315. (void*)&&ZEND_NULL_LABEL,
  47316. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
  47317. (void*)&&ZEND_NULL_LABEL,
  47318. (void*)&&ZEND_NULL_LABEL,
  47319. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
  47320. (void*)&&ZEND_NULL_LABEL,
  47321. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
  47322. (void*)&&ZEND_NULL_LABEL,
  47323. (void*)&&ZEND_NULL_LABEL,
  47324. (void*)&&ZEND_NULL_LABEL,
  47325. (void*)&&ZEND_NULL_LABEL,
  47326. (void*)&&ZEND_NULL_LABEL,
  47327. (void*)&&ZEND_NULL_LABEL,
  47328. (void*)&&ZEND_NULL_LABEL,
  47329. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_LABEL,
  47330. (void*)&&ZEND_NULL_LABEL,
  47331. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_LABEL,
  47332. (void*)&&ZEND_ASSIGN_STATIC_PROP_REF_SPEC_LABEL,
  47333. (void*)&&ZEND_NULL_LABEL,
  47334. (void*)&&ZEND_NULL_LABEL,
  47335. (void*)&&ZEND_NULL_LABEL,
  47336. (void*)&&ZEND_NULL_LABEL,
  47337. (void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_LABEL,
  47338. (void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_LABEL,
  47339. (void*)&&ZEND_NULL_LABEL,
  47340. (void*)&&ZEND_NULL_LABEL,
  47341. (void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_LABEL,
  47342. (void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_USED_LABEL,
  47343. (void*)&&ZEND_NULL_LABEL,
  47344. (void*)&&ZEND_NULL_LABEL,
  47345. (void*)&&ZEND_NULL_LABEL,
  47346. (void*)&&ZEND_NULL_LABEL,
  47347. (void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_LABEL,
  47348. (void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_LABEL,
  47349. (void*)&&ZEND_NULL_LABEL,
  47350. (void*)&&ZEND_NULL_LABEL,
  47351. (void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_LABEL,
  47352. (void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_LABEL,
  47353. (void*)&&ZEND_NULL_LABEL,
  47354. (void*)&&ZEND_NULL_LABEL,
  47355. (void*)&&ZEND_POST_INC_SPEC_VAR_LABEL,
  47356. (void*)&&ZEND_NULL_LABEL,
  47357. (void*)&&ZEND_POST_INC_SPEC_CV_LABEL,
  47358. (void*)&&ZEND_NULL_LABEL,
  47359. (void*)&&ZEND_NULL_LABEL,
  47360. (void*)&&ZEND_POST_DEC_SPEC_VAR_LABEL,
  47361. (void*)&&ZEND_NULL_LABEL,
  47362. (void*)&&ZEND_POST_DEC_SPEC_CV_LABEL,
  47363. (void*)&&ZEND_PRE_INC_STATIC_PROP_SPEC_LABEL,
  47364. (void*)&&ZEND_POST_INC_STATIC_PROP_SPEC_LABEL,
  47365. (void*)&&ZEND_JMP_SPEC_LABEL,
  47366. (void*)&&ZEND_JMPZ_SPEC_CONST_LABEL,
  47367. (void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
  47368. (void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
  47369. (void*)&&ZEND_NULL_LABEL,
  47370. (void*)&&ZEND_JMPZ_SPEC_CV_LABEL,
  47371. (void*)&&ZEND_JMPNZ_SPEC_CONST_LABEL,
  47372. (void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
  47373. (void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
  47374. (void*)&&ZEND_NULL_LABEL,
  47375. (void*)&&ZEND_JMPNZ_SPEC_CV_LABEL,
  47376. (void*)&&ZEND_JMPZNZ_SPEC_CONST_LABEL,
  47377. (void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL,
  47378. (void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL,
  47379. (void*)&&ZEND_NULL_LABEL,
  47380. (void*)&&ZEND_JMPZNZ_SPEC_CV_LABEL,
  47381. (void*)&&ZEND_JMPZ_EX_SPEC_CONST_LABEL,
  47382. (void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
  47383. (void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
  47384. (void*)&&ZEND_NULL_LABEL,
  47385. (void*)&&ZEND_JMPZ_EX_SPEC_CV_LABEL,
  47386. (void*)&&ZEND_JMPNZ_EX_SPEC_CONST_LABEL,
  47387. (void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
  47388. (void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
  47389. (void*)&&ZEND_NULL_LABEL,
  47390. (void*)&&ZEND_JMPNZ_EX_SPEC_CV_LABEL,
  47391. (void*)&&ZEND_CASE_SPEC_TMPVAR_CONST_LABEL,
  47392. (void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
  47393. (void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
  47394. (void*)&&ZEND_NULL_LABEL,
  47395. (void*)&&ZEND_CASE_SPEC_TMPVAR_CV_LABEL,
  47396. (void*)&&ZEND_CHECK_VAR_SPEC_CV_UNUSED_LABEL,
  47397. (void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_LABEL,
  47398. (void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_LABEL,
  47399. (void*)&&ZEND_NULL_LABEL,
  47400. (void*)&&ZEND_NULL_LABEL,
  47401. (void*)&&ZEND_NULL_LABEL,
  47402. (void*)&&ZEND_NULL_LABEL,
  47403. (void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_LABEL,
  47404. (void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_LABEL,
  47405. (void*)&&ZEND_NULL_LABEL,
  47406. (void*)&&ZEND_NULL_LABEL,
  47407. (void*)&&ZEND_CAST_SPEC_CONST_LABEL,
  47408. (void*)&&ZEND_CAST_SPEC_TMP_LABEL,
  47409. (void*)&&ZEND_CAST_SPEC_VAR_LABEL,
  47410. (void*)&&ZEND_NULL_LABEL,
  47411. (void*)&&ZEND_CAST_SPEC_CV_LABEL,
  47412. (void*)&&ZEND_BOOL_SPEC_CONST_LABEL,
  47413. (void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
  47414. (void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
  47415. (void*)&&ZEND_NULL_LABEL,
  47416. (void*)&&ZEND_BOOL_SPEC_CV_LABEL,
  47417. (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CONST_LABEL,
  47418. (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
  47419. (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
  47420. (void*)&&ZEND_NULL_LABEL,
  47421. (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CV_LABEL,
  47422. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
  47423. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  47424. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  47425. (void*)&&ZEND_NULL_LABEL,
  47426. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
  47427. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
  47428. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  47429. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  47430. (void*)&&ZEND_NULL_LABEL,
  47431. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
  47432. (void*)&&ZEND_NULL_LABEL,
  47433. (void*)&&ZEND_NULL_LABEL,
  47434. (void*)&&ZEND_NULL_LABEL,
  47435. (void*)&&ZEND_NULL_LABEL,
  47436. (void*)&&ZEND_NULL_LABEL,
  47437. (void*)&&ZEND_FAST_CONCAT_SPEC_CV_CONST_LABEL,
  47438. (void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
  47439. (void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
  47440. (void*)&&ZEND_NULL_LABEL,
  47441. (void*)&&ZEND_FAST_CONCAT_SPEC_CV_CV_LABEL,
  47442. (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CONST_LABEL,
  47443. (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
  47444. (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
  47445. (void*)&&ZEND_NULL_LABEL,
  47446. (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CV_LABEL,
  47447. (void*)&&ZEND_ROPE_ADD_SPEC_TMP_CONST_LABEL,
  47448. (void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
  47449. (void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
  47450. (void*)&&ZEND_NULL_LABEL,
  47451. (void*)&&ZEND_ROPE_ADD_SPEC_TMP_CV_LABEL,
  47452. (void*)&&ZEND_ROPE_END_SPEC_TMP_CONST_LABEL,
  47453. (void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
  47454. (void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
  47455. (void*)&&ZEND_NULL_LABEL,
  47456. (void*)&&ZEND_ROPE_END_SPEC_TMP_CV_LABEL,
  47457. (void*)&&ZEND_BEGIN_SILENCE_SPEC_LABEL,
  47458. (void*)&&ZEND_END_SILENCE_SPEC_TMP_LABEL,
  47459. (void*)&&ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_LABEL,
  47460. (void*)&&ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_LABEL,
  47461. (void*)&&ZEND_DO_FCALL_SPEC_RETVAL_USED_LABEL,
  47462. (void*)&&ZEND_DO_FCALL_SPEC_OBSERVER_LABEL,
  47463. (void*)&&ZEND_DO_FCALL_SPEC_OBSERVER_LABEL,
  47464. (void*)&&ZEND_INIT_FCALL_SPEC_CONST_LABEL,
  47465. (void*)&&ZEND_RETURN_SPEC_CONST_LABEL,
  47466. (void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
  47467. (void*)&&ZEND_RETURN_SPEC_TMP_LABEL,
  47468. (void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
  47469. (void*)&&ZEND_RETURN_SPEC_VAR_LABEL,
  47470. (void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
  47471. (void*)&&ZEND_NULL_LABEL,
  47472. (void*)&&ZEND_NULL_LABEL,
  47473. (void*)&&ZEND_RETURN_SPEC_CV_LABEL,
  47474. (void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
  47475. (void*)&&ZEND_RECV_SPEC_UNUSED_LABEL,
  47476. (void*)&&ZEND_RECV_INIT_SPEC_CONST_LABEL,
  47477. (void*)&&ZEND_SEND_VAL_SPEC_CONST_CONST_LABEL,
  47478. (void*)&&ZEND_NULL_LABEL,
  47479. (void*)&&ZEND_NULL_LABEL,
  47480. (void*)&&ZEND_SEND_VAL_SPEC_CONST_UNUSED_LABEL,
  47481. (void*)&&ZEND_NULL_LABEL,
  47482. (void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_CONST_LABEL,
  47483. (void*)&&ZEND_NULL_LABEL,
  47484. (void*)&&ZEND_NULL_LABEL,
  47485. (void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_LABEL,
  47486. (void*)&&ZEND_NULL_LABEL,
  47487. (void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_CONST_LABEL,
  47488. (void*)&&ZEND_NULL_LABEL,
  47489. (void*)&&ZEND_NULL_LABEL,
  47490. (void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_LABEL,
  47491. (void*)&&ZEND_NULL_LABEL,
  47492. (void*)&&ZEND_NULL_LABEL,
  47493. (void*)&&ZEND_NULL_LABEL,
  47494. (void*)&&ZEND_NULL_LABEL,
  47495. (void*)&&ZEND_NULL_LABEL,
  47496. (void*)&&ZEND_NULL_LABEL,
  47497. (void*)&&ZEND_NULL_LABEL,
  47498. (void*)&&ZEND_NULL_LABEL,
  47499. (void*)&&ZEND_NULL_LABEL,
  47500. (void*)&&ZEND_NULL_LABEL,
  47501. (void*)&&ZEND_NULL_LABEL,
  47502. (void*)&&ZEND_NULL_LABEL,
  47503. (void*)&&ZEND_NULL_LABEL,
  47504. (void*)&&ZEND_NULL_LABEL,
  47505. (void*)&&ZEND_NULL_LABEL,
  47506. (void*)&&ZEND_NULL_LABEL,
  47507. (void*)&&ZEND_NULL_LABEL,
  47508. (void*)&&ZEND_NULL_LABEL,
  47509. (void*)&&ZEND_NULL_LABEL,
  47510. (void*)&&ZEND_NULL_LABEL,
  47511. (void*)&&ZEND_NULL_LABEL,
  47512. (void*)&&ZEND_NULL_LABEL,
  47513. (void*)&&ZEND_NULL_LABEL,
  47514. (void*)&&ZEND_NULL_LABEL,
  47515. (void*)&&ZEND_NULL_LABEL,
  47516. (void*)&&ZEND_NULL_LABEL,
  47517. (void*)&&ZEND_NULL_LABEL,
  47518. (void*)&&ZEND_NULL_LABEL,
  47519. (void*)&&ZEND_NULL_LABEL,
  47520. (void*)&&ZEND_NULL_LABEL,
  47521. (void*)&&ZEND_NULL_LABEL,
  47522. (void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_CONST_LABEL,
  47523. (void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_CONST_LABEL,
  47524. (void*)&&ZEND_NULL_LABEL,
  47525. (void*)&&ZEND_NULL_LABEL,
  47526. (void*)&&ZEND_NULL_LABEL,
  47527. (void*)&&ZEND_NULL_LABEL,
  47528. (void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_LABEL,
  47529. (void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_LABEL,
  47530. (void*)&&ZEND_NULL_LABEL,
  47531. (void*)&&ZEND_NULL_LABEL,
  47532. (void*)&&ZEND_NULL_LABEL,
  47533. (void*)&&ZEND_NULL_LABEL,
  47534. (void*)&&ZEND_NULL_LABEL,
  47535. (void*)&&ZEND_NULL_LABEL,
  47536. (void*)&&ZEND_NULL_LABEL,
  47537. (void*)&&ZEND_NULL_LABEL,
  47538. (void*)&&ZEND_NULL_LABEL,
  47539. (void*)&&ZEND_NULL_LABEL,
  47540. (void*)&&ZEND_NULL_LABEL,
  47541. (void*)&&ZEND_NULL_LABEL,
  47542. (void*)&&ZEND_SEND_VAR_EX_SPEC_CV_CONST_LABEL,
  47543. (void*)&&ZEND_SEND_VAR_EX_SPEC_CV_CONST_LABEL,
  47544. (void*)&&ZEND_NULL_LABEL,
  47545. (void*)&&ZEND_NULL_LABEL,
  47546. (void*)&&ZEND_NULL_LABEL,
  47547. (void*)&&ZEND_NULL_LABEL,
  47548. (void*)&&ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_LABEL,
  47549. (void*)&&ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_LABEL,
  47550. (void*)&&ZEND_NULL_LABEL,
  47551. (void*)&&ZEND_NULL_LABEL,
  47552. (void*)&&ZEND_NULL_LABEL,
  47553. (void*)&&ZEND_NULL_LABEL,
  47554. (void*)&&ZEND_NULL_LABEL,
  47555. (void*)&&ZEND_NULL_LABEL,
  47556. (void*)&&ZEND_NULL_LABEL,
  47557. (void*)&&ZEND_NULL_LABEL,
  47558. (void*)&&ZEND_NULL_LABEL,
  47559. (void*)&&ZEND_NULL_LABEL,
  47560. (void*)&&ZEND_NULL_LABEL,
  47561. (void*)&&ZEND_NULL_LABEL,
  47562. (void*)&&ZEND_SEND_REF_SPEC_VAR_CONST_LABEL,
  47563. (void*)&&ZEND_NULL_LABEL,
  47564. (void*)&&ZEND_NULL_LABEL,
  47565. (void*)&&ZEND_SEND_REF_SPEC_VAR_UNUSED_LABEL,
  47566. (void*)&&ZEND_NULL_LABEL,
  47567. (void*)&&ZEND_NULL_LABEL,
  47568. (void*)&&ZEND_NULL_LABEL,
  47569. (void*)&&ZEND_NULL_LABEL,
  47570. (void*)&&ZEND_NULL_LABEL,
  47571. (void*)&&ZEND_NULL_LABEL,
  47572. (void*)&&ZEND_SEND_REF_SPEC_CV_CONST_LABEL,
  47573. (void*)&&ZEND_NULL_LABEL,
  47574. (void*)&&ZEND_NULL_LABEL,
  47575. (void*)&&ZEND_SEND_REF_SPEC_CV_UNUSED_LABEL,
  47576. (void*)&&ZEND_NULL_LABEL,
  47577. (void*)&&ZEND_NEW_SPEC_CONST_UNUSED_LABEL,
  47578. (void*)&&ZEND_NULL_LABEL,
  47579. (void*)&&ZEND_NEW_SPEC_VAR_UNUSED_LABEL,
  47580. (void*)&&ZEND_NEW_SPEC_UNUSED_UNUSED_LABEL,
  47581. (void*)&&ZEND_NULL_LABEL,
  47582. (void*)&&ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_LABEL,
  47583. (void*)&&ZEND_FREE_SPEC_TMPVAR_LABEL,
  47584. (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CONST_LABEL,
  47585. (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
  47586. (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
  47587. (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_LABEL,
  47588. (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CV_LABEL,
  47589. (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CONST_LABEL,
  47590. (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
  47591. (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
  47592. (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_LABEL,
  47593. (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CV_LABEL,
  47594. (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CONST_LABEL,
  47595. (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
  47596. (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
  47597. (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_LABEL,
  47598. (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CV_LABEL,
  47599. (void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_LABEL,
  47600. (void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
  47601. (void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
  47602. (void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_LABEL,
  47603. (void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CV_LABEL,
  47604. (void*)&&ZEND_INIT_ARRAY_SPEC_CV_CONST_LABEL,
  47605. (void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
  47606. (void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
  47607. (void*)&&ZEND_INIT_ARRAY_SPEC_CV_UNUSED_LABEL,
  47608. (void*)&&ZEND_INIT_ARRAY_SPEC_CV_CV_LABEL,
  47609. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_LABEL,
  47610. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
  47611. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
  47612. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_LABEL,
  47613. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_LABEL,
  47614. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_LABEL,
  47615. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
  47616. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
  47617. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_LABEL,
  47618. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_LABEL,
  47619. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_LABEL,
  47620. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
  47621. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
  47622. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_LABEL,
  47623. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_LABEL,
  47624. (void*)&&ZEND_NULL_LABEL,
  47625. (void*)&&ZEND_NULL_LABEL,
  47626. (void*)&&ZEND_NULL_LABEL,
  47627. (void*)&&ZEND_NULL_LABEL,
  47628. (void*)&&ZEND_NULL_LABEL,
  47629. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_LABEL,
  47630. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
  47631. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
  47632. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_LABEL,
  47633. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_LABEL,
  47634. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CONST_LABEL,
  47635. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
  47636. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
  47637. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
  47638. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
  47639. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
  47640. (void*)&&ZEND_NULL_LABEL,
  47641. (void*)&&ZEND_NULL_LABEL,
  47642. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CV_LABEL,
  47643. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
  47644. (void*)&&ZEND_UNSET_VAR_SPEC_CONST_UNUSED_LABEL,
  47645. (void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
  47646. (void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
  47647. (void*)&&ZEND_NULL_LABEL,
  47648. (void*)&&ZEND_UNSET_VAR_SPEC_CV_UNUSED_LABEL,
  47649. (void*)&&ZEND_NULL_LABEL,
  47650. (void*)&&ZEND_NULL_LABEL,
  47651. (void*)&&ZEND_NULL_LABEL,
  47652. (void*)&&ZEND_NULL_LABEL,
  47653. (void*)&&ZEND_NULL_LABEL,
  47654. (void*)&&ZEND_NULL_LABEL,
  47655. (void*)&&ZEND_NULL_LABEL,
  47656. (void*)&&ZEND_NULL_LABEL,
  47657. (void*)&&ZEND_NULL_LABEL,
  47658. (void*)&&ZEND_NULL_LABEL,
  47659. (void*)&&ZEND_UNSET_DIM_SPEC_VAR_CONST_LABEL,
  47660. (void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
  47661. (void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
  47662. (void*)&&ZEND_NULL_LABEL,
  47663. (void*)&&ZEND_UNSET_DIM_SPEC_VAR_CV_LABEL,
  47664. (void*)&&ZEND_NULL_LABEL,
  47665. (void*)&&ZEND_NULL_LABEL,
  47666. (void*)&&ZEND_NULL_LABEL,
  47667. (void*)&&ZEND_NULL_LABEL,
  47668. (void*)&&ZEND_NULL_LABEL,
  47669. (void*)&&ZEND_UNSET_DIM_SPEC_CV_CONST_LABEL,
  47670. (void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
  47671. (void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
  47672. (void*)&&ZEND_NULL_LABEL,
  47673. (void*)&&ZEND_UNSET_DIM_SPEC_CV_CV_LABEL,
  47674. (void*)&&ZEND_NULL_LABEL,
  47675. (void*)&&ZEND_NULL_LABEL,
  47676. (void*)&&ZEND_NULL_LABEL,
  47677. (void*)&&ZEND_NULL_LABEL,
  47678. (void*)&&ZEND_NULL_LABEL,
  47679. (void*)&&ZEND_NULL_LABEL,
  47680. (void*)&&ZEND_NULL_LABEL,
  47681. (void*)&&ZEND_NULL_LABEL,
  47682. (void*)&&ZEND_NULL_LABEL,
  47683. (void*)&&ZEND_NULL_LABEL,
  47684. (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CONST_LABEL,
  47685. (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
  47686. (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
  47687. (void*)&&ZEND_NULL_LABEL,
  47688. (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CV_LABEL,
  47689. (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_LABEL,
  47690. (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  47691. (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  47692. (void*)&&ZEND_NULL_LABEL,
  47693. (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CV_LABEL,
  47694. (void*)&&ZEND_UNSET_OBJ_SPEC_CV_CONST_LABEL,
  47695. (void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
  47696. (void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
  47697. (void*)&&ZEND_NULL_LABEL,
  47698. (void*)&&ZEND_UNSET_OBJ_SPEC_CV_CV_LABEL,
  47699. (void*)&&ZEND_FE_RESET_R_SPEC_CONST_LABEL,
  47700. (void*)&&ZEND_FE_RESET_R_SPEC_TMP_LABEL,
  47701. (void*)&&ZEND_FE_RESET_R_SPEC_VAR_LABEL,
  47702. (void*)&&ZEND_NULL_LABEL,
  47703. (void*)&&ZEND_FE_RESET_R_SPEC_CV_LABEL,
  47704. (void*)&&ZEND_FE_FETCH_R_SPEC_VAR_LABEL,
  47705. (void*)&&ZEND_EXIT_SPEC_LABEL,
  47706. (void*)&&ZEND_FETCH_R_SPEC_CONST_UNUSED_LABEL,
  47707. (void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
  47708. (void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
  47709. (void*)&&ZEND_NULL_LABEL,
  47710. (void*)&&ZEND_FETCH_R_SPEC_CV_UNUSED_LABEL,
  47711. (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CONST_LABEL,
  47712. (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
  47713. (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
  47714. (void*)&&ZEND_NULL_LABEL,
  47715. (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CV_LABEL,
  47716. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
  47717. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
  47718. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
  47719. (void*)&&ZEND_NULL_LABEL,
  47720. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
  47721. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
  47722. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
  47723. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
  47724. (void*)&&ZEND_NULL_LABEL,
  47725. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
  47726. (void*)&&ZEND_NULL_LABEL,
  47727. (void*)&&ZEND_NULL_LABEL,
  47728. (void*)&&ZEND_NULL_LABEL,
  47729. (void*)&&ZEND_NULL_LABEL,
  47730. (void*)&&ZEND_NULL_LABEL,
  47731. (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CONST_LABEL,
  47732. (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
  47733. (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
  47734. (void*)&&ZEND_NULL_LABEL,
  47735. (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CV_LABEL,
  47736. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_LABEL,
  47737. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
  47738. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
  47739. (void*)&&ZEND_NULL_LABEL,
  47740. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CV_LABEL,
  47741. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
  47742. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
  47743. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
  47744. (void*)&&ZEND_NULL_LABEL,
  47745. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
  47746. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
  47747. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
  47748. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
  47749. (void*)&&ZEND_NULL_LABEL,
  47750. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
  47751. (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_LABEL,
  47752. (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
  47753. (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
  47754. (void*)&&ZEND_NULL_LABEL,
  47755. (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_LABEL,
  47756. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CONST_LABEL,
  47757. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
  47758. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
  47759. (void*)&&ZEND_NULL_LABEL,
  47760. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CV_LABEL,
  47761. (void*)&&ZEND_FETCH_W_SPEC_CONST_UNUSED_LABEL,
  47762. (void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
  47763. (void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
  47764. (void*)&&ZEND_NULL_LABEL,
  47765. (void*)&&ZEND_FETCH_W_SPEC_CV_UNUSED_LABEL,
  47766. (void*)&&ZEND_NULL_LABEL,
  47767. (void*)&&ZEND_NULL_LABEL,
  47768. (void*)&&ZEND_NULL_LABEL,
  47769. (void*)&&ZEND_NULL_LABEL,
  47770. (void*)&&ZEND_NULL_LABEL,
  47771. (void*)&&ZEND_NULL_LABEL,
  47772. (void*)&&ZEND_NULL_LABEL,
  47773. (void*)&&ZEND_NULL_LABEL,
  47774. (void*)&&ZEND_NULL_LABEL,
  47775. (void*)&&ZEND_NULL_LABEL,
  47776. (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CONST_LABEL,
  47777. (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
  47778. (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
  47779. (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_LABEL,
  47780. (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CV_LABEL,
  47781. (void*)&&ZEND_NULL_LABEL,
  47782. (void*)&&ZEND_NULL_LABEL,
  47783. (void*)&&ZEND_NULL_LABEL,
  47784. (void*)&&ZEND_NULL_LABEL,
  47785. (void*)&&ZEND_NULL_LABEL,
  47786. (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CONST_LABEL,
  47787. (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
  47788. (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
  47789. (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_LABEL,
  47790. (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CV_LABEL,
  47791. (void*)&&ZEND_NULL_LABEL,
  47792. (void*)&&ZEND_NULL_LABEL,
  47793. (void*)&&ZEND_NULL_LABEL,
  47794. (void*)&&ZEND_NULL_LABEL,
  47795. (void*)&&ZEND_NULL_LABEL,
  47796. (void*)&&ZEND_NULL_LABEL,
  47797. (void*)&&ZEND_NULL_LABEL,
  47798. (void*)&&ZEND_NULL_LABEL,
  47799. (void*)&&ZEND_NULL_LABEL,
  47800. (void*)&&ZEND_NULL_LABEL,
  47801. (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_LABEL,
  47802. (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
  47803. (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
  47804. (void*)&&ZEND_NULL_LABEL,
  47805. (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CV_LABEL,
  47806. (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_LABEL,
  47807. (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
  47808. (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
  47809. (void*)&&ZEND_NULL_LABEL,
  47810. (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_LABEL,
  47811. (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CONST_LABEL,
  47812. (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
  47813. (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
  47814. (void*)&&ZEND_NULL_LABEL,
  47815. (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CV_LABEL,
  47816. (void*)&&ZEND_FETCH_RW_SPEC_CONST_UNUSED_LABEL,
  47817. (void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
  47818. (void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
  47819. (void*)&&ZEND_NULL_LABEL,
  47820. (void*)&&ZEND_FETCH_RW_SPEC_CV_UNUSED_LABEL,
  47821. (void*)&&ZEND_NULL_LABEL,
  47822. (void*)&&ZEND_NULL_LABEL,
  47823. (void*)&&ZEND_NULL_LABEL,
  47824. (void*)&&ZEND_NULL_LABEL,
  47825. (void*)&&ZEND_NULL_LABEL,
  47826. (void*)&&ZEND_NULL_LABEL,
  47827. (void*)&&ZEND_NULL_LABEL,
  47828. (void*)&&ZEND_NULL_LABEL,
  47829. (void*)&&ZEND_NULL_LABEL,
  47830. (void*)&&ZEND_NULL_LABEL,
  47831. (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_LABEL,
  47832. (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
  47833. (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
  47834. (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_LABEL,
  47835. (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CV_LABEL,
  47836. (void*)&&ZEND_NULL_LABEL,
  47837. (void*)&&ZEND_NULL_LABEL,
  47838. (void*)&&ZEND_NULL_LABEL,
  47839. (void*)&&ZEND_NULL_LABEL,
  47840. (void*)&&ZEND_NULL_LABEL,
  47841. (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CONST_LABEL,
  47842. (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
  47843. (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
  47844. (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_LABEL,
  47845. (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CV_LABEL,
  47846. (void*)&&ZEND_NULL_LABEL,
  47847. (void*)&&ZEND_NULL_LABEL,
  47848. (void*)&&ZEND_NULL_LABEL,
  47849. (void*)&&ZEND_NULL_LABEL,
  47850. (void*)&&ZEND_NULL_LABEL,
  47851. (void*)&&ZEND_NULL_LABEL,
  47852. (void*)&&ZEND_NULL_LABEL,
  47853. (void*)&&ZEND_NULL_LABEL,
  47854. (void*)&&ZEND_NULL_LABEL,
  47855. (void*)&&ZEND_NULL_LABEL,
  47856. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_LABEL,
  47857. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
  47858. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
  47859. (void*)&&ZEND_NULL_LABEL,
  47860. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_LABEL,
  47861. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_LABEL,
  47862. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
  47863. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
  47864. (void*)&&ZEND_NULL_LABEL,
  47865. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_LABEL,
  47866. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_LABEL,
  47867. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
  47868. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
  47869. (void*)&&ZEND_NULL_LABEL,
  47870. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CV_LABEL,
  47871. (void*)&&ZEND_FETCH_IS_SPEC_CONST_UNUSED_LABEL,
  47872. (void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
  47873. (void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
  47874. (void*)&&ZEND_NULL_LABEL,
  47875. (void*)&&ZEND_FETCH_IS_SPEC_CV_UNUSED_LABEL,
  47876. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_LABEL,
  47877. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
  47878. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
  47879. (void*)&&ZEND_NULL_LABEL,
  47880. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CV_LABEL,
  47881. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
  47882. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  47883. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  47884. (void*)&&ZEND_NULL_LABEL,
  47885. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
  47886. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
  47887. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  47888. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  47889. (void*)&&ZEND_NULL_LABEL,
  47890. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
  47891. (void*)&&ZEND_NULL_LABEL,
  47892. (void*)&&ZEND_NULL_LABEL,
  47893. (void*)&&ZEND_NULL_LABEL,
  47894. (void*)&&ZEND_NULL_LABEL,
  47895. (void*)&&ZEND_NULL_LABEL,
  47896. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CONST_LABEL,
  47897. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
  47898. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
  47899. (void*)&&ZEND_NULL_LABEL,
  47900. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CV_LABEL,
  47901. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_LABEL,
  47902. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
  47903. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
  47904. (void*)&&ZEND_NULL_LABEL,
  47905. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_LABEL,
  47906. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
  47907. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  47908. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  47909. (void*)&&ZEND_NULL_LABEL,
  47910. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
  47911. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
  47912. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  47913. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  47914. (void*)&&ZEND_NULL_LABEL,
  47915. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
  47916. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_LABEL,
  47917. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
  47918. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
  47919. (void*)&&ZEND_NULL_LABEL,
  47920. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_LABEL,
  47921. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_LABEL,
  47922. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
  47923. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
  47924. (void*)&&ZEND_NULL_LABEL,
  47925. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CV_LABEL,
  47926. (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
  47927. (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
  47928. (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
  47929. (void*)&&ZEND_NULL_LABEL,
  47930. (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
  47931. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_LABEL,
  47932. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
  47933. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
  47934. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
  47935. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_LABEL,
  47936. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_LABEL,
  47937. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
  47938. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
  47939. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_LABEL,
  47940. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_LABEL,
  47941. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_LABEL,
  47942. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
  47943. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
  47944. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_LABEL,
  47945. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_LABEL,
  47946. (void*)&&ZEND_NULL_LABEL,
  47947. (void*)&&ZEND_NULL_LABEL,
  47948. (void*)&&ZEND_NULL_LABEL,
  47949. (void*)&&ZEND_NULL_LABEL,
  47950. (void*)&&ZEND_NULL_LABEL,
  47951. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_LABEL,
  47952. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
  47953. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
  47954. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
  47955. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_LABEL,
  47956. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_LABEL,
  47957. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
  47958. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
  47959. (void*)&&ZEND_NULL_LABEL,
  47960. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_LABEL,
  47961. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_LABEL,
  47962. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
  47963. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
  47964. (void*)&&ZEND_NULL_LABEL,
  47965. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_LABEL,
  47966. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_LABEL,
  47967. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
  47968. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
  47969. (void*)&&ZEND_NULL_LABEL,
  47970. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_LABEL,
  47971. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
  47972. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
  47973. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
  47974. (void*)&&ZEND_NULL_LABEL,
  47975. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_LABEL,
  47976. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_LABEL,
  47977. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
  47978. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
  47979. (void*)&&ZEND_NULL_LABEL,
  47980. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_LABEL,
  47981. (void*)&&ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_LABEL,
  47982. (void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
  47983. (void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
  47984. (void*)&&ZEND_NULL_LABEL,
  47985. (void*)&&ZEND_FETCH_UNSET_SPEC_CV_UNUSED_LABEL,
  47986. (void*)&&ZEND_NULL_LABEL,
  47987. (void*)&&ZEND_NULL_LABEL,
  47988. (void*)&&ZEND_NULL_LABEL,
  47989. (void*)&&ZEND_NULL_LABEL,
  47990. (void*)&&ZEND_NULL_LABEL,
  47991. (void*)&&ZEND_NULL_LABEL,
  47992. (void*)&&ZEND_NULL_LABEL,
  47993. (void*)&&ZEND_NULL_LABEL,
  47994. (void*)&&ZEND_NULL_LABEL,
  47995. (void*)&&ZEND_NULL_LABEL,
  47996. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_LABEL,
  47997. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
  47998. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
  47999. (void*)&&ZEND_NULL_LABEL,
  48000. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_LABEL,
  48001. (void*)&&ZEND_NULL_LABEL,
  48002. (void*)&&ZEND_NULL_LABEL,
  48003. (void*)&&ZEND_NULL_LABEL,
  48004. (void*)&&ZEND_NULL_LABEL,
  48005. (void*)&&ZEND_NULL_LABEL,
  48006. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_LABEL,
  48007. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
  48008. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
  48009. (void*)&&ZEND_NULL_LABEL,
  48010. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_LABEL,
  48011. (void*)&&ZEND_NULL_LABEL,
  48012. (void*)&&ZEND_NULL_LABEL,
  48013. (void*)&&ZEND_NULL_LABEL,
  48014. (void*)&&ZEND_NULL_LABEL,
  48015. (void*)&&ZEND_NULL_LABEL,
  48016. (void*)&&ZEND_NULL_LABEL,
  48017. (void*)&&ZEND_NULL_LABEL,
  48018. (void*)&&ZEND_NULL_LABEL,
  48019. (void*)&&ZEND_NULL_LABEL,
  48020. (void*)&&ZEND_NULL_LABEL,
  48021. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_LABEL,
  48022. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
  48023. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
  48024. (void*)&&ZEND_NULL_LABEL,
  48025. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_LABEL,
  48026. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_LABEL,
  48027. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
  48028. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
  48029. (void*)&&ZEND_NULL_LABEL,
  48030. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_LABEL,
  48031. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_LABEL,
  48032. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
  48033. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
  48034. (void*)&&ZEND_NULL_LABEL,
  48035. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_LABEL,
  48036. (void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CONST_LABEL,
  48037. (void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
  48038. (void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
  48039. (void*)&&ZEND_NULL_LABEL,
  48040. (void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CV_LABEL,
  48041. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
  48042. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  48043. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  48044. (void*)&&ZEND_NULL_LABEL,
  48045. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
  48046. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
  48047. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  48048. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  48049. (void*)&&ZEND_NULL_LABEL,
  48050. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
  48051. (void*)&&ZEND_NULL_LABEL,
  48052. (void*)&&ZEND_NULL_LABEL,
  48053. (void*)&&ZEND_NULL_LABEL,
  48054. (void*)&&ZEND_NULL_LABEL,
  48055. (void*)&&ZEND_NULL_LABEL,
  48056. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
  48057. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  48058. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  48059. (void*)&&ZEND_NULL_LABEL,
  48060. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
  48061. (void*)&&ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_LABEL,
  48062. (void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
  48063. (void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
  48064. (void*)&&ZEND_NULL_LABEL,
  48065. (void*)&&ZEND_NULL_LABEL,
  48066. (void*)&&ZEND_NULL_LABEL,
  48067. (void*)&&ZEND_NULL_LABEL,
  48068. (void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_LABEL,
  48069. (void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_LABEL,
  48070. (void*)&&ZEND_NULL_LABEL,
  48071. (void*)&&ZEND_NULL_LABEL,
  48072. (void*)&&ZEND_EXT_STMT_SPEC_LABEL,
  48073. (void*)&&ZEND_EXT_FCALL_BEGIN_SPEC_LABEL,
  48074. (void*)&&ZEND_EXT_FCALL_END_SPEC_LABEL,
  48075. (void*)&&ZEND_EXT_NOP_SPEC_LABEL,
  48076. (void*)&&ZEND_TICKS_SPEC_LABEL,
  48077. (void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_LABEL,
  48078. (void*)&&ZEND_NULL_LABEL,
  48079. (void*)&&ZEND_NULL_LABEL,
  48080. (void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_LABEL,
  48081. (void*)&&ZEND_NULL_LABEL,
  48082. (void*)&&ZEND_CATCH_SPEC_CONST_LABEL,
  48083. (void*)&&ZEND_THROW_SPEC_CONST_LABEL,
  48084. (void*)&&ZEND_THROW_SPEC_TMPVAR_LABEL,
  48085. (void*)&&ZEND_THROW_SPEC_TMPVAR_LABEL,
  48086. (void*)&&ZEND_NULL_LABEL,
  48087. (void*)&&ZEND_THROW_SPEC_CV_LABEL,
  48088. (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_LABEL,
  48089. (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
  48090. (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
  48091. (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_LABEL,
  48092. (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CV_LABEL,
  48093. (void*)&&ZEND_CLONE_SPEC_CONST_LABEL,
  48094. (void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
  48095. (void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
  48096. (void*)&&ZEND_CLONE_SPEC_UNUSED_LABEL,
  48097. (void*)&&ZEND_CLONE_SPEC_CV_LABEL,
  48098. (void*)&&ZEND_RETURN_BY_REF_SPEC_CONST_LABEL,
  48099. (void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
  48100. (void*)&&ZEND_RETURN_BY_REF_SPEC_TMP_LABEL,
  48101. (void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
  48102. (void*)&&ZEND_RETURN_BY_REF_SPEC_VAR_LABEL,
  48103. (void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
  48104. (void*)&&ZEND_NULL_LABEL,
  48105. (void*)&&ZEND_NULL_LABEL,
  48106. (void*)&&ZEND_RETURN_BY_REF_SPEC_CV_LABEL,
  48107. (void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
  48108. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_LABEL,
  48109. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
  48110. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
  48111. (void*)&&ZEND_NULL_LABEL,
  48112. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_LABEL,
  48113. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
  48114. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
  48115. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
  48116. (void*)&&ZEND_NULL_LABEL,
  48117. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
  48118. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
  48119. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
  48120. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
  48121. (void*)&&ZEND_NULL_LABEL,
  48122. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
  48123. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
  48124. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
  48125. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
  48126. (void*)&&ZEND_NULL_LABEL,
  48127. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
  48128. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_LABEL,
  48129. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
  48130. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
  48131. (void*)&&ZEND_NULL_LABEL,
  48132. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CV_LABEL,
  48133. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_LABEL,
  48134. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
  48135. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
  48136. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_LABEL,
  48137. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_LABEL,
  48138. (void*)&&ZEND_NULL_LABEL,
  48139. (void*)&&ZEND_NULL_LABEL,
  48140. (void*)&&ZEND_NULL_LABEL,
  48141. (void*)&&ZEND_NULL_LABEL,
  48142. (void*)&&ZEND_NULL_LABEL,
  48143. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_LABEL,
  48144. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
  48145. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
  48146. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_LABEL,
  48147. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_LABEL,
  48148. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
  48149. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
  48150. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
  48151. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_LABEL,
  48152. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
  48153. (void*)&&ZEND_NULL_LABEL,
  48154. (void*)&&ZEND_NULL_LABEL,
  48155. (void*)&&ZEND_NULL_LABEL,
  48156. (void*)&&ZEND_NULL_LABEL,
  48157. (void*)&&ZEND_NULL_LABEL,
  48158. (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_LABEL,
  48159. (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
  48160. (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
  48161. (void*)&&ZEND_NULL_LABEL,
  48162. (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_LABEL,
  48163. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_LABEL,
  48164. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
  48165. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
  48166. (void*)&&ZEND_NULL_LABEL,
  48167. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_LABEL,
  48168. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
  48169. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  48170. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  48171. (void*)&&ZEND_NULL_LABEL,
  48172. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
  48173. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
  48174. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  48175. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  48176. (void*)&&ZEND_NULL_LABEL,
  48177. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
  48178. (void*)&&ZEND_NULL_LABEL,
  48179. (void*)&&ZEND_NULL_LABEL,
  48180. (void*)&&ZEND_NULL_LABEL,
  48181. (void*)&&ZEND_NULL_LABEL,
  48182. (void*)&&ZEND_NULL_LABEL,
  48183. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_LABEL,
  48184. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
  48185. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
  48186. (void*)&&ZEND_NULL_LABEL,
  48187. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_LABEL,
  48188. (void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_CONST_LABEL,
  48189. (void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_CONST_LABEL,
  48190. (void*)&&ZEND_NULL_LABEL,
  48191. (void*)&&ZEND_NULL_LABEL,
  48192. (void*)&&ZEND_NULL_LABEL,
  48193. (void*)&&ZEND_NULL_LABEL,
  48194. (void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_LABEL,
  48195. (void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_LABEL,
  48196. (void*)&&ZEND_NULL_LABEL,
  48197. (void*)&&ZEND_NULL_LABEL,
  48198. (void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_CONST_LABEL,
  48199. (void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_CONST_LABEL,
  48200. (void*)&&ZEND_NULL_LABEL,
  48201. (void*)&&ZEND_NULL_LABEL,
  48202. (void*)&&ZEND_NULL_LABEL,
  48203. (void*)&&ZEND_NULL_LABEL,
  48204. (void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_LABEL,
  48205. (void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_LABEL,
  48206. (void*)&&ZEND_NULL_LABEL,
  48207. (void*)&&ZEND_NULL_LABEL,
  48208. (void*)&&ZEND_NULL_LABEL,
  48209. (void*)&&ZEND_NULL_LABEL,
  48210. (void*)&&ZEND_NULL_LABEL,
  48211. (void*)&&ZEND_NULL_LABEL,
  48212. (void*)&&ZEND_NULL_LABEL,
  48213. (void*)&&ZEND_NULL_LABEL,
  48214. (void*)&&ZEND_NULL_LABEL,
  48215. (void*)&&ZEND_NULL_LABEL,
  48216. (void*)&&ZEND_NULL_LABEL,
  48217. (void*)&&ZEND_NULL_LABEL,
  48218. (void*)&&ZEND_NULL_LABEL,
  48219. (void*)&&ZEND_NULL_LABEL,
  48220. (void*)&&ZEND_NULL_LABEL,
  48221. (void*)&&ZEND_NULL_LABEL,
  48222. (void*)&&ZEND_NULL_LABEL,
  48223. (void*)&&ZEND_NULL_LABEL,
  48224. (void*)&&ZEND_NULL_LABEL,
  48225. (void*)&&ZEND_NULL_LABEL,
  48226. (void*)&&ZEND_NULL_LABEL,
  48227. (void*)&&ZEND_NULL_LABEL,
  48228. (void*)&&ZEND_NULL_LABEL,
  48229. (void*)&&ZEND_NULL_LABEL,
  48230. (void*)&&ZEND_NULL_LABEL,
  48231. (void*)&&ZEND_NULL_LABEL,
  48232. (void*)&&ZEND_NULL_LABEL,
  48233. (void*)&&ZEND_NULL_LABEL,
  48234. (void*)&&ZEND_NULL_LABEL,
  48235. (void*)&&ZEND_NULL_LABEL,
  48236. (void*)&&ZEND_NULL_LABEL,
  48237. (void*)&&ZEND_NULL_LABEL,
  48238. (void*)&&ZEND_NULL_LABEL,
  48239. (void*)&&ZEND_NULL_LABEL,
  48240. (void*)&&ZEND_NULL_LABEL,
  48241. (void*)&&ZEND_NULL_LABEL,
  48242. (void*)&&ZEND_NULL_LABEL,
  48243. (void*)&&ZEND_NULL_LABEL,
  48244. (void*)&&ZEND_NULL_LABEL,
  48245. (void*)&&ZEND_NULL_LABEL,
  48246. (void*)&&ZEND_NULL_LABEL,
  48247. (void*)&&ZEND_NULL_LABEL,
  48248. (void*)&&ZEND_SEND_VAR_SPEC_VAR_CONST_LABEL,
  48249. (void*)&&ZEND_NULL_LABEL,
  48250. (void*)&&ZEND_NULL_LABEL,
  48251. (void*)&&ZEND_SEND_VAR_SPEC_VAR_UNUSED_LABEL,
  48252. (void*)&&ZEND_NULL_LABEL,
  48253. (void*)&&ZEND_NULL_LABEL,
  48254. (void*)&&ZEND_NULL_LABEL,
  48255. (void*)&&ZEND_NULL_LABEL,
  48256. (void*)&&ZEND_NULL_LABEL,
  48257. (void*)&&ZEND_NULL_LABEL,
  48258. (void*)&&ZEND_SEND_VAR_SPEC_CV_CONST_LABEL,
  48259. (void*)&&ZEND_NULL_LABEL,
  48260. (void*)&&ZEND_NULL_LABEL,
  48261. (void*)&&ZEND_SEND_VAR_SPEC_CV_UNUSED_LABEL,
  48262. (void*)&&ZEND_NULL_LABEL,
  48263. (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CONST_LABEL,
  48264. (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
  48265. (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
  48266. (void*)&&ZEND_NULL_LABEL,
  48267. (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CV_LABEL,
  48268. (void*)&&ZEND_SEND_ARRAY_SPEC_LABEL,
  48269. (void*)&&ZEND_SEND_USER_SPEC_CONST_LABEL,
  48270. (void*)&&ZEND_SEND_USER_SPEC_TMP_LABEL,
  48271. (void*)&&ZEND_SEND_USER_SPEC_VAR_LABEL,
  48272. (void*)&&ZEND_NULL_LABEL,
  48273. (void*)&&ZEND_SEND_USER_SPEC_CV_LABEL,
  48274. (void*)&&ZEND_STRLEN_SPEC_CONST_LABEL,
  48275. (void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
  48276. (void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
  48277. (void*)&&ZEND_NULL_LABEL,
  48278. (void*)&&ZEND_STRLEN_SPEC_CV_LABEL,
  48279. (void*)&&ZEND_DEFINED_SPEC_CONST_LABEL,
  48280. (void*)&&ZEND_TYPE_CHECK_SPEC_CONST_LABEL,
  48281. (void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
  48282. (void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
  48283. (void*)&&ZEND_NULL_LABEL,
  48284. (void*)&&ZEND_TYPE_CHECK_SPEC_CV_LABEL,
  48285. (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_LABEL,
  48286. (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_LABEL,
  48287. (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_LABEL,
  48288. (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_LABEL,
  48289. (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_LABEL,
  48290. (void*)&&ZEND_FE_RESET_RW_SPEC_CONST_LABEL,
  48291. (void*)&&ZEND_FE_RESET_RW_SPEC_TMP_LABEL,
  48292. (void*)&&ZEND_FE_RESET_RW_SPEC_VAR_LABEL,
  48293. (void*)&&ZEND_NULL_LABEL,
  48294. (void*)&&ZEND_FE_RESET_RW_SPEC_CV_LABEL,
  48295. (void*)&&ZEND_FE_FETCH_RW_SPEC_VAR_LABEL,
  48296. (void*)&&ZEND_FE_FREE_SPEC_TMPVAR_LABEL,
  48297. (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_LABEL,
  48298. (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
  48299. (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
  48300. (void*)&&ZEND_NULL_LABEL,
  48301. (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CV_LABEL,
  48302. (void*)&&ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_LABEL,
  48303. (void*)&&ZEND_DO_ICALL_SPEC_RETVAL_USED_LABEL,
  48304. (void*)&&ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_LABEL,
  48305. (void*)&&ZEND_DO_UCALL_SPEC_RETVAL_USED_LABEL,
  48306. (void*)&&ZEND_DO_UCALL_SPEC_OBSERVER_LABEL,
  48307. (void*)&&ZEND_DO_UCALL_SPEC_OBSERVER_LABEL,
  48308. (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_LABEL,
  48309. (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_LABEL,
  48310. (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_LABEL,
  48311. (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_LABEL,
  48312. (void*)&&ZEND_NULL_LABEL,
  48313. (void*)&&ZEND_NULL_LABEL,
  48314. (void*)&&ZEND_NULL_LABEL,
  48315. (void*)&&ZEND_NULL_LABEL,
  48316. (void*)&&ZEND_NULL_LABEL,
  48317. (void*)&&ZEND_NULL_LABEL,
  48318. (void*)&&ZEND_NULL_LABEL,
  48319. (void*)&&ZEND_NULL_LABEL,
  48320. (void*)&&ZEND_NULL_LABEL,
  48321. (void*)&&ZEND_NULL_LABEL,
  48322. (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_LABEL,
  48323. (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
  48324. (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
  48325. (void*)&&ZEND_NULL_LABEL,
  48326. (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CV_LABEL,
  48327. (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
  48328. (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  48329. (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  48330. (void*)&&ZEND_NULL_LABEL,
  48331. (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_LABEL,
  48332. (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CONST_LABEL,
  48333. (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
  48334. (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
  48335. (void*)&&ZEND_NULL_LABEL,
  48336. (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CV_LABEL,
  48337. (void*)&&ZEND_NULL_LABEL,
  48338. (void*)&&ZEND_NULL_LABEL,
  48339. (void*)&&ZEND_NULL_LABEL,
  48340. (void*)&&ZEND_NULL_LABEL,
  48341. (void*)&&ZEND_NULL_LABEL,
  48342. (void*)&&ZEND_NULL_LABEL,
  48343. (void*)&&ZEND_NULL_LABEL,
  48344. (void*)&&ZEND_NULL_LABEL,
  48345. (void*)&&ZEND_NULL_LABEL,
  48346. (void*)&&ZEND_NULL_LABEL,
  48347. (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CONST_LABEL,
  48348. (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
  48349. (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
  48350. (void*)&&ZEND_NULL_LABEL,
  48351. (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CV_LABEL,
  48352. (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
  48353. (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  48354. (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  48355. (void*)&&ZEND_NULL_LABEL,
  48356. (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_LABEL,
  48357. (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CONST_LABEL,
  48358. (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
  48359. (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
  48360. (void*)&&ZEND_NULL_LABEL,
  48361. (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CV_LABEL,
  48362. (void*)&&ZEND_ECHO_SPEC_CONST_LABEL,
  48363. (void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
  48364. (void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
  48365. (void*)&&ZEND_NULL_LABEL,
  48366. (void*)&&ZEND_ECHO_SPEC_CV_LABEL,
  48367. (void*)&&ZEND_NULL_LABEL,
  48368. (void*)&&ZEND_NULL_LABEL,
  48369. (void*)&&ZEND_NULL_LABEL,
  48370. (void*)&&ZEND_NULL_LABEL,
  48371. (void*)&&ZEND_NULL_LABEL,
  48372. (void*)&&ZEND_NULL_LABEL,
  48373. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
  48374. (void*)&&ZEND_NULL_LABEL,
  48375. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
  48376. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
  48377. (void*)&&ZEND_NULL_LABEL,
  48378. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
  48379. (void*)&&ZEND_NULL_LABEL,
  48380. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
  48381. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
  48382. (void*)&&ZEND_NULL_LABEL,
  48383. (void*)&&ZEND_NULL_LABEL,
  48384. (void*)&&ZEND_NULL_LABEL,
  48385. (void*)&&ZEND_NULL_LABEL,
  48386. (void*)&&ZEND_NULL_LABEL,
  48387. (void*)&&ZEND_NULL_LABEL,
  48388. (void*)&&ZEND_INSTANCEOF_SPEC_CV_CONST_LABEL,
  48389. (void*)&&ZEND_NULL_LABEL,
  48390. (void*)&&ZEND_INSTANCEOF_SPEC_CV_VAR_LABEL,
  48391. (void*)&&ZEND_INSTANCEOF_SPEC_CV_UNUSED_LABEL,
  48392. (void*)&&ZEND_NULL_LABEL,
  48393. (void*)&&ZEND_GENERATOR_CREATE_SPEC_LABEL,
  48394. (void*)&&ZEND_NULL_LABEL,
  48395. (void*)&&ZEND_NULL_LABEL,
  48396. (void*)&&ZEND_MAKE_REF_SPEC_VAR_UNUSED_LABEL,
  48397. (void*)&&ZEND_NULL_LABEL,
  48398. (void*)&&ZEND_MAKE_REF_SPEC_CV_UNUSED_LABEL,
  48399. (void*)&&ZEND_DECLARE_FUNCTION_SPEC_LABEL,
  48400. (void*)&&ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_LABEL,
  48401. (void*)&&ZEND_DECLARE_CONST_SPEC_CONST_CONST_LABEL,
  48402. (void*)&&ZEND_DECLARE_CLASS_SPEC_CONST_LABEL,
  48403. (void*)&&ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_LABEL,
  48404. (void*)&&ZEND_DECLARE_ANON_CLASS_SPEC_LABEL,
  48405. (void*)&&ZEND_ADD_ARRAY_UNPACK_SPEC_LABEL,
  48406. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_LABEL,
  48407. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
  48408. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
  48409. (void*)&&ZEND_NULL_LABEL,
  48410. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_LABEL,
  48411. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
  48412. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  48413. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  48414. (void*)&&ZEND_NULL_LABEL,
  48415. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
  48416. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
  48417. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  48418. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  48419. (void*)&&ZEND_NULL_LABEL,
  48420. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
  48421. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_LABEL,
  48422. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  48423. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  48424. (void*)&&ZEND_NULL_LABEL,
  48425. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_LABEL,
  48426. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_LABEL,
  48427. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
  48428. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
  48429. (void*)&&ZEND_NULL_LABEL,
  48430. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_LABEL,
  48431. (void*)&&ZEND_HANDLE_EXCEPTION_SPEC_LABEL,
  48432. (void*)&&ZEND_USER_OPCODE_SPEC_LABEL,
  48433. (void*)&&ZEND_ASSERT_CHECK_SPEC_LABEL,
  48434. (void*)&&ZEND_JMP_SET_SPEC_CONST_LABEL,
  48435. (void*)&&ZEND_JMP_SET_SPEC_TMP_LABEL,
  48436. (void*)&&ZEND_JMP_SET_SPEC_VAR_LABEL,
  48437. (void*)&&ZEND_NULL_LABEL,
  48438. (void*)&&ZEND_JMP_SET_SPEC_CV_LABEL,
  48439. (void*)&&ZEND_UNSET_CV_SPEC_CV_UNUSED_LABEL,
  48440. (void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_LABEL,
  48441. (void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_LABEL,
  48442. (void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CONST_LABEL,
  48443. (void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
  48444. (void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
  48445. (void*)&&ZEND_NULL_LABEL,
  48446. (void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CV_LABEL,
  48447. (void*)&&ZEND_SEPARATE_SPEC_VAR_UNUSED_LABEL,
  48448. (void*)&&ZEND_NULL_LABEL,
  48449. (void*)&&ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_LABEL,
  48450. (void*)&&ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_LABEL,
  48451. (void*)&&ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_LABEL,
  48452. (void*)&&ZEND_FETCH_CLASS_NAME_SPEC_CV_LABEL,
  48453. (void*)&&ZEND_CALL_TRAMPOLINE_SPEC_LABEL,
  48454. (void*)&&ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_LABEL,
  48455. (void*)&&ZEND_DISCARD_EXCEPTION_SPEC_LABEL,
  48456. (void*)&&ZEND_YIELD_SPEC_CONST_CONST_LABEL,
  48457. (void*)&&ZEND_YIELD_SPEC_CONST_TMPVAR_LABEL,
  48458. (void*)&&ZEND_YIELD_SPEC_CONST_TMPVAR_LABEL,
  48459. (void*)&&ZEND_YIELD_SPEC_CONST_UNUSED_LABEL,
  48460. (void*)&&ZEND_YIELD_SPEC_CONST_CV_LABEL,
  48461. (void*)&&ZEND_YIELD_SPEC_TMP_CONST_LABEL,
  48462. (void*)&&ZEND_YIELD_SPEC_TMP_TMPVAR_LABEL,
  48463. (void*)&&ZEND_YIELD_SPEC_TMP_TMPVAR_LABEL,
  48464. (void*)&&ZEND_YIELD_SPEC_TMP_UNUSED_LABEL,
  48465. (void*)&&ZEND_YIELD_SPEC_TMP_CV_LABEL,
  48466. (void*)&&ZEND_YIELD_SPEC_VAR_CONST_LABEL,
  48467. (void*)&&ZEND_YIELD_SPEC_VAR_TMPVAR_LABEL,
  48468. (void*)&&ZEND_YIELD_SPEC_VAR_TMPVAR_LABEL,
  48469. (void*)&&ZEND_YIELD_SPEC_VAR_UNUSED_LABEL,
  48470. (void*)&&ZEND_YIELD_SPEC_VAR_CV_LABEL,
  48471. (void*)&&ZEND_YIELD_SPEC_UNUSED_CONST_LABEL,
  48472. (void*)&&ZEND_YIELD_SPEC_UNUSED_TMPVAR_LABEL,
  48473. (void*)&&ZEND_YIELD_SPEC_UNUSED_TMPVAR_LABEL,
  48474. (void*)&&ZEND_YIELD_SPEC_UNUSED_UNUSED_LABEL,
  48475. (void*)&&ZEND_YIELD_SPEC_UNUSED_CV_LABEL,
  48476. (void*)&&ZEND_YIELD_SPEC_CV_CONST_LABEL,
  48477. (void*)&&ZEND_YIELD_SPEC_CV_TMPVAR_LABEL,
  48478. (void*)&&ZEND_YIELD_SPEC_CV_TMPVAR_LABEL,
  48479. (void*)&&ZEND_YIELD_SPEC_CV_UNUSED_LABEL,
  48480. (void*)&&ZEND_YIELD_SPEC_CV_CV_LABEL,
  48481. (void*)&&ZEND_GENERATOR_RETURN_SPEC_CONST_LABEL,
  48482. (void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
  48483. (void*)&&ZEND_GENERATOR_RETURN_SPEC_TMP_LABEL,
  48484. (void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
  48485. (void*)&&ZEND_GENERATOR_RETURN_SPEC_VAR_LABEL,
  48486. (void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
  48487. (void*)&&ZEND_NULL_LABEL,
  48488. (void*)&&ZEND_NULL_LABEL,
  48489. (void*)&&ZEND_GENERATOR_RETURN_SPEC_CV_LABEL,
  48490. (void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
  48491. (void*)&&ZEND_FAST_CALL_SPEC_LABEL,
  48492. (void*)&&ZEND_FAST_RET_SPEC_LABEL,
  48493. (void*)&&ZEND_RECV_VARIADIC_SPEC_UNUSED_LABEL,
  48494. (void*)&&ZEND_SEND_UNPACK_SPEC_LABEL,
  48495. (void*)&&ZEND_YIELD_FROM_SPEC_CONST_LABEL,
  48496. (void*)&&ZEND_YIELD_FROM_SPEC_TMPVAR_LABEL,
  48497. (void*)&&ZEND_YIELD_FROM_SPEC_TMPVAR_LABEL,
  48498. (void*)&&ZEND_NULL_LABEL,
  48499. (void*)&&ZEND_YIELD_FROM_SPEC_CV_LABEL,
  48500. (void*)&&ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_LABEL,
  48501. (void*)&&ZEND_BIND_GLOBAL_SPEC_CV_CONST_LABEL,
  48502. (void*)&&ZEND_COALESCE_SPEC_CONST_LABEL,
  48503. (void*)&&ZEND_COALESCE_SPEC_TMP_LABEL,
  48504. (void*)&&ZEND_COALESCE_SPEC_VAR_LABEL,
  48505. (void*)&&ZEND_NULL_LABEL,
  48506. (void*)&&ZEND_COALESCE_SPEC_CV_LABEL,
  48507. (void*)&&ZEND_SPACESHIP_SPEC_CONST_CONST_LABEL,
  48508. (void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
  48509. (void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
  48510. (void*)&&ZEND_NULL_LABEL,
  48511. (void*)&&ZEND_SPACESHIP_SPEC_CONST_CV_LABEL,
  48512. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
  48513. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
  48514. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
  48515. (void*)&&ZEND_NULL_LABEL,
  48516. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
  48517. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
  48518. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
  48519. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
  48520. (void*)&&ZEND_NULL_LABEL,
  48521. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
  48522. (void*)&&ZEND_NULL_LABEL,
  48523. (void*)&&ZEND_NULL_LABEL,
  48524. (void*)&&ZEND_NULL_LABEL,
  48525. (void*)&&ZEND_NULL_LABEL,
  48526. (void*)&&ZEND_NULL_LABEL,
  48527. (void*)&&ZEND_SPACESHIP_SPEC_CV_CONST_LABEL,
  48528. (void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
  48529. (void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
  48530. (void*)&&ZEND_NULL_LABEL,
  48531. (void*)&&ZEND_SPACESHIP_SPEC_CV_CV_LABEL,
  48532. (void*)&&ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_LABEL,
  48533. (void*)&&ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_LABEL,
  48534. (void*)&&ZEND_NULL_LABEL,
  48535. (void*)&&ZEND_NULL_LABEL,
  48536. (void*)&&ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_LABEL,
  48537. (void*)&&ZEND_NULL_LABEL,
  48538. (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_LABEL,
  48539. (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_LABEL,
  48540. (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_LABEL,
  48541. (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_LABEL,
  48542. (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_LABEL,
  48543. (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_LABEL,
  48544. (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_LABEL,
  48545. (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_LABEL,
  48546. (void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_LABEL,
  48547. (void*)&&ZEND_NULL_LABEL,
  48548. (void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_LABEL,
  48549. (void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_LABEL,
  48550. (void*)&&ZEND_NULL_LABEL,
  48551. (void*)&&ZEND_BIND_LEXICAL_SPEC_TMP_CV_LABEL,
  48552. (void*)&&ZEND_BIND_STATIC_SPEC_CV_UNUSED_LABEL,
  48553. (void*)&&ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_LABEL,
  48554. (void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_LABEL,
  48555. (void*)&&ZEND_NULL_LABEL,
  48556. (void*)&&ZEND_NULL_LABEL,
  48557. (void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_LABEL,
  48558. (void*)&&ZEND_NULL_LABEL,
  48559. (void*)&&ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_LABEL,
  48560. (void*)&&ZEND_SWITCH_LONG_SPEC_CONST_CONST_LABEL,
  48561. (void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48562. (void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48563. (void*)&&ZEND_NULL_LABEL,
  48564. (void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48565. (void*)&&ZEND_SWITCH_STRING_SPEC_CONST_CONST_LABEL,
  48566. (void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
  48567. (void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
  48568. (void*)&&ZEND_NULL_LABEL,
  48569. (void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
  48570. (void*)&&ZEND_IN_ARRAY_SPEC_CONST_CONST_LABEL,
  48571. (void*)&&ZEND_IN_ARRAY_SPEC_TMP_CONST_LABEL,
  48572. (void*)&&ZEND_IN_ARRAY_SPEC_VAR_CONST_LABEL,
  48573. (void*)&&ZEND_NULL_LABEL,
  48574. (void*)&&ZEND_IN_ARRAY_SPEC_CV_CONST_LABEL,
  48575. (void*)&&ZEND_COUNT_SPEC_CONST_UNUSED_LABEL,
  48576. (void*)&&ZEND_COUNT_SPEC_TMPVAR_UNUSED_LABEL,
  48577. (void*)&&ZEND_COUNT_SPEC_TMPVAR_UNUSED_LABEL,
  48578. (void*)&&ZEND_NULL_LABEL,
  48579. (void*)&&ZEND_COUNT_SPEC_CV_UNUSED_LABEL,
  48580. (void*)&&ZEND_GET_CLASS_SPEC_CONST_UNUSED_LABEL,
  48581. (void*)&&ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_LABEL,
  48582. (void*)&&ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_LABEL,
  48583. (void*)&&ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_LABEL,
  48584. (void*)&&ZEND_GET_CLASS_SPEC_CV_UNUSED_LABEL,
  48585. (void*)&&ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_LABEL,
  48586. (void*)&&ZEND_GET_TYPE_SPEC_CONST_UNUSED_LABEL,
  48587. (void*)&&ZEND_GET_TYPE_SPEC_TMP_UNUSED_LABEL,
  48588. (void*)&&ZEND_GET_TYPE_SPEC_VAR_UNUSED_LABEL,
  48589. (void*)&&ZEND_NULL_LABEL,
  48590. (void*)&&ZEND_GET_TYPE_SPEC_CV_UNUSED_LABEL,
  48591. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_LABEL,
  48592. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_LABEL,
  48593. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_LABEL,
  48594. (void*)&&ZEND_NULL_LABEL,
  48595. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_LABEL,
  48596. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_LABEL,
  48597. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
  48598. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
  48599. (void*)&&ZEND_NULL_LABEL,
  48600. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_LABEL,
  48601. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_LABEL,
  48602. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
  48603. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
  48604. (void*)&&ZEND_NULL_LABEL,
  48605. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_LABEL,
  48606. (void*)&&ZEND_NULL_LABEL,
  48607. (void*)&&ZEND_NULL_LABEL,
  48608. (void*)&&ZEND_NULL_LABEL,
  48609. (void*)&&ZEND_NULL_LABEL,
  48610. (void*)&&ZEND_NULL_LABEL,
  48611. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_LABEL,
  48612. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_LABEL,
  48613. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_LABEL,
  48614. (void*)&&ZEND_NULL_LABEL,
  48615. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_LABEL,
  48616. (void*)&&ZEND_MATCH_SPEC_CONST_CONST_LABEL,
  48617. (void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
  48618. (void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
  48619. (void*)&&ZEND_NULL_LABEL,
  48620. (void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
  48621. (void*)&&ZEND_NULL_LABEL,
  48622. (void*)&&ZEND_NULL_LABEL,
  48623. (void*)&&ZEND_NULL_LABEL,
  48624. (void*)&&ZEND_NULL_LABEL,
  48625. (void*)&&ZEND_NULL_LABEL,
  48626. (void*)&&ZEND_CASE_STRICT_SPEC_TMP_CONST_LABEL,
  48627. (void*)&&ZEND_CASE_STRICT_SPEC_TMP_TMP_LABEL,
  48628. (void*)&&ZEND_CASE_STRICT_SPEC_TMP_VAR_LABEL,
  48629. (void*)&&ZEND_NULL_LABEL,
  48630. (void*)&&ZEND_CASE_STRICT_SPEC_TMP_CV_LABEL,
  48631. (void*)&&ZEND_CASE_STRICT_SPEC_VAR_CONST_LABEL,
  48632. (void*)&&ZEND_CASE_STRICT_SPEC_VAR_TMP_LABEL,
  48633. (void*)&&ZEND_CASE_STRICT_SPEC_VAR_VAR_LABEL,
  48634. (void*)&&ZEND_NULL_LABEL,
  48635. (void*)&&ZEND_CASE_STRICT_SPEC_VAR_CV_LABEL,
  48636. (void*)&&ZEND_NULL_LABEL,
  48637. (void*)&&ZEND_NULL_LABEL,
  48638. (void*)&&ZEND_NULL_LABEL,
  48639. (void*)&&ZEND_NULL_LABEL,
  48640. (void*)&&ZEND_NULL_LABEL,
  48641. (void*)&&ZEND_NULL_LABEL,
  48642. (void*)&&ZEND_NULL_LABEL,
  48643. (void*)&&ZEND_NULL_LABEL,
  48644. (void*)&&ZEND_NULL_LABEL,
  48645. (void*)&&ZEND_NULL_LABEL,
  48646. (void*)&&ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_LABEL,
  48647. (void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
  48648. (void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
  48649. (void*)&&ZEND_NULL_LABEL,
  48650. (void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
  48651. (void*)&&ZEND_JMP_NULL_SPEC_CONST_LABEL,
  48652. (void*)&&ZEND_JMP_NULL_SPEC_TMP_LABEL,
  48653. (void*)&&ZEND_JMP_NULL_SPEC_VAR_LABEL,
  48654. (void*)&&ZEND_NULL_LABEL,
  48655. (void*)&&ZEND_JMP_NULL_SPEC_CV_LABEL,
  48656. (void*)&&ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_LABEL,
  48657. (void*)&&ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_LABEL,
  48658. (void*)&&ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_LABEL,
  48659. (void*)&&ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_LABEL,
  48660. (void*)&&ZEND_RECV_NOTYPE_SPEC_LABEL,
  48661. (void*)&&ZEND_JMP_FORWARD_SPEC_LABEL,
  48662. (void*)&&ZEND_NULL_LABEL,
  48663. (void*)&&ZEND_NULL_LABEL,
  48664. (void*)&&ZEND_NULL_LABEL,
  48665. (void*)&&ZEND_NULL_LABEL,
  48666. (void*)&&ZEND_NULL_LABEL,
  48667. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48668. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48669. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48670. (void*)&&ZEND_NULL_LABEL,
  48671. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48672. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48673. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48674. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48675. (void*)&&ZEND_NULL_LABEL,
  48676. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48677. (void*)&&ZEND_NULL_LABEL,
  48678. (void*)&&ZEND_NULL_LABEL,
  48679. (void*)&&ZEND_NULL_LABEL,
  48680. (void*)&&ZEND_NULL_LABEL,
  48681. (void*)&&ZEND_NULL_LABEL,
  48682. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48683. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48684. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48685. (void*)&&ZEND_NULL_LABEL,
  48686. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48687. (void*)&&ZEND_NULL_LABEL,
  48688. (void*)&&ZEND_NULL_LABEL,
  48689. (void*)&&ZEND_NULL_LABEL,
  48690. (void*)&&ZEND_NULL_LABEL,
  48691. (void*)&&ZEND_NULL_LABEL,
  48692. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48693. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48694. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48695. (void*)&&ZEND_NULL_LABEL,
  48696. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48697. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48698. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48699. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48700. (void*)&&ZEND_NULL_LABEL,
  48701. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48702. (void*)&&ZEND_NULL_LABEL,
  48703. (void*)&&ZEND_NULL_LABEL,
  48704. (void*)&&ZEND_NULL_LABEL,
  48705. (void*)&&ZEND_NULL_LABEL,
  48706. (void*)&&ZEND_NULL_LABEL,
  48707. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48708. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48709. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48710. (void*)&&ZEND_NULL_LABEL,
  48711. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48712. (void*)&&ZEND_NULL_LABEL,
  48713. (void*)&&ZEND_NULL_LABEL,
  48714. (void*)&&ZEND_NULL_LABEL,
  48715. (void*)&&ZEND_NULL_LABEL,
  48716. (void*)&&ZEND_NULL_LABEL,
  48717. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48718. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48719. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48720. (void*)&&ZEND_NULL_LABEL,
  48721. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48722. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48723. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48724. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48725. (void*)&&ZEND_NULL_LABEL,
  48726. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48727. (void*)&&ZEND_NULL_LABEL,
  48728. (void*)&&ZEND_NULL_LABEL,
  48729. (void*)&&ZEND_NULL_LABEL,
  48730. (void*)&&ZEND_NULL_LABEL,
  48731. (void*)&&ZEND_NULL_LABEL,
  48732. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48733. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48734. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48735. (void*)&&ZEND_NULL_LABEL,
  48736. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48737. (void*)&&ZEND_NULL_LABEL,
  48738. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
  48739. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
  48740. (void*)&&ZEND_NULL_LABEL,
  48741. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
  48742. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48743. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48744. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48745. (void*)&&ZEND_NULL_LABEL,
  48746. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48747. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48748. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48749. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48750. (void*)&&ZEND_NULL_LABEL,
  48751. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48752. (void*)&&ZEND_NULL_LABEL,
  48753. (void*)&&ZEND_NULL_LABEL,
  48754. (void*)&&ZEND_NULL_LABEL,
  48755. (void*)&&ZEND_NULL_LABEL,
  48756. (void*)&&ZEND_NULL_LABEL,
  48757. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48758. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48759. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48760. (void*)&&ZEND_NULL_LABEL,
  48761. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48762. (void*)&&ZEND_NULL_LABEL,
  48763. (void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
  48764. (void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
  48765. (void*)&&ZEND_NULL_LABEL,
  48766. (void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
  48767. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48768. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48769. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48770. (void*)&&ZEND_NULL_LABEL,
  48771. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48772. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48773. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48774. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48775. (void*)&&ZEND_NULL_LABEL,
  48776. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48777. (void*)&&ZEND_NULL_LABEL,
  48778. (void*)&&ZEND_NULL_LABEL,
  48779. (void*)&&ZEND_NULL_LABEL,
  48780. (void*)&&ZEND_NULL_LABEL,
  48781. (void*)&&ZEND_NULL_LABEL,
  48782. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48783. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48784. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48785. (void*)&&ZEND_NULL_LABEL,
  48786. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48787. (void*)&&ZEND_NULL_LABEL,
  48788. (void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  48789. (void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  48790. (void*)&&ZEND_NULL_LABEL,
  48791. (void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  48792. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48793. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48794. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48795. (void*)&&ZEND_NULL_LABEL,
  48796. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48797. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48798. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48799. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48800. (void*)&&ZEND_NULL_LABEL,
  48801. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48802. (void*)&&ZEND_NULL_LABEL,
  48803. (void*)&&ZEND_NULL_LABEL,
  48804. (void*)&&ZEND_NULL_LABEL,
  48805. (void*)&&ZEND_NULL_LABEL,
  48806. (void*)&&ZEND_NULL_LABEL,
  48807. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48808. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48809. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48810. (void*)&&ZEND_NULL_LABEL,
  48811. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48812. (void*)&&ZEND_NULL_LABEL,
  48813. (void*)&&ZEND_NULL_LABEL,
  48814. (void*)&&ZEND_NULL_LABEL,
  48815. (void*)&&ZEND_NULL_LABEL,
  48816. (void*)&&ZEND_NULL_LABEL,
  48817. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48818. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48819. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48820. (void*)&&ZEND_NULL_LABEL,
  48821. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48822. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48823. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48824. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48825. (void*)&&ZEND_NULL_LABEL,
  48826. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48827. (void*)&&ZEND_NULL_LABEL,
  48828. (void*)&&ZEND_NULL_LABEL,
  48829. (void*)&&ZEND_NULL_LABEL,
  48830. (void*)&&ZEND_NULL_LABEL,
  48831. (void*)&&ZEND_NULL_LABEL,
  48832. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48833. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48834. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48835. (void*)&&ZEND_NULL_LABEL,
  48836. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48837. (void*)&&ZEND_NULL_LABEL,
  48838. (void*)&&ZEND_NULL_LABEL,
  48839. (void*)&&ZEND_NULL_LABEL,
  48840. (void*)&&ZEND_NULL_LABEL,
  48841. (void*)&&ZEND_NULL_LABEL,
  48842. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48843. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48844. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48845. (void*)&&ZEND_NULL_LABEL,
  48846. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48847. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48848. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48849. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48850. (void*)&&ZEND_NULL_LABEL,
  48851. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48852. (void*)&&ZEND_NULL_LABEL,
  48853. (void*)&&ZEND_NULL_LABEL,
  48854. (void*)&&ZEND_NULL_LABEL,
  48855. (void*)&&ZEND_NULL_LABEL,
  48856. (void*)&&ZEND_NULL_LABEL,
  48857. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48858. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48859. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48860. (void*)&&ZEND_NULL_LABEL,
  48861. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48862. (void*)&&ZEND_NULL_LABEL,
  48863. (void*)&&ZEND_NULL_LABEL,
  48864. (void*)&&ZEND_NULL_LABEL,
  48865. (void*)&&ZEND_NULL_LABEL,
  48866. (void*)&&ZEND_NULL_LABEL,
  48867. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48868. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48869. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48870. (void*)&&ZEND_NULL_LABEL,
  48871. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48872. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48873. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48874. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48875. (void*)&&ZEND_NULL_LABEL,
  48876. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48877. (void*)&&ZEND_NULL_LABEL,
  48878. (void*)&&ZEND_NULL_LABEL,
  48879. (void*)&&ZEND_NULL_LABEL,
  48880. (void*)&&ZEND_NULL_LABEL,
  48881. (void*)&&ZEND_NULL_LABEL,
  48882. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48883. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48884. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48885. (void*)&&ZEND_NULL_LABEL,
  48886. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48887. (void*)&&ZEND_NULL_LABEL,
  48888. (void*)&&ZEND_NULL_LABEL,
  48889. (void*)&&ZEND_NULL_LABEL,
  48890. (void*)&&ZEND_NULL_LABEL,
  48891. (void*)&&ZEND_NULL_LABEL,
  48892. (void*)&&ZEND_NULL_LABEL,
  48893. (void*)&&ZEND_NULL_LABEL,
  48894. (void*)&&ZEND_NULL_LABEL,
  48895. (void*)&&ZEND_NULL_LABEL,
  48896. (void*)&&ZEND_NULL_LABEL,
  48897. (void*)&&ZEND_NULL_LABEL,
  48898. (void*)&&ZEND_NULL_LABEL,
  48899. (void*)&&ZEND_NULL_LABEL,
  48900. (void*)&&ZEND_NULL_LABEL,
  48901. (void*)&&ZEND_NULL_LABEL,
  48902. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48903. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  48904. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  48905. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48906. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48907. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48908. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48909. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48910. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48911. (void*)&&ZEND_NULL_LABEL,
  48912. (void*)&&ZEND_NULL_LABEL,
  48913. (void*)&&ZEND_NULL_LABEL,
  48914. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48915. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48916. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48917. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48918. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  48919. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  48920. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48921. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48922. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48923. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48924. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48925. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48926. (void*)&&ZEND_NULL_LABEL,
  48927. (void*)&&ZEND_NULL_LABEL,
  48928. (void*)&&ZEND_NULL_LABEL,
  48929. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48930. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48931. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48932. (void*)&&ZEND_NULL_LABEL,
  48933. (void*)&&ZEND_NULL_LABEL,
  48934. (void*)&&ZEND_NULL_LABEL,
  48935. (void*)&&ZEND_NULL_LABEL,
  48936. (void*)&&ZEND_NULL_LABEL,
  48937. (void*)&&ZEND_NULL_LABEL,
  48938. (void*)&&ZEND_NULL_LABEL,
  48939. (void*)&&ZEND_NULL_LABEL,
  48940. (void*)&&ZEND_NULL_LABEL,
  48941. (void*)&&ZEND_NULL_LABEL,
  48942. (void*)&&ZEND_NULL_LABEL,
  48943. (void*)&&ZEND_NULL_LABEL,
  48944. (void*)&&ZEND_NULL_LABEL,
  48945. (void*)&&ZEND_NULL_LABEL,
  48946. (void*)&&ZEND_NULL_LABEL,
  48947. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48948. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  48949. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  48950. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48951. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48952. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48953. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48954. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48955. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48956. (void*)&&ZEND_NULL_LABEL,
  48957. (void*)&&ZEND_NULL_LABEL,
  48958. (void*)&&ZEND_NULL_LABEL,
  48959. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48960. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48961. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48962. (void*)&&ZEND_NULL_LABEL,
  48963. (void*)&&ZEND_NULL_LABEL,
  48964. (void*)&&ZEND_NULL_LABEL,
  48965. (void*)&&ZEND_NULL_LABEL,
  48966. (void*)&&ZEND_NULL_LABEL,
  48967. (void*)&&ZEND_NULL_LABEL,
  48968. (void*)&&ZEND_NULL_LABEL,
  48969. (void*)&&ZEND_NULL_LABEL,
  48970. (void*)&&ZEND_NULL_LABEL,
  48971. (void*)&&ZEND_NULL_LABEL,
  48972. (void*)&&ZEND_NULL_LABEL,
  48973. (void*)&&ZEND_NULL_LABEL,
  48974. (void*)&&ZEND_NULL_LABEL,
  48975. (void*)&&ZEND_NULL_LABEL,
  48976. (void*)&&ZEND_NULL_LABEL,
  48977. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48978. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  48979. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  48980. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48981. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48982. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48983. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48984. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48985. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48986. (void*)&&ZEND_NULL_LABEL,
  48987. (void*)&&ZEND_NULL_LABEL,
  48988. (void*)&&ZEND_NULL_LABEL,
  48989. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48990. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48991. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48992. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48993. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  48994. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  48995. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48996. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48997. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48998. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48999. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49000. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49001. (void*)&&ZEND_NULL_LABEL,
  49002. (void*)&&ZEND_NULL_LABEL,
  49003. (void*)&&ZEND_NULL_LABEL,
  49004. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49005. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49006. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49007. (void*)&&ZEND_NULL_LABEL,
  49008. (void*)&&ZEND_NULL_LABEL,
  49009. (void*)&&ZEND_NULL_LABEL,
  49010. (void*)&&ZEND_NULL_LABEL,
  49011. (void*)&&ZEND_NULL_LABEL,
  49012. (void*)&&ZEND_NULL_LABEL,
  49013. (void*)&&ZEND_NULL_LABEL,
  49014. (void*)&&ZEND_NULL_LABEL,
  49015. (void*)&&ZEND_NULL_LABEL,
  49016. (void*)&&ZEND_NULL_LABEL,
  49017. (void*)&&ZEND_NULL_LABEL,
  49018. (void*)&&ZEND_NULL_LABEL,
  49019. (void*)&&ZEND_NULL_LABEL,
  49020. (void*)&&ZEND_NULL_LABEL,
  49021. (void*)&&ZEND_NULL_LABEL,
  49022. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49023. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49024. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49025. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49026. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49027. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49028. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49029. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49030. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49031. (void*)&&ZEND_NULL_LABEL,
  49032. (void*)&&ZEND_NULL_LABEL,
  49033. (void*)&&ZEND_NULL_LABEL,
  49034. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49035. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49036. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49037. (void*)&&ZEND_NULL_LABEL,
  49038. (void*)&&ZEND_NULL_LABEL,
  49039. (void*)&&ZEND_NULL_LABEL,
  49040. (void*)&&ZEND_NULL_LABEL,
  49041. (void*)&&ZEND_NULL_LABEL,
  49042. (void*)&&ZEND_NULL_LABEL,
  49043. (void*)&&ZEND_NULL_LABEL,
  49044. (void*)&&ZEND_NULL_LABEL,
  49045. (void*)&&ZEND_NULL_LABEL,
  49046. (void*)&&ZEND_NULL_LABEL,
  49047. (void*)&&ZEND_NULL_LABEL,
  49048. (void*)&&ZEND_NULL_LABEL,
  49049. (void*)&&ZEND_NULL_LABEL,
  49050. (void*)&&ZEND_NULL_LABEL,
  49051. (void*)&&ZEND_NULL_LABEL,
  49052. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  49053. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49054. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49055. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49056. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49057. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49058. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49059. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49060. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49061. (void*)&&ZEND_NULL_LABEL,
  49062. (void*)&&ZEND_NULL_LABEL,
  49063. (void*)&&ZEND_NULL_LABEL,
  49064. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49065. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49066. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49067. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  49068. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49069. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49070. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49071. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49072. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49073. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49074. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49075. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49076. (void*)&&ZEND_NULL_LABEL,
  49077. (void*)&&ZEND_NULL_LABEL,
  49078. (void*)&&ZEND_NULL_LABEL,
  49079. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49080. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49081. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49082. (void*)&&ZEND_NULL_LABEL,
  49083. (void*)&&ZEND_NULL_LABEL,
  49084. (void*)&&ZEND_NULL_LABEL,
  49085. (void*)&&ZEND_NULL_LABEL,
  49086. (void*)&&ZEND_NULL_LABEL,
  49087. (void*)&&ZEND_NULL_LABEL,
  49088. (void*)&&ZEND_NULL_LABEL,
  49089. (void*)&&ZEND_NULL_LABEL,
  49090. (void*)&&ZEND_NULL_LABEL,
  49091. (void*)&&ZEND_NULL_LABEL,
  49092. (void*)&&ZEND_NULL_LABEL,
  49093. (void*)&&ZEND_NULL_LABEL,
  49094. (void*)&&ZEND_NULL_LABEL,
  49095. (void*)&&ZEND_NULL_LABEL,
  49096. (void*)&&ZEND_NULL_LABEL,
  49097. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  49098. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49099. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49100. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49101. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49102. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49103. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49104. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49105. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49106. (void*)&&ZEND_NULL_LABEL,
  49107. (void*)&&ZEND_NULL_LABEL,
  49108. (void*)&&ZEND_NULL_LABEL,
  49109. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49110. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49111. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49112. (void*)&&ZEND_NULL_LABEL,
  49113. (void*)&&ZEND_NULL_LABEL,
  49114. (void*)&&ZEND_NULL_LABEL,
  49115. (void*)&&ZEND_NULL_LABEL,
  49116. (void*)&&ZEND_NULL_LABEL,
  49117. (void*)&&ZEND_NULL_LABEL,
  49118. (void*)&&ZEND_NULL_LABEL,
  49119. (void*)&&ZEND_NULL_LABEL,
  49120. (void*)&&ZEND_NULL_LABEL,
  49121. (void*)&&ZEND_NULL_LABEL,
  49122. (void*)&&ZEND_NULL_LABEL,
  49123. (void*)&&ZEND_NULL_LABEL,
  49124. (void*)&&ZEND_NULL_LABEL,
  49125. (void*)&&ZEND_NULL_LABEL,
  49126. (void*)&&ZEND_NULL_LABEL,
  49127. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49128. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49129. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49130. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49131. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49132. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49133. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49134. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49135. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49136. (void*)&&ZEND_NULL_LABEL,
  49137. (void*)&&ZEND_NULL_LABEL,
  49138. (void*)&&ZEND_NULL_LABEL,
  49139. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49140. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49141. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49142. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49143. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49144. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49145. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49146. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49147. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49148. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49149. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49150. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49151. (void*)&&ZEND_NULL_LABEL,
  49152. (void*)&&ZEND_NULL_LABEL,
  49153. (void*)&&ZEND_NULL_LABEL,
  49154. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49155. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49156. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49157. (void*)&&ZEND_NULL_LABEL,
  49158. (void*)&&ZEND_NULL_LABEL,
  49159. (void*)&&ZEND_NULL_LABEL,
  49160. (void*)&&ZEND_NULL_LABEL,
  49161. (void*)&&ZEND_NULL_LABEL,
  49162. (void*)&&ZEND_NULL_LABEL,
  49163. (void*)&&ZEND_NULL_LABEL,
  49164. (void*)&&ZEND_NULL_LABEL,
  49165. (void*)&&ZEND_NULL_LABEL,
  49166. (void*)&&ZEND_NULL_LABEL,
  49167. (void*)&&ZEND_NULL_LABEL,
  49168. (void*)&&ZEND_NULL_LABEL,
  49169. (void*)&&ZEND_NULL_LABEL,
  49170. (void*)&&ZEND_NULL_LABEL,
  49171. (void*)&&ZEND_NULL_LABEL,
  49172. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49173. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49174. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49175. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49176. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49177. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49178. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49179. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49180. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49181. (void*)&&ZEND_NULL_LABEL,
  49182. (void*)&&ZEND_NULL_LABEL,
  49183. (void*)&&ZEND_NULL_LABEL,
  49184. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49185. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49186. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49187. (void*)&&ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_LABEL,
  49188. (void*)&&ZEND_NULL_LABEL,
  49189. (void*)&&ZEND_NULL_LABEL,
  49190. (void*)&&ZEND_NULL_LABEL,
  49191. (void*)&&ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_LABEL,
  49192. (void*)&&ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_LABEL,
  49193. (void*)&&ZEND_NULL_LABEL,
  49194. (void*)&&ZEND_NULL_LABEL,
  49195. (void*)&&ZEND_NULL_LABEL,
  49196. (void*)&&ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_LABEL,
  49197. (void*)&&ZEND_NULL_LABEL,
  49198. (void*)&&ZEND_NULL_LABEL,
  49199. (void*)&&ZEND_NULL_LABEL,
  49200. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
  49201. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49202. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49203. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
  49204. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49205. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49206. (void*)&&ZEND_NULL_LABEL,
  49207. (void*)&&ZEND_NULL_LABEL,
  49208. (void*)&&ZEND_NULL_LABEL,
  49209. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
  49210. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49211. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49212. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
  49213. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49214. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49215. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49216. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49217. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49218. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49219. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49220. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49221. (void*)&&ZEND_NULL_LABEL,
  49222. (void*)&&ZEND_NULL_LABEL,
  49223. (void*)&&ZEND_NULL_LABEL,
  49224. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49225. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49226. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49227. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
  49228. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49229. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49230. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49231. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49232. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49233. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49234. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49235. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49236. (void*)&&ZEND_NULL_LABEL,
  49237. (void*)&&ZEND_NULL_LABEL,
  49238. (void*)&&ZEND_NULL_LABEL,
  49239. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49240. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49241. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49242. (void*)&&ZEND_NULL_LABEL,
  49243. (void*)&&ZEND_NULL_LABEL,
  49244. (void*)&&ZEND_NULL_LABEL,
  49245. (void*)&&ZEND_NULL_LABEL,
  49246. (void*)&&ZEND_NULL_LABEL,
  49247. (void*)&&ZEND_NULL_LABEL,
  49248. (void*)&&ZEND_NULL_LABEL,
  49249. (void*)&&ZEND_NULL_LABEL,
  49250. (void*)&&ZEND_NULL_LABEL,
  49251. (void*)&&ZEND_NULL_LABEL,
  49252. (void*)&&ZEND_NULL_LABEL,
  49253. (void*)&&ZEND_NULL_LABEL,
  49254. (void*)&&ZEND_NULL_LABEL,
  49255. (void*)&&ZEND_NULL_LABEL,
  49256. (void*)&&ZEND_NULL_LABEL,
  49257. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
  49258. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49259. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49260. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49261. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49262. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49263. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49264. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49265. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49266. (void*)&&ZEND_NULL_LABEL,
  49267. (void*)&&ZEND_NULL_LABEL,
  49268. (void*)&&ZEND_NULL_LABEL,
  49269. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49270. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49271. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49272. (void*)&&ZEND_NULL_LABEL,
  49273. (void*)&&ZEND_NULL_LABEL,
  49274. (void*)&&ZEND_NULL_LABEL,
  49275. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  49276. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49277. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49278. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  49279. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49280. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49281. (void*)&&ZEND_NULL_LABEL,
  49282. (void*)&&ZEND_NULL_LABEL,
  49283. (void*)&&ZEND_NULL_LABEL,
  49284. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  49285. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49286. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49287. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49288. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49289. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49290. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49291. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49292. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49293. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49294. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49295. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49296. (void*)&&ZEND_NULL_LABEL,
  49297. (void*)&&ZEND_NULL_LABEL,
  49298. (void*)&&ZEND_NULL_LABEL,
  49299. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49300. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49301. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49302. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49303. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49304. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49305. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49306. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49307. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49308. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49309. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49310. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49311. (void*)&&ZEND_NULL_LABEL,
  49312. (void*)&&ZEND_NULL_LABEL,
  49313. (void*)&&ZEND_NULL_LABEL,
  49314. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49315. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49316. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49317. (void*)&&ZEND_NULL_LABEL,
  49318. (void*)&&ZEND_NULL_LABEL,
  49319. (void*)&&ZEND_NULL_LABEL,
  49320. (void*)&&ZEND_NULL_LABEL,
  49321. (void*)&&ZEND_NULL_LABEL,
  49322. (void*)&&ZEND_NULL_LABEL,
  49323. (void*)&&ZEND_NULL_LABEL,
  49324. (void*)&&ZEND_NULL_LABEL,
  49325. (void*)&&ZEND_NULL_LABEL,
  49326. (void*)&&ZEND_NULL_LABEL,
  49327. (void*)&&ZEND_NULL_LABEL,
  49328. (void*)&&ZEND_NULL_LABEL,
  49329. (void*)&&ZEND_NULL_LABEL,
  49330. (void*)&&ZEND_NULL_LABEL,
  49331. (void*)&&ZEND_NULL_LABEL,
  49332. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49333. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49334. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49335. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49336. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49337. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49338. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49339. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49340. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49341. (void*)&&ZEND_NULL_LABEL,
  49342. (void*)&&ZEND_NULL_LABEL,
  49343. (void*)&&ZEND_NULL_LABEL,
  49344. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49345. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49346. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49347. (void*)&&ZEND_NULL_LABEL,
  49348. (void*)&&ZEND_NULL_LABEL,
  49349. (void*)&&ZEND_NULL_LABEL,
  49350. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
  49351. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49352. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49353. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
  49354. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49355. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49356. (void*)&&ZEND_NULL_LABEL,
  49357. (void*)&&ZEND_NULL_LABEL,
  49358. (void*)&&ZEND_NULL_LABEL,
  49359. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
  49360. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49361. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49362. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  49363. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49364. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49365. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49366. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49367. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49368. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49369. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49370. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49371. (void*)&&ZEND_NULL_LABEL,
  49372. (void*)&&ZEND_NULL_LABEL,
  49373. (void*)&&ZEND_NULL_LABEL,
  49374. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49375. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49376. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49377. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  49378. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49379. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49380. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49381. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49382. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49383. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49384. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49385. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49386. (void*)&&ZEND_NULL_LABEL,
  49387. (void*)&&ZEND_NULL_LABEL,
  49388. (void*)&&ZEND_NULL_LABEL,
  49389. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49390. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49391. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49392. (void*)&&ZEND_NULL_LABEL,
  49393. (void*)&&ZEND_NULL_LABEL,
  49394. (void*)&&ZEND_NULL_LABEL,
  49395. (void*)&&ZEND_NULL_LABEL,
  49396. (void*)&&ZEND_NULL_LABEL,
  49397. (void*)&&ZEND_NULL_LABEL,
  49398. (void*)&&ZEND_NULL_LABEL,
  49399. (void*)&&ZEND_NULL_LABEL,
  49400. (void*)&&ZEND_NULL_LABEL,
  49401. (void*)&&ZEND_NULL_LABEL,
  49402. (void*)&&ZEND_NULL_LABEL,
  49403. (void*)&&ZEND_NULL_LABEL,
  49404. (void*)&&ZEND_NULL_LABEL,
  49405. (void*)&&ZEND_NULL_LABEL,
  49406. (void*)&&ZEND_NULL_LABEL,
  49407. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  49408. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49409. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49410. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49411. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49412. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49413. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49414. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49415. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49416. (void*)&&ZEND_NULL_LABEL,
  49417. (void*)&&ZEND_NULL_LABEL,
  49418. (void*)&&ZEND_NULL_LABEL,
  49419. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49420. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49421. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49422. (void*)&&ZEND_NULL_LABEL,
  49423. (void*)&&ZEND_NULL_LABEL,
  49424. (void*)&&ZEND_NULL_LABEL,
  49425. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  49426. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49427. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49428. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  49429. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49430. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49431. (void*)&&ZEND_NULL_LABEL,
  49432. (void*)&&ZEND_NULL_LABEL,
  49433. (void*)&&ZEND_NULL_LABEL,
  49434. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  49435. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49436. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49437. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49438. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49439. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49440. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49441. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49442. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49443. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49444. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49445. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49446. (void*)&&ZEND_NULL_LABEL,
  49447. (void*)&&ZEND_NULL_LABEL,
  49448. (void*)&&ZEND_NULL_LABEL,
  49449. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49450. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49451. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49452. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49453. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49454. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49455. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49456. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49457. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49458. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49459. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49460. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49461. (void*)&&ZEND_NULL_LABEL,
  49462. (void*)&&ZEND_NULL_LABEL,
  49463. (void*)&&ZEND_NULL_LABEL,
  49464. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49465. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49466. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49467. (void*)&&ZEND_NULL_LABEL,
  49468. (void*)&&ZEND_NULL_LABEL,
  49469. (void*)&&ZEND_NULL_LABEL,
  49470. (void*)&&ZEND_NULL_LABEL,
  49471. (void*)&&ZEND_NULL_LABEL,
  49472. (void*)&&ZEND_NULL_LABEL,
  49473. (void*)&&ZEND_NULL_LABEL,
  49474. (void*)&&ZEND_NULL_LABEL,
  49475. (void*)&&ZEND_NULL_LABEL,
  49476. (void*)&&ZEND_NULL_LABEL,
  49477. (void*)&&ZEND_NULL_LABEL,
  49478. (void*)&&ZEND_NULL_LABEL,
  49479. (void*)&&ZEND_NULL_LABEL,
  49480. (void*)&&ZEND_NULL_LABEL,
  49481. (void*)&&ZEND_NULL_LABEL,
  49482. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49483. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49484. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49485. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49486. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49487. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49488. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49489. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49490. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49491. (void*)&&ZEND_NULL_LABEL,
  49492. (void*)&&ZEND_NULL_LABEL,
  49493. (void*)&&ZEND_NULL_LABEL,
  49494. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49495. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49496. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49497. (void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
  49498. (void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
  49499. (void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
  49500. (void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_LABEL,
  49501. (void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
  49502. (void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
  49503. (void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
  49504. (void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_LABEL,
  49505. (void*)&&ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
  49506. (void*)&&ZEND_POST_INC_LONG_SPEC_CV_LABEL,
  49507. (void*)&&ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
  49508. (void*)&&ZEND_POST_DEC_LONG_SPEC_CV_LABEL,
  49509. (void*)&&ZEND_QM_ASSIGN_LONG_SPEC_CONST_LABEL,
  49510. (void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
  49511. (void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
  49512. (void*)&&ZEND_NULL_LABEL,
  49513. (void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
  49514. (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_LABEL,
  49515. (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
  49516. (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
  49517. (void*)&&ZEND_NULL_LABEL,
  49518. (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
  49519. (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_CONST_LABEL,
  49520. (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
  49521. (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
  49522. (void*)&&ZEND_NULL_LABEL,
  49523. (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
  49524. (void*)&&ZEND_NULL_LABEL,
  49525. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
  49526. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
  49527. (void*)&&ZEND_NULL_LABEL,
  49528. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
  49529. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
  49530. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
  49531. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
  49532. (void*)&&ZEND_NULL_LABEL,
  49533. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
  49534. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
  49535. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
  49536. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
  49537. (void*)&&ZEND_NULL_LABEL,
  49538. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
  49539. (void*)&&ZEND_NULL_LABEL,
  49540. (void*)&&ZEND_NULL_LABEL,
  49541. (void*)&&ZEND_NULL_LABEL,
  49542. (void*)&&ZEND_NULL_LABEL,
  49543. (void*)&&ZEND_NULL_LABEL,
  49544. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_LABEL,
  49545. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
  49546. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
  49547. (void*)&&ZEND_NULL_LABEL,
  49548. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
  49549. (void*)&&ZEND_NULL_LABEL,
  49550. (void*)&&ZEND_NULL_LABEL,
  49551. (void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_VAR_LABEL,
  49552. (void*)&&ZEND_NULL_LABEL,
  49553. (void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_CV_LABEL,
  49554. (void*)&&ZEND_NULL_LABEL,
  49555. (void*)&&ZEND_NULL_LABEL,
  49556. (void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_LABEL,
  49557. (void*)&&ZEND_NULL_LABEL,
  49558. (void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_LABEL,
  49559. (void*)&&ZEND_SEND_VAL_SIMPLE_SPEC_CONST_LABEL,
  49560. (void*)&&ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_LABEL,
  49561. (void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
  49562. (void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_LABEL,
  49563. (void*)&&ZEND_NULL_LABEL
  49564. };
  49565. zend_opcode_handlers = (const void **) labels;
  49566. zend_handlers_count = sizeof(labels) / sizeof(void*);
  49567. memset(&hybrid_halt_op, 0, sizeof(hybrid_halt_op));
  49568. hybrid_halt_op.handler = (void*)&&HYBRID_HALT_LABEL;
  49569. #ifdef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE
  49570. memset(vm_stack_data.hybrid_jit_red_zone, 0, ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE);
  49571. #endif
  49572. if (zend_touch_vm_stack_data) {
  49573. zend_touch_vm_stack_data(&vm_stack_data);
  49574. }
  49575. goto HYBRID_HALT_LABEL;
  49576. }
  49577. #endif
  49578. LOAD_OPLINE();
  49579. ZEND_VM_LOOP_INTERRUPT_CHECK();
  49580. while (1) {
  49581. #if !defined(ZEND_VM_FP_GLOBAL_REG) || !defined(ZEND_VM_IP_GLOBAL_REG)
  49582. int ret;
  49583. #endif
  49584. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  49585. HYBRID_SWITCH() {
  49586. #else
  49587. #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
  49588. ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49589. if (UNEXPECTED(!OPLINE)) {
  49590. #else
  49591. if (UNEXPECTED((ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)) != 0)) {
  49592. #endif
  49593. #endif
  49594. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  49595. HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_OP_SPEC):
  49596. VM_TRACE(ZEND_ASSIGN_STATIC_PROP_OP_SPEC)
  49597. ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49598. HYBRID_BREAK();
  49599. HYBRID_CASE(ZEND_PRE_INC_STATIC_PROP_SPEC):
  49600. VM_TRACE(ZEND_PRE_INC_STATIC_PROP_SPEC)
  49601. ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49602. HYBRID_BREAK();
  49603. HYBRID_CASE(ZEND_POST_INC_STATIC_PROP_SPEC):
  49604. VM_TRACE(ZEND_POST_INC_STATIC_PROP_SPEC)
  49605. ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49606. HYBRID_BREAK();
  49607. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC):
  49608. VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC)
  49609. ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49610. HYBRID_BREAK();
  49611. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC):
  49612. VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC)
  49613. ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49614. HYBRID_BREAK();
  49615. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC):
  49616. VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC)
  49617. ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49618. HYBRID_BREAK();
  49619. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC):
  49620. VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC)
  49621. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49622. HYBRID_BREAK();
  49623. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC):
  49624. VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC)
  49625. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49626. HYBRID_BREAK();
  49627. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC):
  49628. VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC)
  49629. ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49630. HYBRID_BREAK();
  49631. HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST):
  49632. VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST)
  49633. ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49634. HYBRID_BREAK();
  49635. HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP):
  49636. VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP)
  49637. ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49638. HYBRID_BREAK();
  49639. HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR):
  49640. VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR)
  49641. ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49642. HYBRID_BREAK();
  49643. HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV):
  49644. VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV)
  49645. ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49646. HYBRID_BREAK();
  49647. HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_REF_SPEC):
  49648. VM_TRACE(ZEND_ASSIGN_STATIC_PROP_REF_SPEC)
  49649. ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49650. HYBRID_BREAK();
  49651. zend_leave_helper_SPEC_LABEL:
  49652. {
  49653. zend_execute_data *old_execute_data;
  49654. uint32_t call_info = EX_CALL_INFO();
  49655. SAVE_OPLINE();
  49656. if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) == 0)) {
  49657. EG(current_execute_data) = EX(prev_execute_data);
  49658. i_free_compiled_variables(execute_data);
  49659. #ifdef ZEND_PREFER_RELOAD
  49660. call_info = EX_CALL_INFO();
  49661. #endif
  49662. if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
  49663. OBJ_RELEASE(Z_OBJ(execute_data->This));
  49664. } else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
  49665. OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
  49666. }
  49667. EG(vm_stack_top) = (zval*)execute_data;
  49668. execute_data = EX(prev_execute_data);
  49669. if (UNEXPECTED(EG(exception) != NULL)) {
  49670. zend_rethrow_exception(execute_data);
  49671. HANDLE_EXCEPTION_LEAVE();
  49672. }
  49673. LOAD_NEXT_OPLINE();
  49674. ZEND_VM_LEAVE();
  49675. } else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
  49676. EG(current_execute_data) = EX(prev_execute_data);
  49677. i_free_compiled_variables(execute_data);
  49678. #ifdef ZEND_PREFER_RELOAD
  49679. call_info = EX_CALL_INFO();
  49680. #endif
  49681. if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
  49682. zend_clean_and_cache_symbol_table(EX(symbol_table));
  49683. }
  49684. if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
  49685. zend_free_extra_named_params(EX(extra_named_params));
  49686. }
  49687. /* Free extra args before releasing the closure,
  49688. * as that may free the op_array. */
  49689. zend_vm_stack_free_extra_args_ex(call_info, execute_data);
  49690. if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
  49691. OBJ_RELEASE(Z_OBJ(execute_data->This));
  49692. } else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
  49693. OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
  49694. }
  49695. old_execute_data = execute_data;
  49696. execute_data = EX(prev_execute_data);
  49697. zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
  49698. if (UNEXPECTED(EG(exception) != NULL)) {
  49699. zend_rethrow_exception(execute_data);
  49700. HANDLE_EXCEPTION_LEAVE();
  49701. }
  49702. LOAD_NEXT_OPLINE();
  49703. ZEND_VM_LEAVE();
  49704. } else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
  49705. zend_detach_symbol_table(execute_data);
  49706. zend_destroy_static_vars(&EX(func)->op_array);
  49707. destroy_op_array(&EX(func)->op_array);
  49708. efree_size(EX(func), sizeof(zend_op_array));
  49709. #ifdef ZEND_PREFER_RELOAD
  49710. call_info = EX_CALL_INFO();
  49711. #endif
  49712. old_execute_data = execute_data;
  49713. execute_data = EG(current_execute_data) = EX(prev_execute_data);
  49714. zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
  49715. zend_attach_symbol_table(execute_data);
  49716. if (UNEXPECTED(EG(exception) != NULL)) {
  49717. zend_rethrow_exception(execute_data);
  49718. HANDLE_EXCEPTION_LEAVE();
  49719. }
  49720. LOAD_NEXT_OPLINE();
  49721. ZEND_VM_LEAVE();
  49722. } else {
  49723. if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
  49724. EG(current_execute_data) = EX(prev_execute_data);
  49725. i_free_compiled_variables(execute_data);
  49726. #ifdef ZEND_PREFER_RELOAD
  49727. call_info = EX_CALL_INFO();
  49728. #endif
  49729. if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS))) {
  49730. if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
  49731. zend_clean_and_cache_symbol_table(EX(symbol_table));
  49732. }
  49733. zend_vm_stack_free_extra_args_ex(call_info, execute_data);
  49734. if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
  49735. zend_free_extra_named_params(EX(extra_named_params));
  49736. }
  49737. }
  49738. if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
  49739. OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
  49740. }
  49741. ZEND_VM_RETURN();
  49742. } else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
  49743. zend_array *symbol_table = EX(symbol_table);
  49744. zend_detach_symbol_table(execute_data);
  49745. old_execute_data = EX(prev_execute_data);
  49746. while (old_execute_data) {
  49747. if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
  49748. if (old_execute_data->symbol_table == symbol_table) {
  49749. zend_attach_symbol_table(old_execute_data);
  49750. }
  49751. break;
  49752. }
  49753. old_execute_data = old_execute_data->prev_execute_data;
  49754. }
  49755. EG(current_execute_data) = EX(prev_execute_data);
  49756. ZEND_VM_RETURN();
  49757. }
  49758. }
  49759. }
  49760. HYBRID_CASE(ZEND_JMP_SPEC):
  49761. VM_TRACE(ZEND_JMP_SPEC)
  49762. ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49763. HYBRID_BREAK();
  49764. HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED):
  49765. VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED)
  49766. ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49767. HYBRID_BREAK();
  49768. HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_USED):
  49769. VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_USED)
  49770. ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49771. HYBRID_BREAK();
  49772. HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED):
  49773. VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED)
  49774. ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49775. HYBRID_BREAK();
  49776. HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_USED):
  49777. VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_USED)
  49778. ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49779. HYBRID_BREAK();
  49780. HYBRID_CASE(ZEND_DO_UCALL_SPEC_OBSERVER):
  49781. VM_TRACE(ZEND_DO_UCALL_SPEC_OBSERVER)
  49782. ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49783. HYBRID_BREAK();
  49784. HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED):
  49785. VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED)
  49786. ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49787. HYBRID_BREAK();
  49788. HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED):
  49789. VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED)
  49790. ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49791. HYBRID_BREAK();
  49792. HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER):
  49793. VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER)
  49794. ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49795. HYBRID_BREAK();
  49796. HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED):
  49797. VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED)
  49798. ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49799. HYBRID_BREAK();
  49800. HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_USED):
  49801. VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_USED)
  49802. ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49803. HYBRID_BREAK();
  49804. HYBRID_CASE(ZEND_DO_FCALL_SPEC_OBSERVER):
  49805. VM_TRACE(ZEND_DO_FCALL_SPEC_OBSERVER)
  49806. ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49807. HYBRID_BREAK();
  49808. HYBRID_CASE(ZEND_GENERATOR_CREATE_SPEC):
  49809. VM_TRACE(ZEND_GENERATOR_CREATE_SPEC)
  49810. ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49811. HYBRID_BREAK();
  49812. HYBRID_CASE(ZEND_SEND_UNPACK_SPEC):
  49813. VM_TRACE(ZEND_SEND_UNPACK_SPEC)
  49814. ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49815. HYBRID_BREAK();
  49816. HYBRID_CASE(ZEND_SEND_ARRAY_SPEC):
  49817. VM_TRACE(ZEND_SEND_ARRAY_SPEC)
  49818. ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49819. HYBRID_BREAK();
  49820. HYBRID_CASE(ZEND_RECV_NOTYPE_SPEC):
  49821. VM_TRACE(ZEND_RECV_NOTYPE_SPEC)
  49822. ZEND_RECV_NOTYPE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49823. HYBRID_BREAK();
  49824. HYBRID_CASE(ZEND_ADD_ARRAY_UNPACK_SPEC):
  49825. VM_TRACE(ZEND_ADD_ARRAY_UNPACK_SPEC)
  49826. ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49827. HYBRID_BREAK();
  49828. HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC):
  49829. VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC)
  49830. ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49831. HYBRID_BREAK();
  49832. HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC):
  49833. VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC)
  49834. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49835. HYBRID_BREAK();
  49836. HYBRID_CASE(ZEND_EXIT_SPEC):
  49837. VM_TRACE(ZEND_EXIT_SPEC)
  49838. ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49839. HYBRID_BREAK();
  49840. HYBRID_CASE(ZEND_BEGIN_SILENCE_SPEC):
  49841. VM_TRACE(ZEND_BEGIN_SILENCE_SPEC)
  49842. ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49843. HYBRID_BREAK();
  49844. HYBRID_CASE(ZEND_EXT_STMT_SPEC):
  49845. VM_TRACE(ZEND_EXT_STMT_SPEC)
  49846. ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49847. HYBRID_BREAK();
  49848. HYBRID_CASE(ZEND_EXT_FCALL_BEGIN_SPEC):
  49849. VM_TRACE(ZEND_EXT_FCALL_BEGIN_SPEC)
  49850. ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49851. HYBRID_BREAK();
  49852. HYBRID_CASE(ZEND_EXT_FCALL_END_SPEC):
  49853. VM_TRACE(ZEND_EXT_FCALL_END_SPEC)
  49854. ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49855. HYBRID_BREAK();
  49856. HYBRID_CASE(ZEND_DECLARE_ANON_CLASS_SPEC):
  49857. VM_TRACE(ZEND_DECLARE_ANON_CLASS_SPEC)
  49858. ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49859. HYBRID_BREAK();
  49860. HYBRID_CASE(ZEND_DECLARE_FUNCTION_SPEC):
  49861. VM_TRACE(ZEND_DECLARE_FUNCTION_SPEC)
  49862. ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49863. HYBRID_BREAK();
  49864. HYBRID_CASE(ZEND_TICKS_SPEC):
  49865. VM_TRACE(ZEND_TICKS_SPEC)
  49866. ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49867. HYBRID_BREAK();
  49868. HYBRID_CASE(ZEND_EXT_NOP_SPEC):
  49869. VM_TRACE(ZEND_EXT_NOP_SPEC)
  49870. ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49871. HYBRID_BREAK();
  49872. HYBRID_CASE(ZEND_NOP_SPEC):
  49873. VM_TRACE(ZEND_NOP_SPEC)
  49874. ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49875. HYBRID_BREAK();
  49876. HYBRID_CASE(ZEND_HANDLE_EXCEPTION_SPEC):
  49877. VM_TRACE(ZEND_HANDLE_EXCEPTION_SPEC)
  49878. ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49879. HYBRID_BREAK();
  49880. HYBRID_CASE(ZEND_USER_OPCODE_SPEC):
  49881. VM_TRACE(ZEND_USER_OPCODE_SPEC)
  49882. ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49883. HYBRID_BREAK();
  49884. HYBRID_CASE(ZEND_DISCARD_EXCEPTION_SPEC):
  49885. VM_TRACE(ZEND_DISCARD_EXCEPTION_SPEC)
  49886. ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49887. HYBRID_BREAK();
  49888. HYBRID_CASE(ZEND_FAST_CALL_SPEC):
  49889. VM_TRACE(ZEND_FAST_CALL_SPEC)
  49890. ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49891. HYBRID_BREAK();
  49892. HYBRID_CASE(ZEND_FAST_RET_SPEC):
  49893. VM_TRACE(ZEND_FAST_RET_SPEC)
  49894. ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49895. HYBRID_BREAK();
  49896. HYBRID_CASE(ZEND_ASSERT_CHECK_SPEC):
  49897. VM_TRACE(ZEND_ASSERT_CHECK_SPEC)
  49898. ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49899. HYBRID_BREAK();
  49900. HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC):
  49901. VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC)
  49902. ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49903. HYBRID_BREAK();
  49904. HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER):
  49905. VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER)
  49906. ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49907. HYBRID_BREAK();
  49908. HYBRID_CASE(ZEND_JMP_FORWARD_SPEC):
  49909. VM_TRACE(ZEND_JMP_FORWARD_SPEC)
  49910. ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49911. HYBRID_BREAK();
  49912. HYBRID_CASE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST):
  49913. VM_TRACE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST)
  49914. ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49915. HYBRID_BREAK();
  49916. HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST):
  49917. VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST)
  49918. ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49919. HYBRID_BREAK();
  49920. HYBRID_CASE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST):
  49921. VM_TRACE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST)
  49922. ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49923. HYBRID_BREAK();
  49924. HYBRID_CASE(ZEND_INIT_FCALL_SPEC_CONST):
  49925. VM_TRACE(ZEND_INIT_FCALL_SPEC_CONST)
  49926. ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49927. HYBRID_BREAK();
  49928. HYBRID_CASE(ZEND_RECV_INIT_SPEC_CONST):
  49929. VM_TRACE(ZEND_RECV_INIT_SPEC_CONST)
  49930. ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49931. HYBRID_BREAK();
  49932. HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR):
  49933. VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR)
  49934. ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49935. HYBRID_BREAK();
  49936. HYBRID_CASE(ZEND_RECV_SPEC_UNUSED):
  49937. VM_TRACE(ZEND_RECV_SPEC_UNUSED)
  49938. ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49939. HYBRID_BREAK();
  49940. HYBRID_CASE(ZEND_RECV_VARIADIC_SPEC_UNUSED):
  49941. VM_TRACE(ZEND_RECV_VARIADIC_SPEC_UNUSED)
  49942. ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49943. HYBRID_BREAK();
  49944. HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV):
  49945. VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV)
  49946. ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49947. HYBRID_BREAK();
  49948. HYBRID_CASE(ZEND_BW_NOT_SPEC_CONST):
  49949. VM_TRACE(ZEND_BW_NOT_SPEC_CONST)
  49950. ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49951. HYBRID_BREAK();
  49952. HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CONST):
  49953. VM_TRACE(ZEND_BOOL_NOT_SPEC_CONST)
  49954. ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49955. HYBRID_BREAK();
  49956. HYBRID_CASE(ZEND_ECHO_SPEC_CONST):
  49957. VM_TRACE(ZEND_ECHO_SPEC_CONST)
  49958. ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49959. HYBRID_BREAK();
  49960. HYBRID_CASE(ZEND_JMPZ_SPEC_CONST):
  49961. VM_TRACE(ZEND_JMPZ_SPEC_CONST)
  49962. ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49963. HYBRID_BREAK();
  49964. HYBRID_CASE(ZEND_JMPNZ_SPEC_CONST):
  49965. VM_TRACE(ZEND_JMPNZ_SPEC_CONST)
  49966. ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49967. HYBRID_BREAK();
  49968. HYBRID_CASE(ZEND_JMPZNZ_SPEC_CONST):
  49969. VM_TRACE(ZEND_JMPZNZ_SPEC_CONST)
  49970. ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49971. HYBRID_BREAK();
  49972. HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CONST):
  49973. VM_TRACE(ZEND_JMPZ_EX_SPEC_CONST)
  49974. ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49975. HYBRID_BREAK();
  49976. HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CONST):
  49977. VM_TRACE(ZEND_JMPNZ_EX_SPEC_CONST)
  49978. ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49979. HYBRID_BREAK();
  49980. HYBRID_CASE(ZEND_RETURN_SPEC_CONST):
  49981. VM_TRACE(ZEND_RETURN_SPEC_CONST)
  49982. {
  49983. USE_OPLINE
  49984. zval *retval_ptr;
  49985. zval *return_value;
  49986. retval_ptr = RT_CONSTANT(opline, opline->op1);
  49987. return_value = EX(return_value);
  49988. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  49989. SAVE_OPLINE();
  49990. retval_ptr = ZVAL_UNDEFINED_OP1();
  49991. if (return_value) {
  49992. ZVAL_NULL(return_value);
  49993. }
  49994. } else if (!return_value) {
  49995. if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
  49996. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  49997. SAVE_OPLINE();
  49998. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  49999. }
  50000. }
  50001. } else {
  50002. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  50003. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50004. if (IS_CONST == IS_CONST) {
  50005. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  50006. Z_ADDREF_P(return_value);
  50007. }
  50008. }
  50009. } else if (IS_CONST == IS_CV) {
  50010. do {
  50011. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  50012. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  50013. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  50014. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  50015. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50016. if (GC_MAY_LEAK(ref)) {
  50017. SAVE_OPLINE();
  50018. gc_possible_root(ref);
  50019. }
  50020. ZVAL_NULL(retval_ptr);
  50021. break;
  50022. } else {
  50023. Z_ADDREF_P(retval_ptr);
  50024. }
  50025. } else {
  50026. retval_ptr = Z_REFVAL_P(retval_ptr);
  50027. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  50028. Z_ADDREF_P(retval_ptr);
  50029. }
  50030. }
  50031. }
  50032. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50033. } while (0);
  50034. } else /* if (IS_CONST == IS_VAR) */ {
  50035. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  50036. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  50037. retval_ptr = Z_REFVAL_P(retval_ptr);
  50038. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50039. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  50040. efree_size(ref, sizeof(zend_reference));
  50041. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  50042. Z_ADDREF_P(retval_ptr);
  50043. }
  50044. } else {
  50045. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50046. }
  50047. }
  50048. }
  50049. goto zend_leave_helper_SPEC_LABEL;
  50050. }
  50051. HYBRID_CASE(ZEND_RETURN_SPEC_OBSERVER):
  50052. VM_TRACE(ZEND_RETURN_SPEC_OBSERVER)
  50053. {
  50054. USE_OPLINE
  50055. zval *retval_ptr;
  50056. zval *return_value;
  50057. zval observer_retval;
  50058. retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
  50059. return_value = EX(return_value);
  50060. if (!return_value) { return_value = &observer_retval; };
  50061. if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  50062. SAVE_OPLINE();
  50063. retval_ptr = ZVAL_UNDEFINED_OP1();
  50064. if (return_value) {
  50065. ZVAL_NULL(return_value);
  50066. }
  50067. } else if (!return_value) {
  50068. if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
  50069. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  50070. SAVE_OPLINE();
  50071. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  50072. }
  50073. }
  50074. } else {
  50075. if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
  50076. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50077. if (opline->op1_type == IS_CONST) {
  50078. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  50079. Z_ADDREF_P(return_value);
  50080. }
  50081. }
  50082. } else if (opline->op1_type == IS_CV) {
  50083. do {
  50084. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  50085. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  50086. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  50087. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  50088. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50089. if (GC_MAY_LEAK(ref)) {
  50090. SAVE_OPLINE();
  50091. gc_possible_root(ref);
  50092. }
  50093. ZVAL_NULL(retval_ptr);
  50094. break;
  50095. } else {
  50096. Z_ADDREF_P(retval_ptr);
  50097. }
  50098. } else {
  50099. retval_ptr = Z_REFVAL_P(retval_ptr);
  50100. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  50101. Z_ADDREF_P(retval_ptr);
  50102. }
  50103. }
  50104. }
  50105. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50106. } while (0);
  50107. } else /* if (opline->op1_type == IS_VAR) */ {
  50108. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  50109. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  50110. retval_ptr = Z_REFVAL_P(retval_ptr);
  50111. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50112. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  50113. efree_size(ref, sizeof(zend_reference));
  50114. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  50115. Z_ADDREF_P(retval_ptr);
  50116. }
  50117. } else {
  50118. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50119. }
  50120. }
  50121. }
  50122. SAVE_OPLINE();
  50123. zend_observer_fcall_end(execute_data, return_value);
  50124. if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
  50125. goto zend_leave_helper_SPEC_LABEL;
  50126. }
  50127. HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CONST):
  50128. VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CONST)
  50129. ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50130. HYBRID_BREAK();
  50131. HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_OBSERVER):
  50132. VM_TRACE(ZEND_RETURN_BY_REF_SPEC_OBSERVER)
  50133. ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50134. HYBRID_BREAK();
  50135. HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CONST):
  50136. VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CONST)
  50137. ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50138. HYBRID_BREAK();
  50139. HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_OBSERVER):
  50140. VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_OBSERVER)
  50141. ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50142. HYBRID_BREAK();
  50143. HYBRID_CASE(ZEND_THROW_SPEC_CONST):
  50144. VM_TRACE(ZEND_THROW_SPEC_CONST)
  50145. ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50146. HYBRID_BREAK();
  50147. HYBRID_CASE(ZEND_CATCH_SPEC_CONST):
  50148. VM_TRACE(ZEND_CATCH_SPEC_CONST)
  50149. ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50150. HYBRID_BREAK();
  50151. HYBRID_CASE(ZEND_SEND_USER_SPEC_CONST):
  50152. VM_TRACE(ZEND_SEND_USER_SPEC_CONST)
  50153. ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50154. HYBRID_BREAK();
  50155. HYBRID_CASE(ZEND_BOOL_SPEC_CONST):
  50156. VM_TRACE(ZEND_BOOL_SPEC_CONST)
  50157. ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50158. HYBRID_BREAK();
  50159. HYBRID_CASE(ZEND_CLONE_SPEC_CONST):
  50160. VM_TRACE(ZEND_CLONE_SPEC_CONST)
  50161. ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50162. HYBRID_BREAK();
  50163. HYBRID_CASE(ZEND_CAST_SPEC_CONST):
  50164. VM_TRACE(ZEND_CAST_SPEC_CONST)
  50165. ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50166. HYBRID_BREAK();
  50167. HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST):
  50168. VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST)
  50169. ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50170. HYBRID_BREAK();
  50171. HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER):
  50172. VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER)
  50173. ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50174. HYBRID_BREAK();
  50175. HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CONST):
  50176. VM_TRACE(ZEND_FE_RESET_R_SPEC_CONST)
  50177. ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50178. HYBRID_BREAK();
  50179. HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CONST):
  50180. VM_TRACE(ZEND_FE_RESET_RW_SPEC_CONST)
  50181. ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50182. HYBRID_BREAK();
  50183. HYBRID_CASE(ZEND_JMP_SET_SPEC_CONST):
  50184. VM_TRACE(ZEND_JMP_SET_SPEC_CONST)
  50185. ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50186. HYBRID_BREAK();
  50187. HYBRID_CASE(ZEND_COALESCE_SPEC_CONST):
  50188. VM_TRACE(ZEND_COALESCE_SPEC_CONST)
  50189. ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50190. HYBRID_BREAK();
  50191. HYBRID_CASE(ZEND_JMP_NULL_SPEC_CONST):
  50192. VM_TRACE(ZEND_JMP_NULL_SPEC_CONST)
  50193. ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50194. HYBRID_BREAK();
  50195. HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CONST):
  50196. VM_TRACE(ZEND_QM_ASSIGN_SPEC_CONST)
  50197. ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50198. HYBRID_BREAK();
  50199. HYBRID_CASE(ZEND_DECLARE_CLASS_SPEC_CONST):
  50200. VM_TRACE(ZEND_DECLARE_CLASS_SPEC_CONST)
  50201. ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50202. HYBRID_BREAK();
  50203. HYBRID_CASE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST):
  50204. VM_TRACE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST)
  50205. ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50206. HYBRID_BREAK();
  50207. HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CONST):
  50208. VM_TRACE(ZEND_YIELD_FROM_SPEC_CONST)
  50209. ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50210. HYBRID_BREAK();
  50211. HYBRID_CASE(ZEND_STRLEN_SPEC_CONST):
  50212. VM_TRACE(ZEND_STRLEN_SPEC_CONST)
  50213. ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50214. HYBRID_BREAK();
  50215. HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CONST):
  50216. VM_TRACE(ZEND_TYPE_CHECK_SPEC_CONST)
  50217. ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50218. HYBRID_BREAK();
  50219. HYBRID_CASE(ZEND_DEFINED_SPEC_CONST):
  50220. VM_TRACE(ZEND_DEFINED_SPEC_CONST)
  50221. ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50222. HYBRID_BREAK();
  50223. HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_CONST):
  50224. VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_CONST)
  50225. ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50226. HYBRID_BREAK();
  50227. HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST):
  50228. VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST)
  50229. ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50230. HYBRID_BREAK();
  50231. HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST):
  50232. VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST)
  50233. ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50234. HYBRID_BREAK();
  50235. HYBRID_CASE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST):
  50236. VM_TRACE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST)
  50237. ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50238. HYBRID_BREAK();
  50239. HYBRID_CASE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST):
  50240. VM_TRACE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST)
  50241. ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50242. HYBRID_BREAK();
  50243. HYBRID_CASE(ZEND_ADD_SPEC_CONST_CONST):
  50244. VM_TRACE(ZEND_ADD_SPEC_CONST_CONST)
  50245. ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50246. HYBRID_BREAK();
  50247. HYBRID_CASE(ZEND_SUB_SPEC_CONST_CONST):
  50248. VM_TRACE(ZEND_SUB_SPEC_CONST_CONST)
  50249. ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50250. HYBRID_BREAK();
  50251. HYBRID_CASE(ZEND_MUL_SPEC_CONST_CONST):
  50252. VM_TRACE(ZEND_MUL_SPEC_CONST_CONST)
  50253. ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50254. HYBRID_BREAK();
  50255. HYBRID_CASE(ZEND_DIV_SPEC_CONST_CONST):
  50256. VM_TRACE(ZEND_DIV_SPEC_CONST_CONST)
  50257. ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50258. HYBRID_BREAK();
  50259. HYBRID_CASE(ZEND_MOD_SPEC_CONST_CONST):
  50260. VM_TRACE(ZEND_MOD_SPEC_CONST_CONST)
  50261. ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50262. HYBRID_BREAK();
  50263. HYBRID_CASE(ZEND_SL_SPEC_CONST_CONST):
  50264. VM_TRACE(ZEND_SL_SPEC_CONST_CONST)
  50265. ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50266. HYBRID_BREAK();
  50267. HYBRID_CASE(ZEND_SR_SPEC_CONST_CONST):
  50268. VM_TRACE(ZEND_SR_SPEC_CONST_CONST)
  50269. ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50270. HYBRID_BREAK();
  50271. HYBRID_CASE(ZEND_POW_SPEC_CONST_CONST):
  50272. VM_TRACE(ZEND_POW_SPEC_CONST_CONST)
  50273. ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50274. HYBRID_BREAK();
  50275. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST):
  50276. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST)
  50277. ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50278. HYBRID_BREAK();
  50279. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST):
  50280. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST)
  50281. ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50282. HYBRID_BREAK();
  50283. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CONST_CONST):
  50284. VM_TRACE(ZEND_IS_EQUAL_SPEC_CONST_CONST)
  50285. ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50286. HYBRID_BREAK();
  50287. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST):
  50288. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST)
  50289. ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50290. HYBRID_BREAK();
  50291. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_CONST):
  50292. VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_CONST)
  50293. ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50294. HYBRID_BREAK();
  50295. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST):
  50296. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST)
  50297. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50298. HYBRID_BREAK();
  50299. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CONST):
  50300. VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CONST)
  50301. ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50302. HYBRID_BREAK();
  50303. HYBRID_CASE(ZEND_BW_OR_SPEC_CONST_CONST):
  50304. VM_TRACE(ZEND_BW_OR_SPEC_CONST_CONST)
  50305. ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50306. HYBRID_BREAK();
  50307. HYBRID_CASE(ZEND_BW_AND_SPEC_CONST_CONST):
  50308. VM_TRACE(ZEND_BW_AND_SPEC_CONST_CONST)
  50309. ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50310. HYBRID_BREAK();
  50311. HYBRID_CASE(ZEND_BW_XOR_SPEC_CONST_CONST):
  50312. VM_TRACE(ZEND_BW_XOR_SPEC_CONST_CONST)
  50313. ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50314. HYBRID_BREAK();
  50315. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CONST_CONST):
  50316. VM_TRACE(ZEND_BOOL_XOR_SPEC_CONST_CONST)
  50317. ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50318. HYBRID_BREAK();
  50319. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST):
  50320. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST)
  50321. ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50322. HYBRID_BREAK();
  50323. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST):
  50324. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST)
  50325. ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50326. HYBRID_BREAK();
  50327. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST):
  50328. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST)
  50329. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50330. HYBRID_BREAK();
  50331. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST):
  50332. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST)
  50333. ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50334. HYBRID_BREAK();
  50335. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST):
  50336. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST)
  50337. ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50338. HYBRID_BREAK();
  50339. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST):
  50340. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST)
  50341. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50342. HYBRID_BREAK();
  50343. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST):
  50344. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST)
  50345. ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50346. HYBRID_BREAK();
  50347. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CONST):
  50348. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CONST)
  50349. ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50350. HYBRID_BREAK();
  50351. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST):
  50352. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST)
  50353. ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50354. HYBRID_BREAK();
  50355. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST):
  50356. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST)
  50357. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50358. HYBRID_BREAK();
  50359. HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST):
  50360. VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST)
  50361. ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50362. HYBRID_BREAK();
  50363. HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST_CONST):
  50364. VM_TRACE(ZEND_SEND_VAL_SPEC_CONST_CONST)
  50365. ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50366. HYBRID_BREAK();
  50367. HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_CONST):
  50368. VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_CONST)
  50369. ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50370. HYBRID_BREAK();
  50371. HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST):
  50372. VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST)
  50373. ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50374. HYBRID_BREAK();
  50375. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST):
  50376. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST)
  50377. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50378. HYBRID_BREAK();
  50379. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CONST):
  50380. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CONST)
  50381. ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50382. HYBRID_BREAK();
  50383. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST):
  50384. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST)
  50385. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50386. HYBRID_BREAK();
  50387. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST):
  50388. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST)
  50389. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50390. HYBRID_BREAK();
  50391. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST):
  50392. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST)
  50393. ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50394. HYBRID_BREAK();
  50395. HYBRID_CASE(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST):
  50396. VM_TRACE(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST)
  50397. ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50398. HYBRID_BREAK();
  50399. HYBRID_CASE(ZEND_DECLARE_CONST_SPEC_CONST_CONST):
  50400. VM_TRACE(ZEND_DECLARE_CONST_SPEC_CONST_CONST)
  50401. ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50402. HYBRID_BREAK();
  50403. HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CONST):
  50404. VM_TRACE(ZEND_YIELD_SPEC_CONST_CONST)
  50405. ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50406. HYBRID_BREAK();
  50407. HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_CONST_CONST):
  50408. VM_TRACE(ZEND_SWITCH_LONG_SPEC_CONST_CONST)
  50409. ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50410. HYBRID_BREAK();
  50411. HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_CONST_CONST):
  50412. VM_TRACE(ZEND_SWITCH_STRING_SPEC_CONST_CONST)
  50413. ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50414. HYBRID_BREAK();
  50415. HYBRID_CASE(ZEND_MATCH_SPEC_CONST_CONST):
  50416. VM_TRACE(ZEND_MATCH_SPEC_CONST_CONST)
  50417. ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50418. HYBRID_BREAK();
  50419. HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CONST_CONST):
  50420. VM_TRACE(ZEND_IN_ARRAY_SPEC_CONST_CONST)
  50421. ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50422. HYBRID_BREAK();
  50423. HYBRID_CASE(ZEND_ADD_SPEC_CONST_TMPVARCV):
  50424. VM_TRACE(ZEND_ADD_SPEC_CONST_TMPVARCV)
  50425. ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50426. HYBRID_BREAK();
  50427. HYBRID_CASE(ZEND_SUB_SPEC_CONST_TMPVARCV):
  50428. VM_TRACE(ZEND_SUB_SPEC_CONST_TMPVARCV)
  50429. ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50430. HYBRID_BREAK();
  50431. HYBRID_CASE(ZEND_MOD_SPEC_CONST_TMPVARCV):
  50432. VM_TRACE(ZEND_MOD_SPEC_CONST_TMPVARCV)
  50433. ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50434. HYBRID_BREAK();
  50435. HYBRID_CASE(ZEND_SL_SPEC_CONST_TMPVARCV):
  50436. VM_TRACE(ZEND_SL_SPEC_CONST_TMPVARCV)
  50437. ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50438. HYBRID_BREAK();
  50439. HYBRID_CASE(ZEND_SR_SPEC_CONST_TMPVARCV):
  50440. VM_TRACE(ZEND_SR_SPEC_CONST_TMPVARCV)
  50441. ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50442. HYBRID_BREAK();
  50443. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV):
  50444. VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV)
  50445. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50446. HYBRID_BREAK();
  50447. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ):
  50448. VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ)
  50449. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50450. HYBRID_BREAK();
  50451. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ):
  50452. VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ)
  50453. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50454. HYBRID_BREAK();
  50455. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV):
  50456. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV)
  50457. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50458. HYBRID_BREAK();
  50459. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ):
  50460. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ)
  50461. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50462. HYBRID_BREAK();
  50463. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ):
  50464. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ)
  50465. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50466. HYBRID_BREAK();
  50467. HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV):
  50468. VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV)
  50469. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50470. HYBRID_BREAK();
  50471. HYBRID_CASE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV):
  50472. VM_TRACE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV)
  50473. ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50474. HYBRID_BREAK();
  50475. HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV):
  50476. VM_TRACE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV)
  50477. ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50478. HYBRID_BREAK();
  50479. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV):
  50480. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV)
  50481. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50482. HYBRID_BREAK();
  50483. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ):
  50484. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ)
  50485. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50486. HYBRID_BREAK();
  50487. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
  50488. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
  50489. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50490. HYBRID_BREAK();
  50491. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV):
  50492. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV)
  50493. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50494. HYBRID_BREAK();
  50495. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
  50496. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
  50497. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50498. HYBRID_BREAK();
  50499. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
  50500. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
  50501. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50502. HYBRID_BREAK();
  50503. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV):
  50504. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV)
  50505. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50506. HYBRID_BREAK();
  50507. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ):
  50508. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ)
  50509. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50510. HYBRID_BREAK();
  50511. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
  50512. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
  50513. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50514. HYBRID_BREAK();
  50515. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV):
  50516. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV)
  50517. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50518. HYBRID_BREAK();
  50519. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
  50520. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
  50521. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50522. HYBRID_BREAK();
  50523. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
  50524. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
  50525. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50526. HYBRID_BREAK();
  50527. HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV):
  50528. VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV)
  50529. ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50530. HYBRID_BREAK();
  50531. HYBRID_CASE(ZEND_DIV_SPEC_CONST_TMPVAR):
  50532. VM_TRACE(ZEND_DIV_SPEC_CONST_TMPVAR)
  50533. ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50534. HYBRID_BREAK();
  50535. HYBRID_CASE(ZEND_POW_SPEC_CONST_TMPVAR):
  50536. VM_TRACE(ZEND_POW_SPEC_CONST_TMPVAR)
  50537. ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50538. HYBRID_BREAK();
  50539. HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_TMPVAR):
  50540. VM_TRACE(ZEND_CONCAT_SPEC_CONST_TMPVAR)
  50541. ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50542. HYBRID_BREAK();
  50543. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR):
  50544. VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR)
  50545. ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50546. HYBRID_BREAK();
  50547. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR):
  50548. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR)
  50549. ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50550. HYBRID_BREAK();
  50551. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR):
  50552. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR)
  50553. ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50554. HYBRID_BREAK();
  50555. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR):
  50556. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR)
  50557. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50558. HYBRID_BREAK();
  50559. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR):
  50560. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR)
  50561. ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50562. HYBRID_BREAK();
  50563. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR):
  50564. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR)
  50565. ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50566. HYBRID_BREAK();
  50567. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR):
  50568. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR)
  50569. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50570. HYBRID_BREAK();
  50571. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR):
  50572. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR)
  50573. ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50574. HYBRID_BREAK();
  50575. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR):
  50576. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR)
  50577. ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50578. HYBRID_BREAK();
  50579. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR):
  50580. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR)
  50581. ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50582. HYBRID_BREAK();
  50583. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR):
  50584. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR)
  50585. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50586. HYBRID_BREAK();
  50587. HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR):
  50588. VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR)
  50589. ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50590. HYBRID_BREAK();
  50591. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR):
  50592. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR)
  50593. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50594. HYBRID_BREAK();
  50595. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR):
  50596. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR)
  50597. ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50598. HYBRID_BREAK();
  50599. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR):
  50600. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR)
  50601. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50602. HYBRID_BREAK();
  50603. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR):
  50604. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR)
  50605. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50606. HYBRID_BREAK();
  50607. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR):
  50608. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR)
  50609. ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50610. HYBRID_BREAK();
  50611. HYBRID_CASE(ZEND_YIELD_SPEC_CONST_TMPVAR):
  50612. VM_TRACE(ZEND_YIELD_SPEC_CONST_TMPVAR)
  50613. ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50614. HYBRID_BREAK();
  50615. HYBRID_CASE(ZEND_FETCH_R_SPEC_CONST_UNUSED):
  50616. VM_TRACE(ZEND_FETCH_R_SPEC_CONST_UNUSED)
  50617. ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50618. HYBRID_BREAK();
  50619. HYBRID_CASE(ZEND_FETCH_W_SPEC_CONST_UNUSED):
  50620. VM_TRACE(ZEND_FETCH_W_SPEC_CONST_UNUSED)
  50621. ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50622. HYBRID_BREAK();
  50623. HYBRID_CASE(ZEND_FETCH_RW_SPEC_CONST_UNUSED):
  50624. VM_TRACE(ZEND_FETCH_RW_SPEC_CONST_UNUSED)
  50625. ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50626. HYBRID_BREAK();
  50627. HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED):
  50628. VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED)
  50629. ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50630. HYBRID_BREAK();
  50631. HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED):
  50632. VM_TRACE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED)
  50633. ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50634. HYBRID_BREAK();
  50635. HYBRID_CASE(ZEND_FETCH_IS_SPEC_CONST_UNUSED):
  50636. VM_TRACE(ZEND_FETCH_IS_SPEC_CONST_UNUSED)
  50637. ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50638. HYBRID_BREAK();
  50639. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED):
  50640. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED)
  50641. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50642. HYBRID_BREAK();
  50643. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED):
  50644. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED)
  50645. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50646. HYBRID_BREAK();
  50647. HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED):
  50648. VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED)
  50649. ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50650. HYBRID_BREAK();
  50651. HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST_UNUSED):
  50652. VM_TRACE(ZEND_SEND_VAL_SPEC_CONST_UNUSED)
  50653. ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50654. HYBRID_BREAK();
  50655. HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED):
  50656. VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED)
  50657. ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50658. HYBRID_BREAK();
  50659. HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK):
  50660. VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK)
  50661. ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50662. HYBRID_BREAK();
  50663. HYBRID_CASE(ZEND_NEW_SPEC_CONST_UNUSED):
  50664. VM_TRACE(ZEND_NEW_SPEC_CONST_UNUSED)
  50665. ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50666. HYBRID_BREAK();
  50667. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED):
  50668. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED)
  50669. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50670. HYBRID_BREAK();
  50671. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED):
  50672. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED)
  50673. ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50674. HYBRID_BREAK();
  50675. HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED):
  50676. VM_TRACE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED)
  50677. ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50678. HYBRID_BREAK();
  50679. HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED):
  50680. VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED)
  50681. ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50682. HYBRID_BREAK();
  50683. HYBRID_CASE(ZEND_YIELD_SPEC_CONST_UNUSED):
  50684. VM_TRACE(ZEND_YIELD_SPEC_CONST_UNUSED)
  50685. ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50686. HYBRID_BREAK();
  50687. HYBRID_CASE(ZEND_MATCH_ERROR_SPEC_CONST_UNUSED):
  50688. VM_TRACE(ZEND_MATCH_ERROR_SPEC_CONST_UNUSED)
  50689. ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50690. HYBRID_BREAK();
  50691. HYBRID_CASE(ZEND_COUNT_SPEC_CONST_UNUSED):
  50692. VM_TRACE(ZEND_COUNT_SPEC_CONST_UNUSED)
  50693. ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50694. HYBRID_BREAK();
  50695. HYBRID_CASE(ZEND_GET_CLASS_SPEC_CONST_UNUSED):
  50696. VM_TRACE(ZEND_GET_CLASS_SPEC_CONST_UNUSED)
  50697. ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50698. HYBRID_BREAK();
  50699. HYBRID_CASE(ZEND_GET_TYPE_SPEC_CONST_UNUSED):
  50700. VM_TRACE(ZEND_GET_TYPE_SPEC_CONST_UNUSED)
  50701. ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50702. HYBRID_BREAK();
  50703. HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED):
  50704. VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED)
  50705. ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50706. HYBRID_BREAK();
  50707. HYBRID_CASE(ZEND_DIV_SPEC_CONST_CV):
  50708. VM_TRACE(ZEND_DIV_SPEC_CONST_CV)
  50709. ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50710. HYBRID_BREAK();
  50711. HYBRID_CASE(ZEND_POW_SPEC_CONST_CV):
  50712. VM_TRACE(ZEND_POW_SPEC_CONST_CV)
  50713. ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50714. HYBRID_BREAK();
  50715. HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_CV):
  50716. VM_TRACE(ZEND_CONCAT_SPEC_CONST_CV)
  50717. ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50718. HYBRID_BREAK();
  50719. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CV):
  50720. VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CV)
  50721. ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50722. HYBRID_BREAK();
  50723. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CV):
  50724. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CV)
  50725. ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50726. HYBRID_BREAK();
  50727. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV):
  50728. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV)
  50729. ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50730. HYBRID_BREAK();
  50731. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV):
  50732. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV)
  50733. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50734. HYBRID_BREAK();
  50735. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV):
  50736. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV)
  50737. ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50738. HYBRID_BREAK();
  50739. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV):
  50740. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV)
  50741. ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50742. HYBRID_BREAK();
  50743. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV):
  50744. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV)
  50745. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50746. HYBRID_BREAK();
  50747. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CV):
  50748. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CV)
  50749. ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50750. HYBRID_BREAK();
  50751. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CV):
  50752. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CV)
  50753. ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50754. HYBRID_BREAK();
  50755. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV):
  50756. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV)
  50757. ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50758. HYBRID_BREAK();
  50759. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV):
  50760. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV)
  50761. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50762. HYBRID_BREAK();
  50763. HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CV):
  50764. VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CV)
  50765. ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50766. HYBRID_BREAK();
  50767. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV):
  50768. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV)
  50769. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50770. HYBRID_BREAK();
  50771. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CV):
  50772. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CV)
  50773. ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50774. HYBRID_BREAK();
  50775. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV):
  50776. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV)
  50777. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50778. HYBRID_BREAK();
  50779. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV):
  50780. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV)
  50781. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50782. HYBRID_BREAK();
  50783. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV):
  50784. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV)
  50785. ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50786. HYBRID_BREAK();
  50787. HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CV):
  50788. VM_TRACE(ZEND_YIELD_SPEC_CONST_CV)
  50789. ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50790. HYBRID_BREAK();
  50791. HYBRID_CASE(ZEND_BW_NOT_SPEC_TMPVARCV):
  50792. VM_TRACE(ZEND_BW_NOT_SPEC_TMPVARCV)
  50793. ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50794. HYBRID_BREAK();
  50795. HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV):
  50796. VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV)
  50797. ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50798. HYBRID_BREAK();
  50799. HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV):
  50800. VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV)
  50801. ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50802. HYBRID_BREAK();
  50803. HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV):
  50804. VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV)
  50805. ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50806. HYBRID_BREAK();
  50807. HYBRID_CASE(ZEND_ADD_SPEC_TMPVARCV_CONST):
  50808. VM_TRACE(ZEND_ADD_SPEC_TMPVARCV_CONST)
  50809. ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50810. HYBRID_BREAK();
  50811. HYBRID_CASE(ZEND_SUB_SPEC_TMPVARCV_CONST):
  50812. VM_TRACE(ZEND_SUB_SPEC_TMPVARCV_CONST)
  50813. ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50814. HYBRID_BREAK();
  50815. HYBRID_CASE(ZEND_MUL_SPEC_TMPVARCV_CONST):
  50816. VM_TRACE(ZEND_MUL_SPEC_TMPVARCV_CONST)
  50817. ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50818. HYBRID_BREAK();
  50819. HYBRID_CASE(ZEND_MOD_SPEC_TMPVARCV_CONST):
  50820. VM_TRACE(ZEND_MOD_SPEC_TMPVARCV_CONST)
  50821. ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50822. HYBRID_BREAK();
  50823. HYBRID_CASE(ZEND_SL_SPEC_TMPVARCV_CONST):
  50824. VM_TRACE(ZEND_SL_SPEC_TMPVARCV_CONST)
  50825. ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50826. HYBRID_BREAK();
  50827. HYBRID_CASE(ZEND_SR_SPEC_TMPVARCV_CONST):
  50828. VM_TRACE(ZEND_SR_SPEC_TMPVARCV_CONST)
  50829. ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50830. HYBRID_BREAK();
  50831. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST):
  50832. VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST)
  50833. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50834. HYBRID_BREAK();
  50835. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ):
  50836. VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ)
  50837. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50838. HYBRID_BREAK();
  50839. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ):
  50840. VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ)
  50841. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50842. HYBRID_BREAK();
  50843. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST):
  50844. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST)
  50845. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50846. HYBRID_BREAK();
  50847. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ):
  50848. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ)
  50849. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50850. HYBRID_BREAK();
  50851. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ):
  50852. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ)
  50853. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50854. HYBRID_BREAK();
  50855. HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVARCV_CONST):
  50856. VM_TRACE(ZEND_BW_OR_SPEC_TMPVARCV_CONST)
  50857. ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50858. HYBRID_BREAK();
  50859. HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVARCV_CONST):
  50860. VM_TRACE(ZEND_BW_AND_SPEC_TMPVARCV_CONST)
  50861. ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50862. HYBRID_BREAK();
  50863. HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVARCV_CONST):
  50864. VM_TRACE(ZEND_BW_XOR_SPEC_TMPVARCV_CONST)
  50865. ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50866. HYBRID_BREAK();
  50867. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST):
  50868. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST)
  50869. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50870. HYBRID_BREAK();
  50871. HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST):
  50872. VM_TRACE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST)
  50873. ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50874. HYBRID_BREAK();
  50875. HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST):
  50876. VM_TRACE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST)
  50877. ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50878. HYBRID_BREAK();
  50879. HYBRID_CASE(ZEND_MATCH_SPEC_TMPVARCV_CONST):
  50880. VM_TRACE(ZEND_MATCH_SPEC_TMPVARCV_CONST)
  50881. ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50882. HYBRID_BREAK();
  50883. HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
  50884. VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
  50885. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50886. HYBRID_BREAK();
  50887. HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST):
  50888. VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST)
  50889. ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50890. HYBRID_BREAK();
  50891. HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST):
  50892. VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST)
  50893. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50894. HYBRID_BREAK();
  50895. HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
  50896. VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
  50897. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50898. HYBRID_BREAK();
  50899. HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST):
  50900. VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST)
  50901. ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50902. HYBRID_BREAK();
  50903. HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST):
  50904. VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST)
  50905. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50906. HYBRID_BREAK();
  50907. HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
  50908. VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
  50909. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50910. HYBRID_BREAK();
  50911. HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST):
  50912. VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST)
  50913. ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50914. HYBRID_BREAK();
  50915. HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST):
  50916. VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST)
  50917. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50918. HYBRID_BREAK();
  50919. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST):
  50920. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST)
  50921. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50922. HYBRID_BREAK();
  50923. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
  50924. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
  50925. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50926. HYBRID_BREAK();
  50927. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
  50928. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
  50929. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50930. HYBRID_BREAK();
  50931. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
  50932. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
  50933. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50934. HYBRID_BREAK();
  50935. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
  50936. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
  50937. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50938. HYBRID_BREAK();
  50939. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
  50940. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
  50941. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50942. HYBRID_BREAK();
  50943. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST):
  50944. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST)
  50945. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50946. HYBRID_BREAK();
  50947. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
  50948. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
  50949. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50950. HYBRID_BREAK();
  50951. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
  50952. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
  50953. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50954. HYBRID_BREAK();
  50955. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
  50956. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
  50957. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50958. HYBRID_BREAK();
  50959. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
  50960. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
  50961. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50962. HYBRID_BREAK();
  50963. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
  50964. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
  50965. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50966. HYBRID_BREAK();
  50967. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST):
  50968. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST)
  50969. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50970. HYBRID_BREAK();
  50971. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ):
  50972. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ)
  50973. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50974. HYBRID_BREAK();
  50975. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
  50976. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
  50977. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50978. HYBRID_BREAK();
  50979. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST):
  50980. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST)
  50981. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50982. HYBRID_BREAK();
  50983. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
  50984. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
  50985. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50986. HYBRID_BREAK();
  50987. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
  50988. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
  50989. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50990. HYBRID_BREAK();
  50991. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST):
  50992. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST)
  50993. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50994. HYBRID_BREAK();
  50995. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
  50996. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
  50997. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50998. HYBRID_BREAK();
  50999. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
  51000. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
  51001. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51002. HYBRID_BREAK();
  51003. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
  51004. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
  51005. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51006. HYBRID_BREAK();
  51007. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
  51008. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
  51009. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51010. HYBRID_BREAK();
  51011. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
  51012. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
  51013. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51014. HYBRID_BREAK();
  51015. HYBRID_CASE(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV):
  51016. VM_TRACE(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV)
  51017. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51018. HYBRID_BREAK();
  51019. HYBRID_CASE(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV):
  51020. VM_TRACE(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV)
  51021. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51022. HYBRID_BREAK();
  51023. HYBRID_CASE(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV):
  51024. VM_TRACE(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV)
  51025. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51026. HYBRID_BREAK();
  51027. HYBRID_CASE(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV):
  51028. VM_TRACE(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV)
  51029. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51030. HYBRID_BREAK();
  51031. HYBRID_CASE(ZEND_SL_SPEC_TMPVARCV_TMPVARCV):
  51032. VM_TRACE(ZEND_SL_SPEC_TMPVARCV_TMPVARCV)
  51033. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51034. HYBRID_BREAK();
  51035. HYBRID_CASE(ZEND_SR_SPEC_TMPVARCV_TMPVARCV):
  51036. VM_TRACE(ZEND_SR_SPEC_TMPVARCV_TMPVARCV)
  51037. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51038. HYBRID_BREAK();
  51039. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV):
  51040. VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV)
  51041. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51042. HYBRID_BREAK();
  51043. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51044. VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51045. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51046. HYBRID_BREAK();
  51047. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51048. VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51049. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51050. HYBRID_BREAK();
  51051. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV):
  51052. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV)
  51053. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51054. HYBRID_BREAK();
  51055. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51056. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51057. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51058. HYBRID_BREAK();
  51059. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51060. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51061. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51062. HYBRID_BREAK();
  51063. HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV):
  51064. VM_TRACE(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV)
  51065. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51066. HYBRID_BREAK();
  51067. HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV):
  51068. VM_TRACE(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV)
  51069. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51070. HYBRID_BREAK();
  51071. HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV):
  51072. VM_TRACE(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV)
  51073. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51074. HYBRID_BREAK();
  51075. HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
  51076. VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
  51077. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51078. HYBRID_BREAK();
  51079. HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV):
  51080. VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV)
  51081. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51082. HYBRID_BREAK();
  51083. HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  51084. VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  51085. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51086. HYBRID_BREAK();
  51087. HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
  51088. VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
  51089. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51090. HYBRID_BREAK();
  51091. HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV):
  51092. VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV)
  51093. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51094. HYBRID_BREAK();
  51095. HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  51096. VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  51097. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51098. HYBRID_BREAK();
  51099. HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
  51100. VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
  51101. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51102. HYBRID_BREAK();
  51103. HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV):
  51104. VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV)
  51105. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51106. HYBRID_BREAK();
  51107. HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  51108. VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  51109. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51110. HYBRID_BREAK();
  51111. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
  51112. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
  51113. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51114. HYBRID_BREAK();
  51115. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51116. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51117. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51118. HYBRID_BREAK();
  51119. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51120. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51121. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51122. HYBRID_BREAK();
  51123. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  51124. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  51125. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51126. HYBRID_BREAK();
  51127. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51128. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51129. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51130. HYBRID_BREAK();
  51131. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51132. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51133. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51134. HYBRID_BREAK();
  51135. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
  51136. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
  51137. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51138. HYBRID_BREAK();
  51139. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51140. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51141. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51142. HYBRID_BREAK();
  51143. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51144. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51145. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51146. HYBRID_BREAK();
  51147. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  51148. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  51149. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51150. HYBRID_BREAK();
  51151. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51152. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51153. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51154. HYBRID_BREAK();
  51155. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51156. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51157. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51158. HYBRID_BREAK();
  51159. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV):
  51160. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV)
  51161. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51162. HYBRID_BREAK();
  51163. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51164. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51165. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51166. HYBRID_BREAK();
  51167. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51168. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51169. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51170. HYBRID_BREAK();
  51171. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  51172. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  51173. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51174. HYBRID_BREAK();
  51175. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51176. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51177. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51178. HYBRID_BREAK();
  51179. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51180. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51181. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51182. HYBRID_BREAK();
  51183. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
  51184. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
  51185. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51186. HYBRID_BREAK();
  51187. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51188. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51189. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51190. HYBRID_BREAK();
  51191. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51192. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51193. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51194. HYBRID_BREAK();
  51195. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  51196. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  51197. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51198. HYBRID_BREAK();
  51199. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51200. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51201. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51202. HYBRID_BREAK();
  51203. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51204. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51205. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51206. HYBRID_BREAK();
  51207. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR):
  51208. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR)
  51209. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51210. HYBRID_BREAK();
  51211. HYBRID_CASE(ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED):
  51212. VM_TRACE(ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED)
  51213. ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51214. HYBRID_BREAK();
  51215. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV):
  51216. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV)
  51217. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51218. HYBRID_BREAK();
  51219. HYBRID_CASE(ZEND_BOOL_NOT_SPEC_TMPVAR):
  51220. VM_TRACE(ZEND_BOOL_NOT_SPEC_TMPVAR)
  51221. ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51222. HYBRID_BREAK();
  51223. HYBRID_CASE(ZEND_ECHO_SPEC_TMPVAR):
  51224. VM_TRACE(ZEND_ECHO_SPEC_TMPVAR)
  51225. ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51226. HYBRID_BREAK();
  51227. HYBRID_CASE(ZEND_JMPZ_SPEC_TMPVAR):
  51228. VM_TRACE(ZEND_JMPZ_SPEC_TMPVAR)
  51229. ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51230. HYBRID_BREAK();
  51231. HYBRID_CASE(ZEND_JMPNZ_SPEC_TMPVAR):
  51232. VM_TRACE(ZEND_JMPNZ_SPEC_TMPVAR)
  51233. ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51234. HYBRID_BREAK();
  51235. HYBRID_CASE(ZEND_JMPZNZ_SPEC_TMPVAR):
  51236. VM_TRACE(ZEND_JMPZNZ_SPEC_TMPVAR)
  51237. ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51238. HYBRID_BREAK();
  51239. HYBRID_CASE(ZEND_JMPZ_EX_SPEC_TMPVAR):
  51240. VM_TRACE(ZEND_JMPZ_EX_SPEC_TMPVAR)
  51241. ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51242. HYBRID_BREAK();
  51243. HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_TMPVAR):
  51244. VM_TRACE(ZEND_JMPNZ_EX_SPEC_TMPVAR)
  51245. ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51246. HYBRID_BREAK();
  51247. HYBRID_CASE(ZEND_FREE_SPEC_TMPVAR):
  51248. VM_TRACE(ZEND_FREE_SPEC_TMPVAR)
  51249. ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51250. HYBRID_BREAK();
  51251. HYBRID_CASE(ZEND_FE_FREE_SPEC_TMPVAR):
  51252. VM_TRACE(ZEND_FE_FREE_SPEC_TMPVAR)
  51253. ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51254. HYBRID_BREAK();
  51255. HYBRID_CASE(ZEND_THROW_SPEC_TMPVAR):
  51256. VM_TRACE(ZEND_THROW_SPEC_TMPVAR)
  51257. ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51258. HYBRID_BREAK();
  51259. HYBRID_CASE(ZEND_BOOL_SPEC_TMPVAR):
  51260. VM_TRACE(ZEND_BOOL_SPEC_TMPVAR)
  51261. ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51262. HYBRID_BREAK();
  51263. HYBRID_CASE(ZEND_CLONE_SPEC_TMPVAR):
  51264. VM_TRACE(ZEND_CLONE_SPEC_TMPVAR)
  51265. ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51266. HYBRID_BREAK();
  51267. HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR):
  51268. VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR)
  51269. ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51270. HYBRID_BREAK();
  51271. HYBRID_CASE(ZEND_YIELD_FROM_SPEC_TMPVAR):
  51272. VM_TRACE(ZEND_YIELD_FROM_SPEC_TMPVAR)
  51273. ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51274. HYBRID_BREAK();
  51275. HYBRID_CASE(ZEND_STRLEN_SPEC_TMPVAR):
  51276. VM_TRACE(ZEND_STRLEN_SPEC_TMPVAR)
  51277. ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51278. HYBRID_BREAK();
  51279. HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_TMPVAR):
  51280. VM_TRACE(ZEND_TYPE_CHECK_SPEC_TMPVAR)
  51281. ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51282. HYBRID_BREAK();
  51283. HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR):
  51284. VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR)
  51285. ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51286. HYBRID_BREAK();
  51287. HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CONST):
  51288. VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CONST)
  51289. ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51290. HYBRID_BREAK();
  51291. HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CONST):
  51292. VM_TRACE(ZEND_POW_SPEC_TMPVAR_CONST)
  51293. ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51294. HYBRID_BREAK();
  51295. HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CONST):
  51296. VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CONST)
  51297. ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51298. HYBRID_BREAK();
  51299. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST):
  51300. VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST)
  51301. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51302. HYBRID_BREAK();
  51303. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ):
  51304. VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
  51305. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51306. HYBRID_BREAK();
  51307. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ):
  51308. VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
  51309. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51310. HYBRID_BREAK();
  51311. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST):
  51312. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST)
  51313. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51314. HYBRID_BREAK();
  51315. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ):
  51316. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
  51317. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51318. HYBRID_BREAK();
  51319. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ):
  51320. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
  51321. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51322. HYBRID_BREAK();
  51323. HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST):
  51324. VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST)
  51325. ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51326. HYBRID_BREAK();
  51327. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST):
  51328. VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST)
  51329. ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51330. HYBRID_BREAK();
  51331. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST):
  51332. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST)
  51333. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51334. HYBRID_BREAK();
  51335. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST):
  51336. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST)
  51337. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51338. HYBRID_BREAK();
  51339. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST):
  51340. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST)
  51341. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51342. HYBRID_BREAK();
  51343. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST):
  51344. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST)
  51345. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51346. HYBRID_BREAK();
  51347. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST):
  51348. VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST)
  51349. ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51350. HYBRID_BREAK();
  51351. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST):
  51352. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST)
  51353. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51354. HYBRID_BREAK();
  51355. HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR_CONST):
  51356. VM_TRACE(ZEND_SEND_VAL_SPEC_TMPVAR_CONST)
  51357. ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51358. HYBRID_BREAK();
  51359. HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CONST):
  51360. VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CONST)
  51361. ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51362. HYBRID_BREAK();
  51363. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST):
  51364. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST)
  51365. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51366. HYBRID_BREAK();
  51367. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST):
  51368. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST)
  51369. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51370. HYBRID_BREAK();
  51371. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST):
  51372. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST)
  51373. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51374. HYBRID_BREAK();
  51375. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST):
  51376. VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST)
  51377. ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51378. HYBRID_BREAK();
  51379. HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST):
  51380. VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST)
  51381. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51382. HYBRID_BREAK();
  51383. HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV):
  51384. VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV)
  51385. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51386. HYBRID_BREAK();
  51387. HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_TMPVAR):
  51388. VM_TRACE(ZEND_DIV_SPEC_TMPVAR_TMPVAR)
  51389. ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51390. HYBRID_BREAK();
  51391. HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_TMPVAR):
  51392. VM_TRACE(ZEND_POW_SPEC_TMPVAR_TMPVAR)
  51393. ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51394. HYBRID_BREAK();
  51395. HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR):
  51396. VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR)
  51397. ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51398. HYBRID_BREAK();
  51399. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR):
  51400. VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR)
  51401. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51402. HYBRID_BREAK();
  51403. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ):
  51404. VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
  51405. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51406. HYBRID_BREAK();
  51407. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ):
  51408. VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
  51409. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51410. HYBRID_BREAK();
  51411. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR):
  51412. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR)
  51413. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51414. HYBRID_BREAK();
  51415. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ):
  51416. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
  51417. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51418. HYBRID_BREAK();
  51419. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ):
  51420. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
  51421. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51422. HYBRID_BREAK();
  51423. HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR):
  51424. VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR)
  51425. ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51426. HYBRID_BREAK();
  51427. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR):
  51428. VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR)
  51429. ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51430. HYBRID_BREAK();
  51431. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR):
  51432. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR)
  51433. ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51434. HYBRID_BREAK();
  51435. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR):
  51436. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR)
  51437. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51438. HYBRID_BREAK();
  51439. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR):
  51440. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR)
  51441. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51442. HYBRID_BREAK();
  51443. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR):
  51444. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR)
  51445. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51446. HYBRID_BREAK();
  51447. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR):
  51448. VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR)
  51449. ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51450. HYBRID_BREAK();
  51451. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR):
  51452. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR)
  51453. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51454. HYBRID_BREAK();
  51455. HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_TMPVAR):
  51456. VM_TRACE(ZEND_CASE_SPEC_TMPVAR_TMPVAR)
  51457. ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51458. HYBRID_BREAK();
  51459. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR):
  51460. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR)
  51461. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51462. HYBRID_BREAK();
  51463. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR):
  51464. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR)
  51465. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51466. HYBRID_BREAK();
  51467. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR):
  51468. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR)
  51469. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51470. HYBRID_BREAK();
  51471. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR):
  51472. VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR)
  51473. ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51474. HYBRID_BREAK();
  51475. HYBRID_CASE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED):
  51476. VM_TRACE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED)
  51477. ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51478. HYBRID_BREAK();
  51479. HYBRID_CASE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED):
  51480. VM_TRACE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED)
  51481. ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51482. HYBRID_BREAK();
  51483. HYBRID_CASE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED):
  51484. VM_TRACE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED)
  51485. ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51486. HYBRID_BREAK();
  51487. HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED):
  51488. VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED)
  51489. ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51490. HYBRID_BREAK();
  51491. HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED):
  51492. VM_TRACE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED)
  51493. ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51494. HYBRID_BREAK();
  51495. HYBRID_CASE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED):
  51496. VM_TRACE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED)
  51497. ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51498. HYBRID_BREAK();
  51499. HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED):
  51500. VM_TRACE(ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED)
  51501. ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51502. HYBRID_BREAK();
  51503. HYBRID_CASE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED):
  51504. VM_TRACE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED)
  51505. ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51506. HYBRID_BREAK();
  51507. HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED):
  51508. VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED)
  51509. ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51510. HYBRID_BREAK();
  51511. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED):
  51512. VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED)
  51513. ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51514. HYBRID_BREAK();
  51515. HYBRID_CASE(ZEND_COUNT_SPEC_TMPVAR_UNUSED):
  51516. VM_TRACE(ZEND_COUNT_SPEC_TMPVAR_UNUSED)
  51517. ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51518. HYBRID_BREAK();
  51519. HYBRID_CASE(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED):
  51520. VM_TRACE(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED)
  51521. ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51522. HYBRID_BREAK();
  51523. HYBRID_CASE(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED):
  51524. VM_TRACE(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED)
  51525. ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51526. HYBRID_BREAK();
  51527. HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CV):
  51528. VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CV)
  51529. ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51530. HYBRID_BREAK();
  51531. HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CV):
  51532. VM_TRACE(ZEND_POW_SPEC_TMPVAR_CV)
  51533. ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51534. HYBRID_BREAK();
  51535. HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CV):
  51536. VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CV)
  51537. ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51538. HYBRID_BREAK();
  51539. HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CV):
  51540. VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CV)
  51541. ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51542. HYBRID_BREAK();
  51543. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV):
  51544. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV)
  51545. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51546. HYBRID_BREAK();
  51547. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV):
  51548. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV)
  51549. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51550. HYBRID_BREAK();
  51551. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV):
  51552. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV)
  51553. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51554. HYBRID_BREAK();
  51555. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV):
  51556. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV)
  51557. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51558. HYBRID_BREAK();
  51559. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV):
  51560. VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV)
  51561. ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51562. HYBRID_BREAK();
  51563. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV):
  51564. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV)
  51565. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51566. HYBRID_BREAK();
  51567. HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CV):
  51568. VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CV)
  51569. ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51570. HYBRID_BREAK();
  51571. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV):
  51572. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV)
  51573. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51574. HYBRID_BREAK();
  51575. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV):
  51576. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV)
  51577. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51578. HYBRID_BREAK();
  51579. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV):
  51580. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV)
  51581. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51582. HYBRID_BREAK();
  51583. HYBRID_CASE(ZEND_RETURN_SPEC_TMP):
  51584. VM_TRACE(ZEND_RETURN_SPEC_TMP)
  51585. {
  51586. USE_OPLINE
  51587. zval *retval_ptr;
  51588. zval *return_value;
  51589. retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  51590. return_value = EX(return_value);
  51591. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  51592. SAVE_OPLINE();
  51593. retval_ptr = ZVAL_UNDEFINED_OP1();
  51594. if (return_value) {
  51595. ZVAL_NULL(return_value);
  51596. }
  51597. } else if (!return_value) {
  51598. if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
  51599. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  51600. SAVE_OPLINE();
  51601. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  51602. }
  51603. }
  51604. } else {
  51605. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  51606. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51607. if (IS_TMP_VAR == IS_CONST) {
  51608. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  51609. Z_ADDREF_P(return_value);
  51610. }
  51611. }
  51612. } else if (IS_TMP_VAR == IS_CV) {
  51613. do {
  51614. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  51615. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  51616. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  51617. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  51618. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51619. if (GC_MAY_LEAK(ref)) {
  51620. SAVE_OPLINE();
  51621. gc_possible_root(ref);
  51622. }
  51623. ZVAL_NULL(retval_ptr);
  51624. break;
  51625. } else {
  51626. Z_ADDREF_P(retval_ptr);
  51627. }
  51628. } else {
  51629. retval_ptr = Z_REFVAL_P(retval_ptr);
  51630. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  51631. Z_ADDREF_P(retval_ptr);
  51632. }
  51633. }
  51634. }
  51635. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51636. } while (0);
  51637. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  51638. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  51639. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  51640. retval_ptr = Z_REFVAL_P(retval_ptr);
  51641. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51642. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  51643. efree_size(ref, sizeof(zend_reference));
  51644. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  51645. Z_ADDREF_P(retval_ptr);
  51646. }
  51647. } else {
  51648. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51649. }
  51650. }
  51651. }
  51652. goto zend_leave_helper_SPEC_LABEL;
  51653. }
  51654. HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_TMP):
  51655. VM_TRACE(ZEND_RETURN_BY_REF_SPEC_TMP)
  51656. ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51657. HYBRID_BREAK();
  51658. HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_TMP):
  51659. VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_TMP)
  51660. ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51661. HYBRID_BREAK();
  51662. HYBRID_CASE(ZEND_SEND_USER_SPEC_TMP):
  51663. VM_TRACE(ZEND_SEND_USER_SPEC_TMP)
  51664. ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51665. HYBRID_BREAK();
  51666. HYBRID_CASE(ZEND_CAST_SPEC_TMP):
  51667. VM_TRACE(ZEND_CAST_SPEC_TMP)
  51668. ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51669. HYBRID_BREAK();
  51670. HYBRID_CASE(ZEND_FE_RESET_R_SPEC_TMP):
  51671. VM_TRACE(ZEND_FE_RESET_R_SPEC_TMP)
  51672. ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51673. HYBRID_BREAK();
  51674. HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_TMP):
  51675. VM_TRACE(ZEND_FE_RESET_RW_SPEC_TMP)
  51676. ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51677. HYBRID_BREAK();
  51678. HYBRID_CASE(ZEND_END_SILENCE_SPEC_TMP):
  51679. VM_TRACE(ZEND_END_SILENCE_SPEC_TMP)
  51680. ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51681. HYBRID_BREAK();
  51682. HYBRID_CASE(ZEND_JMP_SET_SPEC_TMP):
  51683. VM_TRACE(ZEND_JMP_SET_SPEC_TMP)
  51684. ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51685. HYBRID_BREAK();
  51686. HYBRID_CASE(ZEND_COALESCE_SPEC_TMP):
  51687. VM_TRACE(ZEND_COALESCE_SPEC_TMP)
  51688. ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51689. HYBRID_BREAK();
  51690. HYBRID_CASE(ZEND_JMP_NULL_SPEC_TMP):
  51691. VM_TRACE(ZEND_JMP_NULL_SPEC_TMP)
  51692. ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51693. HYBRID_BREAK();
  51694. HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_TMP):
  51695. VM_TRACE(ZEND_QM_ASSIGN_SPEC_TMP)
  51696. ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51697. HYBRID_BREAK();
  51698. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST):
  51699. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST)
  51700. ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51701. HYBRID_BREAK();
  51702. HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_CONST):
  51703. VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_CONST)
  51704. ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51705. HYBRID_BREAK();
  51706. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST):
  51707. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST)
  51708. ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51709. HYBRID_BREAK();
  51710. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST):
  51711. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST)
  51712. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51713. HYBRID_BREAK();
  51714. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST):
  51715. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST)
  51716. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51717. HYBRID_BREAK();
  51718. HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CONST):
  51719. VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CONST)
  51720. ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51721. HYBRID_BREAK();
  51722. HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CONST):
  51723. VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CONST)
  51724. ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51725. HYBRID_BREAK();
  51726. HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_CONST):
  51727. VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_CONST)
  51728. ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51729. HYBRID_BREAK();
  51730. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST):
  51731. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST)
  51732. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51733. HYBRID_BREAK();
  51734. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CONST):
  51735. VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CONST)
  51736. ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51737. HYBRID_BREAK();
  51738. HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CONST):
  51739. VM_TRACE(ZEND_YIELD_SPEC_TMP_CONST)
  51740. ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51741. HYBRID_BREAK();
  51742. HYBRID_CASE(ZEND_IN_ARRAY_SPEC_TMP_CONST):
  51743. VM_TRACE(ZEND_IN_ARRAY_SPEC_TMP_CONST)
  51744. ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51745. HYBRID_BREAK();
  51746. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR):
  51747. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR)
  51748. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51749. HYBRID_BREAK();
  51750. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR):
  51751. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR)
  51752. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51753. HYBRID_BREAK();
  51754. HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR):
  51755. VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR)
  51756. ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51757. HYBRID_BREAK();
  51758. HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_TMPVAR):
  51759. VM_TRACE(ZEND_ROPE_END_SPEC_TMP_TMPVAR)
  51760. ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51761. HYBRID_BREAK();
  51762. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR):
  51763. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR)
  51764. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51765. HYBRID_BREAK();
  51766. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR):
  51767. VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR)
  51768. ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51769. HYBRID_BREAK();
  51770. HYBRID_CASE(ZEND_YIELD_SPEC_TMP_TMPVAR):
  51771. VM_TRACE(ZEND_YIELD_SPEC_TMP_TMPVAR)
  51772. ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51773. HYBRID_BREAK();
  51774. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP):
  51775. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP)
  51776. ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51777. HYBRID_BREAK();
  51778. HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_TMP):
  51779. VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_TMP)
  51780. ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51781. HYBRID_BREAK();
  51782. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP):
  51783. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP)
  51784. ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51785. HYBRID_BREAK();
  51786. HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_VAR):
  51787. VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_VAR)
  51788. ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51789. HYBRID_BREAK();
  51790. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED):
  51791. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED)
  51792. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51793. HYBRID_BREAK();
  51794. HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED):
  51795. VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED)
  51796. ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51797. HYBRID_BREAK();
  51798. HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED):
  51799. VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED)
  51800. ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51801. HYBRID_BREAK();
  51802. HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK):
  51803. VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK)
  51804. ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51805. HYBRID_BREAK();
  51806. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED):
  51807. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED)
  51808. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51809. HYBRID_BREAK();
  51810. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED):
  51811. VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED)
  51812. ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51813. HYBRID_BREAK();
  51814. HYBRID_CASE(ZEND_YIELD_SPEC_TMP_UNUSED):
  51815. VM_TRACE(ZEND_YIELD_SPEC_TMP_UNUSED)
  51816. ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51817. HYBRID_BREAK();
  51818. HYBRID_CASE(ZEND_GET_TYPE_SPEC_TMP_UNUSED):
  51819. VM_TRACE(ZEND_GET_TYPE_SPEC_TMP_UNUSED)
  51820. ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51821. HYBRID_BREAK();
  51822. HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_CV):
  51823. VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_CV)
  51824. ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51825. HYBRID_BREAK();
  51826. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV):
  51827. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV)
  51828. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51829. HYBRID_BREAK();
  51830. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV):
  51831. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV)
  51832. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51833. HYBRID_BREAK();
  51834. HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CV):
  51835. VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CV)
  51836. ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51837. HYBRID_BREAK();
  51838. HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CV):
  51839. VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CV)
  51840. ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51841. HYBRID_BREAK();
  51842. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV):
  51843. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV)
  51844. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51845. HYBRID_BREAK();
  51846. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CV):
  51847. VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CV)
  51848. ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51849. HYBRID_BREAK();
  51850. HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CV):
  51851. VM_TRACE(ZEND_YIELD_SPEC_TMP_CV)
  51852. ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51853. HYBRID_BREAK();
  51854. HYBRID_CASE(ZEND_BIND_LEXICAL_SPEC_TMP_CV):
  51855. VM_TRACE(ZEND_BIND_LEXICAL_SPEC_TMP_CV)
  51856. ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51857. HYBRID_BREAK();
  51858. HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED):
  51859. VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED)
  51860. ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51861. HYBRID_BREAK();
  51862. HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED):
  51863. VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED)
  51864. ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51865. HYBRID_BREAK();
  51866. HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED):
  51867. VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED)
  51868. ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51869. HYBRID_BREAK();
  51870. HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED):
  51871. VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED)
  51872. ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51873. HYBRID_BREAK();
  51874. HYBRID_CASE(ZEND_POST_INC_SPEC_VAR):
  51875. VM_TRACE(ZEND_POST_INC_SPEC_VAR)
  51876. ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51877. HYBRID_BREAK();
  51878. HYBRID_CASE(ZEND_POST_DEC_SPEC_VAR):
  51879. VM_TRACE(ZEND_POST_DEC_SPEC_VAR)
  51880. ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51881. HYBRID_BREAK();
  51882. HYBRID_CASE(ZEND_RETURN_SPEC_VAR):
  51883. VM_TRACE(ZEND_RETURN_SPEC_VAR)
  51884. {
  51885. USE_OPLINE
  51886. zval *retval_ptr;
  51887. zval *return_value;
  51888. retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  51889. return_value = EX(return_value);
  51890. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  51891. SAVE_OPLINE();
  51892. retval_ptr = ZVAL_UNDEFINED_OP1();
  51893. if (return_value) {
  51894. ZVAL_NULL(return_value);
  51895. }
  51896. } else if (!return_value) {
  51897. if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
  51898. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  51899. SAVE_OPLINE();
  51900. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  51901. }
  51902. }
  51903. } else {
  51904. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  51905. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51906. if (IS_VAR == IS_CONST) {
  51907. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  51908. Z_ADDREF_P(return_value);
  51909. }
  51910. }
  51911. } else if (IS_VAR == IS_CV) {
  51912. do {
  51913. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  51914. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  51915. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  51916. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  51917. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51918. if (GC_MAY_LEAK(ref)) {
  51919. SAVE_OPLINE();
  51920. gc_possible_root(ref);
  51921. }
  51922. ZVAL_NULL(retval_ptr);
  51923. break;
  51924. } else {
  51925. Z_ADDREF_P(retval_ptr);
  51926. }
  51927. } else {
  51928. retval_ptr = Z_REFVAL_P(retval_ptr);
  51929. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  51930. Z_ADDREF_P(retval_ptr);
  51931. }
  51932. }
  51933. }
  51934. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51935. } while (0);
  51936. } else /* if (IS_VAR == IS_VAR) */ {
  51937. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  51938. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  51939. retval_ptr = Z_REFVAL_P(retval_ptr);
  51940. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51941. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  51942. efree_size(ref, sizeof(zend_reference));
  51943. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  51944. Z_ADDREF_P(retval_ptr);
  51945. }
  51946. } else {
  51947. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51948. }
  51949. }
  51950. }
  51951. goto zend_leave_helper_SPEC_LABEL;
  51952. }
  51953. HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_VAR):
  51954. VM_TRACE(ZEND_RETURN_BY_REF_SPEC_VAR)
  51955. ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51956. HYBRID_BREAK();
  51957. HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_VAR):
  51958. VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_VAR)
  51959. ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51960. HYBRID_BREAK();
  51961. HYBRID_CASE(ZEND_SEND_USER_SPEC_VAR):
  51962. VM_TRACE(ZEND_SEND_USER_SPEC_VAR)
  51963. ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51964. HYBRID_BREAK();
  51965. HYBRID_CASE(ZEND_CAST_SPEC_VAR):
  51966. VM_TRACE(ZEND_CAST_SPEC_VAR)
  51967. ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51968. HYBRID_BREAK();
  51969. HYBRID_CASE(ZEND_FE_RESET_R_SPEC_VAR):
  51970. VM_TRACE(ZEND_FE_RESET_R_SPEC_VAR)
  51971. ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51972. HYBRID_BREAK();
  51973. HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_VAR):
  51974. VM_TRACE(ZEND_FE_RESET_RW_SPEC_VAR)
  51975. ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51976. HYBRID_BREAK();
  51977. HYBRID_CASE(ZEND_FE_FETCH_R_SPEC_VAR):
  51978. VM_TRACE(ZEND_FE_FETCH_R_SPEC_VAR)
  51979. ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51980. HYBRID_BREAK();
  51981. HYBRID_CASE(ZEND_FE_FETCH_RW_SPEC_VAR):
  51982. VM_TRACE(ZEND_FE_FETCH_RW_SPEC_VAR)
  51983. ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51984. HYBRID_BREAK();
  51985. HYBRID_CASE(ZEND_JMP_SET_SPEC_VAR):
  51986. VM_TRACE(ZEND_JMP_SET_SPEC_VAR)
  51987. ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51988. HYBRID_BREAK();
  51989. HYBRID_CASE(ZEND_COALESCE_SPEC_VAR):
  51990. VM_TRACE(ZEND_COALESCE_SPEC_VAR)
  51991. ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51992. HYBRID_BREAK();
  51993. HYBRID_CASE(ZEND_JMP_NULL_SPEC_VAR):
  51994. VM_TRACE(ZEND_JMP_NULL_SPEC_VAR)
  51995. ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51996. HYBRID_BREAK();
  51997. HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_VAR):
  51998. VM_TRACE(ZEND_QM_ASSIGN_SPEC_VAR)
  51999. ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52000. HYBRID_BREAK();
  52001. HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR):
  52002. VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR)
  52003. ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52004. HYBRID_BREAK();
  52005. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST):
  52006. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST)
  52007. ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52008. HYBRID_BREAK();
  52009. HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_CONST):
  52010. VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_CONST)
  52011. ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52012. HYBRID_BREAK();
  52013. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST):
  52014. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST)
  52015. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52016. HYBRID_BREAK();
  52017. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST):
  52018. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST)
  52019. ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52020. HYBRID_BREAK();
  52021. HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST):
  52022. VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST)
  52023. ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52024. HYBRID_BREAK();
  52025. HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_CONST):
  52026. VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CONST)
  52027. ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52028. HYBRID_BREAK();
  52029. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST):
  52030. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST)
  52031. ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52032. HYBRID_BREAK();
  52033. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST):
  52034. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST)
  52035. ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52036. HYBRID_BREAK();
  52037. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST):
  52038. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST)
  52039. ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52040. HYBRID_BREAK();
  52041. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST):
  52042. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST)
  52043. ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52044. HYBRID_BREAK();
  52045. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST):
  52046. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST)
  52047. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52048. HYBRID_BREAK();
  52049. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST):
  52050. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST)
  52051. ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52052. HYBRID_BREAK();
  52053. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST):
  52054. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST)
  52055. ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52056. HYBRID_BREAK();
  52057. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST):
  52058. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST)
  52059. ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52060. HYBRID_BREAK();
  52061. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST):
  52062. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST)
  52063. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52064. HYBRID_BREAK();
  52065. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST):
  52066. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST)
  52067. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52068. HYBRID_BREAK();
  52069. HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST):
  52070. VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST)
  52071. ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52072. HYBRID_BREAK();
  52073. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST):
  52074. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST)
  52075. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52076. HYBRID_BREAK();
  52077. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP):
  52078. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP)
  52079. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52080. HYBRID_BREAK();
  52081. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR):
  52082. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR)
  52083. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52084. HYBRID_BREAK();
  52085. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV):
  52086. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV)
  52087. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52088. HYBRID_BREAK();
  52089. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST):
  52090. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST)
  52091. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52092. HYBRID_BREAK();
  52093. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP):
  52094. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP)
  52095. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52096. HYBRID_BREAK();
  52097. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR):
  52098. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR)
  52099. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52100. HYBRID_BREAK();
  52101. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV):
  52102. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV)
  52103. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52104. HYBRID_BREAK();
  52105. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED):
  52106. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED)
  52107. ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52108. HYBRID_BREAK();
  52109. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED):
  52110. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED)
  52111. ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52112. HYBRID_BREAK();
  52113. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR):
  52114. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR)
  52115. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52116. HYBRID_BREAK();
  52117. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV):
  52118. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV)
  52119. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52120. HYBRID_BREAK();
  52121. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST):
  52122. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST)
  52123. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52124. HYBRID_BREAK();
  52125. HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR_CONST):
  52126. VM_TRACE(ZEND_SEND_VAR_SPEC_VAR_CONST)
  52127. ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52128. HYBRID_BREAK();
  52129. HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST):
  52130. VM_TRACE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST)
  52131. ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52132. HYBRID_BREAK();
  52133. HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST):
  52134. VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST)
  52135. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52136. HYBRID_BREAK();
  52137. HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR_CONST):
  52138. VM_TRACE(ZEND_SEND_REF_SPEC_VAR_CONST)
  52139. ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52140. HYBRID_BREAK();
  52141. HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_CONST):
  52142. VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_CONST)
  52143. ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52144. HYBRID_BREAK();
  52145. HYBRID_CASE(ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST):
  52146. VM_TRACE(ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST)
  52147. ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52148. HYBRID_BREAK();
  52149. HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST):
  52150. VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST)
  52151. ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52152. HYBRID_BREAK();
  52153. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST):
  52154. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST)
  52155. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52156. HYBRID_BREAK();
  52157. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CONST):
  52158. VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CONST)
  52159. ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52160. HYBRID_BREAK();
  52161. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CONST):
  52162. VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CONST)
  52163. ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52164. HYBRID_BREAK();
  52165. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CONST):
  52166. VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CONST)
  52167. ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52168. HYBRID_BREAK();
  52169. HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CONST):
  52170. VM_TRACE(ZEND_YIELD_SPEC_VAR_CONST)
  52171. ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52172. HYBRID_BREAK();
  52173. HYBRID_CASE(ZEND_IN_ARRAY_SPEC_VAR_CONST):
  52174. VM_TRACE(ZEND_IN_ARRAY_SPEC_VAR_CONST)
  52175. ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52176. HYBRID_BREAK();
  52177. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR):
  52178. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR)
  52179. ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52180. HYBRID_BREAK();
  52181. HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR):
  52182. VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR)
  52183. ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52184. HYBRID_BREAK();
  52185. HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR):
  52186. VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR)
  52187. ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52188. HYBRID_BREAK();
  52189. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR):
  52190. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR)
  52191. ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52192. HYBRID_BREAK();
  52193. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR):
  52194. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR)
  52195. ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52196. HYBRID_BREAK();
  52197. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR):
  52198. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR)
  52199. ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52200. HYBRID_BREAK();
  52201. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR):
  52202. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR)
  52203. ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52204. HYBRID_BREAK();
  52205. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR):
  52206. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR)
  52207. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52208. HYBRID_BREAK();
  52209. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR):
  52210. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR)
  52211. ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52212. HYBRID_BREAK();
  52213. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR):
  52214. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR)
  52215. ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52216. HYBRID_BREAK();
  52217. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR):
  52218. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR)
  52219. ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52220. HYBRID_BREAK();
  52221. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR):
  52222. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR)
  52223. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52224. HYBRID_BREAK();
  52225. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR):
  52226. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR)
  52227. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52228. HYBRID_BREAK();
  52229. HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR):
  52230. VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR)
  52231. ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52232. HYBRID_BREAK();
  52233. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST):
  52234. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST)
  52235. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52236. HYBRID_BREAK();
  52237. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP):
  52238. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP)
  52239. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52240. HYBRID_BREAK();
  52241. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR):
  52242. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR)
  52243. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52244. HYBRID_BREAK();
  52245. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV):
  52246. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV)
  52247. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52248. HYBRID_BREAK();
  52249. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST):
  52250. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST)
  52251. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52252. HYBRID_BREAK();
  52253. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP):
  52254. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP)
  52255. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52256. HYBRID_BREAK();
  52257. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR):
  52258. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR)
  52259. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52260. HYBRID_BREAK();
  52261. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV):
  52262. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV)
  52263. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52264. HYBRID_BREAK();
  52265. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR):
  52266. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR)
  52267. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52268. HYBRID_BREAK();
  52269. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV):
  52270. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV)
  52271. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52272. HYBRID_BREAK();
  52273. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR):
  52274. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR)
  52275. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52276. HYBRID_BREAK();
  52277. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR):
  52278. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR)
  52279. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52280. HYBRID_BREAK();
  52281. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR):
  52282. VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR)
  52283. ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52284. HYBRID_BREAK();
  52285. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR):
  52286. VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR)
  52287. ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52288. HYBRID_BREAK();
  52289. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR):
  52290. VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR)
  52291. ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52292. HYBRID_BREAK();
  52293. HYBRID_CASE(ZEND_YIELD_SPEC_VAR_TMPVAR):
  52294. VM_TRACE(ZEND_YIELD_SPEC_VAR_TMPVAR)
  52295. ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52296. HYBRID_BREAK();
  52297. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP):
  52298. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP)
  52299. ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52300. HYBRID_BREAK();
  52301. HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_TMP):
  52302. VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_TMP)
  52303. ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52304. HYBRID_BREAK();
  52305. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP):
  52306. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP)
  52307. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52308. HYBRID_BREAK();
  52309. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED):
  52310. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED)
  52311. ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52312. HYBRID_BREAK();
  52313. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED):
  52314. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED)
  52315. ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52316. HYBRID_BREAK();
  52317. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR):
  52318. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR)
  52319. ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52320. HYBRID_BREAK();
  52321. HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_VAR):
  52322. VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_VAR)
  52323. ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52324. HYBRID_BREAK();
  52325. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR):
  52326. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR)
  52327. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52328. HYBRID_BREAK();
  52329. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED):
  52330. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED)
  52331. ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52332. HYBRID_BREAK();
  52333. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED):
  52334. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED)
  52335. ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52336. HYBRID_BREAK();
  52337. HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_VAR):
  52338. VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_VAR)
  52339. ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52340. HYBRID_BREAK();
  52341. HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED):
  52342. VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED)
  52343. ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52344. HYBRID_BREAK();
  52345. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED):
  52346. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED)
  52347. ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52348. HYBRID_BREAK();
  52349. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED):
  52350. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED)
  52351. ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52352. HYBRID_BREAK();
  52353. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED):
  52354. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED)
  52355. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52356. HYBRID_BREAK();
  52357. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST):
  52358. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST)
  52359. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52360. HYBRID_BREAK();
  52361. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP):
  52362. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP)
  52363. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52364. HYBRID_BREAK();
  52365. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR):
  52366. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR)
  52367. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52368. HYBRID_BREAK();
  52369. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV):
  52370. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV)
  52371. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52372. HYBRID_BREAK();
  52373. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED):
  52374. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED)
  52375. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52376. HYBRID_BREAK();
  52377. HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED):
  52378. VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED)
  52379. ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52380. HYBRID_BREAK();
  52381. HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR_UNUSED):
  52382. VM_TRACE(ZEND_SEND_VAR_SPEC_VAR_UNUSED)
  52383. ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52384. HYBRID_BREAK();
  52385. HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED):
  52386. VM_TRACE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED)
  52387. ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52388. HYBRID_BREAK();
  52389. HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED):
  52390. VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED)
  52391. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52392. HYBRID_BREAK();
  52393. HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK):
  52394. VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK)
  52395. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52396. HYBRID_BREAK();
  52397. HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR_UNUSED):
  52398. VM_TRACE(ZEND_SEND_REF_SPEC_VAR_UNUSED)
  52399. ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52400. HYBRID_BREAK();
  52401. HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED):
  52402. VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED)
  52403. ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52404. HYBRID_BREAK();
  52405. HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK):
  52406. VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK)
  52407. ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52408. HYBRID_BREAK();
  52409. HYBRID_CASE(ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED):
  52410. VM_TRACE(ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED)
  52411. ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52412. HYBRID_BREAK();
  52413. HYBRID_CASE(ZEND_NEW_SPEC_VAR_UNUSED):
  52414. VM_TRACE(ZEND_NEW_SPEC_VAR_UNUSED)
  52415. ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52416. HYBRID_BREAK();
  52417. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED):
  52418. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED)
  52419. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52420. HYBRID_BREAK();
  52421. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED):
  52422. VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED)
  52423. ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52424. HYBRID_BREAK();
  52425. HYBRID_CASE(ZEND_SEPARATE_SPEC_VAR_UNUSED):
  52426. VM_TRACE(ZEND_SEPARATE_SPEC_VAR_UNUSED)
  52427. ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52428. HYBRID_BREAK();
  52429. HYBRID_CASE(ZEND_YIELD_SPEC_VAR_UNUSED):
  52430. VM_TRACE(ZEND_YIELD_SPEC_VAR_UNUSED)
  52431. ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52432. HYBRID_BREAK();
  52433. HYBRID_CASE(ZEND_MAKE_REF_SPEC_VAR_UNUSED):
  52434. VM_TRACE(ZEND_MAKE_REF_SPEC_VAR_UNUSED)
  52435. ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52436. HYBRID_BREAK();
  52437. HYBRID_CASE(ZEND_GET_TYPE_SPEC_VAR_UNUSED):
  52438. VM_TRACE(ZEND_GET_TYPE_SPEC_VAR_UNUSED)
  52439. ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52440. HYBRID_BREAK();
  52441. HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED):
  52442. VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED)
  52443. ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52444. HYBRID_BREAK();
  52445. HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_CV):
  52446. VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_CV)
  52447. ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52448. HYBRID_BREAK();
  52449. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV):
  52450. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV)
  52451. ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52452. HYBRID_BREAK();
  52453. HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV):
  52454. VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV)
  52455. ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52456. HYBRID_BREAK();
  52457. HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_CV):
  52458. VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CV)
  52459. ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52460. HYBRID_BREAK();
  52461. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV):
  52462. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV)
  52463. ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52464. HYBRID_BREAK();
  52465. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CV):
  52466. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CV)
  52467. ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52468. HYBRID_BREAK();
  52469. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CV):
  52470. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CV)
  52471. ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52472. HYBRID_BREAK();
  52473. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV):
  52474. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV)
  52475. ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52476. HYBRID_BREAK();
  52477. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV):
  52478. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV)
  52479. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52480. HYBRID_BREAK();
  52481. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV):
  52482. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV)
  52483. ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52484. HYBRID_BREAK();
  52485. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV):
  52486. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV)
  52487. ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52488. HYBRID_BREAK();
  52489. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV):
  52490. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV)
  52491. ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52492. HYBRID_BREAK();
  52493. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV):
  52494. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV)
  52495. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52496. HYBRID_BREAK();
  52497. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV):
  52498. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV)
  52499. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52500. HYBRID_BREAK();
  52501. HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CV):
  52502. VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CV)
  52503. ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52504. HYBRID_BREAK();
  52505. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST):
  52506. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST)
  52507. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52508. HYBRID_BREAK();
  52509. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP):
  52510. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP)
  52511. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52512. HYBRID_BREAK();
  52513. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR):
  52514. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR)
  52515. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52516. HYBRID_BREAK();
  52517. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV):
  52518. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV)
  52519. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52520. HYBRID_BREAK();
  52521. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST):
  52522. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST)
  52523. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52524. HYBRID_BREAK();
  52525. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP):
  52526. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP)
  52527. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52528. HYBRID_BREAK();
  52529. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR):
  52530. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR)
  52531. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52532. HYBRID_BREAK();
  52533. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV):
  52534. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV)
  52535. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52536. HYBRID_BREAK();
  52537. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED):
  52538. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED)
  52539. ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52540. HYBRID_BREAK();
  52541. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED):
  52542. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED)
  52543. ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52544. HYBRID_BREAK();
  52545. HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_CV):
  52546. VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_CV)
  52547. ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52548. HYBRID_BREAK();
  52549. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR):
  52550. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR)
  52551. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52552. HYBRID_BREAK();
  52553. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV):
  52554. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV)
  52555. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52556. HYBRID_BREAK();
  52557. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV):
  52558. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV)
  52559. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52560. HYBRID_BREAK();
  52561. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV):
  52562. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV)
  52563. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52564. HYBRID_BREAK();
  52565. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CV):
  52566. VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CV)
  52567. ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52568. HYBRID_BREAK();
  52569. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CV):
  52570. VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CV)
  52571. ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52572. HYBRID_BREAK();
  52573. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CV):
  52574. VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CV)
  52575. ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52576. HYBRID_BREAK();
  52577. HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CV):
  52578. VM_TRACE(ZEND_YIELD_SPEC_VAR_CV)
  52579. ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52580. HYBRID_BREAK();
  52581. HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED):
  52582. VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED)
  52583. ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52584. HYBRID_BREAK();
  52585. HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED):
  52586. VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED)
  52587. ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52588. HYBRID_BREAK();
  52589. HYBRID_CASE(ZEND_CLONE_SPEC_UNUSED):
  52590. VM_TRACE(ZEND_CLONE_SPEC_UNUSED)
  52591. ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52592. HYBRID_BREAK();
  52593. HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED):
  52594. VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED)
  52595. ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52596. HYBRID_BREAK();
  52597. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST):
  52598. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST)
  52599. ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52600. HYBRID_BREAK();
  52601. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST):
  52602. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST)
  52603. ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52604. HYBRID_BREAK();
  52605. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST):
  52606. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST)
  52607. ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52608. HYBRID_BREAK();
  52609. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST):
  52610. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST)
  52611. ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52612. HYBRID_BREAK();
  52613. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST):
  52614. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST)
  52615. ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52616. HYBRID_BREAK();
  52617. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST):
  52618. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST)
  52619. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52620. HYBRID_BREAK();
  52621. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST):
  52622. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST)
  52623. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52624. HYBRID_BREAK();
  52625. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST):
  52626. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST)
  52627. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52628. HYBRID_BREAK();
  52629. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST):
  52630. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST)
  52631. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52632. HYBRID_BREAK();
  52633. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST):
  52634. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST)
  52635. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52636. HYBRID_BREAK();
  52637. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP):
  52638. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP)
  52639. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52640. HYBRID_BREAK();
  52641. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR):
  52642. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR)
  52643. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52644. HYBRID_BREAK();
  52645. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV):
  52646. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV)
  52647. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52648. HYBRID_BREAK();
  52649. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR):
  52650. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR)
  52651. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52652. HYBRID_BREAK();
  52653. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV):
  52654. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV)
  52655. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52656. HYBRID_BREAK();
  52657. HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST):
  52658. VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST)
  52659. ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52660. HYBRID_BREAK();
  52661. HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST):
  52662. VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST)
  52663. ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52664. HYBRID_BREAK();
  52665. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST):
  52666. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST)
  52667. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52668. HYBRID_BREAK();
  52669. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST):
  52670. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST)
  52671. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52672. HYBRID_BREAK();
  52673. HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST):
  52674. VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST)
  52675. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52676. HYBRID_BREAK();
  52677. HYBRID_CASE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST):
  52678. VM_TRACE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST)
  52679. ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52680. HYBRID_BREAK();
  52681. HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST):
  52682. VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST)
  52683. ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52684. HYBRID_BREAK();
  52685. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST):
  52686. VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST)
  52687. ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52688. HYBRID_BREAK();
  52689. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST):
  52690. VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST)
  52691. ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52692. HYBRID_BREAK();
  52693. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST):
  52694. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST)
  52695. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52696. HYBRID_BREAK();
  52697. HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CONST):
  52698. VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CONST)
  52699. ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52700. HYBRID_BREAK();
  52701. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR):
  52702. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR)
  52703. ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52704. HYBRID_BREAK();
  52705. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR):
  52706. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR)
  52707. ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52708. HYBRID_BREAK();
  52709. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR):
  52710. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR)
  52711. ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52712. HYBRID_BREAK();
  52713. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR):
  52714. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR)
  52715. ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52716. HYBRID_BREAK();
  52717. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR):
  52718. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR)
  52719. ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52720. HYBRID_BREAK();
  52721. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR):
  52722. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR)
  52723. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52724. HYBRID_BREAK();
  52725. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR):
  52726. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR)
  52727. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52728. HYBRID_BREAK();
  52729. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR):
  52730. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR)
  52731. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52732. HYBRID_BREAK();
  52733. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR):
  52734. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR)
  52735. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52736. HYBRID_BREAK();
  52737. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST):
  52738. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST)
  52739. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52740. HYBRID_BREAK();
  52741. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP):
  52742. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP)
  52743. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52744. HYBRID_BREAK();
  52745. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
  52746. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
  52747. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52748. HYBRID_BREAK();
  52749. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
  52750. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
  52751. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52752. HYBRID_BREAK();
  52753. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
  52754. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
  52755. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52756. HYBRID_BREAK();
  52757. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
  52758. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
  52759. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52760. HYBRID_BREAK();
  52761. HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR):
  52762. VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR)
  52763. ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52764. HYBRID_BREAK();
  52765. HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR):
  52766. VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR)
  52767. ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52768. HYBRID_BREAK();
  52769. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR):
  52770. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR)
  52771. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52772. HYBRID_BREAK();
  52773. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR):
  52774. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR)
  52775. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52776. HYBRID_BREAK();
  52777. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR):
  52778. VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR)
  52779. ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52780. HYBRID_BREAK();
  52781. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR):
  52782. VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR)
  52783. ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52784. HYBRID_BREAK();
  52785. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR):
  52786. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR)
  52787. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52788. HYBRID_BREAK();
  52789. HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_TMPVAR):
  52790. VM_TRACE(ZEND_YIELD_SPEC_UNUSED_TMPVAR)
  52791. ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52792. HYBRID_BREAK();
  52793. HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED):
  52794. VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED)
  52795. ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52796. HYBRID_BREAK();
  52797. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED):
  52798. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED)
  52799. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52800. HYBRID_BREAK();
  52801. HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED):
  52802. VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED)
  52803. ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52804. HYBRID_BREAK();
  52805. HYBRID_CASE(ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED):
  52806. VM_TRACE(ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED)
  52807. ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52808. HYBRID_BREAK();
  52809. HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED):
  52810. VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED)
  52811. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52812. HYBRID_BREAK();
  52813. HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK):
  52814. VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK)
  52815. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52816. HYBRID_BREAK();
  52817. HYBRID_CASE(ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED):
  52818. VM_TRACE(ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED)
  52819. ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52820. HYBRID_BREAK();
  52821. HYBRID_CASE(ZEND_NEW_SPEC_UNUSED_UNUSED):
  52822. VM_TRACE(ZEND_NEW_SPEC_UNUSED_UNUSED)
  52823. ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52824. HYBRID_BREAK();
  52825. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED):
  52826. VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED)
  52827. ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52828. HYBRID_BREAK();
  52829. HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_UNUSED):
  52830. VM_TRACE(ZEND_YIELD_SPEC_UNUSED_UNUSED)
  52831. ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52832. HYBRID_BREAK();
  52833. HYBRID_CASE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED):
  52834. VM_TRACE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED)
  52835. ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52836. HYBRID_BREAK();
  52837. HYBRID_CASE(ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED):
  52838. VM_TRACE(ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED)
  52839. ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52840. HYBRID_BREAK();
  52841. HYBRID_CASE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED):
  52842. VM_TRACE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED)
  52843. ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52844. HYBRID_BREAK();
  52845. HYBRID_CASE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED):
  52846. VM_TRACE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED)
  52847. ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52848. HYBRID_BREAK();
  52849. HYBRID_CASE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED):
  52850. VM_TRACE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED)
  52851. ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52852. HYBRID_BREAK();
  52853. HYBRID_CASE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED):
  52854. VM_TRACE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED)
  52855. ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52856. HYBRID_BREAK();
  52857. HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED):
  52858. VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED)
  52859. ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52860. HYBRID_BREAK();
  52861. HYBRID_CASE(ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED):
  52862. VM_TRACE(ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED)
  52863. ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52864. HYBRID_BREAK();
  52865. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV):
  52866. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV)
  52867. ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52868. HYBRID_BREAK();
  52869. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV):
  52870. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV)
  52871. ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52872. HYBRID_BREAK();
  52873. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV):
  52874. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV)
  52875. ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52876. HYBRID_BREAK();
  52877. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV):
  52878. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV)
  52879. ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52880. HYBRID_BREAK();
  52881. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV):
  52882. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV)
  52883. ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52884. HYBRID_BREAK();
  52885. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV):
  52886. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV)
  52887. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52888. HYBRID_BREAK();
  52889. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV):
  52890. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV)
  52891. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52892. HYBRID_BREAK();
  52893. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV):
  52894. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV)
  52895. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52896. HYBRID_BREAK();
  52897. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV):
  52898. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV)
  52899. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52900. HYBRID_BREAK();
  52901. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST):
  52902. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST)
  52903. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52904. HYBRID_BREAK();
  52905. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP):
  52906. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP)
  52907. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52908. HYBRID_BREAK();
  52909. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR):
  52910. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR)
  52911. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52912. HYBRID_BREAK();
  52913. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV):
  52914. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV)
  52915. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52916. HYBRID_BREAK();
  52917. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR):
  52918. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR)
  52919. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52920. HYBRID_BREAK();
  52921. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV):
  52922. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV)
  52923. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52924. HYBRID_BREAK();
  52925. HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CV):
  52926. VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CV)
  52927. ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52928. HYBRID_BREAK();
  52929. HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV):
  52930. VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV)
  52931. ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52932. HYBRID_BREAK();
  52933. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV):
  52934. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV)
  52935. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52936. HYBRID_BREAK();
  52937. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV):
  52938. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV)
  52939. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52940. HYBRID_BREAK();
  52941. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV):
  52942. VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV)
  52943. ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52944. HYBRID_BREAK();
  52945. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV):
  52946. VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV)
  52947. ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52948. HYBRID_BREAK();
  52949. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV):
  52950. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV)
  52951. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52952. HYBRID_BREAK();
  52953. HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CV):
  52954. VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CV)
  52955. ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52956. HYBRID_BREAK();
  52957. HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CV):
  52958. VM_TRACE(ZEND_BOOL_NOT_SPEC_CV)
  52959. ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52960. HYBRID_BREAK();
  52961. HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED):
  52962. VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED)
  52963. ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52964. HYBRID_BREAK();
  52965. HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED):
  52966. VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED)
  52967. ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52968. HYBRID_BREAK();
  52969. HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED):
  52970. VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED)
  52971. ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52972. HYBRID_BREAK();
  52973. HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED):
  52974. VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED)
  52975. ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52976. HYBRID_BREAK();
  52977. HYBRID_CASE(ZEND_POST_INC_SPEC_CV):
  52978. VM_TRACE(ZEND_POST_INC_SPEC_CV)
  52979. ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52980. HYBRID_BREAK();
  52981. HYBRID_CASE(ZEND_POST_DEC_SPEC_CV):
  52982. VM_TRACE(ZEND_POST_DEC_SPEC_CV)
  52983. ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52984. HYBRID_BREAK();
  52985. HYBRID_CASE(ZEND_ECHO_SPEC_CV):
  52986. VM_TRACE(ZEND_ECHO_SPEC_CV)
  52987. ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52988. HYBRID_BREAK();
  52989. HYBRID_CASE(ZEND_JMPZ_SPEC_CV):
  52990. VM_TRACE(ZEND_JMPZ_SPEC_CV)
  52991. ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52992. HYBRID_BREAK();
  52993. HYBRID_CASE(ZEND_JMPNZ_SPEC_CV):
  52994. VM_TRACE(ZEND_JMPNZ_SPEC_CV)
  52995. ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52996. HYBRID_BREAK();
  52997. HYBRID_CASE(ZEND_JMPZNZ_SPEC_CV):
  52998. VM_TRACE(ZEND_JMPZNZ_SPEC_CV)
  52999. ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53000. HYBRID_BREAK();
  53001. HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CV):
  53002. VM_TRACE(ZEND_JMPZ_EX_SPEC_CV)
  53003. ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53004. HYBRID_BREAK();
  53005. HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CV):
  53006. VM_TRACE(ZEND_JMPNZ_EX_SPEC_CV)
  53007. ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53008. HYBRID_BREAK();
  53009. HYBRID_CASE(ZEND_RETURN_SPEC_CV):
  53010. VM_TRACE(ZEND_RETURN_SPEC_CV)
  53011. {
  53012. USE_OPLINE
  53013. zval *retval_ptr;
  53014. zval *return_value;
  53015. retval_ptr = EX_VAR(opline->op1.var);
  53016. return_value = EX(return_value);
  53017. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  53018. SAVE_OPLINE();
  53019. retval_ptr = ZVAL_UNDEFINED_OP1();
  53020. if (return_value) {
  53021. ZVAL_NULL(return_value);
  53022. }
  53023. } else if (!return_value) {
  53024. if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
  53025. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  53026. SAVE_OPLINE();
  53027. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  53028. }
  53029. }
  53030. } else {
  53031. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  53032. ZVAL_COPY_VALUE(return_value, retval_ptr);
  53033. if (IS_CV == IS_CONST) {
  53034. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  53035. Z_ADDREF_P(return_value);
  53036. }
  53037. }
  53038. } else if (IS_CV == IS_CV) {
  53039. do {
  53040. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  53041. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  53042. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  53043. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  53044. ZVAL_COPY_VALUE(return_value, retval_ptr);
  53045. if (GC_MAY_LEAK(ref)) {
  53046. SAVE_OPLINE();
  53047. gc_possible_root(ref);
  53048. }
  53049. ZVAL_NULL(retval_ptr);
  53050. break;
  53051. } else {
  53052. Z_ADDREF_P(retval_ptr);
  53053. }
  53054. } else {
  53055. retval_ptr = Z_REFVAL_P(retval_ptr);
  53056. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  53057. Z_ADDREF_P(retval_ptr);
  53058. }
  53059. }
  53060. }
  53061. ZVAL_COPY_VALUE(return_value, retval_ptr);
  53062. } while (0);
  53063. } else /* if (IS_CV == IS_VAR) */ {
  53064. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  53065. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  53066. retval_ptr = Z_REFVAL_P(retval_ptr);
  53067. ZVAL_COPY_VALUE(return_value, retval_ptr);
  53068. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  53069. efree_size(ref, sizeof(zend_reference));
  53070. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  53071. Z_ADDREF_P(retval_ptr);
  53072. }
  53073. } else {
  53074. ZVAL_COPY_VALUE(return_value, retval_ptr);
  53075. }
  53076. }
  53077. }
  53078. goto zend_leave_helper_SPEC_LABEL;
  53079. }
  53080. HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CV):
  53081. VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CV)
  53082. ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53083. HYBRID_BREAK();
  53084. HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CV):
  53085. VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CV)
  53086. ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53087. HYBRID_BREAK();
  53088. HYBRID_CASE(ZEND_THROW_SPEC_CV):
  53089. VM_TRACE(ZEND_THROW_SPEC_CV)
  53090. ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53091. HYBRID_BREAK();
  53092. HYBRID_CASE(ZEND_SEND_USER_SPEC_CV):
  53093. VM_TRACE(ZEND_SEND_USER_SPEC_CV)
  53094. ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53095. HYBRID_BREAK();
  53096. HYBRID_CASE(ZEND_BOOL_SPEC_CV):
  53097. VM_TRACE(ZEND_BOOL_SPEC_CV)
  53098. ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53099. HYBRID_BREAK();
  53100. HYBRID_CASE(ZEND_CLONE_SPEC_CV):
  53101. VM_TRACE(ZEND_CLONE_SPEC_CV)
  53102. ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53103. HYBRID_BREAK();
  53104. HYBRID_CASE(ZEND_CAST_SPEC_CV):
  53105. VM_TRACE(ZEND_CAST_SPEC_CV)
  53106. ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53107. HYBRID_BREAK();
  53108. HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CV):
  53109. VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CV)
  53110. ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53111. HYBRID_BREAK();
  53112. HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CV):
  53113. VM_TRACE(ZEND_FE_RESET_R_SPEC_CV)
  53114. ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53115. HYBRID_BREAK();
  53116. HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CV):
  53117. VM_TRACE(ZEND_FE_RESET_RW_SPEC_CV)
  53118. ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53119. HYBRID_BREAK();
  53120. HYBRID_CASE(ZEND_JMP_SET_SPEC_CV):
  53121. VM_TRACE(ZEND_JMP_SET_SPEC_CV)
  53122. ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53123. HYBRID_BREAK();
  53124. HYBRID_CASE(ZEND_COALESCE_SPEC_CV):
  53125. VM_TRACE(ZEND_COALESCE_SPEC_CV)
  53126. ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53127. HYBRID_BREAK();
  53128. HYBRID_CASE(ZEND_JMP_NULL_SPEC_CV):
  53129. VM_TRACE(ZEND_JMP_NULL_SPEC_CV)
  53130. ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53131. HYBRID_BREAK();
  53132. HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CV):
  53133. VM_TRACE(ZEND_QM_ASSIGN_SPEC_CV)
  53134. ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53135. HYBRID_BREAK();
  53136. HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CV):
  53137. VM_TRACE(ZEND_YIELD_FROM_SPEC_CV)
  53138. ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53139. HYBRID_BREAK();
  53140. HYBRID_CASE(ZEND_STRLEN_SPEC_CV):
  53141. VM_TRACE(ZEND_STRLEN_SPEC_CV)
  53142. ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53143. HYBRID_BREAK();
  53144. HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CV):
  53145. VM_TRACE(ZEND_TYPE_CHECK_SPEC_CV)
  53146. ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53147. HYBRID_BREAK();
  53148. HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_CV):
  53149. VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_CV)
  53150. ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53151. HYBRID_BREAK();
  53152. HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
  53153. VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
  53154. ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53155. HYBRID_BREAK();
  53156. HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
  53157. VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
  53158. ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53159. HYBRID_BREAK();
  53160. HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED):
  53161. VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED)
  53162. ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53163. HYBRID_BREAK();
  53164. HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED):
  53165. VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED)
  53166. ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53167. HYBRID_BREAK();
  53168. HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
  53169. VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
  53170. ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53171. HYBRID_BREAK();
  53172. HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
  53173. VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
  53174. ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53175. HYBRID_BREAK();
  53176. HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED):
  53177. VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED)
  53178. ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53179. HYBRID_BREAK();
  53180. HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED):
  53181. VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED)
  53182. ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53183. HYBRID_BREAK();
  53184. HYBRID_CASE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV):
  53185. VM_TRACE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV)
  53186. ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53187. HYBRID_BREAK();
  53188. HYBRID_CASE(ZEND_POST_INC_LONG_SPEC_CV):
  53189. VM_TRACE(ZEND_POST_INC_LONG_SPEC_CV)
  53190. ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53191. HYBRID_BREAK();
  53192. HYBRID_CASE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV):
  53193. VM_TRACE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV)
  53194. ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53195. HYBRID_BREAK();
  53196. HYBRID_CASE(ZEND_POST_DEC_LONG_SPEC_CV):
  53197. VM_TRACE(ZEND_POST_DEC_LONG_SPEC_CV)
  53198. ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53199. HYBRID_BREAK();
  53200. HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_CV):
  53201. VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_CV)
  53202. ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53203. HYBRID_BREAK();
  53204. HYBRID_CASE(ZEND_DIV_SPEC_CV_CONST):
  53205. VM_TRACE(ZEND_DIV_SPEC_CV_CONST)
  53206. ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53207. HYBRID_BREAK();
  53208. HYBRID_CASE(ZEND_POW_SPEC_CV_CONST):
  53209. VM_TRACE(ZEND_POW_SPEC_CV_CONST)
  53210. ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53211. HYBRID_BREAK();
  53212. HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CONST):
  53213. VM_TRACE(ZEND_CONCAT_SPEC_CV_CONST)
  53214. ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53215. HYBRID_BREAK();
  53216. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CONST):
  53217. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CONST)
  53218. ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53219. HYBRID_BREAK();
  53220. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST):
  53221. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST)
  53222. ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53223. HYBRID_BREAK();
  53224. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST):
  53225. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST)
  53226. ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53227. HYBRID_BREAK();
  53228. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ):
  53229. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ)
  53230. ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53231. HYBRID_BREAK();
  53232. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ):
  53233. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ)
  53234. ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53235. HYBRID_BREAK();
  53236. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST):
  53237. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST)
  53238. ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53239. HYBRID_BREAK();
  53240. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ):
  53241. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ)
  53242. ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53243. HYBRID_BREAK();
  53244. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ):
  53245. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ)
  53246. ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53247. HYBRID_BREAK();
  53248. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CONST):
  53249. VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CONST)
  53250. ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53251. HYBRID_BREAK();
  53252. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CONST):
  53253. VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CONST)
  53254. ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53255. HYBRID_BREAK();
  53256. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST):
  53257. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST)
  53258. ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53259. HYBRID_BREAK();
  53260. HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST):
  53261. VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST)
  53262. ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53263. HYBRID_BREAK();
  53264. HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_CONST):
  53265. VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_CONST)
  53266. ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53267. HYBRID_BREAK();
  53268. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST):
  53269. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST)
  53270. ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53271. HYBRID_BREAK();
  53272. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CONST):
  53273. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CONST)
  53274. ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53275. HYBRID_BREAK();
  53276. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CONST):
  53277. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CONST)
  53278. ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53279. HYBRID_BREAK();
  53280. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CONST):
  53281. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CONST)
  53282. ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53283. HYBRID_BREAK();
  53284. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST):
  53285. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST)
  53286. ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53287. HYBRID_BREAK();
  53288. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST):
  53289. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST)
  53290. ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53291. HYBRID_BREAK();
  53292. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST):
  53293. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST)
  53294. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53295. HYBRID_BREAK();
  53296. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST):
  53297. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST)
  53298. ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53299. HYBRID_BREAK();
  53300. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST):
  53301. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST)
  53302. ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53303. HYBRID_BREAK();
  53304. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST):
  53305. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST)
  53306. ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53307. HYBRID_BREAK();
  53308. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST):
  53309. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST)
  53310. ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53311. HYBRID_BREAK();
  53312. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST):
  53313. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST)
  53314. ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53315. HYBRID_BREAK();
  53316. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST):
  53317. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST)
  53318. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53319. HYBRID_BREAK();
  53320. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST):
  53321. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST)
  53322. ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53323. HYBRID_BREAK();
  53324. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST):
  53325. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST)
  53326. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53327. HYBRID_BREAK();
  53328. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP):
  53329. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP)
  53330. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53331. HYBRID_BREAK();
  53332. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR):
  53333. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR)
  53334. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53335. HYBRID_BREAK();
  53336. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV):
  53337. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV)
  53338. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53339. HYBRID_BREAK();
  53340. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST):
  53341. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST)
  53342. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53343. HYBRID_BREAK();
  53344. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP):
  53345. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP)
  53346. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53347. HYBRID_BREAK();
  53348. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR):
  53349. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR)
  53350. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53351. HYBRID_BREAK();
  53352. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV):
  53353. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV)
  53354. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53355. HYBRID_BREAK();
  53356. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED):
  53357. VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED)
  53358. ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53359. HYBRID_BREAK();
  53360. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED):
  53361. VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED)
  53362. ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53363. HYBRID_BREAK();
  53364. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR):
  53365. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR)
  53366. ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53367. HYBRID_BREAK();
  53368. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV):
  53369. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV)
  53370. ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53371. HYBRID_BREAK();
  53372. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CONST):
  53373. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CONST)
  53374. ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53375. HYBRID_BREAK();
  53376. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST):
  53377. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST)
  53378. ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53379. HYBRID_BREAK();
  53380. HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV_CONST):
  53381. VM_TRACE(ZEND_SEND_VAR_SPEC_CV_CONST)
  53382. ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53383. HYBRID_BREAK();
  53384. HYBRID_CASE(ZEND_SEND_REF_SPEC_CV_CONST):
  53385. VM_TRACE(ZEND_SEND_REF_SPEC_CV_CONST)
  53386. ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53387. HYBRID_BREAK();
  53388. HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_CONST):
  53389. VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_CONST)
  53390. ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53391. HYBRID_BREAK();
  53392. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST):
  53393. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST)
  53394. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53395. HYBRID_BREAK();
  53396. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CONST):
  53397. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CONST)
  53398. ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53399. HYBRID_BREAK();
  53400. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CONST):
  53401. VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CONST)
  53402. ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53403. HYBRID_BREAK();
  53404. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CONST):
  53405. VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CONST)
  53406. ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53407. HYBRID_BREAK();
  53408. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST):
  53409. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST)
  53410. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53411. HYBRID_BREAK();
  53412. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST):
  53413. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST)
  53414. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53415. HYBRID_BREAK();
  53416. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST):
  53417. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST)
  53418. ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53419. HYBRID_BREAK();
  53420. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_CONST):
  53421. VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_CONST)
  53422. ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53423. HYBRID_BREAK();
  53424. HYBRID_CASE(ZEND_YIELD_SPEC_CV_CONST):
  53425. VM_TRACE(ZEND_YIELD_SPEC_CV_CONST)
  53426. ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53427. HYBRID_BREAK();
  53428. HYBRID_CASE(ZEND_BIND_GLOBAL_SPEC_CV_CONST):
  53429. VM_TRACE(ZEND_BIND_GLOBAL_SPEC_CV_CONST)
  53430. ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53431. HYBRID_BREAK();
  53432. HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CV_CONST):
  53433. VM_TRACE(ZEND_IN_ARRAY_SPEC_CV_CONST)
  53434. ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53435. HYBRID_BREAK();
  53436. HYBRID_CASE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST):
  53437. VM_TRACE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST)
  53438. ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53439. HYBRID_BREAK();
  53440. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST):
  53441. VM_TRACE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST)
  53442. ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53443. HYBRID_BREAK();
  53444. HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST):
  53445. VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST)
  53446. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53447. HYBRID_BREAK();
  53448. HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV):
  53449. VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV)
  53450. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53451. HYBRID_BREAK();
  53452. HYBRID_CASE(ZEND_DIV_SPEC_CV_TMPVAR):
  53453. VM_TRACE(ZEND_DIV_SPEC_CV_TMPVAR)
  53454. ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53455. HYBRID_BREAK();
  53456. HYBRID_CASE(ZEND_POW_SPEC_CV_TMPVAR):
  53457. VM_TRACE(ZEND_POW_SPEC_CV_TMPVAR)
  53458. ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53459. HYBRID_BREAK();
  53460. HYBRID_CASE(ZEND_CONCAT_SPEC_CV_TMPVAR):
  53461. VM_TRACE(ZEND_CONCAT_SPEC_CV_TMPVAR)
  53462. ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53463. HYBRID_BREAK();
  53464. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR):
  53465. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR)
  53466. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53467. HYBRID_BREAK();
  53468. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ):
  53469. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ)
  53470. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53471. HYBRID_BREAK();
  53472. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ):
  53473. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
  53474. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53475. HYBRID_BREAK();
  53476. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR):
  53477. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR)
  53478. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53479. HYBRID_BREAK();
  53480. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ):
  53481. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ)
  53482. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53483. HYBRID_BREAK();
  53484. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ):
  53485. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
  53486. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53487. HYBRID_BREAK();
  53488. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_TMPVAR):
  53489. VM_TRACE(ZEND_SPACESHIP_SPEC_CV_TMPVAR)
  53490. ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53491. HYBRID_BREAK();
  53492. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR):
  53493. VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR)
  53494. ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53495. HYBRID_BREAK();
  53496. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR):
  53497. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR)
  53498. ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53499. HYBRID_BREAK();
  53500. HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR):
  53501. VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR)
  53502. ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53503. HYBRID_BREAK();
  53504. HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR):
  53505. VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR)
  53506. ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53507. HYBRID_BREAK();
  53508. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR):
  53509. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR)
  53510. ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53511. HYBRID_BREAK();
  53512. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR):
  53513. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR)
  53514. ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53515. HYBRID_BREAK();
  53516. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR):
  53517. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR)
  53518. ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53519. HYBRID_BREAK();
  53520. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR):
  53521. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR)
  53522. ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53523. HYBRID_BREAK();
  53524. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR):
  53525. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR)
  53526. ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53527. HYBRID_BREAK();
  53528. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR):
  53529. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR)
  53530. ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53531. HYBRID_BREAK();
  53532. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR):
  53533. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR)
  53534. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53535. HYBRID_BREAK();
  53536. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR):
  53537. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR)
  53538. ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53539. HYBRID_BREAK();
  53540. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR):
  53541. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR)
  53542. ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53543. HYBRID_BREAK();
  53544. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR):
  53545. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR)
  53546. ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53547. HYBRID_BREAK();
  53548. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR):
  53549. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR)
  53550. ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53551. HYBRID_BREAK();
  53552. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR):
  53553. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR)
  53554. ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53555. HYBRID_BREAK();
  53556. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR):
  53557. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR)
  53558. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53559. HYBRID_BREAK();
  53560. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR):
  53561. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR)
  53562. ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53563. HYBRID_BREAK();
  53564. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST):
  53565. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST)
  53566. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53567. HYBRID_BREAK();
  53568. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP):
  53569. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP)
  53570. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53571. HYBRID_BREAK();
  53572. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR):
  53573. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR)
  53574. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53575. HYBRID_BREAK();
  53576. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV):
  53577. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV)
  53578. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53579. HYBRID_BREAK();
  53580. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST):
  53581. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST)
  53582. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53583. HYBRID_BREAK();
  53584. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP):
  53585. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP)
  53586. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53587. HYBRID_BREAK();
  53588. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR):
  53589. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR)
  53590. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53591. HYBRID_BREAK();
  53592. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV):
  53593. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV)
  53594. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53595. HYBRID_BREAK();
  53596. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR):
  53597. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR)
  53598. ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53599. HYBRID_BREAK();
  53600. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV):
  53601. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV)
  53602. ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53603. HYBRID_BREAK();
  53604. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR):
  53605. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR)
  53606. ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53607. HYBRID_BREAK();
  53608. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR):
  53609. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR)
  53610. ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53611. HYBRID_BREAK();
  53612. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR):
  53613. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR)
  53614. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53615. HYBRID_BREAK();
  53616. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR):
  53617. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR)
  53618. ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53619. HYBRID_BREAK();
  53620. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR):
  53621. VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR)
  53622. ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53623. HYBRID_BREAK();
  53624. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR):
  53625. VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR)
  53626. ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53627. HYBRID_BREAK();
  53628. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR):
  53629. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR)
  53630. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53631. HYBRID_BREAK();
  53632. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR):
  53633. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR)
  53634. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53635. HYBRID_BREAK();
  53636. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR):
  53637. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR)
  53638. ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53639. HYBRID_BREAK();
  53640. HYBRID_CASE(ZEND_YIELD_SPEC_CV_TMPVAR):
  53641. VM_TRACE(ZEND_YIELD_SPEC_CV_TMPVAR)
  53642. ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53643. HYBRID_BREAK();
  53644. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_TMP):
  53645. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_TMP)
  53646. ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53647. HYBRID_BREAK();
  53648. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP):
  53649. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP)
  53650. ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53651. HYBRID_BREAK();
  53652. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED):
  53653. VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED)
  53654. ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53655. HYBRID_BREAK();
  53656. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED):
  53657. VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED)
  53658. ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53659. HYBRID_BREAK();
  53660. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_VAR):
  53661. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_VAR)
  53662. ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53663. HYBRID_BREAK();
  53664. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR):
  53665. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR)
  53666. ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53667. HYBRID_BREAK();
  53668. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED):
  53669. VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED)
  53670. ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53671. HYBRID_BREAK();
  53672. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED):
  53673. VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED)
  53674. ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53675. HYBRID_BREAK();
  53676. HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_VAR):
  53677. VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_VAR)
  53678. ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53679. HYBRID_BREAK();
  53680. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_VAR):
  53681. VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_VAR)
  53682. ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53683. HYBRID_BREAK();
  53684. HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED):
  53685. VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED)
  53686. ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53687. HYBRID_BREAK();
  53688. HYBRID_CASE(ZEND_FETCH_R_SPEC_CV_UNUSED):
  53689. VM_TRACE(ZEND_FETCH_R_SPEC_CV_UNUSED)
  53690. ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53691. HYBRID_BREAK();
  53692. HYBRID_CASE(ZEND_FETCH_W_SPEC_CV_UNUSED):
  53693. VM_TRACE(ZEND_FETCH_W_SPEC_CV_UNUSED)
  53694. ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53695. HYBRID_BREAK();
  53696. HYBRID_CASE(ZEND_FETCH_RW_SPEC_CV_UNUSED):
  53697. VM_TRACE(ZEND_FETCH_RW_SPEC_CV_UNUSED)
  53698. ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53699. HYBRID_BREAK();
  53700. HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED):
  53701. VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED)
  53702. ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53703. HYBRID_BREAK();
  53704. HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED):
  53705. VM_TRACE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED)
  53706. ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53707. HYBRID_BREAK();
  53708. HYBRID_CASE(ZEND_FETCH_IS_SPEC_CV_UNUSED):
  53709. VM_TRACE(ZEND_FETCH_IS_SPEC_CV_UNUSED)
  53710. ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53711. HYBRID_BREAK();
  53712. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED):
  53713. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED)
  53714. ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53715. HYBRID_BREAK();
  53716. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED):
  53717. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED)
  53718. ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53719. HYBRID_BREAK();
  53720. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED):
  53721. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED)
  53722. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53723. HYBRID_BREAK();
  53724. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST):
  53725. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST)
  53726. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53727. HYBRID_BREAK();
  53728. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP):
  53729. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP)
  53730. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53731. HYBRID_BREAK();
  53732. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR):
  53733. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR)
  53734. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53735. HYBRID_BREAK();
  53736. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV):
  53737. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV)
  53738. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53739. HYBRID_BREAK();
  53740. HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED):
  53741. VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED)
  53742. ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53743. HYBRID_BREAK();
  53744. HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV_UNUSED):
  53745. VM_TRACE(ZEND_SEND_VAR_SPEC_CV_UNUSED)
  53746. ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53747. HYBRID_BREAK();
  53748. HYBRID_CASE(ZEND_SEND_REF_SPEC_CV_UNUSED):
  53749. VM_TRACE(ZEND_SEND_REF_SPEC_CV_UNUSED)
  53750. ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53751. HYBRID_BREAK();
  53752. HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED):
  53753. VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED)
  53754. ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53755. HYBRID_BREAK();
  53756. HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK):
  53757. VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK)
  53758. ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53759. HYBRID_BREAK();
  53760. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED):
  53761. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED)
  53762. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53763. HYBRID_BREAK();
  53764. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED):
  53765. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED)
  53766. ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53767. HYBRID_BREAK();
  53768. HYBRID_CASE(ZEND_UNSET_CV_SPEC_CV_UNUSED):
  53769. VM_TRACE(ZEND_UNSET_CV_SPEC_CV_UNUSED)
  53770. ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53771. HYBRID_BREAK();
  53772. HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CV_UNUSED):
  53773. VM_TRACE(ZEND_UNSET_VAR_SPEC_CV_UNUSED)
  53774. ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53775. HYBRID_BREAK();
  53776. HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET):
  53777. VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET)
  53778. ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53779. HYBRID_BREAK();
  53780. HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY):
  53781. VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY)
  53782. ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53783. HYBRID_BREAK();
  53784. HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED):
  53785. VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED)
  53786. ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53787. HYBRID_BREAK();
  53788. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_UNUSED):
  53789. VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_UNUSED)
  53790. ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53791. HYBRID_BREAK();
  53792. HYBRID_CASE(ZEND_YIELD_SPEC_CV_UNUSED):
  53793. VM_TRACE(ZEND_YIELD_SPEC_CV_UNUSED)
  53794. ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53795. HYBRID_BREAK();
  53796. HYBRID_CASE(ZEND_BIND_STATIC_SPEC_CV_UNUSED):
  53797. VM_TRACE(ZEND_BIND_STATIC_SPEC_CV_UNUSED)
  53798. ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53799. HYBRID_BREAK();
  53800. HYBRID_CASE(ZEND_CHECK_VAR_SPEC_CV_UNUSED):
  53801. VM_TRACE(ZEND_CHECK_VAR_SPEC_CV_UNUSED)
  53802. ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53803. HYBRID_BREAK();
  53804. HYBRID_CASE(ZEND_MAKE_REF_SPEC_CV_UNUSED):
  53805. VM_TRACE(ZEND_MAKE_REF_SPEC_CV_UNUSED)
  53806. ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53807. HYBRID_BREAK();
  53808. HYBRID_CASE(ZEND_COUNT_SPEC_CV_UNUSED):
  53809. VM_TRACE(ZEND_COUNT_SPEC_CV_UNUSED)
  53810. ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53811. HYBRID_BREAK();
  53812. HYBRID_CASE(ZEND_GET_CLASS_SPEC_CV_UNUSED):
  53813. VM_TRACE(ZEND_GET_CLASS_SPEC_CV_UNUSED)
  53814. ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53815. HYBRID_BREAK();
  53816. HYBRID_CASE(ZEND_GET_TYPE_SPEC_CV_UNUSED):
  53817. VM_TRACE(ZEND_GET_TYPE_SPEC_CV_UNUSED)
  53818. ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53819. HYBRID_BREAK();
  53820. HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED):
  53821. VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED)
  53822. ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53823. HYBRID_BREAK();
  53824. HYBRID_CASE(ZEND_DIV_SPEC_CV_CV):
  53825. VM_TRACE(ZEND_DIV_SPEC_CV_CV)
  53826. ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53827. HYBRID_BREAK();
  53828. HYBRID_CASE(ZEND_POW_SPEC_CV_CV):
  53829. VM_TRACE(ZEND_POW_SPEC_CV_CV)
  53830. ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53831. HYBRID_BREAK();
  53832. HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CV):
  53833. VM_TRACE(ZEND_CONCAT_SPEC_CV_CV)
  53834. ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53835. HYBRID_BREAK();
  53836. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CV):
  53837. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CV)
  53838. ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53839. HYBRID_BREAK();
  53840. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV):
  53841. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV)
  53842. ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53843. HYBRID_BREAK();
  53844. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV):
  53845. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV)
  53846. ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53847. HYBRID_BREAK();
  53848. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ):
  53849. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ)
  53850. ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53851. HYBRID_BREAK();
  53852. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ):
  53853. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ)
  53854. ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53855. HYBRID_BREAK();
  53856. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV):
  53857. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV)
  53858. ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53859. HYBRID_BREAK();
  53860. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ):
  53861. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ)
  53862. ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53863. HYBRID_BREAK();
  53864. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ):
  53865. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ)
  53866. ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53867. HYBRID_BREAK();
  53868. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CV):
  53869. VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CV)
  53870. ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53871. HYBRID_BREAK();
  53872. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CV):
  53873. VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CV)
  53874. ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53875. HYBRID_BREAK();
  53876. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV):
  53877. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV)
  53878. ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53879. HYBRID_BREAK();
  53880. HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV):
  53881. VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV)
  53882. ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53883. HYBRID_BREAK();
  53884. HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_CV):
  53885. VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_CV)
  53886. ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53887. HYBRID_BREAK();
  53888. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CV):
  53889. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CV)
  53890. ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53891. HYBRID_BREAK();
  53892. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CV):
  53893. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CV)
  53894. ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53895. HYBRID_BREAK();
  53896. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CV):
  53897. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CV)
  53898. ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53899. HYBRID_BREAK();
  53900. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CV):
  53901. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CV)
  53902. ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53903. HYBRID_BREAK();
  53904. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CV):
  53905. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CV)
  53906. ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53907. HYBRID_BREAK();
  53908. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CV):
  53909. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CV)
  53910. ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53911. HYBRID_BREAK();
  53912. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV):
  53913. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV)
  53914. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53915. HYBRID_BREAK();
  53916. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV):
  53917. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV)
  53918. ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53919. HYBRID_BREAK();
  53920. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CV):
  53921. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CV)
  53922. ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53923. HYBRID_BREAK();
  53924. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CV):
  53925. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CV)
  53926. ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53927. HYBRID_BREAK();
  53928. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV):
  53929. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV)
  53930. ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53931. HYBRID_BREAK();
  53932. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV):
  53933. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV)
  53934. ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53935. HYBRID_BREAK();
  53936. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV):
  53937. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV)
  53938. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53939. HYBRID_BREAK();
  53940. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV):
  53941. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV)
  53942. ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53943. HYBRID_BREAK();
  53944. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST):
  53945. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST)
  53946. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53947. HYBRID_BREAK();
  53948. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP):
  53949. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP)
  53950. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53951. HYBRID_BREAK();
  53952. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR):
  53953. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR)
  53954. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53955. HYBRID_BREAK();
  53956. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV):
  53957. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV)
  53958. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53959. HYBRID_BREAK();
  53960. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST):
  53961. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST)
  53962. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53963. HYBRID_BREAK();
  53964. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP):
  53965. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP)
  53966. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53967. HYBRID_BREAK();
  53968. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR):
  53969. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR)
  53970. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53971. HYBRID_BREAK();
  53972. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV):
  53973. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV)
  53974. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53975. HYBRID_BREAK();
  53976. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED):
  53977. VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED)
  53978. ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53979. HYBRID_BREAK();
  53980. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED):
  53981. VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED)
  53982. ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53983. HYBRID_BREAK();
  53984. HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_CV):
  53985. VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_CV)
  53986. ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53987. HYBRID_BREAK();
  53988. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR):
  53989. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR)
  53990. ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53991. HYBRID_BREAK();
  53992. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV):
  53993. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV)
  53994. ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53995. HYBRID_BREAK();
  53996. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CV):
  53997. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CV)
  53998. ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53999. HYBRID_BREAK();
  54000. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV):
  54001. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV)
  54002. ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54003. HYBRID_BREAK();
  54004. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV):
  54005. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV)
  54006. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54007. HYBRID_BREAK();
  54008. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CV):
  54009. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CV)
  54010. ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54011. HYBRID_BREAK();
  54012. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CV):
  54013. VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CV)
  54014. ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54015. HYBRID_BREAK();
  54016. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CV):
  54017. VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CV)
  54018. ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54019. HYBRID_BREAK();
  54020. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV):
  54021. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV)
  54022. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54023. HYBRID_BREAK();
  54024. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV):
  54025. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV)
  54026. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54027. HYBRID_BREAK();
  54028. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV):
  54029. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV)
  54030. ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54031. HYBRID_BREAK();
  54032. HYBRID_CASE(ZEND_YIELD_SPEC_CV_CV):
  54033. VM_TRACE(ZEND_YIELD_SPEC_CV_CV)
  54034. ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54035. HYBRID_BREAK();
  54036. HYBRID_CASE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV):
  54037. VM_TRACE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV)
  54038. ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54039. HYBRID_BREAK();
  54040. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV):
  54041. VM_TRACE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV)
  54042. ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54043. HYBRID_BREAK();
  54044. HYBRID_CASE(HYBRID_HALT):
  54045. #ifdef ZEND_VM_FP_GLOBAL_REG
  54046. execute_data = vm_stack_data.orig_execute_data;
  54047. #endif
  54048. #ifdef ZEND_VM_IP_GLOBAL_REG
  54049. opline = vm_stack_data.orig_opline;
  54050. #endif
  54051. return;
  54052. HYBRID_DEFAULT:
  54053. VM_TRACE(ZEND_NULL)
  54054. ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54055. HYBRID_BREAK(); /* Never reached */
  54056. #else
  54057. #ifdef ZEND_VM_FP_GLOBAL_REG
  54058. execute_data = vm_stack_data.orig_execute_data;
  54059. # ifdef ZEND_VM_IP_GLOBAL_REG
  54060. opline = vm_stack_data.orig_opline;
  54061. # endif
  54062. return;
  54063. #else
  54064. if (EXPECTED(ret > 0)) {
  54065. execute_data = EG(current_execute_data);
  54066. ZEND_VM_LOOP_INTERRUPT_CHECK();
  54067. } else {
  54068. # ifdef ZEND_VM_IP_GLOBAL_REG
  54069. opline = vm_stack_data.orig_opline;
  54070. # endif
  54071. return;
  54072. }
  54073. #endif
  54074. #endif
  54075. }
  54076. }
  54077. zend_error_noreturn(E_CORE_ERROR, "Arrived at end of main loop which shouldn't happen");
  54078. }
  54079. #if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__)
  54080. # pragma GCC pop_options
  54081. #endif
  54082. ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value)
  54083. {
  54084. zend_execute_data *execute_data;
  54085. void *object_or_called_scope;
  54086. uint32_t call_info;
  54087. if (EG(exception) != NULL) {
  54088. return;
  54089. }
  54090. object_or_called_scope = zend_get_this_object(EG(current_execute_data));
  54091. if (EXPECTED(!object_or_called_scope)) {
  54092. object_or_called_scope = zend_get_called_scope(EG(current_execute_data));
  54093. call_info = ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE;
  54094. } else {
  54095. call_info = ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE | ZEND_CALL_HAS_THIS;
  54096. }
  54097. execute_data = zend_vm_stack_push_call_frame(call_info,
  54098. (zend_function*)op_array, 0, object_or_called_scope);
  54099. if (EG(current_execute_data)) {
  54100. execute_data->symbol_table = zend_rebuild_symbol_table();
  54101. } else {
  54102. execute_data->symbol_table = &EG(symbol_table);
  54103. }
  54104. EX(prev_execute_data) = EG(current_execute_data);
  54105. i_init_code_execute_data(execute_data, op_array, return_value);
  54106. ZEND_OBSERVER_FCALL_BEGIN(execute_data);
  54107. zend_execute_ex(execute_data);
  54108. /* Observer end handlers are called from ZEND_RETURN */
  54109. zend_vm_stack_free_call_frame(execute_data);
  54110. }
  54111. void zend_vm_init(void)
  54112. {
  54113. static const void * const labels[] = {
  54114. ZEND_NOP_SPEC_HANDLER,
  54115. ZEND_ADD_SPEC_CONST_CONST_HANDLER,
  54116. ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
  54117. ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
  54118. ZEND_NULL_HANDLER,
  54119. ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
  54120. ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
  54121. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54122. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54123. ZEND_NULL_HANDLER,
  54124. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54125. ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
  54126. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54127. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54128. ZEND_NULL_HANDLER,
  54129. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54130. ZEND_NULL_HANDLER,
  54131. ZEND_NULL_HANDLER,
  54132. ZEND_NULL_HANDLER,
  54133. ZEND_NULL_HANDLER,
  54134. ZEND_NULL_HANDLER,
  54135. ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
  54136. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54137. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54138. ZEND_NULL_HANDLER,
  54139. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54140. ZEND_SUB_SPEC_CONST_CONST_HANDLER,
  54141. ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
  54142. ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
  54143. ZEND_NULL_HANDLER,
  54144. ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
  54145. ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
  54146. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54147. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54148. ZEND_NULL_HANDLER,
  54149. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54150. ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
  54151. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54152. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54153. ZEND_NULL_HANDLER,
  54154. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54155. ZEND_NULL_HANDLER,
  54156. ZEND_NULL_HANDLER,
  54157. ZEND_NULL_HANDLER,
  54158. ZEND_NULL_HANDLER,
  54159. ZEND_NULL_HANDLER,
  54160. ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
  54161. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54162. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54163. ZEND_NULL_HANDLER,
  54164. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54165. ZEND_MUL_SPEC_CONST_CONST_HANDLER,
  54166. ZEND_NULL_HANDLER,
  54167. ZEND_NULL_HANDLER,
  54168. ZEND_NULL_HANDLER,
  54169. ZEND_NULL_HANDLER,
  54170. ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
  54171. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54172. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54173. ZEND_NULL_HANDLER,
  54174. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54175. ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
  54176. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54177. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54178. ZEND_NULL_HANDLER,
  54179. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54180. ZEND_NULL_HANDLER,
  54181. ZEND_NULL_HANDLER,
  54182. ZEND_NULL_HANDLER,
  54183. ZEND_NULL_HANDLER,
  54184. ZEND_NULL_HANDLER,
  54185. ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
  54186. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54187. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54188. ZEND_NULL_HANDLER,
  54189. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54190. ZEND_DIV_SPEC_CONST_CONST_HANDLER,
  54191. ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
  54192. ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
  54193. ZEND_NULL_HANDLER,
  54194. ZEND_DIV_SPEC_CONST_CV_HANDLER,
  54195. ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
  54196. ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
  54197. ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
  54198. ZEND_NULL_HANDLER,
  54199. ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
  54200. ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
  54201. ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
  54202. ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
  54203. ZEND_NULL_HANDLER,
  54204. ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
  54205. ZEND_NULL_HANDLER,
  54206. ZEND_NULL_HANDLER,
  54207. ZEND_NULL_HANDLER,
  54208. ZEND_NULL_HANDLER,
  54209. ZEND_NULL_HANDLER,
  54210. ZEND_DIV_SPEC_CV_CONST_HANDLER,
  54211. ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
  54212. ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
  54213. ZEND_NULL_HANDLER,
  54214. ZEND_DIV_SPEC_CV_CV_HANDLER,
  54215. ZEND_MOD_SPEC_CONST_CONST_HANDLER,
  54216. ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
  54217. ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
  54218. ZEND_NULL_HANDLER,
  54219. ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
  54220. ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
  54221. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54222. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54223. ZEND_NULL_HANDLER,
  54224. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54225. ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
  54226. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54227. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54228. ZEND_NULL_HANDLER,
  54229. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54230. ZEND_NULL_HANDLER,
  54231. ZEND_NULL_HANDLER,
  54232. ZEND_NULL_HANDLER,
  54233. ZEND_NULL_HANDLER,
  54234. ZEND_NULL_HANDLER,
  54235. ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
  54236. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54237. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54238. ZEND_NULL_HANDLER,
  54239. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54240. ZEND_SL_SPEC_CONST_CONST_HANDLER,
  54241. ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
  54242. ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
  54243. ZEND_NULL_HANDLER,
  54244. ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
  54245. ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
  54246. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54247. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54248. ZEND_NULL_HANDLER,
  54249. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54250. ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
  54251. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54252. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54253. ZEND_NULL_HANDLER,
  54254. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54255. ZEND_NULL_HANDLER,
  54256. ZEND_NULL_HANDLER,
  54257. ZEND_NULL_HANDLER,
  54258. ZEND_NULL_HANDLER,
  54259. ZEND_NULL_HANDLER,
  54260. ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
  54261. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54262. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54263. ZEND_NULL_HANDLER,
  54264. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54265. ZEND_SR_SPEC_CONST_CONST_HANDLER,
  54266. ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
  54267. ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
  54268. ZEND_NULL_HANDLER,
  54269. ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
  54270. ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
  54271. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54272. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54273. ZEND_NULL_HANDLER,
  54274. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54275. ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
  54276. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54277. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54278. ZEND_NULL_HANDLER,
  54279. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54280. ZEND_NULL_HANDLER,
  54281. ZEND_NULL_HANDLER,
  54282. ZEND_NULL_HANDLER,
  54283. ZEND_NULL_HANDLER,
  54284. ZEND_NULL_HANDLER,
  54285. ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
  54286. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54287. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54288. ZEND_NULL_HANDLER,
  54289. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54290. ZEND_NULL_HANDLER,
  54291. ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
  54292. ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
  54293. ZEND_NULL_HANDLER,
  54294. ZEND_CONCAT_SPEC_CONST_CV_HANDLER,
  54295. ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
  54296. ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  54297. ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  54298. ZEND_NULL_HANDLER,
  54299. ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
  54300. ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
  54301. ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  54302. ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  54303. ZEND_NULL_HANDLER,
  54304. ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
  54305. ZEND_NULL_HANDLER,
  54306. ZEND_NULL_HANDLER,
  54307. ZEND_NULL_HANDLER,
  54308. ZEND_NULL_HANDLER,
  54309. ZEND_NULL_HANDLER,
  54310. ZEND_CONCAT_SPEC_CV_CONST_HANDLER,
  54311. ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
  54312. ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
  54313. ZEND_NULL_HANDLER,
  54314. ZEND_CONCAT_SPEC_CV_CV_HANDLER,
  54315. ZEND_BW_OR_SPEC_CONST_CONST_HANDLER,
  54316. ZEND_NULL_HANDLER,
  54317. ZEND_NULL_HANDLER,
  54318. ZEND_NULL_HANDLER,
  54319. ZEND_NULL_HANDLER,
  54320. ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
  54321. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54322. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54323. ZEND_NULL_HANDLER,
  54324. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54325. ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
  54326. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54327. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54328. ZEND_NULL_HANDLER,
  54329. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54330. ZEND_NULL_HANDLER,
  54331. ZEND_NULL_HANDLER,
  54332. ZEND_NULL_HANDLER,
  54333. ZEND_NULL_HANDLER,
  54334. ZEND_NULL_HANDLER,
  54335. ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
  54336. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54337. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54338. ZEND_NULL_HANDLER,
  54339. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54340. ZEND_BW_AND_SPEC_CONST_CONST_HANDLER,
  54341. ZEND_NULL_HANDLER,
  54342. ZEND_NULL_HANDLER,
  54343. ZEND_NULL_HANDLER,
  54344. ZEND_NULL_HANDLER,
  54345. ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
  54346. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54347. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54348. ZEND_NULL_HANDLER,
  54349. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54350. ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
  54351. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54352. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54353. ZEND_NULL_HANDLER,
  54354. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54355. ZEND_NULL_HANDLER,
  54356. ZEND_NULL_HANDLER,
  54357. ZEND_NULL_HANDLER,
  54358. ZEND_NULL_HANDLER,
  54359. ZEND_NULL_HANDLER,
  54360. ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
  54361. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54362. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54363. ZEND_NULL_HANDLER,
  54364. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54365. ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER,
  54366. ZEND_NULL_HANDLER,
  54367. ZEND_NULL_HANDLER,
  54368. ZEND_NULL_HANDLER,
  54369. ZEND_NULL_HANDLER,
  54370. ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
  54371. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54372. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54373. ZEND_NULL_HANDLER,
  54374. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54375. ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
  54376. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54377. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54378. ZEND_NULL_HANDLER,
  54379. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54380. ZEND_NULL_HANDLER,
  54381. ZEND_NULL_HANDLER,
  54382. ZEND_NULL_HANDLER,
  54383. ZEND_NULL_HANDLER,
  54384. ZEND_NULL_HANDLER,
  54385. ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
  54386. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54387. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54388. ZEND_NULL_HANDLER,
  54389. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54390. ZEND_POW_SPEC_CONST_CONST_HANDLER,
  54391. ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
  54392. ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
  54393. ZEND_NULL_HANDLER,
  54394. ZEND_POW_SPEC_CONST_CV_HANDLER,
  54395. ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
  54396. ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
  54397. ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
  54398. ZEND_NULL_HANDLER,
  54399. ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
  54400. ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
  54401. ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
  54402. ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
  54403. ZEND_NULL_HANDLER,
  54404. ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
  54405. ZEND_NULL_HANDLER,
  54406. ZEND_NULL_HANDLER,
  54407. ZEND_NULL_HANDLER,
  54408. ZEND_NULL_HANDLER,
  54409. ZEND_NULL_HANDLER,
  54410. ZEND_POW_SPEC_CV_CONST_HANDLER,
  54411. ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
  54412. ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
  54413. ZEND_NULL_HANDLER,
  54414. ZEND_POW_SPEC_CV_CV_HANDLER,
  54415. ZEND_BW_NOT_SPEC_CONST_HANDLER,
  54416. ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
  54417. ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
  54418. ZEND_NULL_HANDLER,
  54419. ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
  54420. ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
  54421. ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
  54422. ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
  54423. ZEND_NULL_HANDLER,
  54424. ZEND_BOOL_NOT_SPEC_CV_HANDLER,
  54425. ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER,
  54426. ZEND_NULL_HANDLER,
  54427. ZEND_NULL_HANDLER,
  54428. ZEND_NULL_HANDLER,
  54429. ZEND_NULL_HANDLER,
  54430. ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
  54431. ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54432. ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54433. ZEND_NULL_HANDLER,
  54434. ZEND_NULL_HANDLER,
  54435. ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
  54436. ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54437. ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54438. ZEND_NULL_HANDLER,
  54439. ZEND_NULL_HANDLER,
  54440. ZEND_NULL_HANDLER,
  54441. ZEND_NULL_HANDLER,
  54442. ZEND_NULL_HANDLER,
  54443. ZEND_NULL_HANDLER,
  54444. ZEND_NULL_HANDLER,
  54445. ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER,
  54446. ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
  54447. ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
  54448. ZEND_NULL_HANDLER,
  54449. ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER,
  54450. ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER,
  54451. ZEND_NULL_HANDLER,
  54452. ZEND_NULL_HANDLER,
  54453. ZEND_NULL_HANDLER,
  54454. ZEND_NULL_HANDLER,
  54455. ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER,
  54456. ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER,
  54457. ZEND_NULL_HANDLER,
  54458. ZEND_NULL_HANDLER,
  54459. ZEND_NULL_HANDLER,
  54460. ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER,
  54461. ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER,
  54462. ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER,
  54463. ZEND_NULL_HANDLER,
  54464. ZEND_NULL_HANDLER,
  54465. ZEND_NULL_HANDLER,
  54466. ZEND_NULL_HANDLER,
  54467. ZEND_NULL_HANDLER,
  54468. ZEND_NULL_HANDLER,
  54469. ZEND_NULL_HANDLER,
  54470. ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER,
  54471. ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER,
  54472. ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER,
  54473. ZEND_NULL_HANDLER,
  54474. ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER,
  54475. ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER,
  54476. ZEND_NULL_HANDLER,
  54477. ZEND_NULL_HANDLER,
  54478. ZEND_NULL_HANDLER,
  54479. ZEND_NULL_HANDLER,
  54480. ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER,
  54481. ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER,
  54482. ZEND_NULL_HANDLER,
  54483. ZEND_NULL_HANDLER,
  54484. ZEND_NULL_HANDLER,
  54485. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER,
  54486. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER,
  54487. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER,
  54488. ZEND_NULL_HANDLER,
  54489. ZEND_NULL_HANDLER,
  54490. ZEND_NULL_HANDLER,
  54491. ZEND_NULL_HANDLER,
  54492. ZEND_NULL_HANDLER,
  54493. ZEND_NULL_HANDLER,
  54494. ZEND_NULL_HANDLER,
  54495. ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER,
  54496. ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER,
  54497. ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER,
  54498. ZEND_NULL_HANDLER,
  54499. ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER,
  54500. ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
  54501. ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
  54502. ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
  54503. ZEND_NULL_HANDLER,
  54504. ZEND_NULL_HANDLER,
  54505. ZEND_NULL_HANDLER,
  54506. ZEND_NULL_HANDLER,
  54507. ZEND_NULL_HANDLER,
  54508. ZEND_NULL_HANDLER,
  54509. ZEND_NULL_HANDLER,
  54510. ZEND_NULL_HANDLER,
  54511. ZEND_NULL_HANDLER,
  54512. ZEND_NULL_HANDLER,
  54513. ZEND_NULL_HANDLER,
  54514. ZEND_NULL_HANDLER,
  54515. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
  54516. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
  54517. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
  54518. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54519. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
  54520. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
  54521. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54522. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
  54523. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
  54524. ZEND_NULL_HANDLER,
  54525. ZEND_NULL_HANDLER,
  54526. ZEND_NULL_HANDLER,
  54527. ZEND_NULL_HANDLER,
  54528. ZEND_NULL_HANDLER,
  54529. ZEND_NULL_HANDLER,
  54530. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
  54531. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
  54532. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
  54533. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54534. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
  54535. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
  54536. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54537. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
  54538. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
  54539. ZEND_NULL_HANDLER,
  54540. ZEND_NULL_HANDLER,
  54541. ZEND_NULL_HANDLER,
  54542. ZEND_NULL_HANDLER,
  54543. ZEND_NULL_HANDLER,
  54544. ZEND_NULL_HANDLER,
  54545. ZEND_NULL_HANDLER,
  54546. ZEND_NULL_HANDLER,
  54547. ZEND_NULL_HANDLER,
  54548. ZEND_NULL_HANDLER,
  54549. ZEND_NULL_HANDLER,
  54550. ZEND_NULL_HANDLER,
  54551. ZEND_NULL_HANDLER,
  54552. ZEND_NULL_HANDLER,
  54553. ZEND_NULL_HANDLER,
  54554. ZEND_NULL_HANDLER,
  54555. ZEND_NULL_HANDLER,
  54556. ZEND_NULL_HANDLER,
  54557. ZEND_NULL_HANDLER,
  54558. ZEND_NULL_HANDLER,
  54559. ZEND_NULL_HANDLER,
  54560. ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER,
  54561. ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER,
  54562. ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER,
  54563. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
  54564. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
  54565. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
  54566. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
  54567. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
  54568. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
  54569. ZEND_NULL_HANDLER,
  54570. ZEND_NULL_HANDLER,
  54571. ZEND_NULL_HANDLER,
  54572. ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER,
  54573. ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER,
  54574. ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER,
  54575. ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
  54576. ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
  54577. ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
  54578. ZEND_NULL_HANDLER,
  54579. ZEND_NULL_HANDLER,
  54580. ZEND_NULL_HANDLER,
  54581. ZEND_NULL_HANDLER,
  54582. ZEND_NULL_HANDLER,
  54583. ZEND_NULL_HANDLER,
  54584. ZEND_NULL_HANDLER,
  54585. ZEND_NULL_HANDLER,
  54586. ZEND_NULL_HANDLER,
  54587. ZEND_NULL_HANDLER,
  54588. ZEND_NULL_HANDLER,
  54589. ZEND_NULL_HANDLER,
  54590. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
  54591. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
  54592. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
  54593. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54594. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
  54595. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
  54596. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54597. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
  54598. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
  54599. ZEND_NULL_HANDLER,
  54600. ZEND_NULL_HANDLER,
  54601. ZEND_NULL_HANDLER,
  54602. ZEND_NULL_HANDLER,
  54603. ZEND_NULL_HANDLER,
  54604. ZEND_NULL_HANDLER,
  54605. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
  54606. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
  54607. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
  54608. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54609. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
  54610. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
  54611. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54612. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
  54613. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
  54614. ZEND_NULL_HANDLER,
  54615. ZEND_NULL_HANDLER,
  54616. ZEND_NULL_HANDLER,
  54617. ZEND_NULL_HANDLER,
  54618. ZEND_NULL_HANDLER,
  54619. ZEND_NULL_HANDLER,
  54620. ZEND_NULL_HANDLER,
  54621. ZEND_NULL_HANDLER,
  54622. ZEND_NULL_HANDLER,
  54623. ZEND_NULL_HANDLER,
  54624. ZEND_NULL_HANDLER,
  54625. ZEND_NULL_HANDLER,
  54626. ZEND_NULL_HANDLER,
  54627. ZEND_NULL_HANDLER,
  54628. ZEND_NULL_HANDLER,
  54629. ZEND_NULL_HANDLER,
  54630. ZEND_NULL_HANDLER,
  54631. ZEND_NULL_HANDLER,
  54632. ZEND_NULL_HANDLER,
  54633. ZEND_NULL_HANDLER,
  54634. ZEND_NULL_HANDLER,
  54635. ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER,
  54636. ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER,
  54637. ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER,
  54638. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
  54639. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
  54640. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
  54641. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
  54642. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
  54643. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
  54644. ZEND_NULL_HANDLER,
  54645. ZEND_NULL_HANDLER,
  54646. ZEND_NULL_HANDLER,
  54647. ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER,
  54648. ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER,
  54649. ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER,
  54650. ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
  54651. ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
  54652. ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
  54653. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
  54654. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  54655. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  54656. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
  54657. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  54658. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  54659. ZEND_NULL_HANDLER,
  54660. ZEND_NULL_HANDLER,
  54661. ZEND_NULL_HANDLER,
  54662. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
  54663. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  54664. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  54665. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
  54666. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  54667. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  54668. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54669. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54670. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54671. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54672. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54673. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54674. ZEND_NULL_HANDLER,
  54675. ZEND_NULL_HANDLER,
  54676. ZEND_NULL_HANDLER,
  54677. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54678. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54679. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54680. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
  54681. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  54682. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  54683. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54684. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54685. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54686. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54687. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54688. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54689. ZEND_NULL_HANDLER,
  54690. ZEND_NULL_HANDLER,
  54691. ZEND_NULL_HANDLER,
  54692. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54693. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54694. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54695. ZEND_NULL_HANDLER,
  54696. ZEND_NULL_HANDLER,
  54697. ZEND_NULL_HANDLER,
  54698. ZEND_NULL_HANDLER,
  54699. ZEND_NULL_HANDLER,
  54700. ZEND_NULL_HANDLER,
  54701. ZEND_NULL_HANDLER,
  54702. ZEND_NULL_HANDLER,
  54703. ZEND_NULL_HANDLER,
  54704. ZEND_NULL_HANDLER,
  54705. ZEND_NULL_HANDLER,
  54706. ZEND_NULL_HANDLER,
  54707. ZEND_NULL_HANDLER,
  54708. ZEND_NULL_HANDLER,
  54709. ZEND_NULL_HANDLER,
  54710. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
  54711. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  54712. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  54713. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54714. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54715. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54716. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54717. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54718. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54719. ZEND_NULL_HANDLER,
  54720. ZEND_NULL_HANDLER,
  54721. ZEND_NULL_HANDLER,
  54722. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54723. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54724. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54725. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
  54726. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
  54727. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
  54728. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
  54729. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  54730. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  54731. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
  54732. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  54733. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  54734. ZEND_NULL_HANDLER,
  54735. ZEND_NULL_HANDLER,
  54736. ZEND_NULL_HANDLER,
  54737. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
  54738. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  54739. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  54740. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
  54741. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  54742. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  54743. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54744. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54745. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54746. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54747. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54748. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54749. ZEND_NULL_HANDLER,
  54750. ZEND_NULL_HANDLER,
  54751. ZEND_NULL_HANDLER,
  54752. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54753. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54754. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54755. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
  54756. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  54757. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  54758. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54759. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54760. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54761. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54762. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54763. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54764. ZEND_NULL_HANDLER,
  54765. ZEND_NULL_HANDLER,
  54766. ZEND_NULL_HANDLER,
  54767. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54768. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54769. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54770. ZEND_NULL_HANDLER,
  54771. ZEND_NULL_HANDLER,
  54772. ZEND_NULL_HANDLER,
  54773. ZEND_NULL_HANDLER,
  54774. ZEND_NULL_HANDLER,
  54775. ZEND_NULL_HANDLER,
  54776. ZEND_NULL_HANDLER,
  54777. ZEND_NULL_HANDLER,
  54778. ZEND_NULL_HANDLER,
  54779. ZEND_NULL_HANDLER,
  54780. ZEND_NULL_HANDLER,
  54781. ZEND_NULL_HANDLER,
  54782. ZEND_NULL_HANDLER,
  54783. ZEND_NULL_HANDLER,
  54784. ZEND_NULL_HANDLER,
  54785. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
  54786. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  54787. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  54788. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54789. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54790. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54791. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54792. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54793. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54794. ZEND_NULL_HANDLER,
  54795. ZEND_NULL_HANDLER,
  54796. ZEND_NULL_HANDLER,
  54797. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54798. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54799. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54800. ZEND_NULL_HANDLER,
  54801. ZEND_NULL_HANDLER,
  54802. ZEND_NULL_HANDLER,
  54803. ZEND_NULL_HANDLER,
  54804. ZEND_NULL_HANDLER,
  54805. ZEND_NULL_HANDLER,
  54806. ZEND_NULL_HANDLER,
  54807. ZEND_NULL_HANDLER,
  54808. ZEND_NULL_HANDLER,
  54809. ZEND_NULL_HANDLER,
  54810. ZEND_NULL_HANDLER,
  54811. ZEND_NULL_HANDLER,
  54812. ZEND_NULL_HANDLER,
  54813. ZEND_NULL_HANDLER,
  54814. ZEND_NULL_HANDLER,
  54815. ZEND_NULL_HANDLER,
  54816. ZEND_NULL_HANDLER,
  54817. ZEND_NULL_HANDLER,
  54818. ZEND_NULL_HANDLER,
  54819. ZEND_NULL_HANDLER,
  54820. ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER,
  54821. ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER,
  54822. ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER,
  54823. ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER,
  54824. ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER,
  54825. ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER,
  54826. ZEND_NULL_HANDLER,
  54827. ZEND_NULL_HANDLER,
  54828. ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
  54829. ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER,
  54830. ZEND_NULL_HANDLER,
  54831. ZEND_NULL_HANDLER,
  54832. ZEND_NULL_HANDLER,
  54833. ZEND_NULL_HANDLER,
  54834. ZEND_NULL_HANDLER,
  54835. ZEND_NULL_HANDLER,
  54836. ZEND_NULL_HANDLER,
  54837. ZEND_NULL_HANDLER,
  54838. ZEND_NULL_HANDLER,
  54839. ZEND_NULL_HANDLER,
  54840. ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER,
  54841. ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER,
  54842. ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER,
  54843. ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER,
  54844. ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER,
  54845. ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER,
  54846. ZEND_NULL_HANDLER,
  54847. ZEND_NULL_HANDLER,
  54848. ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER,
  54849. ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER,
  54850. ZEND_NULL_HANDLER,
  54851. ZEND_NULL_HANDLER,
  54852. ZEND_NULL_HANDLER,
  54853. ZEND_NULL_HANDLER,
  54854. ZEND_NULL_HANDLER,
  54855. ZEND_NULL_HANDLER,
  54856. ZEND_NULL_HANDLER,
  54857. ZEND_NULL_HANDLER,
  54858. ZEND_NULL_HANDLER,
  54859. ZEND_NULL_HANDLER,
  54860. ZEND_NULL_HANDLER,
  54861. ZEND_NULL_HANDLER,
  54862. ZEND_NULL_HANDLER,
  54863. ZEND_NULL_HANDLER,
  54864. ZEND_NULL_HANDLER,
  54865. ZEND_NULL_HANDLER,
  54866. ZEND_NULL_HANDLER,
  54867. ZEND_NULL_HANDLER,
  54868. ZEND_NULL_HANDLER,
  54869. ZEND_NULL_HANDLER,
  54870. ZEND_NULL_HANDLER,
  54871. ZEND_NULL_HANDLER,
  54872. ZEND_NULL_HANDLER,
  54873. ZEND_NULL_HANDLER,
  54874. ZEND_NULL_HANDLER,
  54875. ZEND_NULL_HANDLER,
  54876. ZEND_NULL_HANDLER,
  54877. ZEND_NULL_HANDLER,
  54878. ZEND_NULL_HANDLER,
  54879. ZEND_NULL_HANDLER,
  54880. ZEND_NULL_HANDLER,
  54881. ZEND_NULL_HANDLER,
  54882. ZEND_NULL_HANDLER,
  54883. ZEND_NULL_HANDLER,
  54884. ZEND_NULL_HANDLER,
  54885. ZEND_NULL_HANDLER,
  54886. ZEND_NULL_HANDLER,
  54887. ZEND_NULL_HANDLER,
  54888. ZEND_NULL_HANDLER,
  54889. ZEND_NULL_HANDLER,
  54890. ZEND_NULL_HANDLER,
  54891. ZEND_NULL_HANDLER,
  54892. ZEND_NULL_HANDLER,
  54893. ZEND_NULL_HANDLER,
  54894. ZEND_NULL_HANDLER,
  54895. ZEND_NULL_HANDLER,
  54896. ZEND_NULL_HANDLER,
  54897. ZEND_NULL_HANDLER,
  54898. ZEND_NULL_HANDLER,
  54899. ZEND_NULL_HANDLER,
  54900. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
  54901. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
  54902. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
  54903. ZEND_NULL_HANDLER,
  54904. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
  54905. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
  54906. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
  54907. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
  54908. ZEND_NULL_HANDLER,
  54909. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
  54910. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
  54911. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
  54912. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
  54913. ZEND_NULL_HANDLER,
  54914. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
  54915. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER,
  54916. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER,
  54917. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER,
  54918. ZEND_NULL_HANDLER,
  54919. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER,
  54920. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
  54921. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
  54922. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
  54923. ZEND_NULL_HANDLER,
  54924. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
  54925. ZEND_NULL_HANDLER,
  54926. ZEND_NULL_HANDLER,
  54927. ZEND_NULL_HANDLER,
  54928. ZEND_NULL_HANDLER,
  54929. ZEND_NULL_HANDLER,
  54930. ZEND_NULL_HANDLER,
  54931. ZEND_NULL_HANDLER,
  54932. ZEND_NULL_HANDLER,
  54933. ZEND_NULL_HANDLER,
  54934. ZEND_NULL_HANDLER,
  54935. ZEND_NULL_HANDLER,
  54936. ZEND_NULL_HANDLER,
  54937. ZEND_NULL_HANDLER,
  54938. ZEND_NULL_HANDLER,
  54939. ZEND_NULL_HANDLER,
  54940. ZEND_NULL_HANDLER,
  54941. ZEND_NULL_HANDLER,
  54942. ZEND_NULL_HANDLER,
  54943. ZEND_NULL_HANDLER,
  54944. ZEND_NULL_HANDLER,
  54945. ZEND_NULL_HANDLER,
  54946. ZEND_NULL_HANDLER,
  54947. ZEND_NULL_HANDLER,
  54948. ZEND_NULL_HANDLER,
  54949. ZEND_NULL_HANDLER,
  54950. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
  54951. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
  54952. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
  54953. ZEND_NULL_HANDLER,
  54954. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
  54955. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
  54956. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
  54957. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
  54958. ZEND_NULL_HANDLER,
  54959. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
  54960. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
  54961. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
  54962. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
  54963. ZEND_NULL_HANDLER,
  54964. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
  54965. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER,
  54966. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER,
  54967. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER,
  54968. ZEND_NULL_HANDLER,
  54969. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER,
  54970. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
  54971. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
  54972. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
  54973. ZEND_NULL_HANDLER,
  54974. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER,
  54975. ZEND_NULL_HANDLER,
  54976. ZEND_NULL_HANDLER,
  54977. ZEND_NULL_HANDLER,
  54978. ZEND_NULL_HANDLER,
  54979. ZEND_NULL_HANDLER,
  54980. ZEND_NULL_HANDLER,
  54981. ZEND_NULL_HANDLER,
  54982. ZEND_NULL_HANDLER,
  54983. ZEND_NULL_HANDLER,
  54984. ZEND_NULL_HANDLER,
  54985. ZEND_NULL_HANDLER,
  54986. ZEND_NULL_HANDLER,
  54987. ZEND_NULL_HANDLER,
  54988. ZEND_NULL_HANDLER,
  54989. ZEND_NULL_HANDLER,
  54990. ZEND_NULL_HANDLER,
  54991. ZEND_NULL_HANDLER,
  54992. ZEND_NULL_HANDLER,
  54993. ZEND_NULL_HANDLER,
  54994. ZEND_NULL_HANDLER,
  54995. ZEND_NULL_HANDLER,
  54996. ZEND_NULL_HANDLER,
  54997. ZEND_NULL_HANDLER,
  54998. ZEND_NULL_HANDLER,
  54999. ZEND_NULL_HANDLER,
  55000. ZEND_NULL_HANDLER,
  55001. ZEND_NULL_HANDLER,
  55002. ZEND_NULL_HANDLER,
  55003. ZEND_NULL_HANDLER,
  55004. ZEND_NULL_HANDLER,
  55005. ZEND_NULL_HANDLER,
  55006. ZEND_NULL_HANDLER,
  55007. ZEND_NULL_HANDLER,
  55008. ZEND_NULL_HANDLER,
  55009. ZEND_NULL_HANDLER,
  55010. ZEND_NULL_HANDLER,
  55011. ZEND_NULL_HANDLER,
  55012. ZEND_NULL_HANDLER,
  55013. ZEND_NULL_HANDLER,
  55014. ZEND_NULL_HANDLER,
  55015. ZEND_NULL_HANDLER,
  55016. ZEND_NULL_HANDLER,
  55017. ZEND_NULL_HANDLER,
  55018. ZEND_NULL_HANDLER,
  55019. ZEND_NULL_HANDLER,
  55020. ZEND_NULL_HANDLER,
  55021. ZEND_NULL_HANDLER,
  55022. ZEND_NULL_HANDLER,
  55023. ZEND_NULL_HANDLER,
  55024. ZEND_NULL_HANDLER,
  55025. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
  55026. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
  55027. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
  55028. ZEND_NULL_HANDLER,
  55029. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
  55030. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
  55031. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
  55032. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
  55033. ZEND_NULL_HANDLER,
  55034. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
  55035. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
  55036. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
  55037. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
  55038. ZEND_NULL_HANDLER,
  55039. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
  55040. ZEND_NULL_HANDLER,
  55041. ZEND_NULL_HANDLER,
  55042. ZEND_NULL_HANDLER,
  55043. ZEND_NULL_HANDLER,
  55044. ZEND_NULL_HANDLER,
  55045. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
  55046. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
  55047. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
  55048. ZEND_NULL_HANDLER,
  55049. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
  55050. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER,
  55051. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER,
  55052. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
  55053. ZEND_NULL_HANDLER,
  55054. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
  55055. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
  55056. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
  55057. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
  55058. ZEND_NULL_HANDLER,
  55059. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
  55060. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
  55061. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
  55062. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
  55063. ZEND_NULL_HANDLER,
  55064. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
  55065. ZEND_NULL_HANDLER,
  55066. ZEND_NULL_HANDLER,
  55067. ZEND_NULL_HANDLER,
  55068. ZEND_NULL_HANDLER,
  55069. ZEND_NULL_HANDLER,
  55070. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER,
  55071. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER,
  55072. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
  55073. ZEND_NULL_HANDLER,
  55074. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
  55075. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
  55076. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
  55077. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
  55078. ZEND_NULL_HANDLER,
  55079. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
  55080. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
  55081. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
  55082. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
  55083. ZEND_NULL_HANDLER,
  55084. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
  55085. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
  55086. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
  55087. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
  55088. ZEND_NULL_HANDLER,
  55089. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
  55090. ZEND_NULL_HANDLER,
  55091. ZEND_NULL_HANDLER,
  55092. ZEND_NULL_HANDLER,
  55093. ZEND_NULL_HANDLER,
  55094. ZEND_NULL_HANDLER,
  55095. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
  55096. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
  55097. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
  55098. ZEND_NULL_HANDLER,
  55099. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER,
  55100. ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER,
  55101. ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER,
  55102. ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER,
  55103. ZEND_NULL_HANDLER,
  55104. ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER,
  55105. ZEND_NULL_HANDLER,
  55106. ZEND_NULL_HANDLER,
  55107. ZEND_NULL_HANDLER,
  55108. ZEND_NULL_HANDLER,
  55109. ZEND_NULL_HANDLER,
  55110. ZEND_NULL_HANDLER,
  55111. ZEND_NULL_HANDLER,
  55112. ZEND_NULL_HANDLER,
  55113. ZEND_NULL_HANDLER,
  55114. ZEND_NULL_HANDLER,
  55115. ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER,
  55116. ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER,
  55117. ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER,
  55118. ZEND_NULL_HANDLER,
  55119. ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER,
  55120. ZEND_NULL_HANDLER,
  55121. ZEND_NULL_HANDLER,
  55122. ZEND_NULL_HANDLER,
  55123. ZEND_NULL_HANDLER,
  55124. ZEND_NULL_HANDLER,
  55125. ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER,
  55126. ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER,
  55127. ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER,
  55128. ZEND_NULL_HANDLER,
  55129. ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER,
  55130. ZEND_NULL_HANDLER,
  55131. ZEND_NULL_HANDLER,
  55132. ZEND_NULL_HANDLER,
  55133. ZEND_NULL_HANDLER,
  55134. ZEND_NULL_HANDLER,
  55135. ZEND_NULL_HANDLER,
  55136. ZEND_NULL_HANDLER,
  55137. ZEND_NULL_HANDLER,
  55138. ZEND_NULL_HANDLER,
  55139. ZEND_NULL_HANDLER,
  55140. ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER,
  55141. ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER,
  55142. ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER,
  55143. ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER,
  55144. ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER,
  55145. ZEND_NULL_HANDLER,
  55146. ZEND_NULL_HANDLER,
  55147. ZEND_NULL_HANDLER,
  55148. ZEND_NULL_HANDLER,
  55149. ZEND_NULL_HANDLER,
  55150. ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER,
  55151. ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER,
  55152. ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER,
  55153. ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER,
  55154. ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER,
  55155. ZEND_NULL_HANDLER,
  55156. ZEND_NULL_HANDLER,
  55157. ZEND_NULL_HANDLER,
  55158. ZEND_NULL_HANDLER,
  55159. ZEND_NULL_HANDLER,
  55160. ZEND_NULL_HANDLER,
  55161. ZEND_NULL_HANDLER,
  55162. ZEND_NULL_HANDLER,
  55163. ZEND_NULL_HANDLER,
  55164. ZEND_NULL_HANDLER,
  55165. ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER,
  55166. ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
  55167. ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
  55168. ZEND_NULL_HANDLER,
  55169. ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER,
  55170. ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER,
  55171. ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
  55172. ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
  55173. ZEND_NULL_HANDLER,
  55174. ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER,
  55175. ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER,
  55176. ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER,
  55177. ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER,
  55178. ZEND_NULL_HANDLER,
  55179. ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER,
  55180. ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER,
  55181. ZEND_NULL_HANDLER,
  55182. ZEND_NULL_HANDLER,
  55183. ZEND_NULL_HANDLER,
  55184. ZEND_NULL_HANDLER,
  55185. ZEND_NULL_HANDLER,
  55186. ZEND_NULL_HANDLER,
  55187. ZEND_NULL_HANDLER,
  55188. ZEND_NULL_HANDLER,
  55189. ZEND_NULL_HANDLER,
  55190. ZEND_NULL_HANDLER,
  55191. ZEND_NULL_HANDLER,
  55192. ZEND_NULL_HANDLER,
  55193. ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER,
  55194. ZEND_NULL_HANDLER,
  55195. ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER,
  55196. ZEND_NULL_HANDLER,
  55197. ZEND_NULL_HANDLER,
  55198. ZEND_NULL_HANDLER,
  55199. ZEND_NULL_HANDLER,
  55200. ZEND_NULL_HANDLER,
  55201. ZEND_NULL_HANDLER,
  55202. ZEND_NULL_HANDLER,
  55203. ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER,
  55204. ZEND_NULL_HANDLER,
  55205. ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER,
  55206. ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
  55207. ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
  55208. ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
  55209. ZEND_NULL_HANDLER,
  55210. ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
  55211. ZEND_NULL_HANDLER,
  55212. ZEND_NULL_HANDLER,
  55213. ZEND_NULL_HANDLER,
  55214. ZEND_NULL_HANDLER,
  55215. ZEND_NULL_HANDLER,
  55216. ZEND_NULL_HANDLER,
  55217. ZEND_NULL_HANDLER,
  55218. ZEND_NULL_HANDLER,
  55219. ZEND_NULL_HANDLER,
  55220. ZEND_NULL_HANDLER,
  55221. ZEND_NULL_HANDLER,
  55222. ZEND_NULL_HANDLER,
  55223. ZEND_NULL_HANDLER,
  55224. ZEND_NULL_HANDLER,
  55225. ZEND_NULL_HANDLER,
  55226. ZEND_NULL_HANDLER,
  55227. ZEND_NULL_HANDLER,
  55228. ZEND_NULL_HANDLER,
  55229. ZEND_NULL_HANDLER,
  55230. ZEND_NULL_HANDLER,
  55231. ZEND_NULL_HANDLER,
  55232. ZEND_NULL_HANDLER,
  55233. ZEND_NULL_HANDLER,
  55234. ZEND_NULL_HANDLER,
  55235. ZEND_NULL_HANDLER,
  55236. ZEND_NULL_HANDLER,
  55237. ZEND_NULL_HANDLER,
  55238. ZEND_NULL_HANDLER,
  55239. ZEND_NULL_HANDLER,
  55240. ZEND_NULL_HANDLER,
  55241. ZEND_NULL_HANDLER,
  55242. ZEND_NULL_HANDLER,
  55243. ZEND_NULL_HANDLER,
  55244. ZEND_NULL_HANDLER,
  55245. ZEND_NULL_HANDLER,
  55246. ZEND_NULL_HANDLER,
  55247. ZEND_NULL_HANDLER,
  55248. ZEND_NULL_HANDLER,
  55249. ZEND_NULL_HANDLER,
  55250. ZEND_NULL_HANDLER,
  55251. ZEND_NULL_HANDLER,
  55252. ZEND_NULL_HANDLER,
  55253. ZEND_NULL_HANDLER,
  55254. ZEND_NULL_HANDLER,
  55255. ZEND_NULL_HANDLER,
  55256. ZEND_NULL_HANDLER,
  55257. ZEND_NULL_HANDLER,
  55258. ZEND_NULL_HANDLER,
  55259. ZEND_NULL_HANDLER,
  55260. ZEND_NULL_HANDLER,
  55261. ZEND_NULL_HANDLER,
  55262. ZEND_NULL_HANDLER,
  55263. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
  55264. ZEND_NULL_HANDLER,
  55265. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
  55266. ZEND_NULL_HANDLER,
  55267. ZEND_NULL_HANDLER,
  55268. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
  55269. ZEND_NULL_HANDLER,
  55270. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
  55271. ZEND_NULL_HANDLER,
  55272. ZEND_NULL_HANDLER,
  55273. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
  55274. ZEND_NULL_HANDLER,
  55275. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
  55276. ZEND_NULL_HANDLER,
  55277. ZEND_NULL_HANDLER,
  55278. ZEND_NULL_HANDLER,
  55279. ZEND_NULL_HANDLER,
  55280. ZEND_NULL_HANDLER,
  55281. ZEND_NULL_HANDLER,
  55282. ZEND_NULL_HANDLER,
  55283. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
  55284. ZEND_NULL_HANDLER,
  55285. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
  55286. ZEND_NULL_HANDLER,
  55287. ZEND_NULL_HANDLER,
  55288. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
  55289. ZEND_NULL_HANDLER,
  55290. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
  55291. ZEND_NULL_HANDLER,
  55292. ZEND_NULL_HANDLER,
  55293. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
  55294. ZEND_NULL_HANDLER,
  55295. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
  55296. ZEND_NULL_HANDLER,
  55297. ZEND_NULL_HANDLER,
  55298. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
  55299. ZEND_NULL_HANDLER,
  55300. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
  55301. ZEND_NULL_HANDLER,
  55302. ZEND_NULL_HANDLER,
  55303. ZEND_NULL_HANDLER,
  55304. ZEND_NULL_HANDLER,
  55305. ZEND_NULL_HANDLER,
  55306. ZEND_NULL_HANDLER,
  55307. ZEND_NULL_HANDLER,
  55308. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
  55309. ZEND_NULL_HANDLER,
  55310. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
  55311. ZEND_NULL_HANDLER,
  55312. ZEND_NULL_HANDLER,
  55313. ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
  55314. ZEND_NULL_HANDLER,
  55315. ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
  55316. ZEND_NULL_HANDLER,
  55317. ZEND_NULL_HANDLER,
  55318. ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
  55319. ZEND_NULL_HANDLER,
  55320. ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
  55321. ZEND_NULL_HANDLER,
  55322. ZEND_NULL_HANDLER,
  55323. ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
  55324. ZEND_NULL_HANDLER,
  55325. ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
  55326. ZEND_NULL_HANDLER,
  55327. ZEND_NULL_HANDLER,
  55328. ZEND_NULL_HANDLER,
  55329. ZEND_NULL_HANDLER,
  55330. ZEND_NULL_HANDLER,
  55331. ZEND_NULL_HANDLER,
  55332. ZEND_NULL_HANDLER,
  55333. ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
  55334. ZEND_NULL_HANDLER,
  55335. ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER,
  55336. ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER,
  55337. ZEND_NULL_HANDLER,
  55338. ZEND_NULL_HANDLER,
  55339. ZEND_NULL_HANDLER,
  55340. ZEND_NULL_HANDLER,
  55341. ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
  55342. ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER,
  55343. ZEND_NULL_HANDLER,
  55344. ZEND_NULL_HANDLER,
  55345. ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER,
  55346. ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER,
  55347. ZEND_NULL_HANDLER,
  55348. ZEND_NULL_HANDLER,
  55349. ZEND_NULL_HANDLER,
  55350. ZEND_NULL_HANDLER,
  55351. ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
  55352. ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER,
  55353. ZEND_NULL_HANDLER,
  55354. ZEND_NULL_HANDLER,
  55355. ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER,
  55356. ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER,
  55357. ZEND_NULL_HANDLER,
  55358. ZEND_NULL_HANDLER,
  55359. ZEND_POST_INC_SPEC_VAR_HANDLER,
  55360. ZEND_NULL_HANDLER,
  55361. ZEND_POST_INC_SPEC_CV_HANDLER,
  55362. ZEND_NULL_HANDLER,
  55363. ZEND_NULL_HANDLER,
  55364. ZEND_POST_DEC_SPEC_VAR_HANDLER,
  55365. ZEND_NULL_HANDLER,
  55366. ZEND_POST_DEC_SPEC_CV_HANDLER,
  55367. ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER,
  55368. ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER,
  55369. ZEND_JMP_SPEC_HANDLER,
  55370. ZEND_JMPZ_SPEC_CONST_HANDLER,
  55371. ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
  55372. ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
  55373. ZEND_NULL_HANDLER,
  55374. ZEND_JMPZ_SPEC_CV_HANDLER,
  55375. ZEND_JMPNZ_SPEC_CONST_HANDLER,
  55376. ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
  55377. ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
  55378. ZEND_NULL_HANDLER,
  55379. ZEND_JMPNZ_SPEC_CV_HANDLER,
  55380. ZEND_JMPZNZ_SPEC_CONST_HANDLER,
  55381. ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
  55382. ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
  55383. ZEND_NULL_HANDLER,
  55384. ZEND_JMPZNZ_SPEC_CV_HANDLER,
  55385. ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
  55386. ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
  55387. ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
  55388. ZEND_NULL_HANDLER,
  55389. ZEND_JMPZ_EX_SPEC_CV_HANDLER,
  55390. ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
  55391. ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
  55392. ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
  55393. ZEND_NULL_HANDLER,
  55394. ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
  55395. ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER,
  55396. ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
  55397. ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
  55398. ZEND_NULL_HANDLER,
  55399. ZEND_CASE_SPEC_TMPVAR_CV_HANDLER,
  55400. ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER,
  55401. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER,
  55402. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER,
  55403. ZEND_NULL_HANDLER,
  55404. ZEND_NULL_HANDLER,
  55405. ZEND_NULL_HANDLER,
  55406. ZEND_NULL_HANDLER,
  55407. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER,
  55408. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER,
  55409. ZEND_NULL_HANDLER,
  55410. ZEND_NULL_HANDLER,
  55411. ZEND_CAST_SPEC_CONST_HANDLER,
  55412. ZEND_CAST_SPEC_TMP_HANDLER,
  55413. ZEND_CAST_SPEC_VAR_HANDLER,
  55414. ZEND_NULL_HANDLER,
  55415. ZEND_CAST_SPEC_CV_HANDLER,
  55416. ZEND_BOOL_SPEC_CONST_HANDLER,
  55417. ZEND_BOOL_SPEC_TMPVAR_HANDLER,
  55418. ZEND_BOOL_SPEC_TMPVAR_HANDLER,
  55419. ZEND_NULL_HANDLER,
  55420. ZEND_BOOL_SPEC_CV_HANDLER,
  55421. ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER,
  55422. ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
  55423. ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
  55424. ZEND_NULL_HANDLER,
  55425. ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER,
  55426. ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
  55427. ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  55428. ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  55429. ZEND_NULL_HANDLER,
  55430. ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
  55431. ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
  55432. ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  55433. ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  55434. ZEND_NULL_HANDLER,
  55435. ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
  55436. ZEND_NULL_HANDLER,
  55437. ZEND_NULL_HANDLER,
  55438. ZEND_NULL_HANDLER,
  55439. ZEND_NULL_HANDLER,
  55440. ZEND_NULL_HANDLER,
  55441. ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER,
  55442. ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
  55443. ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
  55444. ZEND_NULL_HANDLER,
  55445. ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER,
  55446. ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER,
  55447. ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
  55448. ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
  55449. ZEND_NULL_HANDLER,
  55450. ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER,
  55451. ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER,
  55452. ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
  55453. ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
  55454. ZEND_NULL_HANDLER,
  55455. ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER,
  55456. ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER,
  55457. ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
  55458. ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
  55459. ZEND_NULL_HANDLER,
  55460. ZEND_ROPE_END_SPEC_TMP_CV_HANDLER,
  55461. ZEND_BEGIN_SILENCE_SPEC_HANDLER,
  55462. ZEND_END_SILENCE_SPEC_TMP_HANDLER,
  55463. ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
  55464. ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER,
  55465. ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER,
  55466. ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER,
  55467. ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER,
  55468. ZEND_INIT_FCALL_SPEC_CONST_HANDLER,
  55469. ZEND_RETURN_SPEC_CONST_HANDLER,
  55470. ZEND_RETURN_SPEC_OBSERVER_HANDLER,
  55471. ZEND_RETURN_SPEC_TMP_HANDLER,
  55472. ZEND_RETURN_SPEC_OBSERVER_HANDLER,
  55473. ZEND_RETURN_SPEC_VAR_HANDLER,
  55474. ZEND_RETURN_SPEC_OBSERVER_HANDLER,
  55475. ZEND_NULL_HANDLER,
  55476. ZEND_NULL_HANDLER,
  55477. ZEND_RETURN_SPEC_CV_HANDLER,
  55478. ZEND_RETURN_SPEC_OBSERVER_HANDLER,
  55479. ZEND_RECV_SPEC_UNUSED_HANDLER,
  55480. ZEND_RECV_INIT_SPEC_CONST_HANDLER,
  55481. ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER,
  55482. ZEND_NULL_HANDLER,
  55483. ZEND_NULL_HANDLER,
  55484. ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER,
  55485. ZEND_NULL_HANDLER,
  55486. ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER,
  55487. ZEND_NULL_HANDLER,
  55488. ZEND_NULL_HANDLER,
  55489. ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER,
  55490. ZEND_NULL_HANDLER,
  55491. ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER,
  55492. ZEND_NULL_HANDLER,
  55493. ZEND_NULL_HANDLER,
  55494. ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER,
  55495. ZEND_NULL_HANDLER,
  55496. ZEND_NULL_HANDLER,
  55497. ZEND_NULL_HANDLER,
  55498. ZEND_NULL_HANDLER,
  55499. ZEND_NULL_HANDLER,
  55500. ZEND_NULL_HANDLER,
  55501. ZEND_NULL_HANDLER,
  55502. ZEND_NULL_HANDLER,
  55503. ZEND_NULL_HANDLER,
  55504. ZEND_NULL_HANDLER,
  55505. ZEND_NULL_HANDLER,
  55506. ZEND_NULL_HANDLER,
  55507. ZEND_NULL_HANDLER,
  55508. ZEND_NULL_HANDLER,
  55509. ZEND_NULL_HANDLER,
  55510. ZEND_NULL_HANDLER,
  55511. ZEND_NULL_HANDLER,
  55512. ZEND_NULL_HANDLER,
  55513. ZEND_NULL_HANDLER,
  55514. ZEND_NULL_HANDLER,
  55515. ZEND_NULL_HANDLER,
  55516. ZEND_NULL_HANDLER,
  55517. ZEND_NULL_HANDLER,
  55518. ZEND_NULL_HANDLER,
  55519. ZEND_NULL_HANDLER,
  55520. ZEND_NULL_HANDLER,
  55521. ZEND_NULL_HANDLER,
  55522. ZEND_NULL_HANDLER,
  55523. ZEND_NULL_HANDLER,
  55524. ZEND_NULL_HANDLER,
  55525. ZEND_NULL_HANDLER,
  55526. ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER,
  55527. ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER,
  55528. ZEND_NULL_HANDLER,
  55529. ZEND_NULL_HANDLER,
  55530. ZEND_NULL_HANDLER,
  55531. ZEND_NULL_HANDLER,
  55532. ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER,
  55533. ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER,
  55534. ZEND_NULL_HANDLER,
  55535. ZEND_NULL_HANDLER,
  55536. ZEND_NULL_HANDLER,
  55537. ZEND_NULL_HANDLER,
  55538. ZEND_NULL_HANDLER,
  55539. ZEND_NULL_HANDLER,
  55540. ZEND_NULL_HANDLER,
  55541. ZEND_NULL_HANDLER,
  55542. ZEND_NULL_HANDLER,
  55543. ZEND_NULL_HANDLER,
  55544. ZEND_NULL_HANDLER,
  55545. ZEND_NULL_HANDLER,
  55546. ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER,
  55547. ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER,
  55548. ZEND_NULL_HANDLER,
  55549. ZEND_NULL_HANDLER,
  55550. ZEND_NULL_HANDLER,
  55551. ZEND_NULL_HANDLER,
  55552. ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER,
  55553. ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER,
  55554. ZEND_NULL_HANDLER,
  55555. ZEND_NULL_HANDLER,
  55556. ZEND_NULL_HANDLER,
  55557. ZEND_NULL_HANDLER,
  55558. ZEND_NULL_HANDLER,
  55559. ZEND_NULL_HANDLER,
  55560. ZEND_NULL_HANDLER,
  55561. ZEND_NULL_HANDLER,
  55562. ZEND_NULL_HANDLER,
  55563. ZEND_NULL_HANDLER,
  55564. ZEND_NULL_HANDLER,
  55565. ZEND_NULL_HANDLER,
  55566. ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER,
  55567. ZEND_NULL_HANDLER,
  55568. ZEND_NULL_HANDLER,
  55569. ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER,
  55570. ZEND_NULL_HANDLER,
  55571. ZEND_NULL_HANDLER,
  55572. ZEND_NULL_HANDLER,
  55573. ZEND_NULL_HANDLER,
  55574. ZEND_NULL_HANDLER,
  55575. ZEND_NULL_HANDLER,
  55576. ZEND_SEND_REF_SPEC_CV_CONST_HANDLER,
  55577. ZEND_NULL_HANDLER,
  55578. ZEND_NULL_HANDLER,
  55579. ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER,
  55580. ZEND_NULL_HANDLER,
  55581. ZEND_NEW_SPEC_CONST_UNUSED_HANDLER,
  55582. ZEND_NULL_HANDLER,
  55583. ZEND_NEW_SPEC_VAR_UNUSED_HANDLER,
  55584. ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER,
  55585. ZEND_NULL_HANDLER,
  55586. ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
  55587. ZEND_FREE_SPEC_TMPVAR_HANDLER,
  55588. ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER,
  55589. ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
  55590. ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
  55591. ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER,
  55592. ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER,
  55593. ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER,
  55594. ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
  55595. ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
  55596. ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER,
  55597. ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER,
  55598. ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER,
  55599. ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
  55600. ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
  55601. ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER,
  55602. ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER,
  55603. ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER,
  55604. ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
  55605. ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
  55606. ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER,
  55607. ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER,
  55608. ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER,
  55609. ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
  55610. ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
  55611. ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER,
  55612. ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER,
  55613. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER,
  55614. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
  55615. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
  55616. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER,
  55617. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER,
  55618. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER,
  55619. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
  55620. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
  55621. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER,
  55622. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER,
  55623. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER,
  55624. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
  55625. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
  55626. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER,
  55627. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER,
  55628. ZEND_NULL_HANDLER,
  55629. ZEND_NULL_HANDLER,
  55630. ZEND_NULL_HANDLER,
  55631. ZEND_NULL_HANDLER,
  55632. ZEND_NULL_HANDLER,
  55633. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER,
  55634. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
  55635. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
  55636. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER,
  55637. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER,
  55638. ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
  55639. ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
  55640. ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
  55641. ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
  55642. ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
  55643. ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
  55644. ZEND_NULL_HANDLER,
  55645. ZEND_NULL_HANDLER,
  55646. ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
  55647. ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
  55648. ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER,
  55649. ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
  55650. ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
  55651. ZEND_NULL_HANDLER,
  55652. ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER,
  55653. ZEND_NULL_HANDLER,
  55654. ZEND_NULL_HANDLER,
  55655. ZEND_NULL_HANDLER,
  55656. ZEND_NULL_HANDLER,
  55657. ZEND_NULL_HANDLER,
  55658. ZEND_NULL_HANDLER,
  55659. ZEND_NULL_HANDLER,
  55660. ZEND_NULL_HANDLER,
  55661. ZEND_NULL_HANDLER,
  55662. ZEND_NULL_HANDLER,
  55663. ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER,
  55664. ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
  55665. ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
  55666. ZEND_NULL_HANDLER,
  55667. ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER,
  55668. ZEND_NULL_HANDLER,
  55669. ZEND_NULL_HANDLER,
  55670. ZEND_NULL_HANDLER,
  55671. ZEND_NULL_HANDLER,
  55672. ZEND_NULL_HANDLER,
  55673. ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER,
  55674. ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
  55675. ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
  55676. ZEND_NULL_HANDLER,
  55677. ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER,
  55678. ZEND_NULL_HANDLER,
  55679. ZEND_NULL_HANDLER,
  55680. ZEND_NULL_HANDLER,
  55681. ZEND_NULL_HANDLER,
  55682. ZEND_NULL_HANDLER,
  55683. ZEND_NULL_HANDLER,
  55684. ZEND_NULL_HANDLER,
  55685. ZEND_NULL_HANDLER,
  55686. ZEND_NULL_HANDLER,
  55687. ZEND_NULL_HANDLER,
  55688. ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER,
  55689. ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  55690. ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  55691. ZEND_NULL_HANDLER,
  55692. ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER,
  55693. ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER,
  55694. ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  55695. ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  55696. ZEND_NULL_HANDLER,
  55697. ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER,
  55698. ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER,
  55699. ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
  55700. ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
  55701. ZEND_NULL_HANDLER,
  55702. ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER,
  55703. ZEND_FE_RESET_R_SPEC_CONST_HANDLER,
  55704. ZEND_FE_RESET_R_SPEC_TMP_HANDLER,
  55705. ZEND_FE_RESET_R_SPEC_VAR_HANDLER,
  55706. ZEND_NULL_HANDLER,
  55707. ZEND_FE_RESET_R_SPEC_CV_HANDLER,
  55708. ZEND_FE_FETCH_R_SPEC_VAR_HANDLER,
  55709. ZEND_EXIT_SPEC_HANDLER,
  55710. ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER,
  55711. ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
  55712. ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
  55713. ZEND_NULL_HANDLER,
  55714. ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER,
  55715. ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER,
  55716. ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
  55717. ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
  55718. ZEND_NULL_HANDLER,
  55719. ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER,
  55720. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
  55721. ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55722. ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55723. ZEND_NULL_HANDLER,
  55724. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
  55725. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
  55726. ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55727. ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55728. ZEND_NULL_HANDLER,
  55729. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
  55730. ZEND_NULL_HANDLER,
  55731. ZEND_NULL_HANDLER,
  55732. ZEND_NULL_HANDLER,
  55733. ZEND_NULL_HANDLER,
  55734. ZEND_NULL_HANDLER,
  55735. ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER,
  55736. ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
  55737. ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
  55738. ZEND_NULL_HANDLER,
  55739. ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER,
  55740. ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER,
  55741. ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
  55742. ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
  55743. ZEND_NULL_HANDLER,
  55744. ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER,
  55745. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
  55746. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55747. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55748. ZEND_NULL_HANDLER,
  55749. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
  55750. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
  55751. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55752. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55753. ZEND_NULL_HANDLER,
  55754. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
  55755. ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER,
  55756. ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
  55757. ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
  55758. ZEND_NULL_HANDLER,
  55759. ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER,
  55760. ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER,
  55761. ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
  55762. ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
  55763. ZEND_NULL_HANDLER,
  55764. ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER,
  55765. ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER,
  55766. ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
  55767. ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
  55768. ZEND_NULL_HANDLER,
  55769. ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER,
  55770. ZEND_NULL_HANDLER,
  55771. ZEND_NULL_HANDLER,
  55772. ZEND_NULL_HANDLER,
  55773. ZEND_NULL_HANDLER,
  55774. ZEND_NULL_HANDLER,
  55775. ZEND_NULL_HANDLER,
  55776. ZEND_NULL_HANDLER,
  55777. ZEND_NULL_HANDLER,
  55778. ZEND_NULL_HANDLER,
  55779. ZEND_NULL_HANDLER,
  55780. ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER,
  55781. ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
  55782. ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
  55783. ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER,
  55784. ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER,
  55785. ZEND_NULL_HANDLER,
  55786. ZEND_NULL_HANDLER,
  55787. ZEND_NULL_HANDLER,
  55788. ZEND_NULL_HANDLER,
  55789. ZEND_NULL_HANDLER,
  55790. ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER,
  55791. ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
  55792. ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
  55793. ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER,
  55794. ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER,
  55795. ZEND_NULL_HANDLER,
  55796. ZEND_NULL_HANDLER,
  55797. ZEND_NULL_HANDLER,
  55798. ZEND_NULL_HANDLER,
  55799. ZEND_NULL_HANDLER,
  55800. ZEND_NULL_HANDLER,
  55801. ZEND_NULL_HANDLER,
  55802. ZEND_NULL_HANDLER,
  55803. ZEND_NULL_HANDLER,
  55804. ZEND_NULL_HANDLER,
  55805. ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER,
  55806. ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
  55807. ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
  55808. ZEND_NULL_HANDLER,
  55809. ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER,
  55810. ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER,
  55811. ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
  55812. ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
  55813. ZEND_NULL_HANDLER,
  55814. ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER,
  55815. ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER,
  55816. ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
  55817. ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
  55818. ZEND_NULL_HANDLER,
  55819. ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER,
  55820. ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER,
  55821. ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
  55822. ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
  55823. ZEND_NULL_HANDLER,
  55824. ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER,
  55825. ZEND_NULL_HANDLER,
  55826. ZEND_NULL_HANDLER,
  55827. ZEND_NULL_HANDLER,
  55828. ZEND_NULL_HANDLER,
  55829. ZEND_NULL_HANDLER,
  55830. ZEND_NULL_HANDLER,
  55831. ZEND_NULL_HANDLER,
  55832. ZEND_NULL_HANDLER,
  55833. ZEND_NULL_HANDLER,
  55834. ZEND_NULL_HANDLER,
  55835. ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER,
  55836. ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
  55837. ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
  55838. ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER,
  55839. ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER,
  55840. ZEND_NULL_HANDLER,
  55841. ZEND_NULL_HANDLER,
  55842. ZEND_NULL_HANDLER,
  55843. ZEND_NULL_HANDLER,
  55844. ZEND_NULL_HANDLER,
  55845. ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER,
  55846. ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
  55847. ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
  55848. ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER,
  55849. ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER,
  55850. ZEND_NULL_HANDLER,
  55851. ZEND_NULL_HANDLER,
  55852. ZEND_NULL_HANDLER,
  55853. ZEND_NULL_HANDLER,
  55854. ZEND_NULL_HANDLER,
  55855. ZEND_NULL_HANDLER,
  55856. ZEND_NULL_HANDLER,
  55857. ZEND_NULL_HANDLER,
  55858. ZEND_NULL_HANDLER,
  55859. ZEND_NULL_HANDLER,
  55860. ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER,
  55861. ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
  55862. ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
  55863. ZEND_NULL_HANDLER,
  55864. ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER,
  55865. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER,
  55866. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
  55867. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
  55868. ZEND_NULL_HANDLER,
  55869. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER,
  55870. ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER,
  55871. ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
  55872. ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
  55873. ZEND_NULL_HANDLER,
  55874. ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER,
  55875. ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER,
  55876. ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
  55877. ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
  55878. ZEND_NULL_HANDLER,
  55879. ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER,
  55880. ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER,
  55881. ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
  55882. ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
  55883. ZEND_NULL_HANDLER,
  55884. ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER,
  55885. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
  55886. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55887. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55888. ZEND_NULL_HANDLER,
  55889. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
  55890. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
  55891. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55892. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55893. ZEND_NULL_HANDLER,
  55894. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
  55895. ZEND_NULL_HANDLER,
  55896. ZEND_NULL_HANDLER,
  55897. ZEND_NULL_HANDLER,
  55898. ZEND_NULL_HANDLER,
  55899. ZEND_NULL_HANDLER,
  55900. ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER,
  55901. ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
  55902. ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
  55903. ZEND_NULL_HANDLER,
  55904. ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER,
  55905. ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER,
  55906. ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
  55907. ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
  55908. ZEND_NULL_HANDLER,
  55909. ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER,
  55910. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
  55911. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55912. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55913. ZEND_NULL_HANDLER,
  55914. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
  55915. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
  55916. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55917. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55918. ZEND_NULL_HANDLER,
  55919. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
  55920. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER,
  55921. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
  55922. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
  55923. ZEND_NULL_HANDLER,
  55924. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER,
  55925. ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER,
  55926. ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
  55927. ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
  55928. ZEND_NULL_HANDLER,
  55929. ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER,
  55930. ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
  55931. ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
  55932. ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
  55933. ZEND_NULL_HANDLER,
  55934. ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
  55935. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
  55936. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
  55937. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
  55938. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
  55939. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER,
  55940. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
  55941. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
  55942. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
  55943. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER,
  55944. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER,
  55945. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
  55946. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
  55947. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
  55948. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
  55949. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER,
  55950. ZEND_NULL_HANDLER,
  55951. ZEND_NULL_HANDLER,
  55952. ZEND_NULL_HANDLER,
  55953. ZEND_NULL_HANDLER,
  55954. ZEND_NULL_HANDLER,
  55955. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER,
  55956. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
  55957. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
  55958. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
  55959. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER,
  55960. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
  55961. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
  55962. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
  55963. ZEND_NULL_HANDLER,
  55964. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER,
  55965. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
  55966. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
  55967. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
  55968. ZEND_NULL_HANDLER,
  55969. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER,
  55970. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
  55971. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
  55972. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
  55973. ZEND_NULL_HANDLER,
  55974. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER,
  55975. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
  55976. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
  55977. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
  55978. ZEND_NULL_HANDLER,
  55979. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER,
  55980. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER,
  55981. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
  55982. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
  55983. ZEND_NULL_HANDLER,
  55984. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER,
  55985. ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER,
  55986. ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
  55987. ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
  55988. ZEND_NULL_HANDLER,
  55989. ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER,
  55990. ZEND_NULL_HANDLER,
  55991. ZEND_NULL_HANDLER,
  55992. ZEND_NULL_HANDLER,
  55993. ZEND_NULL_HANDLER,
  55994. ZEND_NULL_HANDLER,
  55995. ZEND_NULL_HANDLER,
  55996. ZEND_NULL_HANDLER,
  55997. ZEND_NULL_HANDLER,
  55998. ZEND_NULL_HANDLER,
  55999. ZEND_NULL_HANDLER,
  56000. ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER,
  56001. ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
  56002. ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
  56003. ZEND_NULL_HANDLER,
  56004. ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER,
  56005. ZEND_NULL_HANDLER,
  56006. ZEND_NULL_HANDLER,
  56007. ZEND_NULL_HANDLER,
  56008. ZEND_NULL_HANDLER,
  56009. ZEND_NULL_HANDLER,
  56010. ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER,
  56011. ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
  56012. ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
  56013. ZEND_NULL_HANDLER,
  56014. ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER,
  56015. ZEND_NULL_HANDLER,
  56016. ZEND_NULL_HANDLER,
  56017. ZEND_NULL_HANDLER,
  56018. ZEND_NULL_HANDLER,
  56019. ZEND_NULL_HANDLER,
  56020. ZEND_NULL_HANDLER,
  56021. ZEND_NULL_HANDLER,
  56022. ZEND_NULL_HANDLER,
  56023. ZEND_NULL_HANDLER,
  56024. ZEND_NULL_HANDLER,
  56025. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER,
  56026. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
  56027. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
  56028. ZEND_NULL_HANDLER,
  56029. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER,
  56030. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER,
  56031. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
  56032. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
  56033. ZEND_NULL_HANDLER,
  56034. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER,
  56035. ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER,
  56036. ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
  56037. ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
  56038. ZEND_NULL_HANDLER,
  56039. ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER,
  56040. ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER,
  56041. ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
  56042. ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
  56043. ZEND_NULL_HANDLER,
  56044. ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER,
  56045. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
  56046. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  56047. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  56048. ZEND_NULL_HANDLER,
  56049. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
  56050. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
  56051. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  56052. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  56053. ZEND_NULL_HANDLER,
  56054. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
  56055. ZEND_NULL_HANDLER,
  56056. ZEND_NULL_HANDLER,
  56057. ZEND_NULL_HANDLER,
  56058. ZEND_NULL_HANDLER,
  56059. ZEND_NULL_HANDLER,
  56060. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
  56061. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  56062. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  56063. ZEND_NULL_HANDLER,
  56064. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
  56065. ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
  56066. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
  56067. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
  56068. ZEND_NULL_HANDLER,
  56069. ZEND_NULL_HANDLER,
  56070. ZEND_NULL_HANDLER,
  56071. ZEND_NULL_HANDLER,
  56072. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER,
  56073. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER,
  56074. ZEND_NULL_HANDLER,
  56075. ZEND_NULL_HANDLER,
  56076. ZEND_EXT_STMT_SPEC_HANDLER,
  56077. ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
  56078. ZEND_EXT_FCALL_END_SPEC_HANDLER,
  56079. ZEND_EXT_NOP_SPEC_HANDLER,
  56080. ZEND_TICKS_SPEC_HANDLER,
  56081. ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER,
  56082. ZEND_NULL_HANDLER,
  56083. ZEND_NULL_HANDLER,
  56084. ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER,
  56085. ZEND_NULL_HANDLER,
  56086. ZEND_CATCH_SPEC_CONST_HANDLER,
  56087. ZEND_THROW_SPEC_CONST_HANDLER,
  56088. ZEND_THROW_SPEC_TMPVAR_HANDLER,
  56089. ZEND_THROW_SPEC_TMPVAR_HANDLER,
  56090. ZEND_NULL_HANDLER,
  56091. ZEND_THROW_SPEC_CV_HANDLER,
  56092. ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER,
  56093. ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
  56094. ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
  56095. ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
  56096. ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER,
  56097. ZEND_CLONE_SPEC_CONST_HANDLER,
  56098. ZEND_CLONE_SPEC_TMPVAR_HANDLER,
  56099. ZEND_CLONE_SPEC_TMPVAR_HANDLER,
  56100. ZEND_CLONE_SPEC_UNUSED_HANDLER,
  56101. ZEND_CLONE_SPEC_CV_HANDLER,
  56102. ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
  56103. ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
  56104. ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
  56105. ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
  56106. ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
  56107. ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
  56108. ZEND_NULL_HANDLER,
  56109. ZEND_NULL_HANDLER,
  56110. ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
  56111. ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
  56112. ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
  56113. ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
  56114. ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
  56115. ZEND_NULL_HANDLER,
  56116. ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER,
  56117. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
  56118. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
  56119. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
  56120. ZEND_NULL_HANDLER,
  56121. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
  56122. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
  56123. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
  56124. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
  56125. ZEND_NULL_HANDLER,
  56126. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
  56127. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
  56128. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
  56129. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
  56130. ZEND_NULL_HANDLER,
  56131. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
  56132. ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER,
  56133. ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
  56134. ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
  56135. ZEND_NULL_HANDLER,
  56136. ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER,
  56137. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
  56138. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
  56139. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
  56140. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER,
  56141. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER,
  56142. ZEND_NULL_HANDLER,
  56143. ZEND_NULL_HANDLER,
  56144. ZEND_NULL_HANDLER,
  56145. ZEND_NULL_HANDLER,
  56146. ZEND_NULL_HANDLER,
  56147. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER,
  56148. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
  56149. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
  56150. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER,
  56151. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER,
  56152. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
  56153. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
  56154. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
  56155. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER,
  56156. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
  56157. ZEND_NULL_HANDLER,
  56158. ZEND_NULL_HANDLER,
  56159. ZEND_NULL_HANDLER,
  56160. ZEND_NULL_HANDLER,
  56161. ZEND_NULL_HANDLER,
  56162. ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER,
  56163. ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
  56164. ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
  56165. ZEND_NULL_HANDLER,
  56166. ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER,
  56167. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER,
  56168. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
  56169. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
  56170. ZEND_NULL_HANDLER,
  56171. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER,
  56172. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
  56173. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56174. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56175. ZEND_NULL_HANDLER,
  56176. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
  56177. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
  56178. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56179. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56180. ZEND_NULL_HANDLER,
  56181. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
  56182. ZEND_NULL_HANDLER,
  56183. ZEND_NULL_HANDLER,
  56184. ZEND_NULL_HANDLER,
  56185. ZEND_NULL_HANDLER,
  56186. ZEND_NULL_HANDLER,
  56187. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER,
  56188. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56189. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56190. ZEND_NULL_HANDLER,
  56191. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER,
  56192. ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER,
  56193. ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER,
  56194. ZEND_NULL_HANDLER,
  56195. ZEND_NULL_HANDLER,
  56196. ZEND_NULL_HANDLER,
  56197. ZEND_NULL_HANDLER,
  56198. ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER,
  56199. ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER,
  56200. ZEND_NULL_HANDLER,
  56201. ZEND_NULL_HANDLER,
  56202. ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER,
  56203. ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER,
  56204. ZEND_NULL_HANDLER,
  56205. ZEND_NULL_HANDLER,
  56206. ZEND_NULL_HANDLER,
  56207. ZEND_NULL_HANDLER,
  56208. ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER,
  56209. ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER,
  56210. ZEND_NULL_HANDLER,
  56211. ZEND_NULL_HANDLER,
  56212. ZEND_NULL_HANDLER,
  56213. ZEND_NULL_HANDLER,
  56214. ZEND_NULL_HANDLER,
  56215. ZEND_NULL_HANDLER,
  56216. ZEND_NULL_HANDLER,
  56217. ZEND_NULL_HANDLER,
  56218. ZEND_NULL_HANDLER,
  56219. ZEND_NULL_HANDLER,
  56220. ZEND_NULL_HANDLER,
  56221. ZEND_NULL_HANDLER,
  56222. ZEND_NULL_HANDLER,
  56223. ZEND_NULL_HANDLER,
  56224. ZEND_NULL_HANDLER,
  56225. ZEND_NULL_HANDLER,
  56226. ZEND_NULL_HANDLER,
  56227. ZEND_NULL_HANDLER,
  56228. ZEND_NULL_HANDLER,
  56229. ZEND_NULL_HANDLER,
  56230. ZEND_NULL_HANDLER,
  56231. ZEND_NULL_HANDLER,
  56232. ZEND_NULL_HANDLER,
  56233. ZEND_NULL_HANDLER,
  56234. ZEND_NULL_HANDLER,
  56235. ZEND_NULL_HANDLER,
  56236. ZEND_NULL_HANDLER,
  56237. ZEND_NULL_HANDLER,
  56238. ZEND_NULL_HANDLER,
  56239. ZEND_NULL_HANDLER,
  56240. ZEND_NULL_HANDLER,
  56241. ZEND_NULL_HANDLER,
  56242. ZEND_NULL_HANDLER,
  56243. ZEND_NULL_HANDLER,
  56244. ZEND_NULL_HANDLER,
  56245. ZEND_NULL_HANDLER,
  56246. ZEND_NULL_HANDLER,
  56247. ZEND_NULL_HANDLER,
  56248. ZEND_NULL_HANDLER,
  56249. ZEND_NULL_HANDLER,
  56250. ZEND_NULL_HANDLER,
  56251. ZEND_NULL_HANDLER,
  56252. ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER,
  56253. ZEND_NULL_HANDLER,
  56254. ZEND_NULL_HANDLER,
  56255. ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER,
  56256. ZEND_NULL_HANDLER,
  56257. ZEND_NULL_HANDLER,
  56258. ZEND_NULL_HANDLER,
  56259. ZEND_NULL_HANDLER,
  56260. ZEND_NULL_HANDLER,
  56261. ZEND_NULL_HANDLER,
  56262. ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER,
  56263. ZEND_NULL_HANDLER,
  56264. ZEND_NULL_HANDLER,
  56265. ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER,
  56266. ZEND_NULL_HANDLER,
  56267. ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER,
  56268. ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
  56269. ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
  56270. ZEND_NULL_HANDLER,
  56271. ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER,
  56272. ZEND_SEND_ARRAY_SPEC_HANDLER,
  56273. ZEND_SEND_USER_SPEC_CONST_HANDLER,
  56274. ZEND_SEND_USER_SPEC_TMP_HANDLER,
  56275. ZEND_SEND_USER_SPEC_VAR_HANDLER,
  56276. ZEND_NULL_HANDLER,
  56277. ZEND_SEND_USER_SPEC_CV_HANDLER,
  56278. ZEND_STRLEN_SPEC_CONST_HANDLER,
  56279. ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
  56280. ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
  56281. ZEND_NULL_HANDLER,
  56282. ZEND_STRLEN_SPEC_CV_HANDLER,
  56283. ZEND_DEFINED_SPEC_CONST_HANDLER,
  56284. ZEND_TYPE_CHECK_SPEC_CONST_HANDLER,
  56285. ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
  56286. ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
  56287. ZEND_NULL_HANDLER,
  56288. ZEND_TYPE_CHECK_SPEC_CV_HANDLER,
  56289. ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER,
  56290. ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER,
  56291. ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER,
  56292. ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
  56293. ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER,
  56294. ZEND_FE_RESET_RW_SPEC_CONST_HANDLER,
  56295. ZEND_FE_RESET_RW_SPEC_TMP_HANDLER,
  56296. ZEND_FE_RESET_RW_SPEC_VAR_HANDLER,
  56297. ZEND_NULL_HANDLER,
  56298. ZEND_FE_RESET_RW_SPEC_CV_HANDLER,
  56299. ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER,
  56300. ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
  56301. ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER,
  56302. ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
  56303. ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
  56304. ZEND_NULL_HANDLER,
  56305. ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER,
  56306. ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER,
  56307. ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER,
  56308. ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER,
  56309. ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER,
  56310. ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER,
  56311. ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER,
  56312. ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER,
  56313. ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER,
  56314. ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER,
  56315. ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER,
  56316. ZEND_NULL_HANDLER,
  56317. ZEND_NULL_HANDLER,
  56318. ZEND_NULL_HANDLER,
  56319. ZEND_NULL_HANDLER,
  56320. ZEND_NULL_HANDLER,
  56321. ZEND_NULL_HANDLER,
  56322. ZEND_NULL_HANDLER,
  56323. ZEND_NULL_HANDLER,
  56324. ZEND_NULL_HANDLER,
  56325. ZEND_NULL_HANDLER,
  56326. ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER,
  56327. ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  56328. ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  56329. ZEND_NULL_HANDLER,
  56330. ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER,
  56331. ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
  56332. ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56333. ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56334. ZEND_NULL_HANDLER,
  56335. ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
  56336. ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER,
  56337. ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56338. ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56339. ZEND_NULL_HANDLER,
  56340. ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER,
  56341. ZEND_NULL_HANDLER,
  56342. ZEND_NULL_HANDLER,
  56343. ZEND_NULL_HANDLER,
  56344. ZEND_NULL_HANDLER,
  56345. ZEND_NULL_HANDLER,
  56346. ZEND_NULL_HANDLER,
  56347. ZEND_NULL_HANDLER,
  56348. ZEND_NULL_HANDLER,
  56349. ZEND_NULL_HANDLER,
  56350. ZEND_NULL_HANDLER,
  56351. ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER,
  56352. ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  56353. ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  56354. ZEND_NULL_HANDLER,
  56355. ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER,
  56356. ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
  56357. ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56358. ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56359. ZEND_NULL_HANDLER,
  56360. ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
  56361. ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER,
  56362. ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56363. ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56364. ZEND_NULL_HANDLER,
  56365. ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER,
  56366. ZEND_ECHO_SPEC_CONST_HANDLER,
  56367. ZEND_ECHO_SPEC_TMPVAR_HANDLER,
  56368. ZEND_ECHO_SPEC_TMPVAR_HANDLER,
  56369. ZEND_NULL_HANDLER,
  56370. ZEND_ECHO_SPEC_CV_HANDLER,
  56371. ZEND_NULL_HANDLER,
  56372. ZEND_NULL_HANDLER,
  56373. ZEND_NULL_HANDLER,
  56374. ZEND_NULL_HANDLER,
  56375. ZEND_NULL_HANDLER,
  56376. ZEND_NULL_HANDLER,
  56377. ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
  56378. ZEND_NULL_HANDLER,
  56379. ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
  56380. ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
  56381. ZEND_NULL_HANDLER,
  56382. ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
  56383. ZEND_NULL_HANDLER,
  56384. ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
  56385. ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
  56386. ZEND_NULL_HANDLER,
  56387. ZEND_NULL_HANDLER,
  56388. ZEND_NULL_HANDLER,
  56389. ZEND_NULL_HANDLER,
  56390. ZEND_NULL_HANDLER,
  56391. ZEND_NULL_HANDLER,
  56392. ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER,
  56393. ZEND_NULL_HANDLER,
  56394. ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER,
  56395. ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER,
  56396. ZEND_NULL_HANDLER,
  56397. ZEND_GENERATOR_CREATE_SPEC_HANDLER,
  56398. ZEND_NULL_HANDLER,
  56399. ZEND_NULL_HANDLER,
  56400. ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER,
  56401. ZEND_NULL_HANDLER,
  56402. ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER,
  56403. ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
  56404. ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER,
  56405. ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER,
  56406. ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER,
  56407. ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER,
  56408. ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
  56409. ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER,
  56410. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER,
  56411. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
  56412. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
  56413. ZEND_NULL_HANDLER,
  56414. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER,
  56415. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
  56416. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56417. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56418. ZEND_NULL_HANDLER,
  56419. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
  56420. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
  56421. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56422. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56423. ZEND_NULL_HANDLER,
  56424. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
  56425. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER,
  56426. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56427. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56428. ZEND_NULL_HANDLER,
  56429. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER,
  56430. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER,
  56431. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56432. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56433. ZEND_NULL_HANDLER,
  56434. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER,
  56435. ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
  56436. ZEND_USER_OPCODE_SPEC_HANDLER,
  56437. ZEND_ASSERT_CHECK_SPEC_HANDLER,
  56438. ZEND_JMP_SET_SPEC_CONST_HANDLER,
  56439. ZEND_JMP_SET_SPEC_TMP_HANDLER,
  56440. ZEND_JMP_SET_SPEC_VAR_HANDLER,
  56441. ZEND_NULL_HANDLER,
  56442. ZEND_JMP_SET_SPEC_CV_HANDLER,
  56443. ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER,
  56444. ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER,
  56445. ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER,
  56446. ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER,
  56447. ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
  56448. ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
  56449. ZEND_NULL_HANDLER,
  56450. ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER,
  56451. ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER,
  56452. ZEND_NULL_HANDLER,
  56453. ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER,
  56454. ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER,
  56455. ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER,
  56456. ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER,
  56457. ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
  56458. ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER,
  56459. ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
  56460. ZEND_YIELD_SPEC_CONST_CONST_HANDLER,
  56461. ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER,
  56462. ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER,
  56463. ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER,
  56464. ZEND_YIELD_SPEC_CONST_CV_HANDLER,
  56465. ZEND_YIELD_SPEC_TMP_CONST_HANDLER,
  56466. ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER,
  56467. ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER,
  56468. ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER,
  56469. ZEND_YIELD_SPEC_TMP_CV_HANDLER,
  56470. ZEND_YIELD_SPEC_VAR_CONST_HANDLER,
  56471. ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER,
  56472. ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER,
  56473. ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER,
  56474. ZEND_YIELD_SPEC_VAR_CV_HANDLER,
  56475. ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER,
  56476. ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER,
  56477. ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER,
  56478. ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER,
  56479. ZEND_YIELD_SPEC_UNUSED_CV_HANDLER,
  56480. ZEND_YIELD_SPEC_CV_CONST_HANDLER,
  56481. ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER,
  56482. ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER,
  56483. ZEND_YIELD_SPEC_CV_UNUSED_HANDLER,
  56484. ZEND_YIELD_SPEC_CV_CV_HANDLER,
  56485. ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER,
  56486. ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
  56487. ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER,
  56488. ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
  56489. ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER,
  56490. ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
  56491. ZEND_NULL_HANDLER,
  56492. ZEND_NULL_HANDLER,
  56493. ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER,
  56494. ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
  56495. ZEND_FAST_CALL_SPEC_HANDLER,
  56496. ZEND_FAST_RET_SPEC_HANDLER,
  56497. ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER,
  56498. ZEND_SEND_UNPACK_SPEC_HANDLER,
  56499. ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
  56500. ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER,
  56501. ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER,
  56502. ZEND_NULL_HANDLER,
  56503. ZEND_YIELD_FROM_SPEC_CV_HANDLER,
  56504. ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER,
  56505. ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER,
  56506. ZEND_COALESCE_SPEC_CONST_HANDLER,
  56507. ZEND_COALESCE_SPEC_TMP_HANDLER,
  56508. ZEND_COALESCE_SPEC_VAR_HANDLER,
  56509. ZEND_NULL_HANDLER,
  56510. ZEND_COALESCE_SPEC_CV_HANDLER,
  56511. ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER,
  56512. ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
  56513. ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
  56514. ZEND_NULL_HANDLER,
  56515. ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER,
  56516. ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
  56517. ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
  56518. ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
  56519. ZEND_NULL_HANDLER,
  56520. ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
  56521. ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
  56522. ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
  56523. ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
  56524. ZEND_NULL_HANDLER,
  56525. ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
  56526. ZEND_NULL_HANDLER,
  56527. ZEND_NULL_HANDLER,
  56528. ZEND_NULL_HANDLER,
  56529. ZEND_NULL_HANDLER,
  56530. ZEND_NULL_HANDLER,
  56531. ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER,
  56532. ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
  56533. ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
  56534. ZEND_NULL_HANDLER,
  56535. ZEND_SPACESHIP_SPEC_CV_CV_HANDLER,
  56536. ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
  56537. ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER,
  56538. ZEND_NULL_HANDLER,
  56539. ZEND_NULL_HANDLER,
  56540. ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
  56541. ZEND_NULL_HANDLER,
  56542. ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER,
  56543. ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER,
  56544. ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER,
  56545. ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER,
  56546. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER,
  56547. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER,
  56548. ZEND_UNSET_STATIC_PROP_SPEC_HANDLER,
  56549. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER,
  56550. ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER,
  56551. ZEND_NULL_HANDLER,
  56552. ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER,
  56553. ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
  56554. ZEND_NULL_HANDLER,
  56555. ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER,
  56556. ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER,
  56557. ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER,
  56558. ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
  56559. ZEND_NULL_HANDLER,
  56560. ZEND_NULL_HANDLER,
  56561. ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
  56562. ZEND_NULL_HANDLER,
  56563. ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER,
  56564. ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER,
  56565. ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56566. ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56567. ZEND_NULL_HANDLER,
  56568. ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56569. ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER,
  56570. ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
  56571. ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
  56572. ZEND_NULL_HANDLER,
  56573. ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
  56574. ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER,
  56575. ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER,
  56576. ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER,
  56577. ZEND_NULL_HANDLER,
  56578. ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER,
  56579. ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER,
  56580. ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER,
  56581. ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER,
  56582. ZEND_NULL_HANDLER,
  56583. ZEND_COUNT_SPEC_CV_UNUSED_HANDLER,
  56584. ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER,
  56585. ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER,
  56586. ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER,
  56587. ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
  56588. ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER,
  56589. ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
  56590. ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER,
  56591. ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER,
  56592. ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER,
  56593. ZEND_NULL_HANDLER,
  56594. ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER,
  56595. ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER,
  56596. ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER,
  56597. ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER,
  56598. ZEND_NULL_HANDLER,
  56599. ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER,
  56600. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER,
  56601. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
  56602. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
  56603. ZEND_NULL_HANDLER,
  56604. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER,
  56605. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER,
  56606. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
  56607. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
  56608. ZEND_NULL_HANDLER,
  56609. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER,
  56610. ZEND_NULL_HANDLER,
  56611. ZEND_NULL_HANDLER,
  56612. ZEND_NULL_HANDLER,
  56613. ZEND_NULL_HANDLER,
  56614. ZEND_NULL_HANDLER,
  56615. ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER,
  56616. ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER,
  56617. ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER,
  56618. ZEND_NULL_HANDLER,
  56619. ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER,
  56620. ZEND_MATCH_SPEC_CONST_CONST_HANDLER,
  56621. ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
  56622. ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
  56623. ZEND_NULL_HANDLER,
  56624. ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
  56625. ZEND_NULL_HANDLER,
  56626. ZEND_NULL_HANDLER,
  56627. ZEND_NULL_HANDLER,
  56628. ZEND_NULL_HANDLER,
  56629. ZEND_NULL_HANDLER,
  56630. ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER,
  56631. ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER,
  56632. ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER,
  56633. ZEND_NULL_HANDLER,
  56634. ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER,
  56635. ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER,
  56636. ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER,
  56637. ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER,
  56638. ZEND_NULL_HANDLER,
  56639. ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER,
  56640. ZEND_NULL_HANDLER,
  56641. ZEND_NULL_HANDLER,
  56642. ZEND_NULL_HANDLER,
  56643. ZEND_NULL_HANDLER,
  56644. ZEND_NULL_HANDLER,
  56645. ZEND_NULL_HANDLER,
  56646. ZEND_NULL_HANDLER,
  56647. ZEND_NULL_HANDLER,
  56648. ZEND_NULL_HANDLER,
  56649. ZEND_NULL_HANDLER,
  56650. ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER,
  56651. ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
  56652. ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
  56653. ZEND_NULL_HANDLER,
  56654. ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
  56655. ZEND_JMP_NULL_SPEC_CONST_HANDLER,
  56656. ZEND_JMP_NULL_SPEC_TMP_HANDLER,
  56657. ZEND_JMP_NULL_SPEC_VAR_HANDLER,
  56658. ZEND_NULL_HANDLER,
  56659. ZEND_JMP_NULL_SPEC_CV_HANDLER,
  56660. ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
  56661. ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER,
  56662. ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
  56663. ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER,
  56664. ZEND_RECV_NOTYPE_SPEC_HANDLER,
  56665. ZEND_JMP_FORWARD_SPEC_HANDLER,
  56666. ZEND_NULL_HANDLER,
  56667. ZEND_NULL_HANDLER,
  56668. ZEND_NULL_HANDLER,
  56669. ZEND_NULL_HANDLER,
  56670. ZEND_NULL_HANDLER,
  56671. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56672. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56673. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56674. ZEND_NULL_HANDLER,
  56675. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56676. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56677. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56678. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56679. ZEND_NULL_HANDLER,
  56680. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56681. ZEND_NULL_HANDLER,
  56682. ZEND_NULL_HANDLER,
  56683. ZEND_NULL_HANDLER,
  56684. ZEND_NULL_HANDLER,
  56685. ZEND_NULL_HANDLER,
  56686. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56687. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56688. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56689. ZEND_NULL_HANDLER,
  56690. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56691. ZEND_NULL_HANDLER,
  56692. ZEND_NULL_HANDLER,
  56693. ZEND_NULL_HANDLER,
  56694. ZEND_NULL_HANDLER,
  56695. ZEND_NULL_HANDLER,
  56696. ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56697. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56698. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56699. ZEND_NULL_HANDLER,
  56700. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56701. ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56702. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56703. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56704. ZEND_NULL_HANDLER,
  56705. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56706. ZEND_NULL_HANDLER,
  56707. ZEND_NULL_HANDLER,
  56708. ZEND_NULL_HANDLER,
  56709. ZEND_NULL_HANDLER,
  56710. ZEND_NULL_HANDLER,
  56711. ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56712. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56713. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56714. ZEND_NULL_HANDLER,
  56715. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56716. ZEND_NULL_HANDLER,
  56717. ZEND_NULL_HANDLER,
  56718. ZEND_NULL_HANDLER,
  56719. ZEND_NULL_HANDLER,
  56720. ZEND_NULL_HANDLER,
  56721. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56722. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56723. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56724. ZEND_NULL_HANDLER,
  56725. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56726. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56727. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56728. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56729. ZEND_NULL_HANDLER,
  56730. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56731. ZEND_NULL_HANDLER,
  56732. ZEND_NULL_HANDLER,
  56733. ZEND_NULL_HANDLER,
  56734. ZEND_NULL_HANDLER,
  56735. ZEND_NULL_HANDLER,
  56736. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56737. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56738. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56739. ZEND_NULL_HANDLER,
  56740. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56741. ZEND_NULL_HANDLER,
  56742. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
  56743. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
  56744. ZEND_NULL_HANDLER,
  56745. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
  56746. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56747. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56748. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56749. ZEND_NULL_HANDLER,
  56750. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56751. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56752. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56753. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56754. ZEND_NULL_HANDLER,
  56755. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56756. ZEND_NULL_HANDLER,
  56757. ZEND_NULL_HANDLER,
  56758. ZEND_NULL_HANDLER,
  56759. ZEND_NULL_HANDLER,
  56760. ZEND_NULL_HANDLER,
  56761. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56762. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56763. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56764. ZEND_NULL_HANDLER,
  56765. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56766. ZEND_NULL_HANDLER,
  56767. ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  56768. ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  56769. ZEND_NULL_HANDLER,
  56770. ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  56771. ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56772. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56773. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56774. ZEND_NULL_HANDLER,
  56775. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56776. ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56777. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56778. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56779. ZEND_NULL_HANDLER,
  56780. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56781. ZEND_NULL_HANDLER,
  56782. ZEND_NULL_HANDLER,
  56783. ZEND_NULL_HANDLER,
  56784. ZEND_NULL_HANDLER,
  56785. ZEND_NULL_HANDLER,
  56786. ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56787. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56788. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56789. ZEND_NULL_HANDLER,
  56790. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56791. ZEND_NULL_HANDLER,
  56792. ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  56793. ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  56794. ZEND_NULL_HANDLER,
  56795. ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  56796. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56797. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56798. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56799. ZEND_NULL_HANDLER,
  56800. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56801. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56802. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56803. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56804. ZEND_NULL_HANDLER,
  56805. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56806. ZEND_NULL_HANDLER,
  56807. ZEND_NULL_HANDLER,
  56808. ZEND_NULL_HANDLER,
  56809. ZEND_NULL_HANDLER,
  56810. ZEND_NULL_HANDLER,
  56811. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56812. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56813. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56814. ZEND_NULL_HANDLER,
  56815. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56816. ZEND_NULL_HANDLER,
  56817. ZEND_NULL_HANDLER,
  56818. ZEND_NULL_HANDLER,
  56819. ZEND_NULL_HANDLER,
  56820. ZEND_NULL_HANDLER,
  56821. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56822. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56823. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56824. ZEND_NULL_HANDLER,
  56825. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56826. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56827. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56828. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56829. ZEND_NULL_HANDLER,
  56830. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56831. ZEND_NULL_HANDLER,
  56832. ZEND_NULL_HANDLER,
  56833. ZEND_NULL_HANDLER,
  56834. ZEND_NULL_HANDLER,
  56835. ZEND_NULL_HANDLER,
  56836. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56837. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56838. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56839. ZEND_NULL_HANDLER,
  56840. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56841. ZEND_NULL_HANDLER,
  56842. ZEND_NULL_HANDLER,
  56843. ZEND_NULL_HANDLER,
  56844. ZEND_NULL_HANDLER,
  56845. ZEND_NULL_HANDLER,
  56846. ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56847. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56848. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56849. ZEND_NULL_HANDLER,
  56850. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56851. ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56852. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56853. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56854. ZEND_NULL_HANDLER,
  56855. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56856. ZEND_NULL_HANDLER,
  56857. ZEND_NULL_HANDLER,
  56858. ZEND_NULL_HANDLER,
  56859. ZEND_NULL_HANDLER,
  56860. ZEND_NULL_HANDLER,
  56861. ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56862. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56863. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56864. ZEND_NULL_HANDLER,
  56865. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56866. ZEND_NULL_HANDLER,
  56867. ZEND_NULL_HANDLER,
  56868. ZEND_NULL_HANDLER,
  56869. ZEND_NULL_HANDLER,
  56870. ZEND_NULL_HANDLER,
  56871. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56872. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56873. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56874. ZEND_NULL_HANDLER,
  56875. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56876. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56877. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56878. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56879. ZEND_NULL_HANDLER,
  56880. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56881. ZEND_NULL_HANDLER,
  56882. ZEND_NULL_HANDLER,
  56883. ZEND_NULL_HANDLER,
  56884. ZEND_NULL_HANDLER,
  56885. ZEND_NULL_HANDLER,
  56886. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56887. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56888. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56889. ZEND_NULL_HANDLER,
  56890. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56891. ZEND_NULL_HANDLER,
  56892. ZEND_NULL_HANDLER,
  56893. ZEND_NULL_HANDLER,
  56894. ZEND_NULL_HANDLER,
  56895. ZEND_NULL_HANDLER,
  56896. ZEND_NULL_HANDLER,
  56897. ZEND_NULL_HANDLER,
  56898. ZEND_NULL_HANDLER,
  56899. ZEND_NULL_HANDLER,
  56900. ZEND_NULL_HANDLER,
  56901. ZEND_NULL_HANDLER,
  56902. ZEND_NULL_HANDLER,
  56903. ZEND_NULL_HANDLER,
  56904. ZEND_NULL_HANDLER,
  56905. ZEND_NULL_HANDLER,
  56906. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56907. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  56908. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  56909. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56910. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56911. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56912. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56913. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56914. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56915. ZEND_NULL_HANDLER,
  56916. ZEND_NULL_HANDLER,
  56917. ZEND_NULL_HANDLER,
  56918. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56919. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56920. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56921. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56922. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  56923. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  56924. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56925. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56926. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56927. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56928. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56929. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56930. ZEND_NULL_HANDLER,
  56931. ZEND_NULL_HANDLER,
  56932. ZEND_NULL_HANDLER,
  56933. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56934. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56935. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56936. ZEND_NULL_HANDLER,
  56937. ZEND_NULL_HANDLER,
  56938. ZEND_NULL_HANDLER,
  56939. ZEND_NULL_HANDLER,
  56940. ZEND_NULL_HANDLER,
  56941. ZEND_NULL_HANDLER,
  56942. ZEND_NULL_HANDLER,
  56943. ZEND_NULL_HANDLER,
  56944. ZEND_NULL_HANDLER,
  56945. ZEND_NULL_HANDLER,
  56946. ZEND_NULL_HANDLER,
  56947. ZEND_NULL_HANDLER,
  56948. ZEND_NULL_HANDLER,
  56949. ZEND_NULL_HANDLER,
  56950. ZEND_NULL_HANDLER,
  56951. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56952. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  56953. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  56954. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56955. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56956. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56957. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56958. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56959. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56960. ZEND_NULL_HANDLER,
  56961. ZEND_NULL_HANDLER,
  56962. ZEND_NULL_HANDLER,
  56963. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56964. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56965. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56966. ZEND_NULL_HANDLER,
  56967. ZEND_NULL_HANDLER,
  56968. ZEND_NULL_HANDLER,
  56969. ZEND_NULL_HANDLER,
  56970. ZEND_NULL_HANDLER,
  56971. ZEND_NULL_HANDLER,
  56972. ZEND_NULL_HANDLER,
  56973. ZEND_NULL_HANDLER,
  56974. ZEND_NULL_HANDLER,
  56975. ZEND_NULL_HANDLER,
  56976. ZEND_NULL_HANDLER,
  56977. ZEND_NULL_HANDLER,
  56978. ZEND_NULL_HANDLER,
  56979. ZEND_NULL_HANDLER,
  56980. ZEND_NULL_HANDLER,
  56981. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56982. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  56983. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  56984. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56985. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56986. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56987. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56988. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56989. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56990. ZEND_NULL_HANDLER,
  56991. ZEND_NULL_HANDLER,
  56992. ZEND_NULL_HANDLER,
  56993. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56994. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56995. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56996. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56997. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  56998. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  56999. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57000. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57001. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57002. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57003. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57004. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57005. ZEND_NULL_HANDLER,
  57006. ZEND_NULL_HANDLER,
  57007. ZEND_NULL_HANDLER,
  57008. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57009. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57010. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57011. ZEND_NULL_HANDLER,
  57012. ZEND_NULL_HANDLER,
  57013. ZEND_NULL_HANDLER,
  57014. ZEND_NULL_HANDLER,
  57015. ZEND_NULL_HANDLER,
  57016. ZEND_NULL_HANDLER,
  57017. ZEND_NULL_HANDLER,
  57018. ZEND_NULL_HANDLER,
  57019. ZEND_NULL_HANDLER,
  57020. ZEND_NULL_HANDLER,
  57021. ZEND_NULL_HANDLER,
  57022. ZEND_NULL_HANDLER,
  57023. ZEND_NULL_HANDLER,
  57024. ZEND_NULL_HANDLER,
  57025. ZEND_NULL_HANDLER,
  57026. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57027. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57028. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57029. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57030. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57031. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57032. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57033. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57034. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57035. ZEND_NULL_HANDLER,
  57036. ZEND_NULL_HANDLER,
  57037. ZEND_NULL_HANDLER,
  57038. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57039. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57040. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57041. ZEND_NULL_HANDLER,
  57042. ZEND_NULL_HANDLER,
  57043. ZEND_NULL_HANDLER,
  57044. ZEND_NULL_HANDLER,
  57045. ZEND_NULL_HANDLER,
  57046. ZEND_NULL_HANDLER,
  57047. ZEND_NULL_HANDLER,
  57048. ZEND_NULL_HANDLER,
  57049. ZEND_NULL_HANDLER,
  57050. ZEND_NULL_HANDLER,
  57051. ZEND_NULL_HANDLER,
  57052. ZEND_NULL_HANDLER,
  57053. ZEND_NULL_HANDLER,
  57054. ZEND_NULL_HANDLER,
  57055. ZEND_NULL_HANDLER,
  57056. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57057. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57058. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57059. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57060. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57061. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57062. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57063. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57064. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57065. ZEND_NULL_HANDLER,
  57066. ZEND_NULL_HANDLER,
  57067. ZEND_NULL_HANDLER,
  57068. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57069. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57070. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57071. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57072. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57073. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57074. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57075. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57076. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57077. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57078. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57079. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57080. ZEND_NULL_HANDLER,
  57081. ZEND_NULL_HANDLER,
  57082. ZEND_NULL_HANDLER,
  57083. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57084. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57085. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57086. ZEND_NULL_HANDLER,
  57087. ZEND_NULL_HANDLER,
  57088. ZEND_NULL_HANDLER,
  57089. ZEND_NULL_HANDLER,
  57090. ZEND_NULL_HANDLER,
  57091. ZEND_NULL_HANDLER,
  57092. ZEND_NULL_HANDLER,
  57093. ZEND_NULL_HANDLER,
  57094. ZEND_NULL_HANDLER,
  57095. ZEND_NULL_HANDLER,
  57096. ZEND_NULL_HANDLER,
  57097. ZEND_NULL_HANDLER,
  57098. ZEND_NULL_HANDLER,
  57099. ZEND_NULL_HANDLER,
  57100. ZEND_NULL_HANDLER,
  57101. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57102. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57103. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57104. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57105. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57106. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57107. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57108. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57109. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57110. ZEND_NULL_HANDLER,
  57111. ZEND_NULL_HANDLER,
  57112. ZEND_NULL_HANDLER,
  57113. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57114. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57115. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57116. ZEND_NULL_HANDLER,
  57117. ZEND_NULL_HANDLER,
  57118. ZEND_NULL_HANDLER,
  57119. ZEND_NULL_HANDLER,
  57120. ZEND_NULL_HANDLER,
  57121. ZEND_NULL_HANDLER,
  57122. ZEND_NULL_HANDLER,
  57123. ZEND_NULL_HANDLER,
  57124. ZEND_NULL_HANDLER,
  57125. ZEND_NULL_HANDLER,
  57126. ZEND_NULL_HANDLER,
  57127. ZEND_NULL_HANDLER,
  57128. ZEND_NULL_HANDLER,
  57129. ZEND_NULL_HANDLER,
  57130. ZEND_NULL_HANDLER,
  57131. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57132. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57133. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57134. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57135. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57136. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57137. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57138. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57139. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57140. ZEND_NULL_HANDLER,
  57141. ZEND_NULL_HANDLER,
  57142. ZEND_NULL_HANDLER,
  57143. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57144. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57145. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57146. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57147. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57148. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57149. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57150. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57151. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57152. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57153. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57154. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57155. ZEND_NULL_HANDLER,
  57156. ZEND_NULL_HANDLER,
  57157. ZEND_NULL_HANDLER,
  57158. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57159. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57160. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57161. ZEND_NULL_HANDLER,
  57162. ZEND_NULL_HANDLER,
  57163. ZEND_NULL_HANDLER,
  57164. ZEND_NULL_HANDLER,
  57165. ZEND_NULL_HANDLER,
  57166. ZEND_NULL_HANDLER,
  57167. ZEND_NULL_HANDLER,
  57168. ZEND_NULL_HANDLER,
  57169. ZEND_NULL_HANDLER,
  57170. ZEND_NULL_HANDLER,
  57171. ZEND_NULL_HANDLER,
  57172. ZEND_NULL_HANDLER,
  57173. ZEND_NULL_HANDLER,
  57174. ZEND_NULL_HANDLER,
  57175. ZEND_NULL_HANDLER,
  57176. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57177. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57178. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57179. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57180. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57181. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57182. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57183. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57184. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57185. ZEND_NULL_HANDLER,
  57186. ZEND_NULL_HANDLER,
  57187. ZEND_NULL_HANDLER,
  57188. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57189. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57190. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57191. ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER,
  57192. ZEND_NULL_HANDLER,
  57193. ZEND_NULL_HANDLER,
  57194. ZEND_NULL_HANDLER,
  57195. ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER,
  57196. ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER,
  57197. ZEND_NULL_HANDLER,
  57198. ZEND_NULL_HANDLER,
  57199. ZEND_NULL_HANDLER,
  57200. ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER,
  57201. ZEND_NULL_HANDLER,
  57202. ZEND_NULL_HANDLER,
  57203. ZEND_NULL_HANDLER,
  57204. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57205. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57206. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57207. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57208. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57209. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57210. ZEND_NULL_HANDLER,
  57211. ZEND_NULL_HANDLER,
  57212. ZEND_NULL_HANDLER,
  57213. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57214. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57215. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57216. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57217. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57218. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57219. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57220. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57221. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57222. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57223. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57224. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57225. ZEND_NULL_HANDLER,
  57226. ZEND_NULL_HANDLER,
  57227. ZEND_NULL_HANDLER,
  57228. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57229. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57230. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57231. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57232. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57233. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57234. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57235. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57236. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57237. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57238. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57239. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57240. ZEND_NULL_HANDLER,
  57241. ZEND_NULL_HANDLER,
  57242. ZEND_NULL_HANDLER,
  57243. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57244. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57245. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57246. ZEND_NULL_HANDLER,
  57247. ZEND_NULL_HANDLER,
  57248. ZEND_NULL_HANDLER,
  57249. ZEND_NULL_HANDLER,
  57250. ZEND_NULL_HANDLER,
  57251. ZEND_NULL_HANDLER,
  57252. ZEND_NULL_HANDLER,
  57253. ZEND_NULL_HANDLER,
  57254. ZEND_NULL_HANDLER,
  57255. ZEND_NULL_HANDLER,
  57256. ZEND_NULL_HANDLER,
  57257. ZEND_NULL_HANDLER,
  57258. ZEND_NULL_HANDLER,
  57259. ZEND_NULL_HANDLER,
  57260. ZEND_NULL_HANDLER,
  57261. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57262. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57263. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57264. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57265. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57266. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57267. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57268. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57269. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57270. ZEND_NULL_HANDLER,
  57271. ZEND_NULL_HANDLER,
  57272. ZEND_NULL_HANDLER,
  57273. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57274. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57275. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57276. ZEND_NULL_HANDLER,
  57277. ZEND_NULL_HANDLER,
  57278. ZEND_NULL_HANDLER,
  57279. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57280. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57281. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57282. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57283. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57284. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57285. ZEND_NULL_HANDLER,
  57286. ZEND_NULL_HANDLER,
  57287. ZEND_NULL_HANDLER,
  57288. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57289. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57290. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57291. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57292. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57293. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57294. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57295. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57296. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57297. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57298. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57299. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57300. ZEND_NULL_HANDLER,
  57301. ZEND_NULL_HANDLER,
  57302. ZEND_NULL_HANDLER,
  57303. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57304. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57305. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57306. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57307. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57308. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57309. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57310. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57311. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57312. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57313. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57314. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57315. ZEND_NULL_HANDLER,
  57316. ZEND_NULL_HANDLER,
  57317. ZEND_NULL_HANDLER,
  57318. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57319. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57320. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57321. ZEND_NULL_HANDLER,
  57322. ZEND_NULL_HANDLER,
  57323. ZEND_NULL_HANDLER,
  57324. ZEND_NULL_HANDLER,
  57325. ZEND_NULL_HANDLER,
  57326. ZEND_NULL_HANDLER,
  57327. ZEND_NULL_HANDLER,
  57328. ZEND_NULL_HANDLER,
  57329. ZEND_NULL_HANDLER,
  57330. ZEND_NULL_HANDLER,
  57331. ZEND_NULL_HANDLER,
  57332. ZEND_NULL_HANDLER,
  57333. ZEND_NULL_HANDLER,
  57334. ZEND_NULL_HANDLER,
  57335. ZEND_NULL_HANDLER,
  57336. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57337. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57338. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57339. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57340. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57341. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57342. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57343. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57344. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57345. ZEND_NULL_HANDLER,
  57346. ZEND_NULL_HANDLER,
  57347. ZEND_NULL_HANDLER,
  57348. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57349. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57350. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57351. ZEND_NULL_HANDLER,
  57352. ZEND_NULL_HANDLER,
  57353. ZEND_NULL_HANDLER,
  57354. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57355. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57356. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57357. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57358. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57359. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57360. ZEND_NULL_HANDLER,
  57361. ZEND_NULL_HANDLER,
  57362. ZEND_NULL_HANDLER,
  57363. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57364. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57365. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57366. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57367. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57368. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57369. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57370. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57371. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57372. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57373. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57374. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57375. ZEND_NULL_HANDLER,
  57376. ZEND_NULL_HANDLER,
  57377. ZEND_NULL_HANDLER,
  57378. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57379. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57380. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57381. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57382. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57383. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57384. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57385. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57386. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57387. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57388. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57389. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57390. ZEND_NULL_HANDLER,
  57391. ZEND_NULL_HANDLER,
  57392. ZEND_NULL_HANDLER,
  57393. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57394. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57395. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57396. ZEND_NULL_HANDLER,
  57397. ZEND_NULL_HANDLER,
  57398. ZEND_NULL_HANDLER,
  57399. ZEND_NULL_HANDLER,
  57400. ZEND_NULL_HANDLER,
  57401. ZEND_NULL_HANDLER,
  57402. ZEND_NULL_HANDLER,
  57403. ZEND_NULL_HANDLER,
  57404. ZEND_NULL_HANDLER,
  57405. ZEND_NULL_HANDLER,
  57406. ZEND_NULL_HANDLER,
  57407. ZEND_NULL_HANDLER,
  57408. ZEND_NULL_HANDLER,
  57409. ZEND_NULL_HANDLER,
  57410. ZEND_NULL_HANDLER,
  57411. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57412. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57413. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57414. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57415. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57416. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57417. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57418. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57419. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57420. ZEND_NULL_HANDLER,
  57421. ZEND_NULL_HANDLER,
  57422. ZEND_NULL_HANDLER,
  57423. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57424. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57425. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57426. ZEND_NULL_HANDLER,
  57427. ZEND_NULL_HANDLER,
  57428. ZEND_NULL_HANDLER,
  57429. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57430. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57431. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57432. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57433. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57434. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57435. ZEND_NULL_HANDLER,
  57436. ZEND_NULL_HANDLER,
  57437. ZEND_NULL_HANDLER,
  57438. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57439. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57440. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57441. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57442. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57443. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57444. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57445. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57446. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57447. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57448. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57449. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57450. ZEND_NULL_HANDLER,
  57451. ZEND_NULL_HANDLER,
  57452. ZEND_NULL_HANDLER,
  57453. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57454. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57455. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57456. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57457. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57458. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57459. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57460. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57461. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57462. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57463. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57464. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57465. ZEND_NULL_HANDLER,
  57466. ZEND_NULL_HANDLER,
  57467. ZEND_NULL_HANDLER,
  57468. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57469. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57470. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57471. ZEND_NULL_HANDLER,
  57472. ZEND_NULL_HANDLER,
  57473. ZEND_NULL_HANDLER,
  57474. ZEND_NULL_HANDLER,
  57475. ZEND_NULL_HANDLER,
  57476. ZEND_NULL_HANDLER,
  57477. ZEND_NULL_HANDLER,
  57478. ZEND_NULL_HANDLER,
  57479. ZEND_NULL_HANDLER,
  57480. ZEND_NULL_HANDLER,
  57481. ZEND_NULL_HANDLER,
  57482. ZEND_NULL_HANDLER,
  57483. ZEND_NULL_HANDLER,
  57484. ZEND_NULL_HANDLER,
  57485. ZEND_NULL_HANDLER,
  57486. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57487. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57488. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57489. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57490. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57491. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57492. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57493. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57494. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57495. ZEND_NULL_HANDLER,
  57496. ZEND_NULL_HANDLER,
  57497. ZEND_NULL_HANDLER,
  57498. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57499. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57500. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57501. ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
  57502. ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
  57503. ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
  57504. ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
  57505. ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
  57506. ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
  57507. ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
  57508. ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
  57509. ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
  57510. ZEND_POST_INC_LONG_SPEC_CV_HANDLER,
  57511. ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
  57512. ZEND_POST_DEC_LONG_SPEC_CV_HANDLER,
  57513. ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER,
  57514. ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
  57515. ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
  57516. ZEND_NULL_HANDLER,
  57517. ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
  57518. ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER,
  57519. ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
  57520. ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
  57521. ZEND_NULL_HANDLER,
  57522. ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
  57523. ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER,
  57524. ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
  57525. ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
  57526. ZEND_NULL_HANDLER,
  57527. ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
  57528. ZEND_NULL_HANDLER,
  57529. ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
  57530. ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
  57531. ZEND_NULL_HANDLER,
  57532. ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
  57533. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
  57534. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57535. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57536. ZEND_NULL_HANDLER,
  57537. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57538. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
  57539. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57540. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57541. ZEND_NULL_HANDLER,
  57542. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57543. ZEND_NULL_HANDLER,
  57544. ZEND_NULL_HANDLER,
  57545. ZEND_NULL_HANDLER,
  57546. ZEND_NULL_HANDLER,
  57547. ZEND_NULL_HANDLER,
  57548. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER,
  57549. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
  57550. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
  57551. ZEND_NULL_HANDLER,
  57552. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
  57553. ZEND_NULL_HANDLER,
  57554. ZEND_NULL_HANDLER,
  57555. ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER,
  57556. ZEND_NULL_HANDLER,
  57557. ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER,
  57558. ZEND_NULL_HANDLER,
  57559. ZEND_NULL_HANDLER,
  57560. ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER,
  57561. ZEND_NULL_HANDLER,
  57562. ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER,
  57563. ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER,
  57564. ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER,
  57565. ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
  57566. ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER,
  57567. ZEND_NULL_HANDLER
  57568. };
  57569. static const uint32_t specs[] = {
  57570. 0,
  57571. 1 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57572. 26 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57573. 51 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57574. 76 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57575. 101 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57576. 126 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57577. 151 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57578. 176 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57579. 201 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57580. 226 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57581. 251 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57582. 276 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57583. 301 | SPEC_RULE_OP1,
  57584. 306 | SPEC_RULE_OP1,
  57585. 311 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57586. 336 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57587. 361 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57588. 386 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE,
  57589. 461 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE,
  57590. 536 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH,
  57591. 611 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH,
  57592. 686 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_RETVAL,
  57593. 736 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
  57594. 861 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
  57595. 986 | SPEC_RULE_OP_DATA,
  57596. 991 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57597. 1016 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57598. 1041 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57599. 1066,
  57600. 1067 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57601. 1092 | SPEC_RULE_OP1,
  57602. 1097 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
  57603. 1222,
  57604. 1223 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
  57605. 1233 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
  57606. 1243 | SPEC_RULE_OP1,
  57607. 1248 | SPEC_RULE_OP1,
  57608. 1253,
  57609. 1253,
  57610. 1254,
  57611. 1254,
  57612. 1255,
  57613. 1256 | SPEC_RULE_OP1,
  57614. 1261 | SPEC_RULE_OP1,
  57615. 1266 | SPEC_RULE_OP1,
  57616. 1271 | SPEC_RULE_OP1,
  57617. 1276 | SPEC_RULE_OP1,
  57618. 1281 | SPEC_RULE_OP2,
  57619. 1286,
  57620. 1287 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
  57621. 1297 | SPEC_RULE_OP1,
  57622. 1302 | SPEC_RULE_OP1,
  57623. 1307 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57624. 1332 | SPEC_RULE_OP2,
  57625. 1337 | SPEC_RULE_OP2,
  57626. 1342 | SPEC_RULE_OP2,
  57627. 1347,
  57628. 1348,
  57629. 1349,
  57630. 1350 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
  57631. 1354,
  57632. 1355 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
  57633. 1365,
  57634. 1366,
  57635. 1367 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57636. 1392 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
  57637. 1442 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57638. 1467 | SPEC_RULE_OP1,
  57639. 1472,
  57640. 1473,
  57641. 1474 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57642. 1499 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57643. 1524 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
  57644. 1534 | SPEC_RULE_OP1,
  57645. 1539 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57646. 1564 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57647. 1589 | SPEC_RULE_OP1,
  57648. 1594,
  57649. 1595,
  57650. 1596 | SPEC_RULE_OP1,
  57651. 1601 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57652. 1626 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57653. 1651 | SPEC_RULE_OP1,
  57654. 1656 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57655. 1681 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57656. 1706 | SPEC_RULE_OP1,
  57657. 1711 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57658. 1736 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57659. 1761 | SPEC_RULE_OP1,
  57660. 1766 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57661. 1791 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57662. 1816 | SPEC_RULE_OP1,
  57663. 1821 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57664. 1846 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57665. 1871 | SPEC_RULE_OP1,
  57666. 1876 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57667. 1901 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57668. 1926 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57669. 1951,
  57670. 1952 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
  57671. 1962,
  57672. 1963,
  57673. 1964,
  57674. 1965,
  57675. 1966,
  57676. 1967 | SPEC_RULE_OP2,
  57677. 1972,
  57678. 1973 | SPEC_RULE_OP1,
  57679. 1978 | SPEC_RULE_OP2,
  57680. 1983 | SPEC_RULE_OP1,
  57681. 1988 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
  57682. 1998 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57683. 2023 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57684. 2048 | SPEC_RULE_OP1,
  57685. 2053 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57686. 2078 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
  57687. 2128 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57688. 2153 | SPEC_RULE_OP2,
  57689. 2158,
  57690. 2159 | SPEC_RULE_OP1,
  57691. 2164 | SPEC_RULE_OP1,
  57692. 2169,
  57693. 2170 | SPEC_RULE_OP1,
  57694. 2175 | SPEC_RULE_OP1,
  57695. 2180 | SPEC_RULE_OP1,
  57696. 2185,
  57697. 2186,
  57698. 2187 | SPEC_RULE_OP2,
  57699. 2192 | SPEC_RULE_RETVAL,
  57700. 2194 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
  57701. 2198 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
  57702. 2202 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57703. 2202 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57704. 2227 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57705. 2227 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57706. 2252 | SPEC_RULE_OP1,
  57707. 2257,
  57708. 2258 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57709. 2283,
  57710. 2284 | SPEC_RULE_OP1,
  57711. 2289,
  57712. 2290,
  57713. 2291,
  57714. 2292,
  57715. 2293,
  57716. 2294,
  57717. 2295,
  57718. 2296 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57719. 2321,
  57720. 2322,
  57721. 2323,
  57722. 2324 | SPEC_RULE_OP1,
  57723. 2329,
  57724. 2330 | SPEC_RULE_ISSET,
  57725. 2332 | SPEC_RULE_OP2,
  57726. 2337,
  57727. 2338 | SPEC_RULE_OP1,
  57728. 2343 | SPEC_RULE_OBSERVER,
  57729. 2345,
  57730. 2346 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57731. 2371 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
  57732. 2381,
  57733. 2382,
  57734. 2383,
  57735. 2384,
  57736. 2385 | SPEC_RULE_OP1,
  57737. 2390,
  57738. 2391,
  57739. 2392 | SPEC_RULE_OP1,
  57740. 2397 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57741. 2422,
  57742. 2423 | SPEC_RULE_OP1,
  57743. 2428,
  57744. 2429,
  57745. 2430,
  57746. 2431,
  57747. 2432,
  57748. 2433,
  57749. 2434,
  57750. 2435,
  57751. 2436 | SPEC_RULE_OP1,
  57752. 2441,
  57753. 2442,
  57754. 2443,
  57755. 2444 | SPEC_RULE_OP2,
  57756. 2449,
  57757. 2450 | SPEC_RULE_OP1,
  57758. 2455 | SPEC_RULE_OP1,
  57759. 2460 | SPEC_RULE_OP1,
  57760. 2465 | SPEC_RULE_OP1,
  57761. 2470 | SPEC_RULE_OP1,
  57762. 2475,
  57763. 2476 | SPEC_RULE_OP1,
  57764. 2481 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57765. 2506 | SPEC_RULE_OP1,
  57766. 2511 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57767. 2536 | SPEC_RULE_OP1,
  57768. 2541 | SPEC_RULE_OP1,
  57769. 2546,
  57770. 2547,
  57771. 2548,
  57772. 2549,
  57773. 3453
  57774. };
  57775. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  57776. zend_opcode_handler_funcs = labels;
  57777. zend_spec_handlers = specs;
  57778. execute_ex(NULL);
  57779. #else
  57780. zend_opcode_handlers = labels;
  57781. zend_handlers_count = sizeof(labels) / sizeof(void*);
  57782. zend_spec_handlers = specs;
  57783. #endif
  57784. VM_TRACE_START();
  57785. }
  57786. static HashTable *zend_handlers_table = NULL;
  57787. void zend_vm_dtor(void)
  57788. {
  57789. VM_TRACE_END();
  57790. if (zend_handlers_table) {
  57791. zend_hash_destroy(zend_handlers_table);
  57792. free(zend_handlers_table);
  57793. zend_handlers_table = NULL;
  57794. }
  57795. }
  57796. static void init_opcode_serialiser(void)
  57797. {
  57798. int i;
  57799. zval tmp;
  57800. zend_handlers_table = malloc(sizeof(HashTable));
  57801. zend_hash_init(zend_handlers_table, zend_handlers_count, NULL, NULL, 1);
  57802. zend_hash_real_init(zend_handlers_table, 0);
  57803. Z_TYPE_INFO(tmp) = IS_LONG;
  57804. for (i = 0; i < zend_handlers_count; i++) {
  57805. Z_LVAL(tmp) = i;
  57806. zend_hash_index_add(zend_handlers_table, (zend_long)(zend_uintptr_t)zend_opcode_handlers[i], &tmp);
  57807. }
  57808. }
  57809. ZEND_API void ZEND_FASTCALL zend_serialize_opcode_handler(zend_op *op)
  57810. {
  57811. zval *zv;
  57812. if (!zend_handlers_table) {
  57813. init_opcode_serialiser();
  57814. }
  57815. zv = zend_hash_index_find(zend_handlers_table, (zend_long)(zend_uintptr_t)op->handler);
  57816. ZEND_ASSERT(zv != NULL);
  57817. op->handler = (const void *)(zend_uintptr_t)Z_LVAL_P(zv);
  57818. }
  57819. ZEND_API void ZEND_FASTCALL zend_deserialize_opcode_handler(zend_op *op)
  57820. {
  57821. op->handler = zend_opcode_handlers[(zend_uintptr_t)op->handler];
  57822. }
  57823. ZEND_API const void* ZEND_FASTCALL zend_get_opcode_handler_func(const zend_op *op)
  57824. {
  57825. #if ZEND_VM_KIND == ZEND_VM_KIND_CALL
  57826. return op->handler;
  57827. #elif ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
  57828. zval *zv;
  57829. if (!zend_handlers_table) {
  57830. init_opcode_serialiser();
  57831. }
  57832. zv = zend_hash_index_find(zend_handlers_table, (zend_long)(zend_uintptr_t)op->handler);
  57833. ZEND_ASSERT(zv != NULL);
  57834. return zend_opcode_handler_funcs[Z_LVAL_P(zv)];
  57835. #else
  57836. return NULL;
  57837. #endif
  57838. }
  57839. ZEND_API const zend_op *zend_get_halt_op(void)
  57840. {
  57841. #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
  57842. return &hybrid_halt_op;
  57843. #else
  57844. return NULL;
  57845. #endif
  57846. }
  57847. ZEND_API int zend_vm_kind(void)
  57848. {
  57849. return ZEND_VM_KIND;
  57850. }
  57851. static uint32_t ZEND_FASTCALL zend_vm_get_opcode_handler_idx(uint32_t spec, const zend_op* op)
  57852. {
  57853. static const int zend_vm_decode[] = {
  57854. _UNUSED_CODE, /* 0 = IS_UNUSED */
  57855. _CONST_CODE, /* 1 = IS_CONST */
  57856. _TMP_CODE, /* 2 = IS_TMP_VAR */
  57857. _UNUSED_CODE, /* 3 */
  57858. _VAR_CODE, /* 4 = IS_VAR */
  57859. _UNUSED_CODE, /* 5 */
  57860. _UNUSED_CODE, /* 6 */
  57861. _UNUSED_CODE, /* 7 */
  57862. _CV_CODE /* 8 = IS_CV */
  57863. };
  57864. uint32_t offset = 0;
  57865. if (spec & SPEC_RULE_OP1) offset = offset * 5 + zend_vm_decode[op->op1_type];
  57866. if (spec & SPEC_RULE_OP2) offset = offset * 5 + zend_vm_decode[op->op2_type];
  57867. if (spec & SPEC_EXTRA_MASK) {
  57868. if (spec & SPEC_RULE_RETVAL) {
  57869. offset = offset * 2 + (op->result_type != IS_UNUSED);
  57870. if ((spec & SPEC_RULE_OBSERVER) && ZEND_OBSERVER_ENABLED) {
  57871. offset += 2;
  57872. }
  57873. } else if (spec & SPEC_RULE_QUICK_ARG) {
  57874. offset = offset * 2 + (op->op2.num <= MAX_ARG_FLAG_NUM);
  57875. } else if (spec & SPEC_RULE_OP_DATA) {
  57876. offset = offset * 5 + zend_vm_decode[(op + 1)->op1_type];
  57877. } else if (spec & SPEC_RULE_ISSET) {
  57878. offset = offset * 2 + (op->extended_value & ZEND_ISEMPTY);
  57879. } else if (spec & SPEC_RULE_SMART_BRANCH) {
  57880. offset = offset * 3;
  57881. if (op->result_type == (IS_SMART_BRANCH_JMPZ|IS_TMP_VAR)) {
  57882. offset += 1;
  57883. } else if (op->result_type == (IS_SMART_BRANCH_JMPNZ|IS_TMP_VAR)) {
  57884. offset += 2;
  57885. }
  57886. } else if (spec & SPEC_RULE_OBSERVER) {
  57887. offset = offset * 2;
  57888. if (ZEND_OBSERVER_ENABLED) {
  57889. offset += 1;
  57890. }
  57891. }
  57892. }
  57893. return (spec & SPEC_START_MASK) + offset;
  57894. }
  57895. #if (ZEND_VM_KIND != ZEND_VM_KIND_HYBRID) || !ZEND_VM_SPEC
  57896. static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op* op)
  57897. {
  57898. return zend_opcode_handlers[zend_vm_get_opcode_handler_idx(zend_spec_handlers[opcode], op)];
  57899. }
  57900. #endif
  57901. #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
  57902. static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend_op* op)
  57903. {
  57904. uint32_t spec = zend_spec_handlers[opcode];
  57905. return zend_opcode_handler_funcs[zend_vm_get_opcode_handler_idx(spec, op)];
  57906. }
  57907. #endif
  57908. ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler(zend_op* op)
  57909. {
  57910. zend_uchar opcode = zend_user_opcodes[op->opcode];
  57911. if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
  57912. if (op->op1_type < op->op2_type) {
  57913. zend_swap_operands(op);
  57914. }
  57915. }
  57916. op->handler = zend_opcode_handlers[zend_vm_get_opcode_handler_idx(zend_spec_handlers[opcode], op)];
  57917. }
  57918. 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)
  57919. {
  57920. zend_uchar opcode = zend_user_opcodes[op->opcode];
  57921. uint32_t spec = zend_spec_handlers[opcode];
  57922. switch (opcode) {
  57923. case ZEND_ADD:
  57924. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  57925. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57926. break;
  57927. }
  57928. spec = 2552 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  57929. if (op->op1_type < op->op2_type) {
  57930. zend_swap_operands(op);
  57931. }
  57932. } else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  57933. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57934. break;
  57935. }
  57936. spec = 2577 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  57937. if (op->op1_type < op->op2_type) {
  57938. zend_swap_operands(op);
  57939. }
  57940. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  57941. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57942. break;
  57943. }
  57944. spec = 2602 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  57945. if (op->op1_type < op->op2_type) {
  57946. zend_swap_operands(op);
  57947. }
  57948. }
  57949. break;
  57950. case ZEND_SUB:
  57951. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  57952. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57953. break;
  57954. }
  57955. spec = 2627 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
  57956. } else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  57957. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57958. break;
  57959. }
  57960. spec = 2652 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
  57961. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  57962. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57963. break;
  57964. }
  57965. spec = 2677 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
  57966. }
  57967. break;
  57968. case ZEND_MUL:
  57969. if (op->op1_type < op->op2_type) {
  57970. zend_swap_operands(op);
  57971. }
  57972. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  57973. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57974. break;
  57975. }
  57976. spec = 2702 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  57977. } else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  57978. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57979. break;
  57980. }
  57981. spec = 2727 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  57982. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  57983. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57984. break;
  57985. }
  57986. spec = 2752 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  57987. }
  57988. break;
  57989. case ZEND_IS_IDENTICAL:
  57990. if (op->op1_type < op->op2_type) {
  57991. zend_swap_operands(op);
  57992. }
  57993. if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  57994. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57995. break;
  57996. }
  57997. spec = 2777 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  57998. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  57999. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58000. break;
  58001. }
  58002. spec = 2852 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  58003. } else if (op->op1_type == IS_CV && (op->op2_type & (IS_CONST|IS_CV)) && !(op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) && !(op2_info & (MAY_BE_UNDEF|MAY_BE_REF))) {
  58004. spec = 3077 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  58005. }
  58006. break;
  58007. case ZEND_IS_NOT_IDENTICAL:
  58008. if (op->op1_type < op->op2_type) {
  58009. zend_swap_operands(op);
  58010. }
  58011. if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58012. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58013. break;
  58014. }
  58015. spec = 2927 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  58016. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  58017. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58018. break;
  58019. }
  58020. spec = 3002 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  58021. } else if (op->op1_type == IS_CV && (op->op2_type & (IS_CONST|IS_CV)) && !(op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) && !(op2_info & (MAY_BE_UNDEF|MAY_BE_REF))) {
  58022. spec = 3082 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  58023. }
  58024. break;
  58025. case ZEND_IS_EQUAL:
  58026. if (op->op1_type < op->op2_type) {
  58027. zend_swap_operands(op);
  58028. }
  58029. if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58030. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58031. break;
  58032. }
  58033. spec = 2777 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  58034. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  58035. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58036. break;
  58037. }
  58038. spec = 2852 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  58039. }
  58040. break;
  58041. case ZEND_IS_NOT_EQUAL:
  58042. if (op->op1_type < op->op2_type) {
  58043. zend_swap_operands(op);
  58044. }
  58045. if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58046. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58047. break;
  58048. }
  58049. spec = 2927 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  58050. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  58051. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58052. break;
  58053. }
  58054. spec = 3002 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  58055. }
  58056. break;
  58057. case ZEND_IS_SMALLER:
  58058. if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58059. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58060. break;
  58061. }
  58062. spec = 3087 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
  58063. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  58064. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58065. break;
  58066. }
  58067. spec = 3162 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
  58068. }
  58069. break;
  58070. case ZEND_IS_SMALLER_OR_EQUAL:
  58071. if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58072. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58073. break;
  58074. }
  58075. spec = 3237 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
  58076. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  58077. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58078. break;
  58079. }
  58080. spec = 3312 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
  58081. }
  58082. break;
  58083. case ZEND_QM_ASSIGN:
  58084. if (op1_info == MAY_BE_LONG) {
  58085. spec = 3399 | SPEC_RULE_OP1;
  58086. } else if (op1_info == MAY_BE_DOUBLE) {
  58087. spec = 3404 | SPEC_RULE_OP1;
  58088. } 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))))) {
  58089. spec = 3409 | SPEC_RULE_OP1;
  58090. }
  58091. break;
  58092. case ZEND_PRE_INC:
  58093. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
  58094. spec = 3387 | SPEC_RULE_RETVAL;
  58095. } else if (op1_info == MAY_BE_LONG) {
  58096. spec = 3389 | SPEC_RULE_RETVAL;
  58097. }
  58098. break;
  58099. case ZEND_PRE_DEC:
  58100. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
  58101. spec = 3391 | SPEC_RULE_RETVAL;
  58102. } else if (op1_info == MAY_BE_LONG) {
  58103. spec = 3393 | SPEC_RULE_RETVAL;
  58104. }
  58105. break;
  58106. case ZEND_POST_INC:
  58107. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
  58108. spec = 3395;
  58109. } else if (op1_info == MAY_BE_LONG) {
  58110. spec = 3396;
  58111. }
  58112. break;
  58113. case ZEND_POST_DEC:
  58114. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
  58115. spec = 3397;
  58116. } else if (op1_info == MAY_BE_LONG) {
  58117. spec = 3398;
  58118. }
  58119. break;
  58120. case ZEND_JMP:
  58121. if (OP_JMP_ADDR(op, op->op1) > op) {
  58122. spec = 2551;
  58123. }
  58124. break;
  58125. case ZEND_RECV:
  58126. if (op->op2.num == MAY_BE_ANY) {
  58127. spec = 2550;
  58128. }
  58129. break;
  58130. case ZEND_SEND_VAL:
  58131. if (op->op1_type == IS_CONST && op->op2_type == IS_UNUSED && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
  58132. spec = 3449;
  58133. }
  58134. break;
  58135. case ZEND_SEND_VAR_EX:
  58136. if (op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
  58137. spec = 3444 | SPEC_RULE_OP1;
  58138. }
  58139. break;
  58140. case ZEND_FE_FETCH_R:
  58141. if (op->op2_type == IS_CV && (op1_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY) {
  58142. spec = 3451 | SPEC_RULE_RETVAL;
  58143. }
  58144. break;
  58145. case ZEND_FETCH_DIM_R:
  58146. if (!(op2_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
  58147. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58148. break;
  58149. }
  58150. spec = 3414 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
  58151. }
  58152. break;
  58153. case ZEND_SEND_VAL_EX:
  58154. if (op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && op->op1_type == IS_CONST && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
  58155. spec = 3450;
  58156. }
  58157. break;
  58158. case ZEND_SEND_VAR:
  58159. if (op->op2_type == IS_UNUSED && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
  58160. spec = 3439 | SPEC_RULE_OP1;
  58161. }
  58162. break;
  58163. case ZEND_BW_OR:
  58164. case ZEND_BW_AND:
  58165. case ZEND_BW_XOR:
  58166. case ZEND_BOOL_XOR:
  58167. if (op->op1_type < op->op2_type) {
  58168. zend_swap_operands(op);
  58169. }
  58170. break;
  58171. case ZEND_USER_OPCODE:
  58172. if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
  58173. if (op->op1_type < op->op2_type) {
  58174. zend_swap_operands(op);
  58175. }
  58176. }
  58177. break;
  58178. default:
  58179. break;
  58180. }
  58181. op->handler = zend_opcode_handlers[zend_vm_get_opcode_handler_idx(spec, op)];
  58182. }
  58183. ZEND_API int ZEND_FASTCALL zend_vm_call_opcode_handler(zend_execute_data* ex)
  58184. {
  58185. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  58186. opcode_handler_t handler;
  58187. #endif
  58188. int ret;
  58189. #ifdef ZEND_VM_IP_GLOBAL_REG
  58190. const zend_op *orig_opline = opline;
  58191. #endif
  58192. #ifdef ZEND_VM_FP_GLOBAL_REG
  58193. zend_execute_data *orig_execute_data = execute_data;
  58194. execute_data = ex;
  58195. #else
  58196. zend_execute_data *execute_data = ex;
  58197. #endif
  58198. LOAD_OPLINE();
  58199. #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
  58200. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  58201. handler = (opcode_handler_t)zend_vm_get_opcode_handler_func(zend_user_opcodes[opline->opcode], opline);
  58202. handler(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  58203. if (EXPECTED(opline != &hybrid_halt_op)) {
  58204. #else
  58205. ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  58206. if (EXPECTED(opline)) {
  58207. #endif
  58208. ret = execute_data != ex ? (int)(execute_data->prev_execute_data != ex) + 1 : 0;
  58209. SAVE_OPLINE();
  58210. } else {
  58211. ret = -1;
  58212. }
  58213. #else
  58214. ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  58215. SAVE_OPLINE();
  58216. #endif
  58217. #ifdef ZEND_VM_FP_GLOBAL_REG
  58218. execute_data = orig_execute_data;
  58219. #endif
  58220. #ifdef ZEND_VM_IP_GLOBAL_REG
  58221. opline = orig_opline;
  58222. #endif
  58223. return ret;
  58224. }