zend_vm_execute.h 2.0 MB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728317293173031731317323173331734317353173631737317383173931740317413174231743317443174531746317473174831749317503175131752317533175431755317563175731758317593176031761317623176331764317653176631767317683176931770317713177231773317743177531776317773177831779317803178131782317833178431785317863178731788317893179031791317923179331794317953179631797317983179931800318013180231803318043180531806318073180831809318103181131812318133181431815318163181731818318193182031821318223182331824318253182631827318283182931830318313183231833318343183531836318373183831839318403184131842318433184431845318463184731848318493185031851318523185331854318553185631857318583185931860318613186231863318643186531866318673186831869318703187131872318733187431875318763187731878318793188031881318823188331884318853188631887318883188931890318913189231893318943189531896318973189831899319003190131902319033190431905319063190731908319093191031911319123191331914319153191631917319183191931920319213192231923319243192531926319273192831929319303193131932319333193431935319363193731938319393194031941319423194331944319453194631947319483194931950319513195231953319543195531956319573195831959319603196131962319633196431965319663196731968319693197031971319723197331974319753197631977319783197931980319813198231983319843198531986319873198831989319903199131992319933199431995319963199731998319993200032001320023200332004320053200632007320083200932010320113201232013320143201532016320173201832019320203202132022320233202432025320263202732028320293203032031320323203332034320353203632037320383203932040320413204232043320443204532046320473204832049320503205132052320533205432055320563205732058320593206032061320623206332064320653206632067320683206932070320713207232073320743207532076320773207832079320803208132082320833208432085320863208732088320893209032091320923209332094320953209632097320983209932100321013210232103321043210532106321073210832109321103211132112321133211432115321163211732118321193212032121321223212332124321253212632127321283212932130321313213232133321343213532136321373213832139321403214132142321433214432145321463214732148321493215032151321523215332154321553215632157321583215932160321613216232163321643216532166321673216832169321703217132172321733217432175321763217732178321793218032181321823218332184321853218632187321883218932190321913219232193321943219532196321973219832199322003220132202322033220432205322063220732208322093221032211322123221332214322153221632217322183221932220322213222232223322243222532226322273222832229322303223132232322333223432235322363223732238322393224032241322423224332244322453224632247322483224932250322513225232253322543225532256322573225832259322603226132262322633226432265322663226732268322693227032271322723227332274322753227632277322783227932280322813228232283322843228532286322873228832289322903229132292322933229432295322963229732298322993230032301323023230332304323053230632307323083230932310323113231232313323143231532316323173231832319323203232132322323233232432325323263232732328323293233032331323323233332334323353233632337323383233932340323413234232343323443234532346323473234832349323503235132352323533235432355323563235732358323593236032361323623236332364323653236632367323683236932370323713237232373323743237532376323773237832379323803238132382323833238432385323863238732388323893239032391323923239332394323953239632397323983239932400324013240232403324043240532406324073240832409324103241132412324133241432415324163241732418324193242032421324223242332424324253242632427324283242932430324313243232433324343243532436324373243832439324403244132442324433244432445324463244732448324493245032451324523245332454324553245632457324583245932460324613246232463324643246532466324673246832469324703247132472324733247432475324763247732478324793248032481324823248332484324853248632487324883248932490324913249232493324943249532496324973249832499325003250132502325033250432505325063250732508325093251032511325123251332514325153251632517325183251932520325213252232523325243252532526325273252832529325303253132532325333253432535325363253732538325393254032541325423254332544325453254632547325483254932550325513255232553325543255532556325573255832559325603256132562325633256432565325663256732568325693257032571325723257332574325753257632577325783257932580325813258232583325843258532586325873258832589325903259132592325933259432595325963259732598325993260032601326023260332604326053260632607326083260932610326113261232613326143261532616326173261832619326203262132622326233262432625326263262732628326293263032631326323263332634326353263632637326383263932640326413264232643326443264532646326473264832649326503265132652326533265432655326563265732658326593266032661326623266332664326653266632667326683266932670326713267232673326743267532676326773267832679326803268132682326833268432685326863268732688326893269032691326923269332694326953269632697326983269932700327013270232703327043270532706327073270832709327103271132712327133271432715327163271732718327193272032721327223272332724327253272632727327283272932730327313273232733327343273532736327373273832739327403274132742327433274432745327463274732748327493275032751327523275332754327553275632757327583275932760327613276232763327643276532766327673276832769327703277132772327733277432775327763277732778327793278032781327823278332784327853278632787327883278932790327913279232793327943279532796327973279832799328003280132802328033280432805328063280732808328093281032811328123281332814328153281632817328183281932820328213282232823328243282532826328273282832829328303283132832328333283432835328363283732838328393284032841328423284332844328453284632847328483284932850328513285232853328543285532856328573285832859328603286132862328633286432865328663286732868328693287032871328723287332874328753287632877328783287932880328813288232883328843288532886328873288832889328903289132892328933289432895328963289732898328993290032901329023290332904329053290632907329083290932910329113291232913329143291532916329173291832919329203292132922329233292432925329263292732928329293293032931329323293332934329353293632937329383293932940329413294232943329443294532946329473294832949329503295132952329533295432955329563295732958329593296032961329623296332964329653296632967329683296932970329713297232973329743297532976329773297832979329803298132982329833298432985329863298732988329893299032991329923299332994329953299632997329983299933000330013300233003330043300533006330073300833009330103301133012330133301433015330163301733018330193302033021330223302333024330253302633027330283302933030330313303233033330343303533036330373303833039330403304133042330433304433045330463304733048330493305033051330523305333054330553305633057330583305933060330613306233063330643306533066330673306833069330703307133072330733307433075330763307733078330793308033081330823308333084330853308633087330883308933090330913309233093330943309533096330973309833099331003310133102331033310433105331063310733108331093311033111331123311333114331153311633117331183311933120331213312233123331243312533126331273312833129331303313133132331333313433135331363313733138331393314033141331423314333144331453314633147331483314933150331513315233153331543315533156331573315833159331603316133162331633316433165331663316733168331693317033171331723317333174331753317633177331783317933180331813318233183331843318533186331873318833189331903319133192331933319433195331963319733198331993320033201332023320333204332053320633207332083320933210332113321233213332143321533216332173321833219332203322133222332233322433225332263322733228332293323033231332323323333234332353323633237332383323933240332413324233243332443324533246332473324833249332503325133252332533325433255332563325733258332593326033261332623326333264332653326633267332683326933270332713327233273332743327533276332773327833279332803328133282332833328433285332863328733288332893329033291332923329333294332953329633297332983329933300333013330233303333043330533306333073330833309333103331133312333133331433315333163331733318333193332033321333223332333324333253332633327333283332933330333313333233333333343333533336333373333833339333403334133342333433334433345333463334733348333493335033351333523335333354333553335633357333583335933360333613336233363333643336533366333673336833369333703337133372333733337433375333763337733378333793338033381333823338333384333853338633387333883338933390333913339233393333943339533396333973339833399334003340133402334033340433405334063340733408334093341033411334123341333414334153341633417334183341933420334213342233423334243342533426334273342833429334303343133432334333343433435334363343733438334393344033441334423344333444334453344633447334483344933450334513345233453334543345533456334573345833459334603346133462334633346433465334663346733468334693347033471334723347333474334753347633477334783347933480334813348233483334843348533486334873348833489334903349133492334933349433495334963349733498334993350033501335023350333504335053350633507335083350933510335113351233513335143351533516335173351833519335203352133522335233352433525335263352733528335293353033531335323353333534335353353633537335383353933540335413354233543335443354533546335473354833549335503355133552335533355433555335563355733558335593356033561335623356333564335653356633567335683356933570335713357233573335743357533576335773357833579335803358133582335833358433585335863358733588335893359033591335923359333594335953359633597335983359933600336013360233603336043360533606336073360833609336103361133612336133361433615336163361733618336193362033621336223362333624336253362633627336283362933630336313363233633336343363533636336373363833639336403364133642336433364433645336463364733648336493365033651336523365333654336553365633657336583365933660336613366233663336643366533666336673366833669336703367133672336733367433675336763367733678336793368033681336823368333684336853368633687336883368933690336913369233693336943369533696336973369833699337003370133702337033370433705337063370733708337093371033711337123371333714337153371633717337183371933720337213372233723337243372533726337273372833729337303373133732337333373433735337363373733738337393374033741337423374333744337453374633747337483374933750337513375233753337543375533756337573375833759337603376133762337633376433765337663376733768337693377033771337723377333774337753377633777337783377933780337813378233783337843378533786337873378833789337903379133792337933379433795337963379733798337993380033801338023380333804338053380633807338083380933810338113381233813338143381533816338173381833819338203382133822338233382433825338263382733828338293383033831338323383333834338353383633837338383383933840338413384233843338443384533846338473384833849338503385133852338533385433855338563385733858338593386033861338623386333864338653386633867338683386933870338713387233873338743387533876338773387833879338803388133882338833388433885338863388733888338893389033891338923389333894338953389633897338983389933900339013390233903339043390533906339073390833909339103391133912339133391433915339163391733918339193392033921339223392333924339253392633927339283392933930339313393233933339343393533936339373393833939339403394133942339433394433945339463394733948339493395033951339523395333954339553395633957339583395933960339613396233963339643396533966339673396833969339703397133972339733397433975339763397733978339793398033981339823398333984339853398633987339883398933990339913399233993339943399533996339973399833999340003400134002340033400434005340063400734008340093401034011340123401334014340153401634017340183401934020340213402234023340243402534026340273402834029340303403134032340333403434035340363403734038340393404034041340423404334044340453404634047340483404934050340513405234053340543405534056340573405834059340603406134062340633406434065340663406734068340693407034071340723407334074340753407634077340783407934080340813408234083340843408534086340873408834089340903409134092340933409434095340963409734098340993410034101341023410334104341053410634107341083410934110341113411234113341143411534116341173411834119341203412134122341233412434125341263412734128341293413034131341323413334134341353413634137341383413934140341413414234143341443414534146341473414834149341503415134152341533415434155341563415734158341593416034161341623416334164341653416634167341683416934170341713417234173341743417534176341773417834179341803418134182341833418434185341863418734188341893419034191341923419334194341953419634197341983419934200342013420234203342043420534206342073420834209342103421134212342133421434215342163421734218342193422034221342223422334224342253422634227342283422934230342313423234233342343423534236342373423834239342403424134242342433424434245342463424734248342493425034251342523425334254342553425634257342583425934260342613426234263342643426534266342673426834269342703427134272342733427434275342763427734278342793428034281342823428334284342853428634287342883428934290342913429234293342943429534296342973429834299343003430134302343033430434305343063430734308343093431034311343123431334314343153431634317343183431934320343213432234323343243432534326343273432834329343303433134332343333433434335343363433734338343393434034341343423434334344343453434634347343483434934350343513435234353343543435534356343573435834359343603436134362343633436434365343663436734368343693437034371343723437334374343753437634377343783437934380343813438234383343843438534386343873438834389343903439134392343933439434395343963439734398343993440034401344023440334404344053440634407344083440934410344113441234413344143441534416344173441834419344203442134422344233442434425344263442734428344293443034431344323443334434344353443634437344383443934440344413444234443344443444534446344473444834449344503445134452344533445434455344563445734458344593446034461344623446334464344653446634467344683446934470344713447234473344743447534476344773447834479344803448134482344833448434485344863448734488344893449034491344923449334494344953449634497344983449934500345013450234503345043450534506345073450834509345103451134512345133451434515345163451734518345193452034521345223452334524345253452634527345283452934530345313453234533345343453534536345373453834539345403454134542345433454434545345463454734548345493455034551345523455334554345553455634557345583455934560345613456234563345643456534566345673456834569345703457134572345733457434575345763457734578345793458034581345823458334584345853458634587345883458934590345913459234593345943459534596345973459834599346003460134602346033460434605346063460734608346093461034611346123461334614346153461634617346183461934620346213462234623346243462534626346273462834629346303463134632346333463434635346363463734638346393464034641346423464334644346453464634647346483464934650346513465234653346543465534656346573465834659346603466134662346633466434665346663466734668346693467034671346723467334674346753467634677346783467934680346813468234683346843468534686346873468834689346903469134692346933469434695346963469734698346993470034701347023470334704347053470634707347083470934710347113471234713347143471534716347173471834719347203472134722347233472434725347263472734728347293473034731347323473334734347353473634737347383473934740347413474234743347443474534746347473474834749347503475134752347533475434755347563475734758347593476034761347623476334764347653476634767347683476934770347713477234773347743477534776347773477834779347803478134782347833478434785347863478734788347893479034791347923479334794347953479634797347983479934800348013480234803348043480534806348073480834809348103481134812348133481434815348163481734818348193482034821348223482334824348253482634827348283482934830348313483234833348343483534836348373483834839348403484134842348433484434845348463484734848348493485034851348523485334854348553485634857348583485934860348613486234863348643486534866348673486834869348703487134872348733487434875348763487734878348793488034881348823488334884348853488634887348883488934890348913489234893348943489534896348973489834899349003490134902349033490434905349063490734908349093491034911349123491334914349153491634917349183491934920349213492234923349243492534926349273492834929349303493134932349333493434935349363493734938349393494034941349423494334944349453494634947349483494934950349513495234953349543495534956349573495834959349603496134962349633496434965349663496734968349693497034971349723497334974349753497634977349783497934980349813498234983349843498534986349873498834989349903499134992349933499434995349963499734998349993500035001350023500335004350053500635007350083500935010350113501235013350143501535016350173501835019350203502135022350233502435025350263502735028350293503035031350323503335034350353503635037350383503935040350413504235043350443504535046350473504835049350503505135052350533505435055350563505735058350593506035061350623506335064350653506635067350683506935070350713507235073350743507535076350773507835079350803508135082350833508435085350863508735088350893509035091350923509335094350953509635097350983509935100351013510235103351043510535106351073510835109351103511135112351133511435115351163511735118351193512035121351223512335124351253512635127351283512935130351313513235133351343513535136351373513835139351403514135142351433514435145351463514735148351493515035151351523515335154351553515635157351583515935160351613516235163351643516535166351673516835169351703517135172351733517435175351763517735178351793518035181351823518335184351853518635187351883518935190351913519235193351943519535196351973519835199352003520135202352033520435205352063520735208352093521035211352123521335214352153521635217352183521935220352213522235223352243522535226352273522835229352303523135232352333523435235352363523735238352393524035241352423524335244352453524635247352483524935250352513525235253352543525535256352573525835259352603526135262352633526435265352663526735268352693527035271352723527335274352753527635277352783527935280352813528235283352843528535286352873528835289352903529135292352933529435295352963529735298352993530035301353023530335304353053530635307353083530935310353113531235313353143531535316353173531835319353203532135322353233532435325353263532735328353293533035331353323533335334353353533635337353383533935340353413534235343353443534535346353473534835349353503535135352353533535435355353563535735358353593536035361353623536335364353653536635367353683536935370353713537235373353743537535376353773537835379353803538135382353833538435385353863538735388353893539035391353923539335394353953539635397353983539935400354013540235403354043540535406354073540835409354103541135412354133541435415354163541735418354193542035421354223542335424354253542635427354283542935430354313543235433354343543535436354373543835439354403544135442354433544435445354463544735448354493545035451354523545335454354553545635457354583545935460354613546235463354643546535466354673546835469354703547135472354733547435475354763547735478354793548035481354823548335484354853548635487354883548935490354913549235493354943549535496354973549835499355003550135502355033550435505355063550735508355093551035511355123551335514355153551635517355183551935520355213552235523355243552535526355273552835529355303553135532355333553435535355363553735538355393554035541355423554335544355453554635547355483554935550355513555235553355543555535556355573555835559355603556135562355633556435565355663556735568355693557035571355723557335574355753557635577355783557935580355813558235583355843558535586355873558835589355903559135592355933559435595355963559735598355993560035601356023560335604356053560635607356083560935610356113561235613356143561535616356173561835619356203562135622356233562435625356263562735628356293563035631356323563335634356353563635637356383563935640356413564235643356443564535646356473564835649356503565135652356533565435655356563565735658356593566035661356623566335664356653566635667356683566935670356713567235673356743567535676356773567835679356803568135682356833568435685356863568735688356893569035691356923569335694356953569635697356983569935700357013570235703357043570535706357073570835709357103571135712357133571435715357163571735718357193572035721357223572335724357253572635727357283572935730357313573235733357343573535736357373573835739357403574135742357433574435745357463574735748357493575035751357523575335754357553575635757357583575935760357613576235763357643576535766357673576835769357703577135772357733577435775357763577735778357793578035781357823578335784357853578635787357883578935790357913579235793357943579535796357973579835799358003580135802358033580435805358063580735808358093581035811358123581335814358153581635817358183581935820358213582235823358243582535826358273582835829358303583135832358333583435835358363583735838358393584035841358423584335844358453584635847358483584935850358513585235853358543585535856358573585835859358603586135862358633586435865358663586735868358693587035871358723587335874358753587635877358783587935880358813588235883358843588535886358873588835889358903589135892358933589435895358963589735898358993590035901359023590335904359053590635907359083590935910359113591235913359143591535916359173591835919359203592135922359233592435925359263592735928359293593035931359323593335934359353593635937359383593935940359413594235943359443594535946359473594835949359503595135952359533595435955359563595735958359593596035961359623596335964359653596635967359683596935970359713597235973359743597535976359773597835979359803598135982359833598435985359863598735988359893599035991359923599335994359953599635997359983599936000360013600236003360043600536006360073600836009360103601136012360133601436015360163601736018360193602036021360223602336024360253602636027360283602936030360313603236033360343603536036360373603836039360403604136042360433604436045360463604736048360493605036051360523605336054360553605636057360583605936060360613606236063360643606536066360673606836069360703607136072360733607436075360763607736078360793608036081360823608336084360853608636087360883608936090360913609236093360943609536096360973609836099361003610136102361033610436105361063610736108361093611036111361123611336114361153611636117361183611936120361213612236123361243612536126361273612836129361303613136132361333613436135361363613736138361393614036141361423614336144361453614636147361483614936150361513615236153361543615536156361573615836159361603616136162361633616436165361663616736168361693617036171361723617336174361753617636177361783617936180361813618236183361843618536186361873618836189361903619136192361933619436195361963619736198361993620036201362023620336204362053620636207362083620936210362113621236213362143621536216362173621836219362203622136222362233622436225362263622736228362293623036231362323623336234362353623636237362383623936240362413624236243362443624536246362473624836249362503625136252362533625436255362563625736258362593626036261362623626336264362653626636267362683626936270362713627236273362743627536276362773627836279362803628136282362833628436285362863628736288362893629036291362923629336294362953629636297362983629936300363013630236303363043630536306363073630836309363103631136312363133631436315363163631736318363193632036321363223632336324363253632636327363283632936330363313633236333363343633536336363373633836339363403634136342363433634436345363463634736348363493635036351363523635336354363553635636357363583635936360363613636236363363643636536366363673636836369363703637136372363733637436375363763637736378363793638036381363823638336384363853638636387363883638936390363913639236393363943639536396363973639836399364003640136402364033640436405364063640736408364093641036411364123641336414364153641636417364183641936420364213642236423364243642536426364273642836429364303643136432364333643436435364363643736438364393644036441364423644336444364453644636447364483644936450364513645236453364543645536456364573645836459364603646136462364633646436465364663646736468364693647036471364723647336474364753647636477364783647936480364813648236483364843648536486364873648836489364903649136492364933649436495364963649736498364993650036501365023650336504365053650636507365083650936510365113651236513365143651536516365173651836519365203652136522365233652436525365263652736528365293653036531365323653336534365353653636537365383653936540365413654236543365443654536546365473654836549365503655136552365533655436555365563655736558365593656036561365623656336564365653656636567365683656936570365713657236573365743657536576365773657836579365803658136582365833658436585365863658736588365893659036591365923659336594365953659636597365983659936600366013660236603366043660536606366073660836609366103661136612366133661436615366163661736618366193662036621366223662336624366253662636627366283662936630366313663236633366343663536636366373663836639366403664136642366433664436645366463664736648366493665036651366523665336654366553665636657366583665936660366613666236663366643666536666366673666836669366703667136672366733667436675366763667736678366793668036681366823668336684366853668636687366883668936690366913669236693366943669536696366973669836699367003670136702367033670436705367063670736708367093671036711367123671336714367153671636717367183671936720367213672236723367243672536726367273672836729367303673136732367333673436735367363673736738367393674036741367423674336744367453674636747367483674936750367513675236753367543675536756367573675836759367603676136762367633676436765367663676736768367693677036771367723677336774367753677636777367783677936780367813678236783367843678536786367873678836789367903679136792367933679436795367963679736798367993680036801368023680336804368053680636807368083680936810368113681236813368143681536816368173681836819368203682136822368233682436825368263682736828368293683036831368323683336834368353683636837368383683936840368413684236843368443684536846368473684836849368503685136852368533685436855368563685736858368593686036861368623686336864368653686636867368683686936870368713687236873368743687536876368773687836879368803688136882368833688436885368863688736888368893689036891368923689336894368953689636897368983689936900369013690236903369043690536906369073690836909369103691136912369133691436915369163691736918369193692036921369223692336924369253692636927369283692936930369313693236933369343693536936369373693836939369403694136942369433694436945369463694736948369493695036951369523695336954369553695636957369583695936960369613696236963369643696536966369673696836969369703697136972369733697436975369763697736978369793698036981369823698336984369853698636987369883698936990369913699236993369943699536996369973699836999370003700137002370033700437005370063700737008370093701037011370123701337014370153701637017370183701937020370213702237023370243702537026370273702837029370303703137032370333703437035370363703737038370393704037041370423704337044370453704637047370483704937050370513705237053370543705537056370573705837059370603706137062370633706437065370663706737068370693707037071370723707337074370753707637077370783707937080370813708237083370843708537086370873708837089370903709137092370933709437095370963709737098370993710037101371023710337104371053710637107371083710937110371113711237113371143711537116371173711837119371203712137122371233712437125371263712737128371293713037131371323713337134371353713637137371383713937140371413714237143371443714537146371473714837149371503715137152371533715437155371563715737158371593716037161371623716337164371653716637167371683716937170371713717237173371743717537176371773717837179371803718137182371833718437185371863718737188371893719037191371923719337194371953719637197371983719937200372013720237203372043720537206372073720837209372103721137212372133721437215372163721737218372193722037221372223722337224372253722637227372283722937230372313723237233372343723537236372373723837239372403724137242372433724437245372463724737248372493725037251372523725337254372553725637257372583725937260372613726237263372643726537266372673726837269372703727137272372733727437275372763727737278372793728037281372823728337284372853728637287372883728937290372913729237293372943729537296372973729837299373003730137302373033730437305373063730737308373093731037311373123731337314373153731637317373183731937320373213732237323373243732537326373273732837329373303733137332373333733437335373363733737338373393734037341373423734337344373453734637347373483734937350373513735237353373543735537356373573735837359373603736137362373633736437365373663736737368373693737037371373723737337374373753737637377373783737937380373813738237383373843738537386373873738837389373903739137392373933739437395373963739737398373993740037401374023740337404374053740637407374083740937410374113741237413374143741537416374173741837419374203742137422374233742437425374263742737428374293743037431374323743337434374353743637437374383743937440374413744237443374443744537446374473744837449374503745137452374533745437455374563745737458374593746037461374623746337464374653746637467374683746937470374713747237473374743747537476374773747837479374803748137482374833748437485374863748737488374893749037491374923749337494374953749637497374983749937500375013750237503375043750537506375073750837509375103751137512375133751437515375163751737518375193752037521375223752337524375253752637527375283752937530375313753237533375343753537536375373753837539375403754137542375433754437545375463754737548375493755037551375523755337554375553755637557375583755937560375613756237563375643756537566375673756837569375703757137572375733757437575375763757737578375793758037581375823758337584375853758637587375883758937590375913759237593375943759537596375973759837599376003760137602376033760437605376063760737608376093761037611376123761337614376153761637617376183761937620376213762237623376243762537626376273762837629376303763137632376333763437635376363763737638376393764037641376423764337644376453764637647376483764937650376513765237653376543765537656376573765837659376603766137662376633766437665376663766737668376693767037671376723767337674376753767637677376783767937680376813768237683376843768537686376873768837689376903769137692376933769437695376963769737698376993770037701377023770337704377053770637707377083770937710377113771237713377143771537716377173771837719377203772137722377233772437725377263772737728377293773037731377323773337734377353773637737377383773937740377413774237743377443774537746377473774837749377503775137752377533775437755377563775737758377593776037761377623776337764377653776637767377683776937770377713777237773377743777537776377773777837779377803778137782377833778437785377863778737788377893779037791377923779337794377953779637797377983779937800378013780237803378043780537806378073780837809378103781137812378133781437815378163781737818378193782037821378223782337824378253782637827378283782937830378313783237833378343783537836378373783837839378403784137842378433784437845378463784737848378493785037851378523785337854378553785637857378583785937860378613786237863378643786537866378673786837869378703787137872378733787437875378763787737878378793788037881378823788337884378853788637887378883788937890378913789237893378943789537896378973789837899379003790137902379033790437905379063790737908379093791037911379123791337914379153791637917379183791937920379213792237923379243792537926379273792837929379303793137932379333793437935379363793737938379393794037941379423794337944379453794637947379483794937950379513795237953379543795537956379573795837959379603796137962379633796437965379663796737968379693797037971379723797337974379753797637977379783797937980379813798237983379843798537986379873798837989379903799137992379933799437995379963799737998379993800038001380023800338004380053800638007380083800938010380113801238013380143801538016380173801838019380203802138022380233802438025380263802738028380293803038031380323803338034380353803638037380383803938040380413804238043380443804538046380473804838049380503805138052380533805438055380563805738058380593806038061380623806338064380653806638067380683806938070380713807238073380743807538076380773807838079380803808138082380833808438085380863808738088380893809038091380923809338094380953809638097380983809938100381013810238103381043810538106381073810838109381103811138112381133811438115381163811738118381193812038121381223812338124381253812638127381283812938130381313813238133381343813538136381373813838139381403814138142381433814438145381463814738148381493815038151381523815338154381553815638157381583815938160381613816238163381643816538166381673816838169381703817138172381733817438175381763817738178381793818038181381823818338184381853818638187381883818938190381913819238193381943819538196381973819838199382003820138202382033820438205382063820738208382093821038211382123821338214382153821638217382183821938220382213822238223382243822538226382273822838229382303823138232382333823438235382363823738238382393824038241382423824338244382453824638247382483824938250382513825238253382543825538256382573825838259382603826138262382633826438265382663826738268382693827038271382723827338274382753827638277382783827938280382813828238283382843828538286382873828838289382903829138292382933829438295382963829738298382993830038301383023830338304383053830638307383083830938310383113831238313383143831538316383173831838319383203832138322383233832438325383263832738328383293833038331383323833338334383353833638337383383833938340383413834238343383443834538346383473834838349383503835138352383533835438355383563835738358383593836038361383623836338364383653836638367383683836938370383713837238373383743837538376383773837838379383803838138382383833838438385383863838738388383893839038391383923839338394383953839638397383983839938400384013840238403384043840538406384073840838409384103841138412384133841438415384163841738418384193842038421384223842338424384253842638427384283842938430384313843238433384343843538436384373843838439384403844138442384433844438445384463844738448384493845038451384523845338454384553845638457384583845938460384613846238463384643846538466384673846838469384703847138472384733847438475384763847738478384793848038481384823848338484384853848638487384883848938490384913849238493384943849538496384973849838499385003850138502385033850438505385063850738508385093851038511385123851338514385153851638517385183851938520385213852238523385243852538526385273852838529385303853138532385333853438535385363853738538385393854038541385423854338544385453854638547385483854938550385513855238553385543855538556385573855838559385603856138562385633856438565385663856738568385693857038571385723857338574385753857638577385783857938580385813858238583385843858538586385873858838589385903859138592385933859438595385963859738598385993860038601386023860338604386053860638607386083860938610386113861238613386143861538616386173861838619386203862138622386233862438625386263862738628386293863038631386323863338634386353863638637386383863938640386413864238643386443864538646386473864838649386503865138652386533865438655386563865738658386593866038661386623866338664386653866638667386683866938670386713867238673386743867538676386773867838679386803868138682386833868438685386863868738688386893869038691386923869338694386953869638697386983869938700387013870238703387043870538706387073870838709387103871138712387133871438715387163871738718387193872038721387223872338724387253872638727387283872938730387313873238733387343873538736387373873838739387403874138742387433874438745387463874738748387493875038751387523875338754387553875638757387583875938760387613876238763387643876538766387673876838769387703877138772387733877438775387763877738778387793878038781387823878338784387853878638787387883878938790387913879238793387943879538796387973879838799388003880138802388033880438805388063880738808388093881038811388123881338814388153881638817388183881938820388213882238823388243882538826388273882838829388303883138832388333883438835388363883738838388393884038841388423884338844388453884638847388483884938850388513885238853388543885538856388573885838859388603886138862388633886438865388663886738868388693887038871388723887338874388753887638877388783887938880388813888238883388843888538886388873888838889388903889138892388933889438895388963889738898388993890038901389023890338904389053890638907389083890938910389113891238913389143891538916389173891838919389203892138922389233892438925389263892738928389293893038931389323893338934389353893638937389383893938940389413894238943389443894538946389473894838949389503895138952389533895438955389563895738958389593896038961389623896338964389653896638967389683896938970389713897238973389743897538976389773897838979389803898138982389833898438985389863898738988389893899038991389923899338994389953899638997389983899939000390013900239003390043900539006390073900839009390103901139012390133901439015390163901739018390193902039021390223902339024390253902639027390283902939030390313903239033390343903539036390373903839039390403904139042390433904439045390463904739048390493905039051390523905339054390553905639057390583905939060390613906239063390643906539066390673906839069390703907139072390733907439075390763907739078390793908039081390823908339084390853908639087390883908939090390913909239093390943909539096390973909839099391003910139102391033910439105391063910739108391093911039111391123911339114391153911639117391183911939120391213912239123391243912539126391273912839129391303913139132391333913439135391363913739138391393914039141391423914339144391453914639147391483914939150391513915239153391543915539156391573915839159391603916139162391633916439165391663916739168391693917039171391723917339174391753917639177391783917939180391813918239183391843918539186391873918839189391903919139192391933919439195391963919739198391993920039201392023920339204392053920639207392083920939210392113921239213392143921539216392173921839219392203922139222392233922439225392263922739228392293923039231392323923339234392353923639237392383923939240392413924239243392443924539246392473924839249392503925139252392533925439255392563925739258392593926039261392623926339264392653926639267392683926939270392713927239273392743927539276392773927839279392803928139282392833928439285392863928739288392893929039291392923929339294392953929639297392983929939300393013930239303393043930539306393073930839309393103931139312393133931439315393163931739318393193932039321393223932339324393253932639327393283932939330393313933239333393343933539336393373933839339393403934139342393433934439345393463934739348393493935039351393523935339354393553935639357393583935939360393613936239363393643936539366393673936839369393703937139372393733937439375393763937739378393793938039381393823938339384393853938639387393883938939390393913939239393393943939539396393973939839399394003940139402394033940439405394063940739408394093941039411394123941339414394153941639417394183941939420394213942239423394243942539426394273942839429394303943139432394333943439435394363943739438394393944039441394423944339444394453944639447394483944939450394513945239453394543945539456394573945839459394603946139462394633946439465394663946739468394693947039471394723947339474394753947639477394783947939480394813948239483394843948539486394873948839489394903949139492394933949439495394963949739498394993950039501395023950339504395053950639507395083950939510395113951239513395143951539516395173951839519395203952139522395233952439525395263952739528395293953039531395323953339534395353953639537395383953939540395413954239543395443954539546395473954839549395503955139552395533955439555395563955739558395593956039561395623956339564395653956639567395683956939570395713957239573395743957539576395773957839579395803958139582395833958439585395863958739588395893959039591395923959339594395953959639597395983959939600396013960239603396043960539606396073960839609396103961139612396133961439615396163961739618396193962039621396223962339624396253962639627396283962939630396313963239633396343963539636396373963839639396403964139642396433964439645396463964739648396493965039651396523965339654396553965639657396583965939660396613966239663396643966539666396673966839669396703967139672396733967439675396763967739678396793968039681396823968339684396853968639687396883968939690396913969239693396943969539696396973969839699397003970139702397033970439705397063970739708397093971039711397123971339714397153971639717397183971939720397213972239723397243972539726397273972839729397303973139732397333973439735397363973739738397393974039741397423974339744397453974639747397483974939750397513975239753397543975539756397573975839759397603976139762397633976439765397663976739768397693977039771397723977339774397753977639777397783977939780397813978239783397843978539786397873978839789397903979139792397933979439795397963979739798397993980039801398023980339804398053980639807398083980939810398113981239813398143981539816398173981839819398203982139822398233982439825398263982739828398293983039831398323983339834398353983639837398383983939840398413984239843398443984539846398473984839849398503985139852398533985439855398563985739858398593986039861398623986339864398653986639867398683986939870398713987239873398743987539876398773987839879398803988139882398833988439885398863988739888398893989039891398923989339894398953989639897398983989939900399013990239903399043990539906399073990839909399103991139912399133991439915399163991739918399193992039921399223992339924399253992639927399283992939930399313993239933399343993539936399373993839939399403994139942399433994439945399463994739948399493995039951399523995339954399553995639957399583995939960399613996239963399643996539966399673996839969399703997139972399733997439975399763997739978399793998039981399823998339984399853998639987399883998939990399913999239993399943999539996399973999839999400004000140002400034000440005400064000740008400094001040011400124001340014400154001640017400184001940020400214002240023400244002540026400274002840029400304003140032400334003440035400364003740038400394004040041400424004340044400454004640047400484004940050400514005240053400544005540056400574005840059400604006140062400634006440065400664006740068400694007040071400724007340074400754007640077400784007940080400814008240083400844008540086400874008840089400904009140092400934009440095400964009740098400994010040101401024010340104401054010640107401084010940110401114011240113401144011540116401174011840119401204012140122401234012440125401264012740128401294013040131401324013340134401354013640137401384013940140401414014240143401444014540146401474014840149401504015140152401534015440155401564015740158401594016040161401624016340164401654016640167401684016940170401714017240173401744017540176401774017840179401804018140182401834018440185401864018740188401894019040191401924019340194401954019640197401984019940200402014020240203402044020540206402074020840209402104021140212402134021440215402164021740218402194022040221402224022340224402254022640227402284022940230402314023240233402344023540236402374023840239402404024140242402434024440245402464024740248402494025040251402524025340254402554025640257402584025940260402614026240263402644026540266402674026840269402704027140272402734027440275402764027740278402794028040281402824028340284402854028640287402884028940290402914029240293402944029540296402974029840299403004030140302403034030440305403064030740308403094031040311403124031340314403154031640317403184031940320403214032240323403244032540326403274032840329403304033140332403334033440335403364033740338403394034040341403424034340344403454034640347403484034940350403514035240353403544035540356403574035840359403604036140362403634036440365403664036740368403694037040371403724037340374403754037640377403784037940380403814038240383403844038540386403874038840389403904039140392403934039440395403964039740398403994040040401404024040340404404054040640407404084040940410404114041240413404144041540416404174041840419404204042140422404234042440425404264042740428404294043040431404324043340434404354043640437404384043940440404414044240443404444044540446404474044840449404504045140452404534045440455404564045740458404594046040461404624046340464404654046640467404684046940470404714047240473404744047540476404774047840479404804048140482404834048440485404864048740488404894049040491404924049340494404954049640497404984049940500405014050240503405044050540506405074050840509405104051140512405134051440515405164051740518405194052040521405224052340524405254052640527405284052940530405314053240533405344053540536405374053840539405404054140542405434054440545405464054740548405494055040551405524055340554405554055640557405584055940560405614056240563405644056540566405674056840569405704057140572405734057440575405764057740578405794058040581405824058340584405854058640587405884058940590405914059240593405944059540596405974059840599406004060140602406034060440605406064060740608406094061040611406124061340614406154061640617406184061940620406214062240623406244062540626406274062840629406304063140632406334063440635406364063740638406394064040641406424064340644406454064640647406484064940650406514065240653406544065540656406574065840659406604066140662406634066440665406664066740668406694067040671406724067340674406754067640677406784067940680406814068240683406844068540686406874068840689406904069140692406934069440695406964069740698406994070040701407024070340704407054070640707407084070940710407114071240713407144071540716407174071840719407204072140722407234072440725407264072740728407294073040731407324073340734407354073640737407384073940740407414074240743407444074540746407474074840749407504075140752407534075440755407564075740758407594076040761407624076340764407654076640767407684076940770407714077240773407744077540776407774077840779407804078140782407834078440785407864078740788407894079040791407924079340794407954079640797407984079940800408014080240803408044080540806408074080840809408104081140812408134081440815408164081740818408194082040821408224082340824408254082640827408284082940830408314083240833408344083540836408374083840839408404084140842408434084440845408464084740848408494085040851408524085340854408554085640857408584085940860408614086240863408644086540866408674086840869408704087140872408734087440875408764087740878408794088040881408824088340884408854088640887408884088940890408914089240893408944089540896408974089840899409004090140902409034090440905409064090740908409094091040911409124091340914409154091640917409184091940920409214092240923409244092540926409274092840929409304093140932409334093440935409364093740938409394094040941409424094340944409454094640947409484094940950409514095240953409544095540956409574095840959409604096140962409634096440965409664096740968409694097040971409724097340974409754097640977409784097940980409814098240983409844098540986409874098840989409904099140992409934099440995409964099740998409994100041001410024100341004410054100641007410084100941010410114101241013410144101541016410174101841019410204102141022410234102441025410264102741028410294103041031410324103341034410354103641037410384103941040410414104241043410444104541046410474104841049410504105141052410534105441055410564105741058410594106041061410624106341064410654106641067410684106941070410714107241073410744107541076410774107841079410804108141082410834108441085410864108741088410894109041091410924109341094410954109641097410984109941100411014110241103411044110541106411074110841109411104111141112411134111441115411164111741118411194112041121411224112341124411254112641127411284112941130411314113241133411344113541136411374113841139411404114141142411434114441145411464114741148411494115041151411524115341154411554115641157411584115941160411614116241163411644116541166411674116841169411704117141172411734117441175411764117741178411794118041181411824118341184411854118641187411884118941190411914119241193411944119541196411974119841199412004120141202412034120441205412064120741208412094121041211412124121341214412154121641217412184121941220412214122241223412244122541226412274122841229412304123141232412334123441235412364123741238412394124041241412424124341244412454124641247412484124941250412514125241253412544125541256412574125841259412604126141262412634126441265412664126741268412694127041271412724127341274412754127641277412784127941280412814128241283412844128541286412874128841289412904129141292412934129441295412964129741298412994130041301413024130341304413054130641307413084130941310413114131241313413144131541316413174131841319413204132141322413234132441325413264132741328413294133041331413324133341334413354133641337413384133941340413414134241343413444134541346413474134841349413504135141352413534135441355413564135741358413594136041361413624136341364413654136641367413684136941370413714137241373413744137541376413774137841379413804138141382413834138441385413864138741388413894139041391413924139341394413954139641397413984139941400414014140241403414044140541406414074140841409414104141141412414134141441415414164141741418414194142041421414224142341424414254142641427414284142941430414314143241433414344143541436414374143841439414404144141442414434144441445414464144741448414494145041451414524145341454414554145641457414584145941460414614146241463414644146541466414674146841469414704147141472414734147441475414764147741478414794148041481414824148341484414854148641487414884148941490414914149241493414944149541496414974149841499415004150141502415034150441505415064150741508415094151041511415124151341514415154151641517415184151941520415214152241523415244152541526415274152841529415304153141532415334153441535415364153741538415394154041541415424154341544415454154641547415484154941550415514155241553415544155541556415574155841559415604156141562415634156441565415664156741568415694157041571415724157341574415754157641577415784157941580415814158241583415844158541586415874158841589415904159141592415934159441595415964159741598415994160041601416024160341604416054160641607416084160941610416114161241613416144161541616416174161841619416204162141622416234162441625416264162741628416294163041631416324163341634416354163641637416384163941640416414164241643416444164541646416474164841649416504165141652416534165441655416564165741658416594166041661416624166341664416654166641667416684166941670416714167241673416744167541676416774167841679416804168141682416834168441685416864168741688416894169041691416924169341694416954169641697416984169941700417014170241703417044170541706417074170841709417104171141712417134171441715417164171741718417194172041721417224172341724417254172641727417284172941730417314173241733417344173541736417374173841739417404174141742417434174441745417464174741748417494175041751417524175341754417554175641757417584175941760417614176241763417644176541766417674176841769417704177141772417734177441775417764177741778417794178041781417824178341784417854178641787417884178941790417914179241793417944179541796417974179841799418004180141802418034180441805418064180741808418094181041811418124181341814418154181641817418184181941820418214182241823418244182541826418274182841829418304183141832418334183441835418364183741838418394184041841418424184341844418454184641847418484184941850418514185241853418544185541856418574185841859418604186141862418634186441865418664186741868418694187041871418724187341874418754187641877418784187941880418814188241883418844188541886418874188841889418904189141892418934189441895418964189741898418994190041901419024190341904419054190641907419084190941910419114191241913419144191541916419174191841919419204192141922419234192441925419264192741928419294193041931419324193341934419354193641937419384193941940419414194241943419444194541946419474194841949419504195141952419534195441955419564195741958419594196041961419624196341964419654196641967419684196941970419714197241973419744197541976419774197841979419804198141982419834198441985419864198741988419894199041991419924199341994419954199641997419984199942000420014200242003420044200542006420074200842009420104201142012420134201442015420164201742018420194202042021420224202342024420254202642027420284202942030420314203242033420344203542036420374203842039420404204142042420434204442045420464204742048420494205042051420524205342054420554205642057420584205942060420614206242063420644206542066420674206842069420704207142072420734207442075420764207742078420794208042081420824208342084420854208642087420884208942090420914209242093420944209542096420974209842099421004210142102421034210442105421064210742108421094211042111421124211342114421154211642117421184211942120421214212242123421244212542126421274212842129421304213142132421334213442135421364213742138421394214042141421424214342144421454214642147421484214942150421514215242153421544215542156421574215842159421604216142162421634216442165421664216742168421694217042171421724217342174421754217642177421784217942180421814218242183421844218542186421874218842189421904219142192421934219442195421964219742198421994220042201422024220342204422054220642207422084220942210422114221242213422144221542216422174221842219422204222142222422234222442225422264222742228422294223042231422324223342234422354223642237422384223942240422414224242243422444224542246422474224842249422504225142252422534225442255422564225742258422594226042261422624226342264422654226642267422684226942270422714227242273422744227542276422774227842279422804228142282422834228442285422864228742288422894229042291422924229342294422954229642297422984229942300423014230242303423044230542306423074230842309423104231142312423134231442315423164231742318423194232042321423224232342324423254232642327423284232942330423314233242333423344233542336423374233842339423404234142342423434234442345423464234742348423494235042351423524235342354423554235642357423584235942360423614236242363423644236542366423674236842369423704237142372423734237442375423764237742378423794238042381423824238342384423854238642387423884238942390423914239242393423944239542396423974239842399424004240142402424034240442405424064240742408424094241042411424124241342414424154241642417424184241942420424214242242423424244242542426424274242842429424304243142432424334243442435424364243742438424394244042441424424244342444424454244642447424484244942450424514245242453424544245542456424574245842459424604246142462424634246442465424664246742468424694247042471424724247342474424754247642477424784247942480424814248242483424844248542486424874248842489424904249142492424934249442495424964249742498424994250042501425024250342504425054250642507425084250942510425114251242513425144251542516425174251842519425204252142522425234252442525425264252742528425294253042531425324253342534425354253642537425384253942540425414254242543425444254542546425474254842549425504255142552425534255442555425564255742558425594256042561425624256342564425654256642567425684256942570425714257242573425744257542576425774257842579425804258142582425834258442585425864258742588425894259042591425924259342594425954259642597425984259942600426014260242603426044260542606426074260842609426104261142612426134261442615426164261742618426194262042621426224262342624426254262642627426284262942630426314263242633426344263542636426374263842639426404264142642426434264442645426464264742648426494265042651426524265342654426554265642657426584265942660426614266242663426644266542666426674266842669426704267142672426734267442675426764267742678426794268042681426824268342684426854268642687426884268942690426914269242693426944269542696426974269842699427004270142702427034270442705427064270742708427094271042711427124271342714427154271642717427184271942720427214272242723427244272542726427274272842729427304273142732427334273442735427364273742738427394274042741427424274342744427454274642747427484274942750427514275242753427544275542756427574275842759427604276142762427634276442765427664276742768427694277042771427724277342774427754277642777427784277942780427814278242783427844278542786427874278842789427904279142792427934279442795427964279742798427994280042801428024280342804428054280642807428084280942810428114281242813428144281542816428174281842819428204282142822428234282442825428264282742828428294283042831428324283342834428354283642837428384283942840428414284242843428444284542846428474284842849428504285142852428534285442855428564285742858428594286042861428624286342864428654286642867428684286942870428714287242873428744287542876428774287842879428804288142882428834288442885428864288742888428894289042891428924289342894428954289642897428984289942900429014290242903429044290542906429074290842909429104291142912429134291442915429164291742918429194292042921429224292342924429254292642927429284292942930429314293242933429344293542936429374293842939429404294142942429434294442945429464294742948429494295042951429524295342954429554295642957429584295942960429614296242963429644296542966429674296842969429704297142972429734297442975429764297742978429794298042981429824298342984429854298642987429884298942990429914299242993429944299542996429974299842999430004300143002430034300443005430064300743008430094301043011430124301343014430154301643017430184301943020430214302243023430244302543026430274302843029430304303143032430334303443035430364303743038430394304043041430424304343044430454304643047430484304943050430514305243053430544305543056430574305843059430604306143062430634306443065430664306743068430694307043071430724307343074430754307643077430784307943080430814308243083430844308543086430874308843089430904309143092430934309443095430964309743098430994310043101431024310343104431054310643107431084310943110431114311243113431144311543116431174311843119431204312143122431234312443125431264312743128431294313043131431324313343134431354313643137431384313943140431414314243143431444314543146431474314843149431504315143152431534315443155431564315743158431594316043161431624316343164431654316643167431684316943170431714317243173431744317543176431774317843179431804318143182431834318443185431864318743188431894319043191431924319343194431954319643197431984319943200432014320243203432044320543206432074320843209432104321143212432134321443215432164321743218432194322043221432224322343224432254322643227432284322943230432314323243233432344323543236432374323843239432404324143242432434324443245432464324743248432494325043251432524325343254432554325643257432584325943260432614326243263432644326543266432674326843269432704327143272432734327443275432764327743278432794328043281432824328343284432854328643287432884328943290432914329243293432944329543296432974329843299433004330143302433034330443305433064330743308433094331043311433124331343314433154331643317433184331943320433214332243323433244332543326433274332843329433304333143332433334333443335433364333743338433394334043341433424334343344433454334643347433484334943350433514335243353433544335543356433574335843359433604336143362433634336443365433664336743368433694337043371433724337343374433754337643377433784337943380433814338243383433844338543386433874338843389433904339143392433934339443395433964339743398433994340043401434024340343404434054340643407434084340943410434114341243413434144341543416434174341843419434204342143422434234342443425434264342743428434294343043431434324343343434434354343643437434384343943440434414344243443434444344543446434474344843449434504345143452434534345443455434564345743458434594346043461434624346343464434654346643467434684346943470434714347243473434744347543476434774347843479434804348143482434834348443485434864348743488434894349043491434924349343494434954349643497434984349943500435014350243503435044350543506435074350843509435104351143512435134351443515435164351743518435194352043521435224352343524435254352643527435284352943530435314353243533435344353543536435374353843539435404354143542435434354443545435464354743548435494355043551435524355343554435554355643557435584355943560435614356243563435644356543566435674356843569435704357143572435734357443575435764357743578435794358043581435824358343584435854358643587435884358943590435914359243593435944359543596435974359843599436004360143602436034360443605436064360743608436094361043611436124361343614436154361643617436184361943620436214362243623436244362543626436274362843629436304363143632436334363443635436364363743638436394364043641436424364343644436454364643647436484364943650436514365243653436544365543656436574365843659436604366143662436634366443665436664366743668436694367043671436724367343674436754367643677436784367943680436814368243683436844368543686436874368843689436904369143692436934369443695436964369743698436994370043701437024370343704437054370643707437084370943710437114371243713437144371543716437174371843719437204372143722437234372443725437264372743728437294373043731437324373343734437354373643737437384373943740437414374243743437444374543746437474374843749437504375143752437534375443755437564375743758437594376043761437624376343764437654376643767437684376943770437714377243773437744377543776437774377843779437804378143782437834378443785437864378743788437894379043791437924379343794437954379643797437984379943800438014380243803438044380543806438074380843809438104381143812438134381443815438164381743818438194382043821438224382343824438254382643827438284382943830438314383243833438344383543836438374383843839438404384143842438434384443845438464384743848438494385043851438524385343854438554385643857438584385943860438614386243863438644386543866438674386843869438704387143872438734387443875438764387743878438794388043881438824388343884438854388643887438884388943890438914389243893438944389543896438974389843899439004390143902439034390443905439064390743908439094391043911439124391343914439154391643917439184391943920439214392243923439244392543926439274392843929439304393143932439334393443935439364393743938439394394043941439424394343944439454394643947439484394943950439514395243953439544395543956439574395843959439604396143962439634396443965439664396743968439694397043971439724397343974439754397643977439784397943980439814398243983439844398543986439874398843989439904399143992439934399443995439964399743998439994400044001440024400344004440054400644007440084400944010440114401244013440144401544016440174401844019440204402144022440234402444025440264402744028440294403044031440324403344034440354403644037440384403944040440414404244043440444404544046440474404844049440504405144052440534405444055440564405744058440594406044061440624406344064440654406644067440684406944070440714407244073440744407544076440774407844079440804408144082440834408444085440864408744088440894409044091440924409344094440954409644097440984409944100441014410244103441044410544106441074410844109441104411144112441134411444115441164411744118441194412044121441224412344124441254412644127441284412944130441314413244133441344413544136441374413844139441404414144142441434414444145441464414744148441494415044151441524415344154441554415644157441584415944160441614416244163441644416544166441674416844169441704417144172441734417444175441764417744178441794418044181441824418344184441854418644187441884418944190441914419244193441944419544196441974419844199442004420144202442034420444205442064420744208442094421044211442124421344214442154421644217442184421944220442214422244223442244422544226442274422844229442304423144232442334423444235442364423744238442394424044241442424424344244442454424644247442484424944250442514425244253442544425544256442574425844259442604426144262442634426444265442664426744268442694427044271442724427344274442754427644277442784427944280442814428244283442844428544286442874428844289442904429144292442934429444295442964429744298442994430044301443024430344304443054430644307443084430944310443114431244313443144431544316443174431844319443204432144322443234432444325443264432744328443294433044331443324433344334443354433644337443384433944340443414434244343443444434544346443474434844349443504435144352443534435444355443564435744358443594436044361443624436344364443654436644367443684436944370443714437244373443744437544376443774437844379443804438144382443834438444385443864438744388443894439044391443924439344394443954439644397443984439944400444014440244403444044440544406444074440844409444104441144412444134441444415444164441744418444194442044421444224442344424444254442644427444284442944430444314443244433444344443544436444374443844439444404444144442444434444444445444464444744448444494445044451444524445344454444554445644457444584445944460444614446244463444644446544466444674446844469444704447144472444734447444475444764447744478444794448044481444824448344484444854448644487444884448944490444914449244493444944449544496444974449844499445004450144502445034450444505445064450744508445094451044511445124451344514445154451644517445184451944520445214452244523445244452544526445274452844529445304453144532445334453444535445364453744538445394454044541445424454344544445454454644547445484454944550445514455244553445544455544556445574455844559445604456144562445634456444565445664456744568445694457044571445724457344574445754457644577445784457944580445814458244583445844458544586445874458844589445904459144592445934459444595445964459744598445994460044601446024460344604446054460644607446084460944610446114461244613446144461544616446174461844619446204462144622446234462444625446264462744628446294463044631446324463344634446354463644637446384463944640446414464244643446444464544646446474464844649446504465144652446534465444655446564465744658446594466044661446624466344664446654466644667446684466944670446714467244673446744467544676446774467844679446804468144682446834468444685446864468744688446894469044691446924469344694446954469644697446984469944700447014470244703447044470544706447074470844709447104471144712447134471444715447164471744718447194472044721447224472344724447254472644727447284472944730447314473244733447344473544736447374473844739447404474144742447434474444745447464474744748447494475044751447524475344754447554475644757447584475944760447614476244763447644476544766447674476844769447704477144772447734477444775447764477744778447794478044781447824478344784447854478644787447884478944790447914479244793447944479544796447974479844799448004480144802448034480444805448064480744808448094481044811448124481344814448154481644817448184481944820448214482244823448244482544826448274482844829448304483144832448334483444835448364483744838448394484044841448424484344844448454484644847448484484944850448514485244853448544485544856448574485844859448604486144862448634486444865448664486744868448694487044871448724487344874448754487644877448784487944880448814488244883448844488544886448874488844889448904489144892448934489444895448964489744898448994490044901449024490344904449054490644907449084490944910449114491244913449144491544916449174491844919449204492144922449234492444925449264492744928449294493044931449324493344934449354493644937449384493944940449414494244943449444494544946449474494844949449504495144952449534495444955449564495744958449594496044961449624496344964449654496644967449684496944970449714497244973449744497544976449774497844979449804498144982449834498444985449864498744988449894499044991449924499344994449954499644997449984499945000450014500245003450044500545006450074500845009450104501145012450134501445015450164501745018450194502045021450224502345024450254502645027450284502945030450314503245033450344503545036450374503845039450404504145042450434504445045450464504745048450494505045051450524505345054450554505645057450584505945060450614506245063450644506545066450674506845069450704507145072450734507445075450764507745078450794508045081450824508345084450854508645087450884508945090450914509245093450944509545096450974509845099451004510145102451034510445105451064510745108451094511045111451124511345114451154511645117451184511945120451214512245123451244512545126451274512845129451304513145132451334513445135451364513745138451394514045141451424514345144451454514645147451484514945150451514515245153451544515545156451574515845159451604516145162451634516445165451664516745168451694517045171451724517345174451754517645177451784517945180451814518245183451844518545186451874518845189451904519145192451934519445195451964519745198451994520045201452024520345204452054520645207452084520945210452114521245213452144521545216452174521845219452204522145222452234522445225452264522745228452294523045231452324523345234452354523645237452384523945240452414524245243452444524545246452474524845249452504525145252452534525445255452564525745258452594526045261452624526345264452654526645267452684526945270452714527245273452744527545276452774527845279452804528145282452834528445285452864528745288452894529045291452924529345294452954529645297452984529945300453014530245303453044530545306453074530845309453104531145312453134531445315453164531745318453194532045321453224532345324453254532645327453284532945330453314533245333453344533545336453374533845339453404534145342453434534445345453464534745348453494535045351453524535345354453554535645357453584535945360453614536245363453644536545366453674536845369453704537145372453734537445375453764537745378453794538045381453824538345384453854538645387453884538945390453914539245393453944539545396453974539845399454004540145402454034540445405454064540745408454094541045411454124541345414454154541645417454184541945420454214542245423454244542545426454274542845429454304543145432454334543445435454364543745438454394544045441454424544345444454454544645447454484544945450454514545245453454544545545456454574545845459454604546145462454634546445465454664546745468454694547045471454724547345474454754547645477454784547945480454814548245483454844548545486454874548845489454904549145492454934549445495454964549745498454994550045501455024550345504455054550645507455084550945510455114551245513455144551545516455174551845519455204552145522455234552445525455264552745528455294553045531455324553345534455354553645537455384553945540455414554245543455444554545546455474554845549455504555145552455534555445555455564555745558455594556045561455624556345564455654556645567455684556945570455714557245573455744557545576455774557845579455804558145582455834558445585455864558745588455894559045591455924559345594455954559645597455984559945600456014560245603456044560545606456074560845609456104561145612456134561445615456164561745618456194562045621456224562345624456254562645627456284562945630456314563245633456344563545636456374563845639456404564145642456434564445645456464564745648456494565045651456524565345654456554565645657456584565945660456614566245663456644566545666456674566845669456704567145672456734567445675456764567745678456794568045681456824568345684456854568645687456884568945690456914569245693456944569545696456974569845699457004570145702457034570445705457064570745708457094571045711457124571345714457154571645717457184571945720457214572245723457244572545726457274572845729457304573145732457334573445735457364573745738457394574045741457424574345744457454574645747457484574945750457514575245753457544575545756457574575845759457604576145762457634576445765457664576745768457694577045771457724577345774457754577645777457784577945780457814578245783457844578545786457874578845789457904579145792457934579445795457964579745798457994580045801458024580345804458054580645807458084580945810458114581245813458144581545816458174581845819458204582145822458234582445825458264582745828458294583045831458324583345834458354583645837458384583945840458414584245843458444584545846458474584845849458504585145852458534585445855458564585745858458594586045861458624586345864458654586645867458684586945870458714587245873458744587545876458774587845879458804588145882458834588445885458864588745888458894589045891458924589345894458954589645897458984589945900459014590245903459044590545906459074590845909459104591145912459134591445915459164591745918459194592045921459224592345924459254592645927459284592945930459314593245933459344593545936459374593845939459404594145942459434594445945459464594745948459494595045951459524595345954459554595645957459584595945960459614596245963459644596545966459674596845969459704597145972459734597445975459764597745978459794598045981459824598345984459854598645987459884598945990459914599245993459944599545996459974599845999460004600146002460034600446005460064600746008460094601046011460124601346014460154601646017460184601946020460214602246023460244602546026460274602846029460304603146032460334603446035460364603746038460394604046041460424604346044460454604646047460484604946050460514605246053460544605546056460574605846059460604606146062460634606446065460664606746068460694607046071460724607346074460754607646077460784607946080460814608246083460844608546086460874608846089460904609146092460934609446095460964609746098460994610046101461024610346104461054610646107461084610946110461114611246113461144611546116461174611846119461204612146122461234612446125461264612746128461294613046131461324613346134461354613646137461384613946140461414614246143461444614546146461474614846149461504615146152461534615446155461564615746158461594616046161461624616346164461654616646167461684616946170461714617246173461744617546176461774617846179461804618146182461834618446185461864618746188461894619046191461924619346194461954619646197461984619946200462014620246203462044620546206462074620846209462104621146212462134621446215462164621746218462194622046221462224622346224462254622646227462284622946230462314623246233462344623546236462374623846239462404624146242462434624446245462464624746248462494625046251462524625346254462554625646257462584625946260462614626246263462644626546266462674626846269462704627146272462734627446275462764627746278462794628046281462824628346284462854628646287462884628946290462914629246293462944629546296462974629846299463004630146302463034630446305463064630746308463094631046311463124631346314463154631646317463184631946320463214632246323463244632546326463274632846329463304633146332463334633446335463364633746338463394634046341463424634346344463454634646347463484634946350463514635246353463544635546356463574635846359463604636146362463634636446365463664636746368463694637046371463724637346374463754637646377463784637946380463814638246383463844638546386463874638846389463904639146392463934639446395463964639746398463994640046401464024640346404464054640646407464084640946410464114641246413464144641546416464174641846419464204642146422464234642446425464264642746428464294643046431464324643346434464354643646437464384643946440464414644246443464444644546446464474644846449464504645146452464534645446455464564645746458464594646046461464624646346464464654646646467464684646946470464714647246473464744647546476464774647846479464804648146482464834648446485464864648746488464894649046491464924649346494464954649646497464984649946500465014650246503465044650546506465074650846509465104651146512465134651446515465164651746518465194652046521465224652346524465254652646527465284652946530465314653246533465344653546536465374653846539465404654146542465434654446545465464654746548465494655046551465524655346554465554655646557465584655946560465614656246563465644656546566465674656846569465704657146572465734657446575465764657746578465794658046581465824658346584465854658646587465884658946590465914659246593465944659546596465974659846599466004660146602466034660446605466064660746608466094661046611466124661346614466154661646617466184661946620466214662246623466244662546626466274662846629466304663146632466334663446635466364663746638466394664046641466424664346644466454664646647466484664946650466514665246653466544665546656466574665846659466604666146662466634666446665466664666746668466694667046671466724667346674466754667646677466784667946680466814668246683466844668546686466874668846689466904669146692466934669446695466964669746698466994670046701467024670346704467054670646707467084670946710467114671246713467144671546716467174671846719467204672146722467234672446725467264672746728467294673046731467324673346734467354673646737467384673946740467414674246743467444674546746467474674846749467504675146752467534675446755467564675746758467594676046761467624676346764467654676646767467684676946770467714677246773467744677546776467774677846779467804678146782467834678446785467864678746788467894679046791467924679346794467954679646797467984679946800468014680246803468044680546806468074680846809468104681146812468134681446815468164681746818468194682046821468224682346824468254682646827468284682946830468314683246833468344683546836468374683846839468404684146842468434684446845468464684746848468494685046851468524685346854468554685646857468584685946860468614686246863468644686546866468674686846869468704687146872468734687446875468764687746878468794688046881468824688346884468854688646887468884688946890468914689246893468944689546896468974689846899469004690146902469034690446905469064690746908469094691046911469124691346914469154691646917469184691946920469214692246923469244692546926469274692846929469304693146932469334693446935469364693746938469394694046941469424694346944469454694646947469484694946950469514695246953469544695546956469574695846959469604696146962469634696446965469664696746968469694697046971469724697346974469754697646977469784697946980469814698246983469844698546986469874698846989469904699146992469934699446995469964699746998469994700047001470024700347004470054700647007470084700947010470114701247013470144701547016470174701847019470204702147022470234702447025470264702747028470294703047031470324703347034470354703647037470384703947040470414704247043470444704547046470474704847049470504705147052470534705447055470564705747058470594706047061470624706347064470654706647067470684706947070470714707247073470744707547076470774707847079470804708147082470834708447085470864708747088470894709047091470924709347094470954709647097470984709947100471014710247103471044710547106471074710847109471104711147112471134711447115471164711747118471194712047121471224712347124471254712647127471284712947130471314713247133471344713547136471374713847139471404714147142471434714447145471464714747148471494715047151471524715347154471554715647157471584715947160471614716247163471644716547166471674716847169471704717147172471734717447175471764717747178471794718047181471824718347184471854718647187471884718947190471914719247193471944719547196471974719847199472004720147202472034720447205472064720747208472094721047211472124721347214472154721647217472184721947220472214722247223472244722547226472274722847229472304723147232472334723447235472364723747238472394724047241472424724347244472454724647247472484724947250472514725247253472544725547256472574725847259472604726147262472634726447265472664726747268472694727047271472724727347274472754727647277472784727947280472814728247283472844728547286472874728847289472904729147292472934729447295472964729747298472994730047301473024730347304473054730647307473084730947310473114731247313473144731547316473174731847319473204732147322473234732447325473264732747328473294733047331473324733347334473354733647337473384733947340473414734247343473444734547346473474734847349473504735147352473534735447355473564735747358473594736047361473624736347364473654736647367473684736947370473714737247373473744737547376473774737847379473804738147382473834738447385473864738747388473894739047391473924739347394473954739647397473984739947400474014740247403474044740547406474074740847409474104741147412474134741447415474164741747418474194742047421474224742347424474254742647427474284742947430474314743247433474344743547436474374743847439474404744147442474434744447445474464744747448474494745047451474524745347454474554745647457474584745947460474614746247463474644746547466474674746847469474704747147472474734747447475474764747747478474794748047481474824748347484474854748647487474884748947490474914749247493474944749547496474974749847499475004750147502475034750447505475064750747508475094751047511475124751347514475154751647517475184751947520475214752247523475244752547526475274752847529475304753147532475334753447535475364753747538475394754047541475424754347544475454754647547475484754947550475514755247553475544755547556475574755847559475604756147562475634756447565475664756747568475694757047571475724757347574475754757647577475784757947580475814758247583475844758547586475874758847589475904759147592475934759447595475964759747598475994760047601476024760347604476054760647607476084760947610476114761247613476144761547616476174761847619476204762147622476234762447625476264762747628476294763047631476324763347634476354763647637476384763947640476414764247643476444764547646476474764847649476504765147652476534765447655476564765747658476594766047661476624766347664476654766647667476684766947670476714767247673476744767547676476774767847679476804768147682476834768447685476864768747688476894769047691476924769347694476954769647697476984769947700477014770247703477044770547706477074770847709477104771147712477134771447715477164771747718477194772047721477224772347724477254772647727477284772947730477314773247733477344773547736477374773847739477404774147742477434774447745477464774747748477494775047751477524775347754477554775647757477584775947760477614776247763477644776547766477674776847769477704777147772477734777447775477764777747778477794778047781477824778347784477854778647787477884778947790477914779247793477944779547796477974779847799478004780147802478034780447805478064780747808478094781047811478124781347814478154781647817478184781947820478214782247823478244782547826478274782847829478304783147832478334783447835478364783747838478394784047841478424784347844478454784647847478484784947850478514785247853478544785547856478574785847859478604786147862478634786447865478664786747868478694787047871478724787347874478754787647877478784787947880478814788247883478844788547886478874788847889478904789147892478934789447895478964789747898478994790047901479024790347904479054790647907479084790947910479114791247913479144791547916479174791847919479204792147922479234792447925479264792747928479294793047931479324793347934479354793647937479384793947940479414794247943479444794547946479474794847949479504795147952479534795447955479564795747958479594796047961479624796347964479654796647967479684796947970479714797247973479744797547976479774797847979479804798147982479834798447985479864798747988479894799047991479924799347994479954799647997479984799948000480014800248003480044800548006480074800848009480104801148012480134801448015480164801748018480194802048021480224802348024480254802648027480284802948030480314803248033480344803548036480374803848039480404804148042480434804448045480464804748048480494805048051480524805348054480554805648057480584805948060480614806248063480644806548066480674806848069480704807148072480734807448075480764807748078480794808048081480824808348084480854808648087480884808948090480914809248093480944809548096480974809848099481004810148102481034810448105481064810748108481094811048111481124811348114481154811648117481184811948120481214812248123481244812548126481274812848129481304813148132481334813448135481364813748138481394814048141481424814348144481454814648147481484814948150481514815248153481544815548156481574815848159481604816148162481634816448165481664816748168481694817048171481724817348174481754817648177481784817948180481814818248183481844818548186481874818848189481904819148192481934819448195481964819748198481994820048201482024820348204482054820648207482084820948210482114821248213482144821548216482174821848219482204822148222482234822448225482264822748228482294823048231482324823348234482354823648237482384823948240482414824248243482444824548246482474824848249482504825148252482534825448255482564825748258482594826048261482624826348264482654826648267482684826948270482714827248273482744827548276482774827848279482804828148282482834828448285482864828748288482894829048291482924829348294482954829648297482984829948300483014830248303483044830548306483074830848309483104831148312483134831448315483164831748318483194832048321483224832348324483254832648327483284832948330483314833248333483344833548336483374833848339483404834148342483434834448345483464834748348483494835048351483524835348354483554835648357483584835948360483614836248363483644836548366483674836848369483704837148372483734837448375483764837748378483794838048381483824838348384483854838648387483884838948390483914839248393483944839548396483974839848399484004840148402484034840448405484064840748408484094841048411484124841348414484154841648417484184841948420484214842248423484244842548426484274842848429484304843148432484334843448435484364843748438484394844048441484424844348444484454844648447484484844948450484514845248453484544845548456484574845848459484604846148462484634846448465484664846748468484694847048471484724847348474484754847648477484784847948480484814848248483484844848548486484874848848489484904849148492484934849448495484964849748498484994850048501485024850348504485054850648507485084850948510485114851248513485144851548516485174851848519485204852148522485234852448525485264852748528485294853048531485324853348534485354853648537485384853948540485414854248543485444854548546485474854848549485504855148552485534855448555485564855748558485594856048561485624856348564485654856648567485684856948570485714857248573485744857548576485774857848579485804858148582485834858448585485864858748588485894859048591485924859348594485954859648597485984859948600486014860248603486044860548606486074860848609486104861148612486134861448615486164861748618486194862048621486224862348624486254862648627486284862948630486314863248633486344863548636486374863848639486404864148642486434864448645486464864748648486494865048651486524865348654486554865648657486584865948660486614866248663486644866548666486674866848669486704867148672486734867448675486764867748678486794868048681486824868348684486854868648687486884868948690486914869248693486944869548696486974869848699487004870148702487034870448705487064870748708487094871048711487124871348714487154871648717487184871948720487214872248723487244872548726487274872848729487304873148732487334873448735487364873748738487394874048741487424874348744487454874648747487484874948750487514875248753487544875548756487574875848759487604876148762487634876448765487664876748768487694877048771487724877348774487754877648777487784877948780487814878248783487844878548786487874878848789487904879148792487934879448795487964879748798487994880048801488024880348804488054880648807488084880948810488114881248813488144881548816488174881848819488204882148822488234882448825488264882748828488294883048831488324883348834488354883648837488384883948840488414884248843488444884548846488474884848849488504885148852488534885448855488564885748858488594886048861488624886348864488654886648867488684886948870488714887248873488744887548876488774887848879488804888148882488834888448885488864888748888488894889048891488924889348894488954889648897488984889948900489014890248903489044890548906489074890848909489104891148912489134891448915489164891748918489194892048921489224892348924489254892648927489284892948930489314893248933489344893548936489374893848939489404894148942489434894448945489464894748948489494895048951489524895348954489554895648957489584895948960489614896248963489644896548966489674896848969489704897148972489734897448975489764897748978489794898048981489824898348984489854898648987489884898948990489914899248993489944899548996489974899848999490004900149002490034900449005490064900749008490094901049011490124901349014490154901649017490184901949020490214902249023490244902549026490274902849029490304903149032490334903449035490364903749038490394904049041490424904349044490454904649047490484904949050490514905249053490544905549056490574905849059490604906149062490634906449065490664906749068490694907049071490724907349074490754907649077490784907949080490814908249083490844908549086490874908849089490904909149092490934909449095490964909749098490994910049101491024910349104491054910649107491084910949110491114911249113491144911549116491174911849119491204912149122491234912449125491264912749128491294913049131491324913349134491354913649137491384913949140491414914249143491444914549146491474914849149491504915149152491534915449155491564915749158491594916049161491624916349164491654916649167491684916949170491714917249173491744917549176491774917849179491804918149182491834918449185491864918749188491894919049191491924919349194491954919649197491984919949200492014920249203492044920549206492074920849209492104921149212492134921449215492164921749218492194922049221492224922349224492254922649227492284922949230492314923249233492344923549236492374923849239492404924149242492434924449245492464924749248492494925049251492524925349254492554925649257492584925949260492614926249263492644926549266492674926849269492704927149272492734927449275492764927749278492794928049281492824928349284492854928649287492884928949290492914929249293492944929549296492974929849299493004930149302493034930449305493064930749308493094931049311493124931349314493154931649317493184931949320493214932249323493244932549326493274932849329493304933149332493334933449335493364933749338493394934049341493424934349344493454934649347493484934949350493514935249353493544935549356493574935849359493604936149362493634936449365493664936749368493694937049371493724937349374493754937649377493784937949380493814938249383493844938549386493874938849389493904939149392493934939449395493964939749398493994940049401494024940349404494054940649407494084940949410494114941249413494144941549416494174941849419494204942149422494234942449425494264942749428494294943049431494324943349434494354943649437494384943949440494414944249443494444944549446494474944849449494504945149452494534945449455494564945749458494594946049461494624946349464494654946649467494684946949470494714947249473494744947549476494774947849479494804948149482494834948449485494864948749488494894949049491494924949349494494954949649497494984949949500495014950249503495044950549506495074950849509495104951149512495134951449515495164951749518495194952049521495224952349524495254952649527495284952949530495314953249533495344953549536495374953849539495404954149542495434954449545495464954749548495494955049551495524955349554495554955649557495584955949560495614956249563495644956549566495674956849569495704957149572495734957449575495764957749578495794958049581495824958349584495854958649587495884958949590495914959249593495944959549596495974959849599496004960149602496034960449605496064960749608496094961049611496124961349614496154961649617496184961949620496214962249623496244962549626496274962849629496304963149632496334963449635496364963749638496394964049641496424964349644496454964649647496484964949650496514965249653496544965549656496574965849659496604966149662496634966449665496664966749668496694967049671496724967349674496754967649677496784967949680496814968249683496844968549686496874968849689496904969149692496934969449695496964969749698496994970049701497024970349704497054970649707497084970949710497114971249713497144971549716497174971849719497204972149722497234972449725497264972749728497294973049731497324973349734497354973649737497384973949740497414974249743497444974549746497474974849749497504975149752497534975449755497564975749758497594976049761497624976349764497654976649767497684976949770497714977249773497744977549776497774977849779497804978149782497834978449785497864978749788497894979049791497924979349794497954979649797497984979949800498014980249803498044980549806498074980849809498104981149812498134981449815498164981749818498194982049821498224982349824498254982649827498284982949830498314983249833498344983549836498374983849839498404984149842498434984449845498464984749848498494985049851498524985349854498554985649857498584985949860498614986249863498644986549866498674986849869498704987149872498734987449875498764987749878498794988049881498824988349884498854988649887498884988949890498914989249893498944989549896498974989849899499004990149902499034990449905499064990749908499094991049911499124991349914499154991649917499184991949920499214992249923499244992549926499274992849929499304993149932499334993449935499364993749938499394994049941499424994349944499454994649947499484994949950499514995249953499544995549956499574995849959499604996149962499634996449965499664996749968499694997049971499724997349974499754997649977499784997949980499814998249983499844998549986499874998849989499904999149992499934999449995499964999749998499995000050001500025000350004500055000650007500085000950010500115001250013500145001550016500175001850019500205002150022500235002450025500265002750028500295003050031500325003350034500355003650037500385003950040500415004250043500445004550046500475004850049500505005150052500535005450055500565005750058500595006050061500625006350064500655006650067500685006950070500715007250073500745007550076500775007850079500805008150082500835008450085500865008750088500895009050091500925009350094500955009650097500985009950100501015010250103501045010550106501075010850109501105011150112501135011450115501165011750118501195012050121501225012350124501255012650127501285012950130501315013250133501345013550136501375013850139501405014150142501435014450145501465014750148501495015050151501525015350154501555015650157501585015950160501615016250163501645016550166501675016850169501705017150172501735017450175501765017750178501795018050181501825018350184501855018650187501885018950190501915019250193501945019550196501975019850199502005020150202502035020450205502065020750208502095021050211502125021350214502155021650217502185021950220502215022250223502245022550226502275022850229502305023150232502335023450235502365023750238502395024050241502425024350244502455024650247502485024950250502515025250253502545025550256502575025850259502605026150262502635026450265502665026750268502695027050271502725027350274502755027650277502785027950280502815028250283502845028550286502875028850289502905029150292502935029450295502965029750298502995030050301503025030350304503055030650307503085030950310503115031250313503145031550316503175031850319503205032150322503235032450325503265032750328503295033050331503325033350334503355033650337503385033950340503415034250343503445034550346503475034850349503505035150352503535035450355503565035750358503595036050361503625036350364503655036650367503685036950370503715037250373503745037550376503775037850379503805038150382503835038450385503865038750388503895039050391503925039350394503955039650397503985039950400504015040250403504045040550406504075040850409504105041150412504135041450415504165041750418504195042050421504225042350424504255042650427504285042950430504315043250433504345043550436504375043850439504405044150442504435044450445504465044750448504495045050451504525045350454504555045650457504585045950460504615046250463504645046550466504675046850469504705047150472504735047450475504765047750478504795048050481504825048350484504855048650487504885048950490504915049250493504945049550496504975049850499505005050150502505035050450505505065050750508505095051050511505125051350514505155051650517505185051950520505215052250523505245052550526505275052850529505305053150532505335053450535505365053750538505395054050541505425054350544505455054650547505485054950550505515055250553505545055550556505575055850559505605056150562505635056450565505665056750568505695057050571505725057350574505755057650577505785057950580505815058250583505845058550586505875058850589505905059150592505935059450595505965059750598505995060050601506025060350604506055060650607506085060950610506115061250613506145061550616506175061850619506205062150622506235062450625506265062750628506295063050631506325063350634506355063650637506385063950640506415064250643506445064550646506475064850649506505065150652506535065450655506565065750658506595066050661506625066350664506655066650667506685066950670506715067250673506745067550676506775067850679506805068150682506835068450685506865068750688506895069050691506925069350694506955069650697506985069950700507015070250703507045070550706507075070850709507105071150712507135071450715507165071750718507195072050721507225072350724507255072650727507285072950730507315073250733507345073550736507375073850739507405074150742507435074450745507465074750748507495075050751507525075350754507555075650757507585075950760507615076250763507645076550766507675076850769507705077150772507735077450775507765077750778507795078050781507825078350784507855078650787507885078950790507915079250793507945079550796507975079850799508005080150802508035080450805508065080750808508095081050811508125081350814508155081650817508185081950820508215082250823508245082550826508275082850829508305083150832508335083450835508365083750838508395084050841508425084350844508455084650847508485084950850508515085250853508545085550856508575085850859508605086150862508635086450865508665086750868508695087050871508725087350874508755087650877508785087950880508815088250883508845088550886508875088850889508905089150892508935089450895508965089750898508995090050901509025090350904509055090650907509085090950910509115091250913509145091550916509175091850919509205092150922509235092450925509265092750928509295093050931509325093350934509355093650937509385093950940509415094250943509445094550946509475094850949509505095150952509535095450955509565095750958509595096050961509625096350964509655096650967509685096950970509715097250973509745097550976509775097850979509805098150982509835098450985509865098750988509895099050991509925099350994509955099650997509985099951000510015100251003510045100551006510075100851009510105101151012510135101451015510165101751018510195102051021510225102351024510255102651027510285102951030510315103251033510345103551036510375103851039510405104151042510435104451045510465104751048510495105051051510525105351054510555105651057510585105951060510615106251063510645106551066510675106851069510705107151072510735107451075510765107751078510795108051081510825108351084510855108651087510885108951090510915109251093510945109551096510975109851099511005110151102511035110451105511065110751108511095111051111511125111351114511155111651117511185111951120511215112251123511245112551126511275112851129511305113151132511335113451135511365113751138511395114051141511425114351144511455114651147511485114951150511515115251153511545115551156511575115851159511605116151162511635116451165511665116751168511695117051171511725117351174511755117651177511785117951180511815118251183511845118551186511875118851189511905119151192511935119451195511965119751198511995120051201512025120351204512055120651207512085120951210512115121251213512145121551216512175121851219512205122151222512235122451225512265122751228512295123051231512325123351234512355123651237512385123951240512415124251243512445124551246512475124851249512505125151252512535125451255512565125751258512595126051261512625126351264512655126651267512685126951270512715127251273512745127551276512775127851279512805128151282512835128451285512865128751288512895129051291512925129351294512955129651297512985129951300513015130251303513045130551306513075130851309513105131151312513135131451315513165131751318513195132051321513225132351324513255132651327513285132951330513315133251333513345133551336513375133851339513405134151342513435134451345513465134751348513495135051351513525135351354513555135651357513585135951360513615136251363513645136551366513675136851369513705137151372513735137451375513765137751378513795138051381513825138351384513855138651387513885138951390513915139251393513945139551396513975139851399514005140151402514035140451405514065140751408514095141051411514125141351414514155141651417514185141951420514215142251423514245142551426514275142851429514305143151432514335143451435514365143751438514395144051441514425144351444514455144651447514485144951450514515145251453514545145551456514575145851459514605146151462514635146451465514665146751468514695147051471514725147351474514755147651477514785147951480514815148251483514845148551486514875148851489514905149151492514935149451495514965149751498514995150051501515025150351504515055150651507515085150951510515115151251513515145151551516515175151851519515205152151522515235152451525515265152751528515295153051531515325153351534515355153651537515385153951540515415154251543515445154551546515475154851549515505155151552515535155451555515565155751558515595156051561515625156351564515655156651567515685156951570515715157251573515745157551576515775157851579515805158151582515835158451585515865158751588515895159051591515925159351594515955159651597515985159951600516015160251603516045160551606516075160851609516105161151612516135161451615516165161751618516195162051621516225162351624516255162651627516285162951630516315163251633516345163551636516375163851639516405164151642516435164451645516465164751648516495165051651516525165351654516555165651657516585165951660516615166251663516645166551666516675166851669516705167151672516735167451675516765167751678516795168051681516825168351684516855168651687516885168951690516915169251693516945169551696516975169851699517005170151702517035170451705517065170751708517095171051711517125171351714517155171651717517185171951720517215172251723517245172551726517275172851729517305173151732517335173451735517365173751738517395174051741517425174351744517455174651747517485174951750517515175251753517545175551756517575175851759517605176151762517635176451765517665176751768517695177051771517725177351774517755177651777517785177951780517815178251783517845178551786517875178851789517905179151792517935179451795517965179751798517995180051801518025180351804518055180651807518085180951810518115181251813518145181551816518175181851819518205182151822518235182451825518265182751828518295183051831518325183351834518355183651837518385183951840518415184251843518445184551846518475184851849518505185151852518535185451855518565185751858518595186051861518625186351864518655186651867518685186951870518715187251873518745187551876518775187851879518805188151882518835188451885518865188751888518895189051891518925189351894518955189651897518985189951900519015190251903519045190551906519075190851909519105191151912519135191451915519165191751918519195192051921519225192351924519255192651927519285192951930519315193251933519345193551936519375193851939519405194151942519435194451945519465194751948519495195051951519525195351954519555195651957519585195951960519615196251963519645196551966519675196851969519705197151972519735197451975519765197751978519795198051981519825198351984519855198651987519885198951990519915199251993519945199551996519975199851999520005200152002520035200452005520065200752008520095201052011520125201352014520155201652017520185201952020520215202252023520245202552026520275202852029520305203152032520335203452035520365203752038520395204052041520425204352044520455204652047520485204952050520515205252053520545205552056520575205852059520605206152062520635206452065520665206752068520695207052071520725207352074520755207652077520785207952080520815208252083520845208552086520875208852089520905209152092520935209452095520965209752098520995210052101521025210352104521055210652107521085210952110521115211252113521145211552116521175211852119521205212152122521235212452125521265212752128521295213052131521325213352134521355213652137521385213952140521415214252143521445214552146521475214852149521505215152152521535215452155521565215752158521595216052161521625216352164521655216652167521685216952170521715217252173521745217552176521775217852179521805218152182521835218452185521865218752188521895219052191521925219352194521955219652197521985219952200522015220252203522045220552206522075220852209522105221152212522135221452215522165221752218522195222052221522225222352224522255222652227522285222952230522315223252233522345223552236522375223852239522405224152242522435224452245522465224752248522495225052251522525225352254522555225652257522585225952260522615226252263522645226552266522675226852269522705227152272522735227452275522765227752278522795228052281522825228352284522855228652287522885228952290522915229252293522945229552296522975229852299523005230152302523035230452305523065230752308523095231052311523125231352314523155231652317523185231952320523215232252323523245232552326523275232852329523305233152332523335233452335523365233752338523395234052341523425234352344523455234652347523485234952350523515235252353523545235552356523575235852359523605236152362523635236452365523665236752368523695237052371523725237352374523755237652377523785237952380523815238252383523845238552386523875238852389523905239152392523935239452395523965239752398523995240052401524025240352404524055240652407524085240952410524115241252413524145241552416524175241852419524205242152422524235242452425524265242752428524295243052431524325243352434524355243652437524385243952440524415244252443524445244552446524475244852449524505245152452524535245452455524565245752458524595246052461524625246352464524655246652467524685246952470524715247252473524745247552476524775247852479524805248152482524835248452485524865248752488524895249052491524925249352494524955249652497524985249952500525015250252503525045250552506525075250852509525105251152512525135251452515525165251752518525195252052521525225252352524525255252652527525285252952530525315253252533525345253552536525375253852539525405254152542525435254452545525465254752548525495255052551525525255352554525555255652557525585255952560525615256252563525645256552566525675256852569525705257152572525735257452575525765257752578525795258052581525825258352584525855258652587525885258952590525915259252593525945259552596525975259852599526005260152602526035260452605526065260752608526095261052611526125261352614526155261652617526185261952620526215262252623526245262552626526275262852629526305263152632526335263452635526365263752638526395264052641526425264352644526455264652647526485264952650526515265252653526545265552656526575265852659526605266152662526635266452665526665266752668526695267052671526725267352674526755267652677526785267952680526815268252683526845268552686526875268852689526905269152692526935269452695526965269752698526995270052701527025270352704527055270652707527085270952710527115271252713527145271552716527175271852719527205272152722527235272452725527265272752728527295273052731527325273352734527355273652737527385273952740527415274252743527445274552746527475274852749527505275152752527535275452755527565275752758527595276052761527625276352764527655276652767527685276952770527715277252773527745277552776527775277852779527805278152782527835278452785527865278752788527895279052791527925279352794527955279652797527985279952800528015280252803528045280552806528075280852809528105281152812528135281452815528165281752818528195282052821528225282352824528255282652827528285282952830528315283252833528345283552836528375283852839528405284152842528435284452845528465284752848528495285052851528525285352854528555285652857528585285952860528615286252863528645286552866528675286852869528705287152872528735287452875528765287752878528795288052881528825288352884528855288652887528885288952890528915289252893528945289552896528975289852899529005290152902529035290452905529065290752908529095291052911529125291352914529155291652917529185291952920529215292252923529245292552926529275292852929529305293152932529335293452935529365293752938529395294052941529425294352944529455294652947529485294952950529515295252953529545295552956529575295852959529605296152962529635296452965529665296752968529695297052971529725297352974529755297652977529785297952980529815298252983529845298552986529875298852989529905299152992529935299452995529965299752998529995300053001530025300353004530055300653007530085300953010530115301253013530145301553016530175301853019530205302153022530235302453025530265302753028530295303053031530325303353034530355303653037530385303953040530415304253043530445304553046530475304853049530505305153052530535305453055530565305753058530595306053061530625306353064530655306653067530685306953070530715307253073530745307553076530775307853079530805308153082530835308453085530865308753088530895309053091530925309353094530955309653097530985309953100531015310253103531045310553106531075310853109531105311153112531135311453115531165311753118531195312053121531225312353124531255312653127531285312953130531315313253133531345313553136531375313853139531405314153142531435314453145531465314753148531495315053151531525315353154531555315653157531585315953160531615316253163531645316553166531675316853169531705317153172531735317453175531765317753178531795318053181531825318353184531855318653187531885318953190531915319253193531945319553196531975319853199532005320153202532035320453205532065320753208532095321053211532125321353214532155321653217532185321953220532215322253223532245322553226532275322853229532305323153232532335323453235532365323753238532395324053241532425324353244532455324653247532485324953250532515325253253532545325553256532575325853259532605326153262532635326453265532665326753268532695327053271532725327353274532755327653277532785327953280532815328253283532845328553286532875328853289532905329153292532935329453295532965329753298532995330053301533025330353304533055330653307533085330953310533115331253313533145331553316533175331853319533205332153322533235332453325533265332753328533295333053331533325333353334533355333653337533385333953340533415334253343533445334553346533475334853349533505335153352533535335453355533565335753358533595336053361533625336353364533655336653367533685336953370533715337253373533745337553376533775337853379533805338153382533835338453385533865338753388533895339053391533925339353394533955339653397533985339953400534015340253403534045340553406534075340853409534105341153412534135341453415534165341753418534195342053421534225342353424534255342653427534285342953430534315343253433534345343553436534375343853439534405344153442534435344453445534465344753448534495345053451534525345353454534555345653457534585345953460534615346253463534645346553466534675346853469534705347153472534735347453475534765347753478534795348053481534825348353484534855348653487534885348953490534915349253493534945349553496534975349853499535005350153502535035350453505535065350753508535095351053511535125351353514535155351653517535185351953520535215352253523535245352553526535275352853529535305353153532535335353453535535365353753538535395354053541535425354353544535455354653547535485354953550535515355253553535545355553556535575355853559535605356153562535635356453565535665356753568535695357053571535725357353574535755357653577535785357953580535815358253583535845358553586535875358853589535905359153592535935359453595535965359753598535995360053601536025360353604536055360653607536085360953610536115361253613536145361553616536175361853619536205362153622536235362453625536265362753628536295363053631536325363353634536355363653637536385363953640536415364253643536445364553646536475364853649536505365153652536535365453655536565365753658536595366053661536625366353664536655366653667536685366953670536715367253673536745367553676536775367853679536805368153682536835368453685536865368753688536895369053691536925369353694536955369653697536985369953700537015370253703537045370553706537075370853709537105371153712537135371453715537165371753718537195372053721537225372353724537255372653727537285372953730537315373253733537345373553736537375373853739537405374153742537435374453745537465374753748537495375053751537525375353754537555375653757537585375953760537615376253763537645376553766537675376853769537705377153772537735377453775537765377753778537795378053781537825378353784537855378653787537885378953790537915379253793537945379553796537975379853799538005380153802538035380453805538065380753808538095381053811538125381353814538155381653817538185381953820538215382253823538245382553826538275382853829538305383153832538335383453835538365383753838538395384053841538425384353844538455384653847538485384953850538515385253853538545385553856538575385853859538605386153862538635386453865538665386753868538695387053871538725387353874538755387653877538785387953880538815388253883538845388553886538875388853889538905389153892538935389453895538965389753898538995390053901539025390353904539055390653907539085390953910539115391253913539145391553916539175391853919539205392153922539235392453925539265392753928539295393053931539325393353934539355393653937539385393953940539415394253943539445394553946539475394853949539505395153952539535395453955539565395753958539595396053961539625396353964539655396653967539685396953970539715397253973539745397553976539775397853979539805398153982539835398453985539865398753988539895399053991539925399353994539955399653997539985399954000540015400254003540045400554006540075400854009540105401154012540135401454015540165401754018540195402054021540225402354024540255402654027540285402954030540315403254033540345403554036540375403854039540405404154042540435404454045540465404754048540495405054051540525405354054540555405654057540585405954060540615406254063540645406554066540675406854069540705407154072540735407454075540765407754078540795408054081540825408354084540855408654087540885408954090540915409254093540945409554096540975409854099541005410154102541035410454105541065410754108541095411054111541125411354114541155411654117541185411954120541215412254123541245412554126541275412854129541305413154132541335413454135541365413754138541395414054141541425414354144541455414654147541485414954150541515415254153541545415554156541575415854159541605416154162541635416454165541665416754168541695417054171541725417354174541755417654177541785417954180541815418254183541845418554186541875418854189541905419154192541935419454195541965419754198541995420054201542025420354204542055420654207542085420954210542115421254213542145421554216542175421854219542205422154222542235422454225542265422754228542295423054231542325423354234542355423654237542385423954240542415424254243542445424554246542475424854249542505425154252542535425454255542565425754258542595426054261542625426354264542655426654267542685426954270542715427254273542745427554276542775427854279542805428154282542835428454285542865428754288542895429054291542925429354294542955429654297542985429954300543015430254303543045430554306543075430854309543105431154312543135431454315543165431754318543195432054321543225432354324543255432654327543285432954330543315433254333543345433554336543375433854339543405434154342543435434454345543465434754348543495435054351543525435354354543555435654357543585435954360543615436254363543645436554366543675436854369543705437154372543735437454375543765437754378543795438054381543825438354384543855438654387543885438954390543915439254393543945439554396543975439854399544005440154402544035440454405544065440754408544095441054411544125441354414544155441654417544185441954420544215442254423544245442554426544275442854429544305443154432544335443454435544365443754438544395444054441544425444354444544455444654447544485444954450544515445254453544545445554456544575445854459544605446154462544635446454465544665446754468544695447054471544725447354474544755447654477544785447954480544815448254483544845448554486544875448854489544905449154492544935449454495544965449754498544995450054501545025450354504545055450654507545085450954510545115451254513545145451554516545175451854519545205452154522545235452454525545265452754528545295453054531545325453354534545355453654537545385453954540545415454254543545445454554546545475454854549545505455154552545535455454555545565455754558545595456054561545625456354564545655456654567545685456954570545715457254573545745457554576545775457854579545805458154582545835458454585545865458754588545895459054591545925459354594545955459654597545985459954600546015460254603546045460554606546075460854609546105461154612546135461454615546165461754618546195462054621546225462354624546255462654627546285462954630546315463254633546345463554636546375463854639546405464154642546435464454645546465464754648546495465054651546525465354654546555465654657546585465954660546615466254663546645466554666546675466854669546705467154672546735467454675546765467754678546795468054681546825468354684546855468654687546885468954690546915469254693546945469554696546975469854699547005470154702547035470454705547065470754708547095471054711547125471354714547155471654717547185471954720547215472254723547245472554726547275472854729547305473154732547335473454735547365473754738547395474054741547425474354744547455474654747547485474954750547515475254753547545475554756547575475854759547605476154762547635476454765547665476754768547695477054771547725477354774547755477654777547785477954780547815478254783547845478554786547875478854789547905479154792547935479454795547965479754798547995480054801548025480354804548055480654807548085480954810548115481254813548145481554816548175481854819548205482154822548235482454825548265482754828548295483054831548325483354834548355483654837548385483954840548415484254843548445484554846548475484854849548505485154852548535485454855548565485754858548595486054861548625486354864548655486654867548685486954870548715487254873548745487554876548775487854879548805488154882548835488454885548865488754888548895489054891548925489354894548955489654897548985489954900549015490254903549045490554906549075490854909549105491154912549135491454915549165491754918549195492054921549225492354924549255492654927549285492954930549315493254933549345493554936549375493854939549405494154942549435494454945549465494754948549495495054951549525495354954549555495654957549585495954960549615496254963549645496554966549675496854969549705497154972549735497454975549765497754978549795498054981549825498354984549855498654987549885498954990549915499254993549945499554996549975499854999550005500155002550035500455005550065500755008550095501055011550125501355014550155501655017550185501955020550215502255023550245502555026550275502855029550305503155032550335503455035550365503755038550395504055041550425504355044550455504655047550485504955050550515505255053550545505555056550575505855059550605506155062550635506455065550665506755068550695507055071550725507355074550755507655077550785507955080550815508255083550845508555086550875508855089550905509155092550935509455095550965509755098550995510055101551025510355104551055510655107551085510955110551115511255113551145511555116551175511855119551205512155122551235512455125551265512755128551295513055131551325513355134551355513655137551385513955140551415514255143551445514555146551475514855149551505515155152551535515455155551565515755158551595516055161551625516355164551655516655167551685516955170551715517255173551745517555176551775517855179551805518155182551835518455185551865518755188551895519055191551925519355194551955519655197551985519955200552015520255203552045520555206552075520855209552105521155212552135521455215552165521755218552195522055221552225522355224552255522655227552285522955230552315523255233552345523555236552375523855239552405524155242552435524455245552465524755248552495525055251552525525355254552555525655257552585525955260552615526255263552645526555266552675526855269552705527155272552735527455275552765527755278552795528055281552825528355284552855528655287552885528955290552915529255293552945529555296552975529855299553005530155302553035530455305553065530755308553095531055311553125531355314553155531655317553185531955320553215532255323553245532555326553275532855329553305533155332553335533455335553365533755338553395534055341553425534355344553455534655347553485534955350553515535255353553545535555356553575535855359553605536155362553635536455365553665536755368553695537055371553725537355374553755537655377553785537955380553815538255383553845538555386553875538855389553905539155392553935539455395553965539755398553995540055401554025540355404554055540655407554085540955410554115541255413554145541555416554175541855419554205542155422554235542455425554265542755428554295543055431554325543355434554355543655437554385543955440554415544255443554445544555446554475544855449554505545155452554535545455455554565545755458554595546055461554625546355464554655546655467554685546955470554715547255473554745547555476554775547855479554805548155482554835548455485554865548755488554895549055491554925549355494554955549655497554985549955500555015550255503555045550555506555075550855509555105551155512555135551455515555165551755518555195552055521555225552355524555255552655527555285552955530555315553255533555345553555536555375553855539555405554155542555435554455545555465554755548555495555055551555525555355554555555555655557555585555955560555615556255563555645556555566555675556855569555705557155572555735557455575555765557755578555795558055581555825558355584555855558655587555885558955590555915559255593555945559555596555975559855599556005560155602556035560455605556065560755608556095561055611556125561355614556155561655617556185561955620556215562255623556245562555626556275562855629556305563155632556335563455635556365563755638556395564055641556425564355644556455564655647556485564955650556515565255653556545565555656556575565855659556605566155662556635566455665556665566755668556695567055671556725567355674556755567655677556785567955680556815568255683556845568555686556875568855689556905569155692556935569455695556965569755698556995570055701557025570355704557055570655707557085570955710557115571255713557145571555716557175571855719557205572155722557235572455725557265572755728557295573055731557325573355734557355573655737557385573955740557415574255743557445574555746557475574855749557505575155752557535575455755557565575755758557595576055761557625576355764557655576655767557685576955770557715577255773557745577555776557775577855779557805578155782557835578455785557865578755788557895579055791557925579355794557955579655797557985579955800558015580255803558045580555806558075580855809558105581155812558135581455815558165581755818558195582055821558225582355824558255582655827558285582955830558315583255833558345583555836558375583855839558405584155842558435584455845558465584755848558495585055851558525585355854558555585655857558585585955860558615586255863558645586555866558675586855869558705587155872558735587455875558765587755878558795588055881558825588355884558855588655887558885588955890558915589255893558945589555896558975589855899559005590155902559035590455905559065590755908559095591055911559125591355914559155591655917559185591955920559215592255923559245592555926559275592855929559305593155932559335593455935559365593755938559395594055941559425594355944559455594655947559485594955950559515595255953559545595555956559575595855959559605596155962559635596455965559665596755968559695597055971559725597355974559755597655977559785597955980559815598255983559845598555986559875598855989559905599155992559935599455995559965599755998559995600056001560025600356004560055600656007560085600956010560115601256013560145601556016560175601856019560205602156022560235602456025560265602756028560295603056031560325603356034560355603656037560385603956040560415604256043560445604556046560475604856049560505605156052560535605456055560565605756058560595606056061560625606356064560655606656067560685606956070560715607256073560745607556076560775607856079560805608156082560835608456085560865608756088560895609056091560925609356094560955609656097560985609956100561015610256103561045610556106561075610856109561105611156112561135611456115561165611756118561195612056121561225612356124561255612656127561285612956130561315613256133561345613556136561375613856139561405614156142561435614456145561465614756148561495615056151561525615356154561555615656157561585615956160561615616256163561645616556166561675616856169561705617156172561735617456175561765617756178561795618056181561825618356184561855618656187561885618956190561915619256193561945619556196561975619856199562005620156202562035620456205562065620756208562095621056211562125621356214562155621656217562185621956220562215622256223562245622556226562275622856229562305623156232562335623456235562365623756238562395624056241562425624356244562455624656247562485624956250562515625256253562545625556256562575625856259562605626156262562635626456265562665626756268562695627056271562725627356274562755627656277562785627956280562815628256283562845628556286562875628856289562905629156292562935629456295562965629756298562995630056301563025630356304563055630656307563085630956310563115631256313563145631556316563175631856319563205632156322563235632456325563265632756328563295633056331563325633356334563355633656337563385633956340563415634256343563445634556346563475634856349563505635156352563535635456355563565635756358563595636056361563625636356364563655636656367563685636956370563715637256373563745637556376563775637856379563805638156382563835638456385563865638756388563895639056391563925639356394563955639656397563985639956400564015640256403564045640556406564075640856409564105641156412564135641456415564165641756418564195642056421564225642356424564255642656427564285642956430564315643256433564345643556436564375643856439564405644156442564435644456445564465644756448564495645056451564525645356454564555645656457564585645956460564615646256463564645646556466564675646856469564705647156472564735647456475564765647756478564795648056481564825648356484564855648656487564885648956490564915649256493564945649556496564975649856499565005650156502565035650456505565065650756508565095651056511565125651356514565155651656517565185651956520565215652256523565245652556526565275652856529565305653156532565335653456535565365653756538565395654056541565425654356544565455654656547565485654956550565515655256553565545655556556565575655856559565605656156562565635656456565565665656756568565695657056571565725657356574565755657656577565785657956580565815658256583565845658556586565875658856589565905659156592565935659456595565965659756598565995660056601566025660356604566055660656607566085660956610566115661256613566145661556616566175661856619566205662156622566235662456625566265662756628566295663056631566325663356634566355663656637566385663956640566415664256643566445664556646566475664856649566505665156652566535665456655566565665756658566595666056661566625666356664566655666656667566685666956670566715667256673566745667556676566775667856679566805668156682566835668456685566865668756688566895669056691566925669356694566955669656697566985669956700567015670256703567045670556706567075670856709567105671156712567135671456715567165671756718567195672056721567225672356724567255672656727567285672956730567315673256733567345673556736567375673856739567405674156742567435674456745567465674756748567495675056751567525675356754567555675656757567585675956760567615676256763567645676556766567675676856769567705677156772567735677456775567765677756778567795678056781567825678356784567855678656787567885678956790567915679256793567945679556796567975679856799568005680156802568035680456805568065680756808568095681056811568125681356814568155681656817568185681956820568215682256823568245682556826568275682856829568305683156832568335683456835568365683756838568395684056841568425684356844568455684656847568485684956850568515685256853568545685556856568575685856859568605686156862568635686456865568665686756868568695687056871568725687356874568755687656877568785687956880568815688256883568845688556886568875688856889568905689156892568935689456895568965689756898568995690056901569025690356904569055690656907569085690956910569115691256913569145691556916569175691856919569205692156922569235692456925569265692756928569295693056931569325693356934569355693656937569385693956940569415694256943569445694556946569475694856949569505695156952569535695456955569565695756958569595696056961569625696356964569655696656967569685696956970569715697256973569745697556976569775697856979569805698156982569835698456985569865698756988569895699056991569925699356994569955699656997569985699957000570015700257003570045700557006570075700857009570105701157012570135701457015570165701757018570195702057021570225702357024570255702657027570285702957030570315703257033570345703557036570375703857039570405704157042570435704457045570465704757048570495705057051570525705357054570555705657057570585705957060570615706257063570645706557066570675706857069570705707157072570735707457075570765707757078570795708057081570825708357084570855708657087570885708957090570915709257093570945709557096570975709857099571005710157102571035710457105571065710757108571095711057111571125711357114571155711657117571185711957120571215712257123571245712557126571275712857129571305713157132571335713457135571365713757138571395714057141571425714357144571455714657147571485714957150571515715257153571545715557156571575715857159571605716157162571635716457165571665716757168571695717057171571725717357174571755717657177571785717957180571815718257183571845718557186571875718857189571905719157192571935719457195571965719757198571995720057201572025720357204572055720657207572085720957210572115721257213572145721557216572175721857219572205722157222572235722457225572265722757228572295723057231572325723357234572355723657237572385723957240572415724257243572445724557246572475724857249572505725157252572535725457255572565725757258572595726057261572625726357264572655726657267572685726957270572715727257273572745727557276572775727857279572805728157282572835728457285572865728757288572895729057291572925729357294572955729657297572985729957300573015730257303573045730557306573075730857309573105731157312573135731457315573165731757318573195732057321573225732357324573255732657327573285732957330573315733257333573345733557336573375733857339573405734157342573435734457345573465734757348573495735057351573525735357354573555735657357573585735957360573615736257363573645736557366573675736857369573705737157372573735737457375573765737757378573795738057381573825738357384573855738657387573885738957390573915739257393573945739557396573975739857399574005740157402574035740457405574065740757408574095741057411574125741357414574155741657417574185741957420574215742257423574245742557426574275742857429574305743157432574335743457435574365743757438574395744057441574425744357444574455744657447574485744957450574515745257453574545745557456574575745857459574605746157462574635746457465574665746757468574695747057471574725747357474574755747657477574785747957480574815748257483574845748557486574875748857489574905749157492574935749457495574965749757498574995750057501575025750357504575055750657507575085750957510575115751257513575145751557516575175751857519575205752157522575235752457525575265752757528575295753057531575325753357534575355753657537575385753957540575415754257543575445754557546575475754857549575505755157552575535755457555575565755757558575595756057561575625756357564575655756657567575685756957570575715757257573575745757557576575775757857579575805758157582575835758457585575865758757588575895759057591575925759357594575955759657597575985759957600576015760257603576045760557606576075760857609576105761157612576135761457615576165761757618576195762057621576225762357624576255762657627576285762957630576315763257633576345763557636576375763857639576405764157642576435764457645576465764757648576495765057651576525765357654576555765657657576585765957660576615766257663576645766557666576675766857669576705767157672576735767457675576765767757678576795768057681576825768357684576855768657687576885768957690576915769257693576945769557696576975769857699577005770157702577035770457705577065770757708577095771057711577125771357714577155771657717577185771957720577215772257723577245772557726577275772857729577305773157732577335773457735577365773757738577395774057741577425774357744577455774657747577485774957750577515775257753577545775557756577575775857759577605776157762577635776457765577665776757768577695777057771577725777357774577755777657777577785777957780577815778257783577845778557786577875778857789577905779157792577935779457795577965779757798577995780057801578025780357804578055780657807578085780957810578115781257813578145781557816578175781857819578205782157822578235782457825578265782757828578295783057831578325783357834578355783657837578385783957840578415784257843578445784557846578475784857849578505785157852578535785457855578565785757858578595786057861578625786357864578655786657867578685786957870578715787257873578745787557876578775787857879578805788157882578835788457885578865788757888578895789057891578925789357894578955789657897578985789957900579015790257903579045790557906579075790857909579105791157912579135791457915579165791757918579195792057921579225792357924579255792657927579285792957930579315793257933579345793557936579375793857939579405794157942579435794457945579465794757948579495795057951579525795357954579555795657957579585795957960579615796257963579645796557966579675796857969579705797157972579735797457975579765797757978579795798057981579825798357984579855798657987579885798957990579915799257993579945799557996579975799857999580005800158002580035800458005580065800758008580095801058011580125801358014580155801658017580185801958020580215802258023580245802558026580275802858029580305803158032580335803458035580365803758038580395804058041580425804358044580455804658047580485804958050580515805258053580545805558056580575805858059580605806158062580635806458065580665806758068580695807058071580725807358074580755807658077580785807958080580815808258083580845808558086580875808858089580905809158092580935809458095580965809758098580995810058101581025810358104581055810658107581085810958110581115811258113581145811558116581175811858119581205812158122581235812458125581265812758128581295813058131581325813358134581355813658137581385813958140581415814258143581445814558146581475814858149581505815158152581535815458155581565815758158581595816058161581625816358164581655816658167581685816958170581715817258173581745817558176581775817858179581805818158182581835818458185581865818758188581895819058191581925819358194581955819658197581985819958200582015820258203582045820558206582075820858209582105821158212582135821458215582165821758218582195822058221582225822358224582255822658227582285822958230582315823258233582345823558236582375823858239582405824158242582435824458245582465824758248582495825058251582525825358254582555825658257582585825958260582615826258263582645826558266582675826858269582705827158272582735827458275582765827758278582795828058281582825828358284582855828658287582885828958290582915829258293582945829558296582975829858299583005830158302583035830458305583065830758308583095831058311583125831358314583155831658317583185831958320583215832258323583245832558326583275832858329583305833158332583335833458335583365833758338583395834058341583425834358344583455834658347583485834958350583515835258353583545835558356583575835858359583605836158362583635836458365583665836758368583695837058371583725837358374583755837658377583785837958380583815838258383583845838558386583875838858389583905839158392583935839458395583965839758398583995840058401584025840358404584055840658407584085840958410584115841258413584145841558416584175841858419584205842158422584235842458425584265842758428584295843058431584325843358434584355843658437584385843958440584415844258443584445844558446584475844858449584505845158452584535845458455584565845758458584595846058461584625846358464584655846658467584685846958470584715847258473584745847558476584775847858479584805848158482584835848458485584865848758488584895849058491584925849358494584955849658497584985849958500585015850258503585045850558506585075850858509585105851158512585135851458515585165851758518585195852058521585225852358524585255852658527585285852958530585315853258533585345853558536585375853858539585405854158542585435854458545585465854758548585495855058551585525855358554585555855658557585585855958560585615856258563585645856558566585675856858569585705857158572585735857458575585765857758578585795858058581585825858358584585855858658587585885858958590585915859258593585945859558596585975859858599586005860158602586035860458605586065860758608586095861058611586125861358614586155861658617586185861958620586215862258623586245862558626586275862858629586305863158632586335863458635586365863758638586395864058641586425864358644586455864658647586485864958650586515865258653586545865558656586575865858659586605866158662586635866458665586665866758668586695867058671586725867358674586755867658677586785867958680586815868258683586845868558686586875868858689586905869158692586935869458695586965869758698586995870058701587025870358704587055870658707587085870958710587115871258713587145871558716587175871858719587205872158722587235872458725587265872758728587295873058731587325873358734587355873658737587385873958740587415874258743587445874558746587475874858749587505875158752587535875458755587565875758758587595876058761587625876358764587655876658767587685876958770587715877258773587745877558776587775877858779587805878158782587835878458785587865878758788587895879058791587925879358794587955879658797587985879958800588015880258803588045880558806588075880858809588105881158812588135881458815588165881758818588195882058821588225882358824588255882658827588285882958830588315883258833588345883558836588375883858839588405884158842588435884458845588465884758848588495885058851588525885358854588555885658857588585885958860588615886258863588645886558866588675886858869588705887158872588735887458875588765887758878588795888058881588825888358884588855888658887588885888958890588915889258893588945889558896588975889858899589005890158902589035890458905589065890758908589095891058911589125891358914589155891658917589185891958920589215892258923589245892558926589275892858929589305893158932589335893458935589365893758938589395894058941589425894358944589455894658947589485894958950589515895258953589545895558956589575895858959589605896158962589635896458965589665896758968589695897058971589725897358974589755897658977589785897958980589815898258983589845898558986589875898858989589905899158992589935899458995589965899758998589995900059001590025900359004590055900659007590085900959010590115901259013590145901559016590175901859019590205902159022590235902459025590265902759028590295903059031590325903359034590355903659037590385903959040590415904259043590445904559046590475904859049590505905159052590535905459055590565905759058590595906059061590625906359064590655906659067590685906959070590715907259073590745907559076590775907859079590805908159082590835908459085590865908759088590895909059091590925909359094590955909659097590985909959100591015910259103591045910559106591075910859109591105911159112591135911459115591165911759118591195912059121591225912359124591255912659127591285912959130591315913259133591345913559136591375913859139591405914159142591435914459145591465914759148591495915059151591525915359154591555915659157591585915959160591615916259163591645916559166591675916859169591705917159172591735917459175591765917759178591795918059181591825918359184591855918659187591885918959190591915919259193591945919559196591975919859199592005920159202592035920459205592065920759208592095921059211592125921359214592155921659217592185921959220592215922259223592245922559226592275922859229592305923159232592335923459235592365923759238592395924059241592425924359244592455924659247592485924959250592515925259253592545925559256592575925859259592605926159262592635926459265592665926759268592695927059271592725927359274592755927659277592785927959280592815928259283592845928559286592875928859289592905929159292592935929459295592965929759298592995930059301593025930359304593055930659307593085930959310593115931259313593145931559316593175931859319593205932159322593235932459325593265932759328593295933059331593325933359334593355933659337593385933959340593415934259343593445934559346593475934859349593505935159352593535935459355593565935759358593595936059361593625936359364593655936659367593685936959370593715937259373593745937559376593775937859379593805938159382593835938459385593865938759388593895939059391593925939359394593955939659397593985939959400594015940259403594045940559406594075940859409594105941159412594135941459415594165941759418594195942059421594225942359424594255942659427594285942959430594315943259433594345943559436594375943859439594405944159442594435944459445594465944759448594495945059451594525945359454594555945659457594585945959460594615946259463594645946559466594675946859469594705947159472594735947459475594765947759478594795948059481594825948359484594855948659487594885948959490594915949259493594945949559496594975949859499595005950159502595035950459505595065950759508595095951059511595125951359514595155951659517595185951959520595215952259523595245952559526595275952859529595305953159532595335953459535595365953759538595395954059541595425954359544595455954659547595485954959550595515955259553595545955559556595575955859559595605956159562595635956459565595665956759568595695957059571595725957359574595755957659577595785957959580595815958259583595845958559586595875958859589595905959159592595935959459595595965959759598595995960059601596025960359604596055960659607596085960959610596115961259613596145961559616596175961859619596205962159622596235962459625596265962759628596295963059631596325963359634596355963659637596385963959640596415964259643596445964559646596475964859649596505965159652596535965459655596565965759658596595966059661596625966359664596655966659667596685966959670596715967259673596745967559676596775967859679596805968159682596835968459685596865968759688596895969059691596925969359694596955969659697596985969959700597015970259703597045970559706597075970859709597105971159712597135971459715597165971759718597195972059721597225972359724597255972659727597285972959730597315973259733597345973559736597375973859739597405974159742597435974459745597465974759748597495975059751597525975359754597555975659757597585975959760597615976259763597645976559766597675976859769597705977159772597735977459775597765977759778597795978059781597825978359784597855978659787597885978959790597915979259793597945979559796597975979859799598005980159802598035980459805598065980759808598095981059811598125981359814598155981659817598185981959820598215982259823598245982559826598275982859829598305983159832598335983459835598365983759838598395984059841598425984359844598455984659847598485984959850598515985259853598545985559856598575985859859598605986159862598635986459865598665986759868598695987059871598725987359874598755987659877598785987959880598815988259883598845988559886598875988859889598905989159892598935989459895598965989759898598995990059901599025990359904599055990659907599085990959910599115991259913599145991559916599175991859919599205992159922599235992459925599265992759928599295993059931599325993359934599355993659937599385993959940599415994259943599445994559946599475994859949599505995159952599535995459955599565995759958599595996059961599625996359964599655996659967599685996959970599715997259973599745997559976599775997859979599805998159982599835998459985599865998759988599895999059991599925999359994599955999659997599985999960000600016000260003600046000560006600076000860009600106001160012600136001460015600166001760018600196002060021600226002360024600256002660027600286002960030600316003260033600346003560036600376003860039600406004160042600436004460045600466004760048600496005060051600526005360054600556005660057600586005960060600616006260063600646006560066600676006860069600706007160072600736007460075600766007760078600796008060081600826008360084600856008660087600886008960090600916009260093600946009560096600976009860099601006010160102601036010460105601066010760108601096011060111601126011360114601156011660117601186011960120601216012260123601246012560126601276012860129601306013160132601336013460135601366013760138601396014060141601426014360144601456014660147601486014960150601516015260153601546015560156601576015860159601606016160162601636016460165601666016760168601696017060171601726017360174601756017660177601786017960180601816018260183601846018560186601876018860189601906019160192601936019460195601966019760198601996020060201602026020360204602056020660207602086020960210602116021260213602146021560216602176021860219602206022160222602236022460225602266022760228602296023060231602326023360234602356023660237602386023960240602416024260243602446024560246602476024860249602506025160252602536025460255602566025760258602596026060261602626026360264602656026660267602686026960270602716027260273602746027560276602776027860279602806028160282602836028460285602866028760288602896029060291602926029360294602956029660297602986029960300603016030260303603046030560306603076030860309603106031160312603136031460315603166031760318603196032060321603226032360324603256032660327603286032960330603316033260333603346033560336603376033860339603406034160342603436034460345603466034760348603496035060351603526035360354603556035660357603586035960360603616036260363603646036560366603676036860369603706037160372603736037460375603766037760378603796038060381603826038360384603856038660387603886038960390603916039260393603946039560396603976039860399604006040160402604036040460405604066040760408604096041060411604126041360414604156041660417604186041960420604216042260423604246042560426604276042860429604306043160432604336043460435604366043760438604396044060441604426044360444604456044660447604486044960450604516045260453604546045560456604576045860459604606046160462604636046460465604666046760468604696047060471604726047360474604756047660477604786047960480604816048260483604846048560486604876048860489604906049160492604936049460495604966049760498604996050060501605026050360504605056050660507605086050960510605116051260513605146051560516605176051860519605206052160522605236052460525605266052760528605296053060531605326053360534605356053660537605386053960540605416054260543605446054560546605476054860549605506055160552605536055460555605566055760558605596056060561605626056360564605656056660567605686056960570605716057260573605746057560576605776057860579605806058160582605836058460585605866058760588605896059060591605926059360594605956059660597605986059960600606016060260603606046060560606606076060860609606106061160612606136061460615606166061760618606196062060621606226062360624606256062660627606286062960630606316063260633606346063560636606376063860639606406064160642606436064460645606466064760648606496065060651606526065360654606556065660657606586065960660606616066260663606646066560666606676066860669606706067160672606736067460675606766067760678606796068060681606826068360684606856068660687606886068960690606916069260693606946069560696606976069860699607006070160702607036070460705607066070760708607096071060711607126071360714607156071660717607186071960720607216072260723607246072560726607276072860729607306073160732607336073460735607366073760738607396074060741607426074360744607456074660747607486074960750607516075260753607546075560756607576075860759607606076160762607636076460765607666076760768607696077060771607726077360774607756077660777607786077960780607816078260783607846078560786607876078860789607906079160792607936079460795607966079760798607996080060801608026080360804608056080660807608086080960810608116081260813608146081560816608176081860819608206082160822608236082460825608266082760828608296083060831608326083360834608356083660837608386083960840608416084260843608446084560846608476084860849608506085160852608536085460855608566085760858608596086060861608626086360864608656086660867608686086960870608716087260873608746087560876608776087860879608806088160882608836088460885608866088760888608896089060891608926089360894608956089660897608986089960900609016090260903609046090560906609076090860909609106091160912609136091460915609166091760918609196092060921609226092360924609256092660927609286092960930609316093260933609346093560936609376093860939609406094160942609436094460945609466094760948609496095060951609526095360954609556095660957609586095960960609616096260963609646096560966609676096860969609706097160972609736097460975609766097760978609796098060981609826098360984609856098660987609886098960990609916099260993609946099560996609976099860999610006100161002610036100461005610066100761008610096101061011610126101361014610156101661017610186101961020610216102261023610246102561026610276102861029610306103161032610336103461035610366103761038610396104061041610426104361044610456104661047610486104961050610516105261053610546105561056610576105861059610606106161062610636106461065610666106761068610696107061071610726107361074610756107661077610786107961080610816108261083610846108561086610876108861089610906109161092610936109461095610966109761098610996110061101611026110361104611056110661107611086110961110611116111261113611146111561116611176111861119611206112161122611236112461125611266112761128611296113061131611326113361134611356113661137611386113961140611416114261143611446114561146611476114861149611506115161152611536115461155611566115761158611596116061161611626116361164611656116661167611686116961170611716117261173611746117561176611776117861179611806118161182611836118461185611866118761188611896119061191611926119361194611956119661197611986119961200612016120261203612046120561206612076120861209612106121161212612136121461215612166121761218612196122061221612226122361224612256122661227612286122961230612316123261233612346123561236612376123861239612406124161242612436124461245612466124761248612496125061251612526125361254612556125661257612586125961260612616126261263612646126561266612676126861269612706127161272612736127461275612766127761278612796128061281612826128361284612856128661287612886128961290612916129261293612946129561296612976129861299613006130161302613036130461305613066130761308613096131061311613126131361314613156131661317613186131961320613216132261323613246132561326613276132861329613306133161332613336133461335613366133761338613396134061341613426134361344613456134661347613486134961350613516135261353613546135561356613576135861359613606136161362613636136461365613666136761368613696137061371613726137361374613756137661377613786137961380613816138261383613846138561386613876138861389613906139161392613936139461395613966139761398613996140061401614026140361404614056140661407614086140961410614116141261413614146141561416614176141861419614206142161422614236142461425614266142761428614296143061431614326143361434614356143661437614386143961440614416144261443614446144561446614476144861449614506145161452614536145461455614566145761458614596146061461614626146361464614656146661467614686146961470614716147261473614746147561476614776147861479614806148161482614836148461485614866148761488614896149061491614926149361494614956149661497614986149961500615016150261503615046150561506615076150861509615106151161512615136151461515615166151761518615196152061521615226152361524615256152661527615286152961530615316153261533615346153561536615376153861539615406154161542615436154461545615466154761548615496155061551615526155361554615556155661557615586155961560615616156261563615646156561566615676156861569615706157161572615736157461575615766157761578615796158061581615826158361584615856158661587615886158961590615916159261593615946159561596615976159861599616006160161602616036160461605616066160761608616096161061611616126161361614616156161661617616186161961620616216162261623616246162561626616276162861629616306163161632616336163461635616366163761638616396164061641616426164361644616456164661647616486164961650616516165261653616546165561656616576165861659616606166161662616636166461665616666166761668616696167061671616726167361674616756167661677616786167961680616816168261683616846168561686616876168861689616906169161692616936169461695616966169761698616996170061701617026170361704617056170661707617086170961710617116171261713617146171561716617176171861719617206172161722617236172461725617266172761728617296173061731617326173361734617356173661737617386173961740617416174261743617446174561746617476174861749617506175161752617536175461755617566175761758617596176061761617626176361764617656176661767617686176961770617716177261773617746177561776617776177861779617806178161782617836178461785617866178761788617896179061791617926179361794617956179661797617986179961800618016180261803618046180561806618076180861809618106181161812618136181461815618166181761818618196182061821618226182361824618256182661827618286182961830618316183261833618346183561836618376183861839618406184161842618436184461845618466184761848618496185061851618526185361854618556185661857618586185961860618616186261863618646186561866618676186861869618706187161872618736187461875618766187761878618796188061881618826188361884618856188661887618886188961890618916189261893618946189561896618976189861899619006190161902619036190461905619066190761908619096191061911619126191361914619156191661917619186191961920619216192261923619246192561926619276192861929619306193161932619336193461935619366193761938619396194061941619426194361944619456194661947619486194961950619516195261953619546195561956619576195861959619606196161962619636196461965619666196761968619696197061971619726197361974619756197661977619786197961980619816198261983619846198561986619876198861989619906199161992619936199461995619966199761998619996200062001620026200362004620056200662007620086200962010620116201262013620146201562016620176201862019620206202162022620236202462025620266202762028620296203062031620326203362034620356203662037620386203962040620416204262043620446204562046620476204862049620506205162052620536205462055620566205762058620596206062061620626206362064620656206662067620686206962070620716207262073620746207562076620776207862079620806208162082620836208462085620866208762088620896209062091620926209362094620956209662097620986209962100621016210262103621046210562106621076210862109621106211162112621136211462115621166211762118621196212062121621226212362124621256212662127621286212962130621316213262133621346213562136621376213862139621406214162142621436214462145621466214762148621496215062151621526215362154621556215662157621586215962160621616216262163621646216562166621676216862169621706217162172621736217462175621766217762178621796218062181621826218362184621856218662187621886218962190621916219262193621946219562196621976219862199622006220162202622036220462205622066220762208622096221062211622126221362214622156221662217622186221962220622216222262223622246222562226622276222862229622306223162232622336223462235622366223762238622396224062241622426224362244622456224662247622486224962250622516225262253622546225562256622576225862259622606226162262622636226462265622666226762268622696227062271622726227362274622756227662277622786227962280622816228262283622846228562286622876228862289622906229162292622936229462295622966229762298622996230062301623026230362304623056230662307623086230962310623116231262313623146231562316623176231862319623206232162322623236232462325623266232762328623296233062331623326233362334623356233662337623386233962340623416234262343623446234562346623476234862349623506235162352623536235462355623566235762358623596236062361623626236362364623656236662367623686236962370623716237262373623746237562376623776237862379623806238162382623836238462385623866238762388623896239062391623926239362394623956239662397623986239962400624016240262403624046240562406624076240862409624106241162412624136241462415624166241762418624196242062421624226242362424624256242662427624286242962430624316243262433624346243562436624376243862439624406244162442624436244462445624466244762448624496245062451624526245362454624556245662457624586245962460624616246262463624646246562466624676246862469624706247162472624736247462475624766247762478624796248062481624826248362484624856248662487624886248962490624916249262493624946249562496624976249862499625006250162502625036250462505625066250762508625096251062511625126251362514625156251662517625186251962520625216252262523625246252562526625276252862529625306253162532625336253462535625366253762538625396254062541625426254362544625456254662547625486254962550625516255262553625546255562556625576255862559625606256162562625636256462565625666256762568625696257062571625726257362574625756257662577625786257962580625816258262583625846258562586625876258862589625906259162592625936259462595625966259762598625996260062601626026260362604626056260662607626086260962610626116261262613626146261562616626176261862619626206262162622626236262462625626266262762628626296263062631626326263362634626356263662637626386263962640626416264262643626446264562646626476264862649626506265162652626536265462655626566265762658626596266062661626626266362664626656266662667626686266962670626716267262673626746267562676626776267862679626806268162682626836268462685626866268762688626896269062691626926269362694626956269662697626986269962700627016270262703627046270562706627076270862709627106271162712627136271462715627166271762718627196272062721627226272362724627256272662727627286272962730627316273262733627346273562736627376273862739627406274162742627436274462745627466274762748627496275062751627526275362754627556275662757627586275962760627616276262763627646276562766627676276862769627706277162772627736277462775627766277762778627796278062781627826278362784627856278662787627886278962790627916279262793627946279562796627976279862799628006280162802628036280462805628066280762808628096281062811628126281362814628156281662817628186281962820628216282262823628246282562826628276282862829628306283162832628336283462835628366283762838628396284062841628426284362844628456284662847628486284962850628516285262853628546285562856628576285862859628606286162862628636286462865628666286762868628696287062871628726287362874628756287662877628786287962880628816288262883628846288562886628876288862889628906289162892628936289462895628966289762898628996290062901629026290362904629056290662907629086290962910629116291262913629146291562916629176291862919629206292162922629236292462925629266292762928629296293062931629326293362934629356293662937629386293962940629416294262943629446294562946629476294862949629506295162952629536295462955629566295762958629596296062961629626296362964629656296662967629686296962970629716297262973629746297562976629776297862979629806298162982629836298462985629866298762988629896299062991629926299362994629956299662997629986299963000630016300263003630046300563006630076300863009630106301163012630136301463015630166301763018630196302063021630226302363024630256302663027630286302963030630316303263033630346303563036630376303863039630406304163042630436304463045630466304763048630496305063051630526305363054630556305663057630586305963060630616306263063630646306563066630676306863069630706307163072630736307463075630766307763078630796308063081630826308363084630856308663087630886308963090630916309263093630946309563096630976309863099631006310163102631036310463105631066310763108631096311063111631126311363114631156311663117631186311963120631216312263123631246312563126631276312863129631306313163132631336313463135631366313763138631396314063141631426314363144631456314663147631486314963150631516315263153631546315563156631576315863159631606316163162631636316463165631666316763168631696317063171631726317363174631756317663177631786317963180631816318263183631846318563186631876318863189631906319163192631936319463195631966319763198631996320063201632026320363204632056320663207632086320963210632116321263213632146321563216632176321863219632206322163222632236322463225632266322763228632296323063231632326323363234632356323663237632386323963240632416324263243632446324563246632476324863249632506325163252632536325463255632566325763258632596326063261632626326363264632656326663267632686326963270632716327263273632746327563276632776327863279632806328163282632836328463285632866328763288632896329063291632926329363294632956329663297632986329963300633016330263303633046330563306633076330863309633106331163312633136331463315633166331763318633196332063321633226332363324633256332663327633286332963330633316333263333633346333563336633376333863339633406334163342633436334463345633466334763348633496335063351633526335363354633556335663357633586335963360633616336263363633646336563366633676336863369633706337163372633736337463375633766337763378633796338063381633826338363384633856338663387633886338963390633916339263393633946339563396633976339863399634006340163402634036340463405634066340763408634096341063411634126341363414634156341663417634186341963420634216342263423634246342563426634276342863429634306343163432634336343463435634366343763438634396344063441634426344363444634456344663447634486344963450634516345263453634546345563456634576345863459634606346163462634636346463465634666346763468634696347063471634726347363474634756347663477634786347963480634816348263483634846348563486634876348863489634906349163492634936349463495634966349763498634996350063501635026350363504635056350663507635086350963510635116351263513635146351563516635176351863519635206352163522635236352463525635266352763528635296353063531635326353363534635356353663537635386353963540635416354263543635446354563546635476354863549635506355163552635536355463555635566355763558635596356063561635626356363564635656356663567635686356963570635716357263573635746357563576635776357863579635806358163582635836358463585635866358763588635896359063591635926359363594635956359663597635986359963600636016360263603636046360563606636076360863609636106361163612636136361463615636166361763618636196362063621636226362363624636256362663627636286362963630636316363263633636346363563636636376363863639636406364163642636436364463645636466364763648636496365063651636526365363654636556365663657636586365963660636616366263663636646366563666636676366863669636706367163672636736367463675636766367763678636796368063681636826368363684636856368663687636886368963690636916369263693636946369563696636976369863699637006370163702637036370463705637066370763708637096371063711637126371363714637156371663717637186371963720637216372263723637246372563726637276372863729637306373163732637336373463735637366373763738637396374063741637426374363744637456374663747637486374963750637516375263753637546375563756637576375863759637606376163762637636376463765637666376763768637696377063771637726377363774637756377663777637786377963780637816378263783637846378563786637876378863789637906379163792637936379463795637966379763798637996380063801638026380363804638056380663807638086380963810638116381263813638146381563816638176381863819638206382163822638236382463825638266382763828638296383063831638326383363834638356383663837638386383963840638416384263843638446384563846638476384863849638506385163852638536385463855638566385763858638596386063861638626386363864638656386663867638686386963870638716387263873638746387563876638776387863879638806388163882638836388463885638866388763888638896389063891638926389363894638956389663897638986389963900639016390263903639046390563906639076390863909639106391163912639136391463915639166391763918639196392063921639226392363924639256392663927639286392963930639316393263933639346393563936639376393863939639406394163942639436394463945639466394763948639496395063951639526395363954639556395663957639586395963960639616396263963639646396563966639676396863969639706397163972639736397463975639766397763978639796398063981639826398363984639856398663987639886398963990639916399263993639946399563996639976399863999640006400164002640036400464005640066400764008640096401064011640126401364014640156401664017640186401964020640216402264023640246402564026640276402864029640306403164032640336403464035640366403764038640396404064041640426404364044640456404664047640486404964050640516405264053640546405564056640576405864059640606406164062640636406464065640666406764068640696407064071640726407364074640756407664077640786407964080640816408264083640846408564086640876408864089640906409164092640936409464095640966409764098640996410064101641026410364104641056410664107641086410964110641116411264113641146411564116641176411864119641206412164122641236412464125641266412764128641296413064131641326413364134641356413664137641386413964140641416414264143641446414564146641476414864149641506415164152641536415464155641566415764158641596416064161641626416364164641656416664167641686416964170641716417264173641746417564176641776417864179641806418164182641836418464185641866418764188641896419064191641926419364194641956419664197641986419964200642016420264203642046420564206642076420864209642106421164212642136421464215642166421764218642196422064221642226422364224642256422664227642286422964230642316423264233642346423564236642376423864239642406424164242642436424464245642466424764248642496425064251642526425364254642556425664257642586425964260642616426264263
  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. throw_op_num = range->end;
  2682. }
  2683. /* Find the innermost try/catch/finally the exception was thrown in */
  2684. for (i = 0; i < EX(func)->op_array.last_try_catch; i++) {
  2685. zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[i];
  2686. if (try_catch->try_op > throw_op_num) {
  2687. /* further blocks will not be relevant... */
  2688. break;
  2689. }
  2690. if (throw_op_num < try_catch->catch_op || throw_op_num < try_catch->finally_end) {
  2691. current_try_catch_offset = i;
  2692. }
  2693. }
  2694. cleanup_unfinished_calls(execute_data, throw_op_num);
  2695. if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) {
  2696. switch (throw_op->opcode) {
  2697. case ZEND_ADD_ARRAY_ELEMENT:
  2698. case ZEND_ADD_ARRAY_UNPACK:
  2699. case ZEND_ROPE_INIT:
  2700. case ZEND_ROPE_ADD:
  2701. break; /* exception while building structures, live range handling will free those */
  2702. case ZEND_FETCH_CLASS:
  2703. case ZEND_DECLARE_ANON_CLASS:
  2704. break; /* return value is zend_class_entry pointer */
  2705. default:
  2706. /* smart branch opcodes may not initialize result */
  2707. if (!zend_is_smart_branch(throw_op)) {
  2708. zval_ptr_dtor_nogc(EX_VAR(throw_op->result.var));
  2709. }
  2710. }
  2711. }
  2712. ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, throw_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  2713. }
  2714. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2715. {
  2716. USE_OPLINE
  2717. int ret;
  2718. SAVE_OPLINE();
  2719. ret = zend_user_opcode_handlers[opline->opcode](execute_data);
  2720. opline = EX(opline);
  2721. switch (ret) {
  2722. case ZEND_USER_OPCODE_CONTINUE:
  2723. ZEND_VM_CONTINUE();
  2724. case ZEND_USER_OPCODE_RETURN:
  2725. if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
  2726. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  2727. zend_generator_close(generator, 1);
  2728. ZEND_VM_RETURN();
  2729. } else {
  2730. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  2731. }
  2732. case ZEND_USER_OPCODE_ENTER:
  2733. ZEND_VM_ENTER();
  2734. case ZEND_USER_OPCODE_LEAVE:
  2735. ZEND_VM_LEAVE();
  2736. case ZEND_USER_OPCODE_DISPATCH:
  2737. ZEND_VM_DISPATCH(opline->opcode, opline);
  2738. default:
  2739. ZEND_VM_DISPATCH((zend_uchar)(ret & 0xff), opline);
  2740. }
  2741. }
  2742. static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  2743. {
  2744. USE_OPLINE
  2745. SAVE_OPLINE();
  2746. zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
  2747. FREE_OP(opline->op2_type, opline->op2.var);
  2748. FREE_OP(opline->op1_type, opline->op1.var);
  2749. UNDEF_RESULT();
  2750. HANDLE_EXCEPTION();
  2751. }
  2752. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2753. {
  2754. USE_OPLINE
  2755. zval *fast_call = EX_VAR(opline->op1.var);
  2756. SAVE_OPLINE();
  2757. /* cleanup incomplete RETURN statement */
  2758. if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
  2759. && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
  2760. zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);
  2761. zval_ptr_dtor(return_value);
  2762. }
  2763. /* cleanup delayed exception */
  2764. if (Z_OBJ_P(fast_call) != NULL) {
  2765. /* discard the previously thrown exception */
  2766. OBJ_RELEASE(Z_OBJ_P(fast_call));
  2767. Z_OBJ_P(fast_call) = NULL;
  2768. }
  2769. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2770. }
  2771. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2772. {
  2773. USE_OPLINE
  2774. zval *fast_call = EX_VAR(opline->result.var);
  2775. Z_OBJ_P(fast_call) = NULL;
  2776. /* set return address */
  2777. Z_OPLINE_NUM_P(fast_call) = opline - EX(func)->op_array.opcodes;
  2778. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
  2779. }
  2780. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2781. {
  2782. USE_OPLINE
  2783. zval *fast_call = EX_VAR(opline->op1.var);
  2784. uint32_t current_try_catch_offset, current_op_num;
  2785. if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1) {
  2786. const zend_op *fast_ret = EX(func)->op_array.opcodes + Z_OPLINE_NUM_P(fast_call);
  2787. ZEND_VM_JMP_EX(fast_ret + 1, 0);
  2788. }
  2789. /* special case for unhandled exceptions */
  2790. EG(exception) = Z_OBJ_P(fast_call);
  2791. Z_OBJ_P(fast_call) = NULL;
  2792. current_try_catch_offset = opline->op2.num;
  2793. current_op_num = opline - EX(func)->op_array.opcodes;
  2794. ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, current_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  2795. }
  2796. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2797. {
  2798. USE_OPLINE
  2799. if (EG(assertions) <= 0) {
  2800. zend_op *target = OP_JMP_ADDR(opline, opline->op2);
  2801. if (RETURN_VALUE_USED(opline)) {
  2802. ZVAL_TRUE(EX_VAR(opline->result.var));
  2803. }
  2804. ZEND_VM_JMP_EX(target, 0);
  2805. } else {
  2806. ZEND_VM_NEXT_OPCODE();
  2807. }
  2808. }
  2809. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2810. {
  2811. zend_array *args = NULL;
  2812. zend_function *fbc = EX(func);
  2813. zval *ret = EX(return_value);
  2814. uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
  2815. uint32_t num_args = EX_NUM_ARGS();
  2816. zend_execute_data *call;
  2817. SAVE_OPLINE();
  2818. if (num_args) {
  2819. zval *p = ZEND_CALL_ARG(execute_data, 1);
  2820. zval *end = p + num_args;
  2821. args = zend_new_array(num_args);
  2822. zend_hash_real_init_packed(args);
  2823. ZEND_HASH_FILL_PACKED(args) {
  2824. do {
  2825. ZEND_HASH_FILL_ADD(p);
  2826. p++;
  2827. } while (p != end);
  2828. } ZEND_HASH_FILL_END();
  2829. }
  2830. call = execute_data;
  2831. execute_data = EG(current_execute_data) = EX(prev_execute_data);
  2832. call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
  2833. ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
  2834. ZEND_CALL_NUM_ARGS(call) = 2;
  2835. ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);
  2836. zval *call_args = ZEND_CALL_ARG(call, 2);
  2837. if (args) {
  2838. ZVAL_ARR(call_args, args);
  2839. } else {
  2840. ZVAL_EMPTY_ARRAY(call_args);
  2841. }
  2842. if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
  2843. if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
  2844. GC_ADDREF(call->extra_named_params);
  2845. ZVAL_ARR(call_args, call->extra_named_params);
  2846. } else {
  2847. SEPARATE_ARRAY(call_args);
  2848. zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
  2849. }
  2850. }
  2851. zend_free_trampoline(fbc);
  2852. fbc = call->func;
  2853. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
  2854. if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  2855. init_func_run_time_cache(&fbc->op_array);
  2856. }
  2857. execute_data = call;
  2858. i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
  2859. if (EXPECTED(zend_execute_ex == execute_ex)) {
  2860. LOAD_OPLINE_EX();
  2861. ZEND_VM_ENTER_EX();
  2862. } else {
  2863. SAVE_OPLINE_EX();
  2864. execute_data = EX(prev_execute_data);
  2865. LOAD_OPLINE();
  2866. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  2867. zend_execute_ex(call);
  2868. }
  2869. } else {
  2870. zval retval;
  2871. ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
  2872. EG(current_execute_data) = call;
  2873. #if ZEND_DEBUG
  2874. bool should_throw = zend_internal_call_should_throw(fbc, call);
  2875. #endif
  2876. if (ret == NULL) {
  2877. ret = &retval;
  2878. }
  2879. ZVAL_NULL(ret);
  2880. if (!zend_execute_internal) {
  2881. /* saves one function call if zend_execute_internal is not used */
  2882. fbc->internal_function.handler(call, ret);
  2883. } else {
  2884. zend_execute_internal(call, ret);
  2885. }
  2886. #if ZEND_DEBUG
  2887. if (!EG(exception) && call->func) {
  2888. if (should_throw) {
  2889. zend_internal_call_arginfo_violation(call->func);
  2890. }
  2891. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  2892. zend_verify_internal_return_type(call->func, ret));
  2893. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  2894. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  2895. zend_verify_internal_func_info(call->func, ret);
  2896. }
  2897. #endif
  2898. EG(current_execute_data) = call->prev_execute_data;
  2899. zend_vm_stack_free_args(call);
  2900. if (ret == &retval) {
  2901. zval_ptr_dtor(ret);
  2902. }
  2903. }
  2904. execute_data = EG(current_execute_data);
  2905. if (!EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
  2906. ZEND_VM_RETURN();
  2907. }
  2908. if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
  2909. zend_object *object = Z_OBJ(call->This);
  2910. OBJ_RELEASE(object);
  2911. }
  2912. zend_vm_stack_free_call_frame(call);
  2913. if (UNEXPECTED(EG(exception) != NULL)) {
  2914. zend_rethrow_exception(execute_data);
  2915. HANDLE_EXCEPTION_LEAVE();
  2916. }
  2917. LOAD_OPLINE();
  2918. ZEND_VM_INC_OPCODE();
  2919. ZEND_VM_LEAVE();
  2920. }
  2921. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2922. {
  2923. zend_array *args = NULL;
  2924. zend_function *fbc = EX(func);
  2925. zval *ret = EX(return_value);
  2926. uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
  2927. uint32_t num_args = EX_NUM_ARGS();
  2928. zend_execute_data *call;
  2929. SAVE_OPLINE();
  2930. if (num_args) {
  2931. zval *p = ZEND_CALL_ARG(execute_data, 1);
  2932. zval *end = p + num_args;
  2933. args = zend_new_array(num_args);
  2934. zend_hash_real_init_packed(args);
  2935. ZEND_HASH_FILL_PACKED(args) {
  2936. do {
  2937. ZEND_HASH_FILL_ADD(p);
  2938. p++;
  2939. } while (p != end);
  2940. } ZEND_HASH_FILL_END();
  2941. }
  2942. call = execute_data;
  2943. execute_data = EG(current_execute_data) = EX(prev_execute_data);
  2944. call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
  2945. ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
  2946. ZEND_CALL_NUM_ARGS(call) = 2;
  2947. ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);
  2948. zval *call_args = ZEND_CALL_ARG(call, 2);
  2949. if (args) {
  2950. ZVAL_ARR(call_args, args);
  2951. } else {
  2952. ZVAL_EMPTY_ARRAY(call_args);
  2953. }
  2954. if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
  2955. if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
  2956. GC_ADDREF(call->extra_named_params);
  2957. ZVAL_ARR(call_args, call->extra_named_params);
  2958. } else {
  2959. SEPARATE_ARRAY(call_args);
  2960. zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
  2961. }
  2962. }
  2963. zend_free_trampoline(fbc);
  2964. fbc = call->func;
  2965. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
  2966. if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  2967. init_func_run_time_cache(&fbc->op_array);
  2968. }
  2969. execute_data = call;
  2970. i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
  2971. if (EXPECTED(zend_execute_ex == execute_ex)) {
  2972. LOAD_OPLINE_EX();
  2973. SAVE_OPLINE();
  2974. zend_observer_fcall_begin(execute_data);
  2975. ZEND_VM_ENTER_EX();
  2976. } else {
  2977. SAVE_OPLINE_EX();
  2978. zend_observer_fcall_begin(execute_data);
  2979. execute_data = EX(prev_execute_data);
  2980. LOAD_OPLINE();
  2981. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  2982. zend_execute_ex(call);
  2983. }
  2984. } else {
  2985. zval retval;
  2986. ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
  2987. EG(current_execute_data) = call;
  2988. #if ZEND_DEBUG
  2989. bool should_throw = zend_internal_call_should_throw(fbc, call);
  2990. #endif
  2991. if (ret == NULL) {
  2992. ret = &retval;
  2993. }
  2994. ZVAL_NULL(ret);
  2995. if (!zend_execute_internal) {
  2996. /* saves one function call if zend_execute_internal is not used */
  2997. fbc->internal_function.handler(call, ret);
  2998. } else {
  2999. zend_execute_internal(call, ret);
  3000. }
  3001. #if ZEND_DEBUG
  3002. if (!EG(exception) && call->func) {
  3003. if (should_throw) {
  3004. zend_internal_call_arginfo_violation(call->func);
  3005. }
  3006. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  3007. zend_verify_internal_return_type(call->func, ret));
  3008. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  3009. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  3010. zend_verify_internal_func_info(call->func, ret);
  3011. }
  3012. #endif
  3013. EG(current_execute_data) = call->prev_execute_data;
  3014. zend_vm_stack_free_args(call);
  3015. if (ret == &retval) {
  3016. zval_ptr_dtor(ret);
  3017. }
  3018. }
  3019. execute_data = EG(current_execute_data);
  3020. if (!EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
  3021. ZEND_VM_RETURN();
  3022. }
  3023. if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
  3024. zend_object *object = Z_OBJ(call->This);
  3025. OBJ_RELEASE(object);
  3026. }
  3027. zend_vm_stack_free_call_frame(call);
  3028. if (UNEXPECTED(EG(exception) != NULL)) {
  3029. zend_rethrow_exception(execute_data);
  3030. HANDLE_EXCEPTION_LEAVE();
  3031. }
  3032. LOAD_OPLINE();
  3033. ZEND_VM_INC_OPCODE();
  3034. ZEND_VM_LEAVE();
  3035. }
  3036. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3037. {
  3038. USE_OPLINE
  3039. OPLINE = OP_JMP_ADDR(opline, opline->op1);
  3040. ZEND_VM_CONTINUE();
  3041. }
  3042. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  3043. {
  3044. EG(vm_interrupt) = 0;
  3045. SAVE_OPLINE();
  3046. if (EG(timed_out)) {
  3047. zend_timeout();
  3048. } else if (zend_interrupt_function) {
  3049. zend_interrupt_function(execute_data);
  3050. if (EG(exception)) {
  3051. /* We have to UNDEF result, because ZEND_HANDLE_EXCEPTION is going to free it */
  3052. const zend_op *throw_op = EG(opline_before_exception);
  3053. if (throw_op
  3054. && throw_op->result_type & (IS_TMP_VAR|IS_VAR)
  3055. && throw_op->opcode != ZEND_ADD_ARRAY_ELEMENT
  3056. && throw_op->opcode != ZEND_ADD_ARRAY_UNPACK
  3057. && throw_op->opcode != ZEND_ROPE_INIT
  3058. && throw_op->opcode != ZEND_ROPE_ADD) {
  3059. ZVAL_UNDEF(ZEND_CALL_VAR(EG(current_execute_data), throw_op->result.var));
  3060. }
  3061. }
  3062. ZEND_VM_ENTER();
  3063. }
  3064. ZEND_VM_CONTINUE();
  3065. }
  3066. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3067. {
  3068. USE_OPLINE
  3069. zend_function *fbc;
  3070. zval *function_name, *func;
  3071. zend_execute_data *call;
  3072. fbc = CACHED_PTR(opline->result.num);
  3073. if (UNEXPECTED(fbc == NULL)) {
  3074. function_name = (zval*)RT_CONSTANT(opline, opline->op2);
  3075. func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(function_name+1));
  3076. if (UNEXPECTED(func == NULL)) {
  3077. ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3078. }
  3079. fbc = Z_FUNC_P(func);
  3080. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  3081. init_func_run_time_cache(&fbc->op_array);
  3082. }
  3083. CACHE_PTR(opline->result.num, fbc);
  3084. }
  3085. call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  3086. fbc, opline->extended_value, NULL);
  3087. call->prev_execute_data = EX(call);
  3088. EX(call) = call;
  3089. ZEND_VM_NEXT_OPCODE();
  3090. }
  3091. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3092. {
  3093. USE_OPLINE
  3094. zval *function_name;
  3095. zend_execute_data *call;
  3096. SAVE_OPLINE();
  3097. function_name = RT_CONSTANT(opline, opline->op2);
  3098. try_function_name:
  3099. if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  3100. call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
  3101. } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
  3102. call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
  3103. } else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
  3104. call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
  3105. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
  3106. function_name = Z_REFVAL_P(function_name);
  3107. goto try_function_name;
  3108. } else {
  3109. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  3110. function_name = ZVAL_UNDEFINED_OP2();
  3111. if (UNEXPECTED(EG(exception) != NULL)) {
  3112. HANDLE_EXCEPTION();
  3113. }
  3114. }
  3115. zend_throw_error(NULL, "Value of type %s is not callable",
  3116. zend_zval_type_name(function_name));
  3117. call = NULL;
  3118. }
  3119. if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
  3120. if (UNEXPECTED(EG(exception))) {
  3121. if (call) {
  3122. if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
  3123. zend_string_release_ex(call->func->common.function_name, 0);
  3124. zend_free_trampoline(call->func);
  3125. }
  3126. zend_vm_stack_free_call_frame(call);
  3127. }
  3128. HANDLE_EXCEPTION();
  3129. }
  3130. } else if (!call) {
  3131. HANDLE_EXCEPTION();
  3132. }
  3133. call->prev_execute_data = EX(call);
  3134. EX(call) = call;
  3135. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3136. }
  3137. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3138. {
  3139. USE_OPLINE
  3140. zval *func_name;
  3141. zval *func;
  3142. zend_function *fbc;
  3143. zend_execute_data *call;
  3144. fbc = CACHED_PTR(opline->result.num);
  3145. if (UNEXPECTED(fbc == NULL)) {
  3146. func_name = (zval *)RT_CONSTANT(opline, opline->op2);
  3147. func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name + 1));
  3148. if (func == NULL) {
  3149. func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name + 2));
  3150. if (UNEXPECTED(func == NULL)) {
  3151. ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3152. }
  3153. }
  3154. fbc = Z_FUNC_P(func);
  3155. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  3156. init_func_run_time_cache(&fbc->op_array);
  3157. }
  3158. CACHE_PTR(opline->result.num, fbc);
  3159. }
  3160. call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  3161. fbc, opline->extended_value, NULL);
  3162. call->prev_execute_data = EX(call);
  3163. EX(call) = call;
  3164. ZEND_VM_NEXT_OPCODE();
  3165. }
  3166. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3167. {
  3168. USE_OPLINE
  3169. zval *fname;
  3170. zval *func;
  3171. zend_function *fbc;
  3172. zend_execute_data *call;
  3173. fbc = CACHED_PTR(opline->result.num);
  3174. if (UNEXPECTED(fbc == NULL)) {
  3175. fname = (zval*)RT_CONSTANT(opline, opline->op2);
  3176. func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(fname));
  3177. if (UNEXPECTED(func == NULL)) {
  3178. ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3179. }
  3180. fbc = Z_FUNC_P(func);
  3181. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  3182. init_func_run_time_cache(&fbc->op_array);
  3183. }
  3184. CACHE_PTR(opline->result.num, fbc);
  3185. }
  3186. call = _zend_vm_stack_push_call_frame_ex(
  3187. opline->op1.num, ZEND_CALL_NESTED_FUNCTION,
  3188. fbc, opline->extended_value, NULL);
  3189. call->prev_execute_data = EX(call);
  3190. EX(call) = call;
  3191. ZEND_VM_NEXT_OPCODE();
  3192. }
  3193. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3194. {
  3195. USE_OPLINE
  3196. uint32_t arg_num;
  3197. zval *param;
  3198. ZEND_VM_REPEATABLE_OPCODE
  3199. arg_num = opline->op1.num;
  3200. param = EX_VAR(opline->result.var);
  3201. if (arg_num > EX_NUM_ARGS()) {
  3202. zval *default_value = RT_CONSTANT(opline, opline->op2);
  3203. if (Z_OPT_TYPE_P(default_value) == IS_CONSTANT_AST) {
  3204. zval *cache_val = (zval*)CACHE_ADDR(Z_CACHE_SLOT_P(default_value));
  3205. /* we keep in cache only not refcounted values */
  3206. if (Z_TYPE_P(cache_val) != IS_UNDEF) {
  3207. ZVAL_COPY_VALUE(param, cache_val);
  3208. } else {
  3209. SAVE_OPLINE();
  3210. ZVAL_COPY(param, default_value);
  3211. if (UNEXPECTED(zval_update_constant_ex(param, EX(func)->op_array.scope) != SUCCESS)) {
  3212. zval_ptr_dtor_nogc(param);
  3213. ZVAL_UNDEF(param);
  3214. HANDLE_EXCEPTION();
  3215. }
  3216. if (!Z_REFCOUNTED_P(param)) {
  3217. ZVAL_COPY_VALUE(cache_val, param);
  3218. }
  3219. }
  3220. goto recv_init_check_type;
  3221. } else {
  3222. ZVAL_COPY(param, default_value);
  3223. }
  3224. } else {
  3225. recv_init_check_type:
  3226. if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
  3227. SAVE_OPLINE();
  3228. if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param, CACHE_ADDR(opline->extended_value)))) {
  3229. HANDLE_EXCEPTION();
  3230. }
  3231. }
  3232. }
  3233. ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
  3234. ZEND_VM_NEXT_OPCODE();
  3235. }
  3236. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3237. {
  3238. USE_OPLINE
  3239. zval *function_name;
  3240. zend_execute_data *call;
  3241. SAVE_OPLINE();
  3242. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  3243. try_function_name:
  3244. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  3245. call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
  3246. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
  3247. call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
  3248. } else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
  3249. call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
  3250. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
  3251. function_name = Z_REFVAL_P(function_name);
  3252. goto try_function_name;
  3253. } else {
  3254. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  3255. function_name = ZVAL_UNDEFINED_OP2();
  3256. if (UNEXPECTED(EG(exception) != NULL)) {
  3257. HANDLE_EXCEPTION();
  3258. }
  3259. }
  3260. zend_throw_error(NULL, "Value of type %s is not callable",
  3261. zend_zval_type_name(function_name));
  3262. call = NULL;
  3263. }
  3264. if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
  3265. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  3266. if (UNEXPECTED(EG(exception))) {
  3267. if (call) {
  3268. if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
  3269. zend_string_release_ex(call->func->common.function_name, 0);
  3270. zend_free_trampoline(call->func);
  3271. }
  3272. zend_vm_stack_free_call_frame(call);
  3273. }
  3274. HANDLE_EXCEPTION();
  3275. }
  3276. } else if (!call) {
  3277. HANDLE_EXCEPTION();
  3278. }
  3279. call->prev_execute_data = EX(call);
  3280. EX(call) = call;
  3281. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3282. }
  3283. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3284. {
  3285. USE_OPLINE
  3286. uint32_t arg_num = opline->op1.num;
  3287. zval *param;
  3288. if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
  3289. ZEND_VM_TAIL_CALL(zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3290. }
  3291. param = EX_VAR(opline->result.var);
  3292. if (UNEXPECTED(!(opline->op2.num & (1u << Z_TYPE_P(param))))) {
  3293. ZEND_VM_TAIL_CALL(zend_verify_recv_arg_type_helper_SPEC(param ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  3294. }
  3295. ZEND_VM_NEXT_OPCODE();
  3296. }
  3297. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3298. {
  3299. USE_OPLINE
  3300. uint32_t arg_num = opline->op1.num;
  3301. uint32_t arg_count = EX_NUM_ARGS();
  3302. zval *params;
  3303. SAVE_OPLINE();
  3304. params = EX_VAR(opline->result.var);
  3305. if (arg_num <= arg_count) {
  3306. ZEND_ASSERT(EX(func)->common.fn_flags & ZEND_ACC_VARIADIC);
  3307. ZEND_ASSERT(EX(func)->common.num_args == arg_num - 1);
  3308. zend_arg_info *arg_info = &EX(func)->common.arg_info[arg_num - 1];
  3309. array_init_size(params, arg_count - arg_num + 1);
  3310. zend_hash_real_init_packed(Z_ARRVAL_P(params));
  3311. ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
  3312. zval *param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
  3313. if (UNEXPECTED(ZEND_TYPE_IS_SET(arg_info->type))) {
  3314. ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_FREE_EXTRA_ARGS);
  3315. do {
  3316. if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param, CACHE_ADDR(opline->extended_value)))) {
  3317. ZEND_HASH_FILL_FINISH();
  3318. HANDLE_EXCEPTION();
  3319. }
  3320. if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
  3321. ZEND_HASH_FILL_ADD(param);
  3322. param++;
  3323. } while (++arg_num <= arg_count);
  3324. } else {
  3325. do {
  3326. if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
  3327. ZEND_HASH_FILL_ADD(param);
  3328. param++;
  3329. } while (++arg_num <= arg_count);
  3330. }
  3331. } ZEND_HASH_FILL_END();
  3332. } else {
  3333. ZVAL_EMPTY_ARRAY(params);
  3334. }
  3335. if (EX_CALL_INFO() & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
  3336. zend_string *name;
  3337. zval *param;
  3338. zend_arg_info *arg_info = &EX(func)->common.arg_info[EX(func)->common.num_args];
  3339. if (ZEND_TYPE_IS_SET(arg_info->type)) {
  3340. SEPARATE_ARRAY(params);
  3341. ZEND_HASH_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
  3342. if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param, CACHE_ADDR(opline->extended_value)))) {
  3343. HANDLE_EXCEPTION();
  3344. }
  3345. Z_TRY_ADDREF_P(param);
  3346. zend_hash_add_new(Z_ARRVAL_P(params), name, param);
  3347. } ZEND_HASH_FOREACH_END();
  3348. } else if (zend_hash_num_elements(Z_ARRVAL_P(params)) == 0) {
  3349. GC_ADDREF(EX(extra_named_params));
  3350. ZVAL_ARR(params, EX(extra_named_params));
  3351. } else {
  3352. SEPARATE_ARRAY(params);
  3353. ZEND_HASH_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
  3354. Z_TRY_ADDREF_P(param);
  3355. zend_hash_add_new(Z_ARRVAL_P(params), name, param);
  3356. } ZEND_HASH_FOREACH_END();
  3357. }
  3358. }
  3359. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3360. }
  3361. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3362. {
  3363. USE_OPLINE
  3364. zval *function_name;
  3365. zend_execute_data *call;
  3366. SAVE_OPLINE();
  3367. function_name = EX_VAR(opline->op2.var);
  3368. try_function_name:
  3369. if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  3370. call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
  3371. } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
  3372. call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
  3373. } else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
  3374. call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
  3375. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
  3376. function_name = Z_REFVAL_P(function_name);
  3377. goto try_function_name;
  3378. } else {
  3379. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  3380. function_name = ZVAL_UNDEFINED_OP2();
  3381. if (UNEXPECTED(EG(exception) != NULL)) {
  3382. HANDLE_EXCEPTION();
  3383. }
  3384. }
  3385. zend_throw_error(NULL, "Value of type %s is not callable",
  3386. zend_zval_type_name(function_name));
  3387. call = NULL;
  3388. }
  3389. if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
  3390. if (UNEXPECTED(EG(exception))) {
  3391. if (call) {
  3392. if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
  3393. zend_string_release_ex(call->func->common.function_name, 0);
  3394. zend_free_trampoline(call->func);
  3395. }
  3396. zend_vm_stack_free_call_frame(call);
  3397. }
  3398. HANDLE_EXCEPTION();
  3399. }
  3400. } else if (!call) {
  3401. HANDLE_EXCEPTION();
  3402. }
  3403. call->prev_execute_data = EX(call);
  3404. EX(call) = call;
  3405. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3406. }
  3407. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3408. {
  3409. USE_OPLINE
  3410. zval *op1;
  3411. op1 = RT_CONSTANT(opline, opline->op1);
  3412. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  3413. ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
  3414. ZEND_VM_NEXT_OPCODE();
  3415. }
  3416. ZEND_VM_TAIL_CALL(zend_bw_not_helper_SPEC(op1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  3417. }
  3418. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3419. {
  3420. USE_OPLINE
  3421. zval *val;
  3422. val = RT_CONSTANT(opline, opline->op1);
  3423. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  3424. ZVAL_FALSE(EX_VAR(opline->result.var));
  3425. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  3426. /* The result and op1 can be the same cv zval */
  3427. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  3428. ZVAL_TRUE(EX_VAR(opline->result.var));
  3429. if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  3430. SAVE_OPLINE();
  3431. ZVAL_UNDEFINED_OP1();
  3432. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3433. }
  3434. } else {
  3435. SAVE_OPLINE();
  3436. ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
  3437. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3438. }
  3439. ZEND_VM_NEXT_OPCODE();
  3440. }
  3441. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3442. {
  3443. USE_OPLINE
  3444. zval *z;
  3445. SAVE_OPLINE();
  3446. z = RT_CONSTANT(opline, opline->op1);
  3447. if (Z_TYPE_P(z) == IS_STRING) {
  3448. zend_string *str = Z_STR_P(z);
  3449. if (ZSTR_LEN(str) != 0) {
  3450. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  3451. }
  3452. } else {
  3453. zend_string *str = zval_get_string_func(z);
  3454. if (ZSTR_LEN(str) != 0) {
  3455. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  3456. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
  3457. ZVAL_UNDEFINED_OP1();
  3458. }
  3459. zend_string_release_ex(str, 0);
  3460. }
  3461. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3462. }
  3463. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3464. {
  3465. USE_OPLINE
  3466. zval *val;
  3467. zend_uchar op1_type;
  3468. val = RT_CONSTANT(opline, opline->op1);
  3469. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  3470. ZEND_VM_NEXT_OPCODE();
  3471. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  3472. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  3473. SAVE_OPLINE();
  3474. ZVAL_UNDEFINED_OP1();
  3475. if (UNEXPECTED(EG(exception))) {
  3476. HANDLE_EXCEPTION();
  3477. }
  3478. }
  3479. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  3480. }
  3481. SAVE_OPLINE();
  3482. op1_type = IS_CONST;
  3483. if (i_zend_is_true(val)) {
  3484. opline++;
  3485. } else {
  3486. opline = OP_JMP_ADDR(opline, opline->op2);
  3487. }
  3488. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  3489. zval_ptr_dtor_nogc(val);
  3490. }
  3491. ZEND_VM_JMP(opline);
  3492. }
  3493. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3494. {
  3495. USE_OPLINE
  3496. zval *val;
  3497. zend_uchar op1_type;
  3498. val = RT_CONSTANT(opline, opline->op1);
  3499. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  3500. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  3501. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  3502. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  3503. SAVE_OPLINE();
  3504. ZVAL_UNDEFINED_OP1();
  3505. if (UNEXPECTED(EG(exception))) {
  3506. HANDLE_EXCEPTION();
  3507. }
  3508. }
  3509. ZEND_VM_NEXT_OPCODE();
  3510. }
  3511. SAVE_OPLINE();
  3512. op1_type = IS_CONST;
  3513. if (i_zend_is_true(val)) {
  3514. opline = OP_JMP_ADDR(opline, opline->op2);
  3515. } else {
  3516. opline++;
  3517. }
  3518. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  3519. zval_ptr_dtor_nogc(val);
  3520. }
  3521. ZEND_VM_JMP(opline);
  3522. }
  3523. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3524. {
  3525. USE_OPLINE
  3526. zval *val;
  3527. zend_uchar op1_type;
  3528. val = RT_CONSTANT(opline, opline->op1);
  3529. if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
  3530. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  3531. ZEND_VM_CONTINUE();
  3532. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  3533. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  3534. SAVE_OPLINE();
  3535. ZVAL_UNDEFINED_OP1();
  3536. if (UNEXPECTED(EG(exception))) {
  3537. HANDLE_EXCEPTION();
  3538. }
  3539. }
  3540. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  3541. }
  3542. SAVE_OPLINE();
  3543. op1_type = IS_CONST;
  3544. if (i_zend_is_true(val)) {
  3545. opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
  3546. } else {
  3547. opline = OP_JMP_ADDR(opline, opline->op2);
  3548. }
  3549. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  3550. zval_ptr_dtor_nogc(val);
  3551. }
  3552. ZEND_VM_JMP(opline);
  3553. }
  3554. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3555. {
  3556. USE_OPLINE
  3557. zval *val;
  3558. bool ret;
  3559. val = RT_CONSTANT(opline, opline->op1);
  3560. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  3561. ZVAL_TRUE(EX_VAR(opline->result.var));
  3562. ZEND_VM_NEXT_OPCODE();
  3563. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  3564. ZVAL_FALSE(EX_VAR(opline->result.var));
  3565. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  3566. SAVE_OPLINE();
  3567. ZVAL_UNDEFINED_OP1();
  3568. if (UNEXPECTED(EG(exception))) {
  3569. HANDLE_EXCEPTION();
  3570. }
  3571. }
  3572. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  3573. }
  3574. SAVE_OPLINE();
  3575. ret = i_zend_is_true(val);
  3576. if (ret) {
  3577. ZVAL_TRUE(EX_VAR(opline->result.var));
  3578. opline++;
  3579. } else {
  3580. ZVAL_FALSE(EX_VAR(opline->result.var));
  3581. opline = OP_JMP_ADDR(opline, opline->op2);
  3582. }
  3583. ZEND_VM_JMP(opline);
  3584. }
  3585. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3586. {
  3587. USE_OPLINE
  3588. zval *val;
  3589. bool ret;
  3590. val = RT_CONSTANT(opline, opline->op1);
  3591. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  3592. ZVAL_TRUE(EX_VAR(opline->result.var));
  3593. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  3594. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  3595. ZVAL_FALSE(EX_VAR(opline->result.var));
  3596. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  3597. SAVE_OPLINE();
  3598. ZVAL_UNDEFINED_OP1();
  3599. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3600. } else {
  3601. ZEND_VM_NEXT_OPCODE();
  3602. }
  3603. }
  3604. SAVE_OPLINE();
  3605. ret = i_zend_is_true(val);
  3606. if (ret) {
  3607. ZVAL_TRUE(EX_VAR(opline->result.var));
  3608. opline = OP_JMP_ADDR(opline, opline->op2);
  3609. } else {
  3610. ZVAL_FALSE(EX_VAR(opline->result.var));
  3611. opline++;
  3612. }
  3613. ZEND_VM_JMP(opline);
  3614. }
  3615. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3616. {
  3617. USE_OPLINE
  3618. zval *retval_ptr;
  3619. zval *return_value;
  3620. retval_ptr = RT_CONSTANT(opline, opline->op1);
  3621. return_value = EX(return_value);
  3622. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  3623. SAVE_OPLINE();
  3624. retval_ptr = ZVAL_UNDEFINED_OP1();
  3625. if (return_value) {
  3626. ZVAL_NULL(return_value);
  3627. }
  3628. } else if (!return_value) {
  3629. if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
  3630. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  3631. SAVE_OPLINE();
  3632. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  3633. }
  3634. }
  3635. } else {
  3636. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  3637. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3638. if (IS_CONST == IS_CONST) {
  3639. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  3640. Z_ADDREF_P(return_value);
  3641. }
  3642. }
  3643. } else if (IS_CONST == IS_CV) {
  3644. do {
  3645. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  3646. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  3647. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  3648. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  3649. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3650. if (GC_MAY_LEAK(ref)) {
  3651. gc_possible_root(ref);
  3652. }
  3653. ZVAL_NULL(retval_ptr);
  3654. break;
  3655. } else {
  3656. Z_ADDREF_P(retval_ptr);
  3657. }
  3658. } else {
  3659. retval_ptr = Z_REFVAL_P(retval_ptr);
  3660. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  3661. Z_ADDREF_P(retval_ptr);
  3662. }
  3663. }
  3664. }
  3665. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3666. } while (0);
  3667. } else /* if (IS_CONST == IS_VAR) */ {
  3668. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  3669. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  3670. retval_ptr = Z_REFVAL_P(retval_ptr);
  3671. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3672. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  3673. efree_size(ref, sizeof(zend_reference));
  3674. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  3675. Z_ADDREF_P(retval_ptr);
  3676. }
  3677. } else {
  3678. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3679. }
  3680. }
  3681. }
  3682. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3683. }
  3684. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3685. {
  3686. USE_OPLINE
  3687. zval *retval_ptr;
  3688. zval *return_value;
  3689. zval observer_retval;
  3690. retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
  3691. return_value = EX(return_value);
  3692. if (!return_value) { return_value = &observer_retval; };
  3693. if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  3694. SAVE_OPLINE();
  3695. retval_ptr = ZVAL_UNDEFINED_OP1();
  3696. if (return_value) {
  3697. ZVAL_NULL(return_value);
  3698. }
  3699. } else if (!return_value) {
  3700. if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
  3701. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  3702. SAVE_OPLINE();
  3703. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  3704. }
  3705. }
  3706. } else {
  3707. if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
  3708. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3709. if (opline->op1_type == IS_CONST) {
  3710. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  3711. Z_ADDREF_P(return_value);
  3712. }
  3713. }
  3714. } else if (opline->op1_type == IS_CV) {
  3715. do {
  3716. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  3717. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  3718. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  3719. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  3720. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3721. if (GC_MAY_LEAK(ref)) {
  3722. gc_possible_root(ref);
  3723. }
  3724. ZVAL_NULL(retval_ptr);
  3725. break;
  3726. } else {
  3727. Z_ADDREF_P(retval_ptr);
  3728. }
  3729. } else {
  3730. retval_ptr = Z_REFVAL_P(retval_ptr);
  3731. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  3732. Z_ADDREF_P(retval_ptr);
  3733. }
  3734. }
  3735. }
  3736. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3737. } while (0);
  3738. } else /* if (opline->op1_type == IS_VAR) */ {
  3739. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  3740. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  3741. retval_ptr = Z_REFVAL_P(retval_ptr);
  3742. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3743. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  3744. efree_size(ref, sizeof(zend_reference));
  3745. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  3746. Z_ADDREF_P(retval_ptr);
  3747. }
  3748. } else {
  3749. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3750. }
  3751. }
  3752. }
  3753. SAVE_OPLINE();
  3754. zend_observer_fcall_end(execute_data, return_value);
  3755. if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
  3756. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3757. }
  3758. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3759. {
  3760. USE_OPLINE
  3761. zval *retval_ptr;
  3762. zval *return_value;
  3763. SAVE_OPLINE();
  3764. return_value = EX(return_value);
  3765. do {
  3766. if ((IS_CONST & (IS_CONST|IS_TMP_VAR)) ||
  3767. (IS_CONST == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
  3768. /* Not supposed to happen, but we'll allow it */
  3769. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  3770. retval_ptr = RT_CONSTANT(opline, opline->op1);
  3771. if (!return_value) {
  3772. } else {
  3773. if (IS_CONST == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  3774. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3775. break;
  3776. }
  3777. ZVAL_NEW_REF(return_value, retval_ptr);
  3778. if (IS_CONST == IS_CONST) {
  3779. Z_TRY_ADDREF_P(retval_ptr);
  3780. }
  3781. }
  3782. break;
  3783. }
  3784. retval_ptr = NULL;
  3785. if (IS_CONST == IS_VAR) {
  3786. ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
  3787. if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
  3788. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  3789. if (return_value) {
  3790. ZVAL_NEW_REF(return_value, retval_ptr);
  3791. } else {
  3792. }
  3793. break;
  3794. }
  3795. }
  3796. if (return_value) {
  3797. if (Z_ISREF_P(retval_ptr)) {
  3798. Z_ADDREF_P(retval_ptr);
  3799. } else {
  3800. ZVAL_MAKE_REF_EX(retval_ptr, 2);
  3801. }
  3802. ZVAL_REF(return_value, Z_REF_P(retval_ptr));
  3803. }
  3804. } while (0);
  3805. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3806. }
  3807. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3808. {
  3809. USE_OPLINE
  3810. zval *retval_ptr;
  3811. zval *return_value;
  3812. zval observer_retval;
  3813. SAVE_OPLINE();
  3814. return_value = EX(return_value);
  3815. if (!return_value) { return_value = &observer_retval; };
  3816. do {
  3817. if ((opline->op1_type & (IS_CONST|IS_TMP_VAR)) ||
  3818. (opline->op1_type == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
  3819. /* Not supposed to happen, but we'll allow it */
  3820. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  3821. retval_ptr = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
  3822. if (!return_value) {
  3823. FREE_OP(opline->op1_type, opline->op1.var);
  3824. } else {
  3825. if (opline->op1_type == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  3826. ZVAL_COPY_VALUE(return_value, retval_ptr);
  3827. break;
  3828. }
  3829. ZVAL_NEW_REF(return_value, retval_ptr);
  3830. if (opline->op1_type == IS_CONST) {
  3831. Z_TRY_ADDREF_P(retval_ptr);
  3832. }
  3833. }
  3834. break;
  3835. }
  3836. retval_ptr = get_zval_ptr_ptr(opline->op1_type, opline->op1, BP_VAR_W);
  3837. if (opline->op1_type == IS_VAR) {
  3838. ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
  3839. if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
  3840. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  3841. if (return_value) {
  3842. ZVAL_NEW_REF(return_value, retval_ptr);
  3843. } else {
  3844. if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));};
  3845. }
  3846. break;
  3847. }
  3848. }
  3849. if (return_value) {
  3850. if (Z_ISREF_P(retval_ptr)) {
  3851. Z_ADDREF_P(retval_ptr);
  3852. } else {
  3853. ZVAL_MAKE_REF_EX(retval_ptr, 2);
  3854. }
  3855. ZVAL_REF(return_value, Z_REF_P(retval_ptr));
  3856. }
  3857. if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));};
  3858. } while (0);
  3859. zend_observer_fcall_end(execute_data, return_value);
  3860. if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
  3861. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3862. }
  3863. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3864. {
  3865. USE_OPLINE
  3866. zval *retval;
  3867. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  3868. SAVE_OPLINE();
  3869. retval = RT_CONSTANT(opline, opline->op1);
  3870. /* Copy return value into generator->retval */
  3871. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  3872. ZVAL_COPY_VALUE(&generator->retval, retval);
  3873. if (IS_CONST == IS_CONST) {
  3874. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
  3875. Z_ADDREF(generator->retval);
  3876. }
  3877. }
  3878. } else if (IS_CONST == IS_CV) {
  3879. ZVAL_COPY_DEREF(&generator->retval, retval);
  3880. } else /* if (IS_CONST == IS_VAR) */ {
  3881. if (UNEXPECTED(Z_ISREF_P(retval))) {
  3882. zend_refcounted *ref = Z_COUNTED_P(retval);
  3883. retval = Z_REFVAL_P(retval);
  3884. ZVAL_COPY_VALUE(&generator->retval, retval);
  3885. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  3886. efree_size(ref, sizeof(zend_reference));
  3887. } else if (Z_OPT_REFCOUNTED_P(retval)) {
  3888. Z_ADDREF_P(retval);
  3889. }
  3890. } else {
  3891. ZVAL_COPY_VALUE(&generator->retval, retval);
  3892. }
  3893. }
  3894. /* Close the generator to free up resources */
  3895. zend_generator_close(generator, 1);
  3896. /* Pass execution back to handling code */
  3897. ZEND_VM_RETURN();
  3898. }
  3899. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3900. {
  3901. USE_OPLINE
  3902. zval *retval;
  3903. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  3904. SAVE_OPLINE();
  3905. retval = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
  3906. /* Copy return value into generator->retval */
  3907. if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
  3908. ZVAL_COPY_VALUE(&generator->retval, retval);
  3909. if (opline->op1_type == IS_CONST) {
  3910. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
  3911. Z_ADDREF(generator->retval);
  3912. }
  3913. }
  3914. } else if (opline->op1_type == IS_CV) {
  3915. ZVAL_COPY_DEREF(&generator->retval, retval);
  3916. } else /* if (opline->op1_type == IS_VAR) */ {
  3917. if (UNEXPECTED(Z_ISREF_P(retval))) {
  3918. zend_refcounted *ref = Z_COUNTED_P(retval);
  3919. retval = Z_REFVAL_P(retval);
  3920. ZVAL_COPY_VALUE(&generator->retval, retval);
  3921. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  3922. efree_size(ref, sizeof(zend_reference));
  3923. } else if (Z_OPT_REFCOUNTED_P(retval)) {
  3924. Z_ADDREF_P(retval);
  3925. }
  3926. } else {
  3927. ZVAL_COPY_VALUE(&generator->retval, retval);
  3928. }
  3929. }
  3930. zend_observer_fcall_end(generator->execute_data, &generator->retval);
  3931. /* Close the generator to free up resources */
  3932. zend_generator_close(generator, 1);
  3933. /* Pass execution back to handling code */
  3934. ZEND_VM_RETURN();
  3935. }
  3936. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3937. {
  3938. USE_OPLINE
  3939. zval *value;
  3940. SAVE_OPLINE();
  3941. value = RT_CONSTANT(opline, opline->op1);
  3942. do {
  3943. if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
  3944. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  3945. value = Z_REFVAL_P(value);
  3946. if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
  3947. break;
  3948. }
  3949. }
  3950. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  3951. ZVAL_UNDEFINED_OP1();
  3952. if (UNEXPECTED(EG(exception) != NULL)) {
  3953. HANDLE_EXCEPTION();
  3954. }
  3955. }
  3956. zend_throw_error(NULL, "Can only throw objects");
  3957. HANDLE_EXCEPTION();
  3958. }
  3959. } while (0);
  3960. zend_exception_save();
  3961. Z_TRY_ADDREF_P(value);
  3962. zend_throw_exception_object(value);
  3963. zend_exception_restore();
  3964. HANDLE_EXCEPTION();
  3965. }
  3966. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3967. {
  3968. USE_OPLINE
  3969. zend_class_entry *ce, *catch_ce;
  3970. zend_object *exception;
  3971. SAVE_OPLINE();
  3972. /* Check whether an exception has been thrown, if not, jump over code */
  3973. zend_exception_restore();
  3974. if (EG(exception) == NULL) {
  3975. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  3976. }
  3977. catch_ce = CACHED_PTR(opline->extended_value & ~ZEND_LAST_CATCH);
  3978. if (UNEXPECTED(catch_ce == NULL)) {
  3979. 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);
  3980. CACHE_PTR(opline->extended_value & ~ZEND_LAST_CATCH, catch_ce);
  3981. }
  3982. ce = EG(exception)->ce;
  3983. #ifdef HAVE_DTRACE
  3984. if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) {
  3985. DTRACE_EXCEPTION_CAUGHT((char *)ce->name);
  3986. }
  3987. #endif /* HAVE_DTRACE */
  3988. if (ce != catch_ce) {
  3989. if (!catch_ce || !instanceof_function(ce, catch_ce)) {
  3990. if (opline->extended_value & ZEND_LAST_CATCH) {
  3991. zend_rethrow_exception(execute_data);
  3992. HANDLE_EXCEPTION();
  3993. }
  3994. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  3995. }
  3996. }
  3997. exception = EG(exception);
  3998. EG(exception) = NULL;
  3999. if (RETURN_VALUE_USED(opline)) {
  4000. /* Always perform a strict assignment. There is a reasonable expectation that if you
  4001. * write "catch (Exception $e)" then $e will actually be instanceof Exception. As such,
  4002. * we should not permit coercion to string here. */
  4003. zval tmp;
  4004. ZVAL_OBJ(&tmp, exception);
  4005. zend_assign_to_variable(EX_VAR(opline->result.var), &tmp, IS_TMP_VAR, /* strict */ 1);
  4006. } else {
  4007. OBJ_RELEASE(exception);
  4008. }
  4009. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4010. }
  4011. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4012. {
  4013. USE_OPLINE
  4014. zval *arg, *param;
  4015. SAVE_OPLINE();
  4016. arg = RT_CONSTANT(opline, opline->op1);
  4017. param = ZEND_CALL_VAR(EX(call), opline->result.var);
  4018. if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
  4019. zend_param_must_be_ref(EX(call)->func, opline->op2.num);
  4020. Z_TRY_ADDREF_P(arg);
  4021. ZVAL_NEW_REF(param, arg);
  4022. } else {
  4023. ZVAL_COPY(param, arg);
  4024. }
  4025. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4026. }
  4027. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4028. {
  4029. USE_OPLINE
  4030. zval *val;
  4031. val = RT_CONSTANT(opline, opline->op1);
  4032. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  4033. ZVAL_TRUE(EX_VAR(opline->result.var));
  4034. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  4035. /* The result and op1 can be the same cv zval */
  4036. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  4037. ZVAL_FALSE(EX_VAR(opline->result.var));
  4038. if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  4039. SAVE_OPLINE();
  4040. ZVAL_UNDEFINED_OP1();
  4041. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4042. }
  4043. } else {
  4044. SAVE_OPLINE();
  4045. ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
  4046. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4047. }
  4048. ZEND_VM_NEXT_OPCODE();
  4049. }
  4050. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4051. {
  4052. USE_OPLINE
  4053. zval *obj;
  4054. zend_object *zobj;
  4055. zend_class_entry *ce, *scope;
  4056. zend_function *clone;
  4057. zend_object_clone_obj_t clone_call;
  4058. SAVE_OPLINE();
  4059. obj = RT_CONSTANT(opline, opline->op1);
  4060. do {
  4061. if (IS_CONST == IS_CONST ||
  4062. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
  4063. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
  4064. obj = Z_REFVAL_P(obj);
  4065. if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
  4066. break;
  4067. }
  4068. }
  4069. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4070. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
  4071. ZVAL_UNDEFINED_OP1();
  4072. if (UNEXPECTED(EG(exception) != NULL)) {
  4073. HANDLE_EXCEPTION();
  4074. }
  4075. }
  4076. zend_throw_error(NULL, "__clone method called on non-object");
  4077. HANDLE_EXCEPTION();
  4078. }
  4079. } while (0);
  4080. zobj = Z_OBJ_P(obj);
  4081. ce = zobj->ce;
  4082. clone = ce->clone;
  4083. clone_call = zobj->handlers->clone_obj;
  4084. if (UNEXPECTED(clone_call == NULL)) {
  4085. zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
  4086. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4087. HANDLE_EXCEPTION();
  4088. }
  4089. if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
  4090. scope = EX(func)->op_array.scope;
  4091. if (clone->common.scope != scope) {
  4092. if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
  4093. || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
  4094. zend_wrong_clone_call(clone, scope);
  4095. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4096. HANDLE_EXCEPTION();
  4097. }
  4098. }
  4099. }
  4100. ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
  4101. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4102. }
  4103. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4104. {
  4105. USE_OPLINE
  4106. zval *expr;
  4107. zval *result = EX_VAR(opline->result.var);
  4108. HashTable *ht;
  4109. SAVE_OPLINE();
  4110. expr = RT_CONSTANT(opline, opline->op1);
  4111. switch (opline->extended_value) {
  4112. case IS_LONG:
  4113. ZVAL_LONG(result, zval_get_long(expr));
  4114. break;
  4115. case IS_DOUBLE:
  4116. ZVAL_DOUBLE(result, zval_get_double(expr));
  4117. break;
  4118. case IS_STRING:
  4119. ZVAL_STR(result, zval_get_string(expr));
  4120. break;
  4121. default:
  4122. ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
  4123. if (IS_CONST & (IS_VAR|IS_CV)) {
  4124. ZVAL_DEREF(expr);
  4125. }
  4126. /* If value is already of correct type, return it directly */
  4127. if (Z_TYPE_P(expr) == opline->extended_value) {
  4128. ZVAL_COPY_VALUE(result, expr);
  4129. if (IS_CONST == IS_CONST) {
  4130. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  4131. } else if (IS_CONST != IS_TMP_VAR) {
  4132. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  4133. }
  4134. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4135. }
  4136. if (opline->extended_value == IS_ARRAY) {
  4137. if (IS_CONST == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
  4138. if (Z_TYPE_P(expr) != IS_NULL) {
  4139. ZVAL_ARR(result, zend_new_array(1));
  4140. expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
  4141. if (IS_CONST == IS_CONST) {
  4142. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  4143. } else {
  4144. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  4145. }
  4146. } else {
  4147. ZVAL_EMPTY_ARRAY(result);
  4148. }
  4149. } else if (Z_OBJ_P(expr)->properties == NULL
  4150. && Z_OBJ_HT_P(expr)->get_properties_for == NULL
  4151. && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
  4152. /* Optimized version without rebuilding properties HashTable */
  4153. ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
  4154. } else {
  4155. HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
  4156. if (obj_ht) {
  4157. /* fast copy */
  4158. ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
  4159. (Z_OBJCE_P(expr)->default_properties_count ||
  4160. Z_OBJ_P(expr)->handlers != &std_object_handlers ||
  4161. GC_IS_RECURSIVE(obj_ht))));
  4162. zend_release_properties(obj_ht);
  4163. } else {
  4164. ZVAL_EMPTY_ARRAY(result);
  4165. }
  4166. }
  4167. } else {
  4168. ZEND_ASSERT(opline->extended_value == IS_OBJECT);
  4169. ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
  4170. if (Z_TYPE_P(expr) == IS_ARRAY) {
  4171. ht = zend_symtable_to_proptable(Z_ARR_P(expr));
  4172. if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
  4173. /* TODO: try not to duplicate immutable arrays as well ??? */
  4174. ht = zend_array_dup(ht);
  4175. }
  4176. Z_OBJ_P(result)->properties = ht;
  4177. } else if (Z_TYPE_P(expr) != IS_NULL) {
  4178. Z_OBJ_P(result)->properties = ht = zend_new_array(1);
  4179. expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
  4180. if (IS_CONST == IS_CONST) {
  4181. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  4182. } else {
  4183. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  4184. }
  4185. }
  4186. }
  4187. }
  4188. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4189. }
  4190. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4191. {
  4192. USE_OPLINE
  4193. zend_op_array *new_op_array;
  4194. zval *inc_filename;
  4195. SAVE_OPLINE();
  4196. inc_filename = RT_CONSTANT(opline, opline->op1);
  4197. new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
  4198. if (UNEXPECTED(EG(exception) != NULL)) {
  4199. if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
  4200. destroy_op_array(new_op_array);
  4201. efree_size(new_op_array, sizeof(zend_op_array));
  4202. }
  4203. UNDEF_RESULT();
  4204. HANDLE_EXCEPTION();
  4205. } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
  4206. if (RETURN_VALUE_USED(opline)) {
  4207. ZVAL_TRUE(EX_VAR(opline->result.var));
  4208. }
  4209. } else if (EXPECTED(new_op_array != NULL)) {
  4210. zval *return_value = NULL;
  4211. zend_execute_data *call;
  4212. if (RETURN_VALUE_USED(opline)) {
  4213. return_value = EX_VAR(opline->result.var);
  4214. }
  4215. new_op_array->scope = EX(func)->op_array.scope;
  4216. call = zend_vm_stack_push_call_frame(
  4217. (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
  4218. (zend_function*)new_op_array, 0,
  4219. Z_PTR(EX(This)));
  4220. if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
  4221. call->symbol_table = EX(symbol_table);
  4222. } else {
  4223. call->symbol_table = zend_rebuild_symbol_table();
  4224. }
  4225. call->prev_execute_data = execute_data;
  4226. i_init_code_execute_data(call, new_op_array, return_value);
  4227. if (EXPECTED(zend_execute_ex == execute_ex)) {
  4228. ZEND_VM_ENTER();
  4229. } else {
  4230. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  4231. zend_execute_ex(call);
  4232. zend_vm_stack_free_call_frame(call);
  4233. }
  4234. zend_destroy_static_vars(new_op_array);
  4235. destroy_op_array(new_op_array);
  4236. efree_size(new_op_array, sizeof(zend_op_array));
  4237. if (UNEXPECTED(EG(exception) != NULL)) {
  4238. zend_rethrow_exception(execute_data);
  4239. UNDEF_RESULT();
  4240. HANDLE_EXCEPTION();
  4241. }
  4242. } else if (RETURN_VALUE_USED(opline)) {
  4243. ZVAL_FALSE(EX_VAR(opline->result.var));
  4244. }
  4245. ZEND_VM_NEXT_OPCODE();
  4246. }
  4247. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4248. {
  4249. USE_OPLINE
  4250. zend_op_array *new_op_array;
  4251. zval *inc_filename;
  4252. SAVE_OPLINE();
  4253. inc_filename = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
  4254. new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
  4255. if (UNEXPECTED(EG(exception) != NULL)) {
  4256. FREE_OP(opline->op1_type, opline->op1.var);
  4257. if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
  4258. destroy_op_array(new_op_array);
  4259. efree_size(new_op_array, sizeof(zend_op_array));
  4260. }
  4261. UNDEF_RESULT();
  4262. HANDLE_EXCEPTION();
  4263. } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
  4264. if (RETURN_VALUE_USED(opline)) {
  4265. ZVAL_TRUE(EX_VAR(opline->result.var));
  4266. }
  4267. } else if (EXPECTED(new_op_array != NULL)) {
  4268. zval *return_value = NULL;
  4269. zend_execute_data *call;
  4270. if (RETURN_VALUE_USED(opline)) {
  4271. return_value = EX_VAR(opline->result.var);
  4272. }
  4273. new_op_array->scope = EX(func)->op_array.scope;
  4274. call = zend_vm_stack_push_call_frame(
  4275. (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
  4276. (zend_function*)new_op_array, 0,
  4277. Z_PTR(EX(This)));
  4278. if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
  4279. call->symbol_table = EX(symbol_table);
  4280. } else {
  4281. call->symbol_table = zend_rebuild_symbol_table();
  4282. }
  4283. call->prev_execute_data = execute_data;
  4284. i_init_code_execute_data(call, new_op_array, return_value);
  4285. zend_observer_fcall_begin(call);
  4286. if (EXPECTED(zend_execute_ex == execute_ex)) {
  4287. FREE_OP(opline->op1_type, opline->op1.var);
  4288. ZEND_VM_ENTER();
  4289. } else {
  4290. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  4291. zend_execute_ex(call);
  4292. zend_vm_stack_free_call_frame(call);
  4293. }
  4294. zend_destroy_static_vars(new_op_array);
  4295. destroy_op_array(new_op_array);
  4296. efree_size(new_op_array, sizeof(zend_op_array));
  4297. if (UNEXPECTED(EG(exception) != NULL)) {
  4298. zend_rethrow_exception(execute_data);
  4299. FREE_OP(opline->op1_type, opline->op1.var);
  4300. UNDEF_RESULT();
  4301. HANDLE_EXCEPTION();
  4302. }
  4303. } else if (RETURN_VALUE_USED(opline)) {
  4304. ZVAL_FALSE(EX_VAR(opline->result.var));
  4305. }
  4306. FREE_OP(opline->op1_type, opline->op1.var);
  4307. ZEND_VM_NEXT_OPCODE();
  4308. }
  4309. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4310. {
  4311. USE_OPLINE
  4312. zval *array_ptr, *result;
  4313. SAVE_OPLINE();
  4314. array_ptr = RT_CONSTANT(opline, opline->op1);
  4315. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  4316. result = EX_VAR(opline->result.var);
  4317. ZVAL_COPY_VALUE(result, array_ptr);
  4318. if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
  4319. Z_ADDREF_P(array_ptr);
  4320. }
  4321. Z_FE_POS_P(result) = 0;
  4322. ZEND_VM_NEXT_OPCODE();
  4323. } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  4324. zend_object *zobj = Z_OBJ_P(array_ptr);
  4325. if (!zobj->ce->get_iterator) {
  4326. HashTable *properties = zobj->properties;
  4327. if (properties) {
  4328. if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
  4329. if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
  4330. GC_DELREF(properties);
  4331. }
  4332. properties = zobj->properties = zend_array_dup(properties);
  4333. }
  4334. } else {
  4335. properties = zobj->handlers->get_properties(zobj);
  4336. }
  4337. result = EX_VAR(opline->result.var);
  4338. ZVAL_COPY_VALUE(result, array_ptr);
  4339. if (IS_CONST != IS_TMP_VAR) {
  4340. Z_ADDREF_P(array_ptr);
  4341. }
  4342. if (zend_hash_num_elements(properties) == 0) {
  4343. Z_FE_ITER_P(result) = (uint32_t) -1;
  4344. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  4345. }
  4346. Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
  4347. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4348. } else {
  4349. bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
  4350. if (UNEXPECTED(EG(exception))) {
  4351. HANDLE_EXCEPTION();
  4352. } else if (is_empty) {
  4353. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  4354. } else {
  4355. ZEND_VM_NEXT_OPCODE();
  4356. }
  4357. }
  4358. } else {
  4359. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
  4360. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4361. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  4362. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  4363. }
  4364. }
  4365. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4366. {
  4367. USE_OPLINE
  4368. zval *array_ptr, *array_ref;
  4369. SAVE_OPLINE();
  4370. if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
  4371. array_ref = array_ptr = NULL;
  4372. if (Z_ISREF_P(array_ref)) {
  4373. array_ptr = Z_REFVAL_P(array_ref);
  4374. }
  4375. } else {
  4376. array_ref = array_ptr = RT_CONSTANT(opline, opline->op1);
  4377. }
  4378. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  4379. if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
  4380. if (array_ptr == array_ref) {
  4381. ZVAL_NEW_REF(array_ref, array_ref);
  4382. array_ptr = Z_REFVAL_P(array_ref);
  4383. }
  4384. Z_ADDREF_P(array_ref);
  4385. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  4386. } else {
  4387. array_ref = EX_VAR(opline->result.var);
  4388. ZVAL_NEW_REF(array_ref, array_ptr);
  4389. array_ptr = Z_REFVAL_P(array_ref);
  4390. }
  4391. if (IS_CONST == IS_CONST) {
  4392. ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
  4393. } else {
  4394. SEPARATE_ARRAY(array_ptr);
  4395. }
  4396. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
  4397. if (IS_CONST == IS_VAR) {
  4398. }
  4399. ZEND_VM_NEXT_OPCODE();
  4400. } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  4401. if (!Z_OBJCE_P(array_ptr)->get_iterator) {
  4402. HashTable *properties;
  4403. if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
  4404. if (array_ptr == array_ref) {
  4405. ZVAL_NEW_REF(array_ref, array_ref);
  4406. array_ptr = Z_REFVAL_P(array_ref);
  4407. }
  4408. Z_ADDREF_P(array_ref);
  4409. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  4410. } else {
  4411. array_ptr = EX_VAR(opline->result.var);
  4412. ZVAL_COPY_VALUE(array_ptr, array_ref);
  4413. }
  4414. if (Z_OBJ_P(array_ptr)->properties
  4415. && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
  4416. if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
  4417. GC_DELREF(Z_OBJ_P(array_ptr)->properties);
  4418. }
  4419. Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
  4420. }
  4421. properties = Z_OBJPROP_P(array_ptr);
  4422. if (zend_hash_num_elements(properties) == 0) {
  4423. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
  4424. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  4425. }
  4426. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
  4427. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4428. } else {
  4429. bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
  4430. if (IS_CONST == IS_VAR) {
  4431. } else {
  4432. }
  4433. if (UNEXPECTED(EG(exception))) {
  4434. HANDLE_EXCEPTION();
  4435. } else if (is_empty) {
  4436. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  4437. } else {
  4438. ZEND_VM_NEXT_OPCODE();
  4439. }
  4440. }
  4441. } else {
  4442. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
  4443. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4444. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  4445. if (IS_CONST == IS_VAR) {
  4446. } else {
  4447. }
  4448. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  4449. }
  4450. }
  4451. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4452. {
  4453. USE_OPLINE
  4454. zval *value;
  4455. zend_reference *ref = NULL;
  4456. bool ret;
  4457. SAVE_OPLINE();
  4458. value = RT_CONSTANT(opline, opline->op1);
  4459. if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) {
  4460. if (IS_CONST == IS_VAR) {
  4461. ref = Z_REF_P(value);
  4462. }
  4463. value = Z_REFVAL_P(value);
  4464. }
  4465. ret = i_zend_is_true(value);
  4466. if (UNEXPECTED(EG(exception))) {
  4467. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4468. HANDLE_EXCEPTION();
  4469. }
  4470. if (ret) {
  4471. zval *result = EX_VAR(opline->result.var);
  4472. ZVAL_COPY_VALUE(result, value);
  4473. if (IS_CONST == IS_CONST) {
  4474. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  4475. } else if (IS_CONST == IS_CV) {
  4476. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  4477. } else if (IS_CONST == IS_VAR && ref) {
  4478. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  4479. efree_size(ref, sizeof(zend_reference));
  4480. } else if (Z_OPT_REFCOUNTED_P(result)) {
  4481. Z_ADDREF_P(result);
  4482. }
  4483. }
  4484. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  4485. }
  4486. ZEND_VM_NEXT_OPCODE();
  4487. }
  4488. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4489. {
  4490. USE_OPLINE
  4491. zval *value;
  4492. zend_reference *ref = NULL;
  4493. SAVE_OPLINE();
  4494. value = RT_CONSTANT(opline, opline->op1);
  4495. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  4496. if (IS_CONST & IS_VAR) {
  4497. ref = Z_REF_P(value);
  4498. }
  4499. value = Z_REFVAL_P(value);
  4500. }
  4501. if (Z_TYPE_P(value) > IS_NULL) {
  4502. zval *result = EX_VAR(opline->result.var);
  4503. ZVAL_COPY_VALUE(result, value);
  4504. if (IS_CONST == IS_CONST) {
  4505. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  4506. } else if (IS_CONST == IS_CV) {
  4507. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  4508. } else if ((IS_CONST & IS_VAR) && ref) {
  4509. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  4510. efree_size(ref, sizeof(zend_reference));
  4511. } else if (Z_OPT_REFCOUNTED_P(result)) {
  4512. Z_ADDREF_P(result);
  4513. }
  4514. }
  4515. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  4516. }
  4517. if ((IS_CONST & IS_VAR) && ref) {
  4518. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  4519. efree_size(ref, sizeof(zend_reference));
  4520. }
  4521. }
  4522. ZEND_VM_NEXT_OPCODE();
  4523. }
  4524. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4525. {
  4526. USE_OPLINE
  4527. zval *val, *result;
  4528. val = RT_CONSTANT(opline, opline->op1);
  4529. if (Z_TYPE_P(val) > IS_NULL) {
  4530. do {
  4531. if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
  4532. val = Z_REFVAL_P(val);
  4533. if (Z_TYPE_P(val) <= IS_NULL) {
  4534. break;
  4535. }
  4536. }
  4537. ZEND_VM_NEXT_OPCODE();
  4538. } while (0);
  4539. }
  4540. result = EX_VAR(opline->result.var);
  4541. if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
  4542. ZVAL_NULL(result);
  4543. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
  4544. SAVE_OPLINE();
  4545. ZVAL_UNDEFINED_OP1();
  4546. if (UNEXPECTED(EG(exception) != NULL)) {
  4547. HANDLE_EXCEPTION();
  4548. }
  4549. }
  4550. } else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
  4551. ZVAL_FALSE(result);
  4552. } else {
  4553. ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
  4554. ZVAL_TRUE(result);
  4555. }
  4556. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  4557. }
  4558. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4559. {
  4560. USE_OPLINE
  4561. zval *value;
  4562. zval *result = EX_VAR(opline->result.var);
  4563. value = RT_CONSTANT(opline, opline->op1);
  4564. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  4565. SAVE_OPLINE();
  4566. ZVAL_UNDEFINED_OP1();
  4567. ZVAL_NULL(result);
  4568. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4569. }
  4570. if (IS_CONST == IS_CV) {
  4571. ZVAL_COPY_DEREF(result, value);
  4572. } else if (IS_CONST == IS_VAR) {
  4573. if (UNEXPECTED(Z_ISREF_P(value))) {
  4574. ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
  4575. if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
  4576. efree_size(Z_REF_P(value), sizeof(zend_reference));
  4577. } else if (Z_OPT_REFCOUNTED_P(result)) {
  4578. Z_ADDREF_P(result);
  4579. }
  4580. } else {
  4581. ZVAL_COPY_VALUE(result, value);
  4582. }
  4583. } else {
  4584. ZVAL_COPY_VALUE(result, value);
  4585. if (IS_CONST == IS_CONST) {
  4586. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
  4587. Z_ADDREF_P(result);
  4588. }
  4589. }
  4590. }
  4591. ZEND_VM_NEXT_OPCODE();
  4592. }
  4593. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4594. {
  4595. USE_OPLINE
  4596. SAVE_OPLINE();
  4597. do_bind_class(RT_CONSTANT(opline, opline->op1), (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
  4598. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4599. }
  4600. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4601. {
  4602. USE_OPLINE
  4603. zend_function *func;
  4604. zval *object;
  4605. zend_class_entry *called_scope;
  4606. func = (zend_function *) EX(func)->op_array.dynamic_func_defs[opline->op2.num];
  4607. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  4608. called_scope = Z_OBJCE(EX(This));
  4609. if (UNEXPECTED((func->common.fn_flags & ZEND_ACC_STATIC) ||
  4610. (EX(func)->common.fn_flags & ZEND_ACC_STATIC))) {
  4611. object = NULL;
  4612. } else {
  4613. object = &EX(This);
  4614. }
  4615. } else {
  4616. called_scope = Z_CE(EX(This));
  4617. object = NULL;
  4618. }
  4619. zend_create_closure(EX_VAR(opline->result.var), func,
  4620. EX(func)->op_array.scope, called_scope, object);
  4621. ZEND_VM_NEXT_OPCODE();
  4622. }
  4623. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4624. {
  4625. USE_OPLINE
  4626. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  4627. zval *val;
  4628. SAVE_OPLINE();
  4629. val = RT_CONSTANT(opline, opline->op1);
  4630. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  4631. zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
  4632. UNDEF_RESULT();
  4633. HANDLE_EXCEPTION();
  4634. }
  4635. yield_from_try_again:
  4636. if (Z_TYPE_P(val) == IS_ARRAY) {
  4637. ZVAL_COPY_VALUE(&generator->values, val);
  4638. if (Z_OPT_REFCOUNTED_P(val)) {
  4639. Z_ADDREF_P(val);
  4640. }
  4641. Z_FE_POS(generator->values) = 0;
  4642. } else if (IS_CONST != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
  4643. zend_class_entry *ce = Z_OBJCE_P(val);
  4644. if (ce == zend_ce_generator) {
  4645. zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
  4646. Z_ADDREF_P(val);
  4647. if (UNEXPECTED(new_gen->execute_data == NULL)) {
  4648. zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
  4649. zval_ptr_dtor(val);
  4650. UNDEF_RESULT();
  4651. HANDLE_EXCEPTION();
  4652. } else if (Z_ISUNDEF(new_gen->retval)) {
  4653. if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
  4654. zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
  4655. zval_ptr_dtor(val);
  4656. UNDEF_RESULT();
  4657. HANDLE_EXCEPTION();
  4658. } else {
  4659. zend_generator_yield_from(generator, new_gen);
  4660. }
  4661. } else {
  4662. if (RETURN_VALUE_USED(opline)) {
  4663. ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
  4664. }
  4665. ZEND_VM_NEXT_OPCODE();
  4666. }
  4667. } else {
  4668. zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
  4669. if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
  4670. if (!EG(exception)) {
  4671. zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
  4672. }
  4673. UNDEF_RESULT();
  4674. HANDLE_EXCEPTION();
  4675. }
  4676. iter->index = 0;
  4677. if (iter->funcs->rewind) {
  4678. iter->funcs->rewind(iter);
  4679. if (UNEXPECTED(EG(exception) != NULL)) {
  4680. OBJ_RELEASE(&iter->std);
  4681. UNDEF_RESULT();
  4682. HANDLE_EXCEPTION();
  4683. }
  4684. }
  4685. ZVAL_OBJ(&generator->values, &iter->std);
  4686. }
  4687. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
  4688. val = Z_REFVAL_P(val);
  4689. goto yield_from_try_again;
  4690. } else {
  4691. zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
  4692. UNDEF_RESULT();
  4693. HANDLE_EXCEPTION();
  4694. }
  4695. /* This is the default return value
  4696. * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
  4697. if (RETURN_VALUE_USED(opline)) {
  4698. ZVAL_NULL(EX_VAR(opline->result.var));
  4699. }
  4700. /* This generator has no send target (though the generator we delegate to might have one) */
  4701. generator->send_target = NULL;
  4702. /* We increment to the next op, so we are at the correct position when the
  4703. * generator is resumed. */
  4704. ZEND_VM_INC_OPCODE();
  4705. /* The GOTO VM uses a local opline variable. We need to set the opline
  4706. * variable in execute_data so we don't resume at an old position. */
  4707. SAVE_OPLINE();
  4708. ZEND_VM_RETURN();
  4709. }
  4710. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4711. {
  4712. USE_OPLINE
  4713. zval *value;
  4714. value = RT_CONSTANT(opline, opline->op1);
  4715. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  4716. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  4717. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  4718. zval_ptr_dtor_str(value);
  4719. }
  4720. ZEND_VM_NEXT_OPCODE();
  4721. } else {
  4722. bool strict;
  4723. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
  4724. value = Z_REFVAL_P(value);
  4725. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  4726. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  4727. ZEND_VM_NEXT_OPCODE();
  4728. }
  4729. }
  4730. SAVE_OPLINE();
  4731. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  4732. value = ZVAL_UNDEFINED_OP1();
  4733. }
  4734. strict = EX_USES_STRICT_TYPES();
  4735. do {
  4736. if (EXPECTED(!strict)) {
  4737. zend_string *str;
  4738. zval tmp;
  4739. if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
  4740. zend_error(E_DEPRECATED,
  4741. "strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
  4742. ZVAL_LONG(EX_VAR(opline->result.var), 0);
  4743. if (UNEXPECTED(EG(exception))) {
  4744. HANDLE_EXCEPTION();
  4745. }
  4746. break;
  4747. }
  4748. ZVAL_COPY(&tmp, value);
  4749. if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
  4750. ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
  4751. zval_ptr_dtor(&tmp);
  4752. break;
  4753. }
  4754. zval_ptr_dtor(&tmp);
  4755. }
  4756. if (!EG(exception)) {
  4757. zend_type_error("strlen(): Argument #1 ($str) must be of type string, %s given", zend_zval_type_name(value));
  4758. }
  4759. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4760. } while (0);
  4761. }
  4762. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4763. }
  4764. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4765. {
  4766. USE_OPLINE
  4767. zval *value;
  4768. int result = 0;
  4769. value = RT_CONSTANT(opline, opline->op1);
  4770. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  4771. type_check_resource:
  4772. if (opline->extended_value != MAY_BE_RESOURCE
  4773. || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
  4774. result = 1;
  4775. }
  4776. } else if ((IS_CONST & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
  4777. value = Z_REFVAL_P(value);
  4778. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  4779. goto type_check_resource;
  4780. }
  4781. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  4782. result = ((1 << IS_NULL) & opline->extended_value) != 0;
  4783. SAVE_OPLINE();
  4784. ZVAL_UNDEFINED_OP1();
  4785. if (UNEXPECTED(EG(exception))) {
  4786. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4787. HANDLE_EXCEPTION();
  4788. }
  4789. }
  4790. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  4791. SAVE_OPLINE();
  4792. ZEND_VM_SMART_BRANCH(result, 1);
  4793. } else {
  4794. ZEND_VM_SMART_BRANCH(result, 0);
  4795. }
  4796. }
  4797. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4798. {
  4799. USE_OPLINE
  4800. zend_constant *c;
  4801. c = CACHED_PTR(opline->extended_value);
  4802. if (EXPECTED(c != NULL)) {
  4803. if (!IS_SPECIAL_CACHE_VAL(c)) {
  4804. defined_true:
  4805. ZEND_VM_SMART_BRANCH_TRUE();
  4806. } else if (EXPECTED(zend_hash_num_elements(EG(zend_constants)) == DECODE_SPECIAL_CACHE_NUM(c))) {
  4807. defined_false:
  4808. ZEND_VM_SMART_BRANCH_FALSE();
  4809. }
  4810. }
  4811. if (zend_quick_check_constant(RT_CONSTANT(opline, opline->op1) OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
  4812. CACHE_PTR(opline->extended_value, ENCODE_SPECIAL_CACHE_NUM(zend_hash_num_elements(EG(zend_constants))));
  4813. goto defined_false;
  4814. } else {
  4815. goto defined_true;
  4816. }
  4817. }
  4818. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4819. {
  4820. USE_OPLINE
  4821. zval *value;
  4822. value = RT_CONSTANT(opline, opline->op1);
  4823. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
  4824. ZEND_VM_NEXT_OPCODE();
  4825. }
  4826. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4827. {
  4828. USE_OPLINE
  4829. zval *value;
  4830. value = RT_CONSTANT(opline, opline->op1);
  4831. ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
  4832. ZEND_VM_NEXT_OPCODE();
  4833. }
  4834. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4835. {
  4836. USE_OPLINE
  4837. zval *value;
  4838. value = RT_CONSTANT(opline, opline->op1);
  4839. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
  4840. ZEND_VM_NEXT_OPCODE();
  4841. }
  4842. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4843. {
  4844. USE_OPLINE
  4845. zval *value, *arg;
  4846. value = RT_CONSTANT(opline, opline->op1);
  4847. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  4848. ZVAL_COPY_VALUE(arg, value);
  4849. ZEND_VM_NEXT_OPCODE();
  4850. }
  4851. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4852. {
  4853. USE_OPLINE
  4854. zval *value, *arg;
  4855. uint32_t arg_num = opline->op2.num;
  4856. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  4857. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  4858. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  4859. }
  4860. value = RT_CONSTANT(opline, opline->op1);
  4861. ZVAL_COPY_VALUE(arg, value);
  4862. ZEND_VM_NEXT_OPCODE();
  4863. }
  4864. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4865. {
  4866. USE_OPLINE
  4867. zval *op1, *op2, *result;
  4868. double d1, d2;
  4869. op1 = RT_CONSTANT(opline, opline->op1);
  4870. op2 = RT_CONSTANT(opline, opline->op2);
  4871. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  4872. /* pass */
  4873. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  4874. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  4875. result = EX_VAR(opline->result.var);
  4876. fast_long_add_function(result, op1, op2);
  4877. ZEND_VM_NEXT_OPCODE();
  4878. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  4879. d1 = (double)Z_LVAL_P(op1);
  4880. d2 = Z_DVAL_P(op2);
  4881. goto add_double;
  4882. }
  4883. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  4884. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  4885. d1 = Z_DVAL_P(op1);
  4886. d2 = Z_DVAL_P(op2);
  4887. add_double:
  4888. result = EX_VAR(opline->result.var);
  4889. ZVAL_DOUBLE(result, d1 + d2);
  4890. ZEND_VM_NEXT_OPCODE();
  4891. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  4892. d1 = Z_DVAL_P(op1);
  4893. d2 = (double)Z_LVAL_P(op2);
  4894. goto add_double;
  4895. }
  4896. }
  4897. ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  4898. }
  4899. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4900. {
  4901. USE_OPLINE
  4902. zval *op1, *op2, *result;
  4903. double d1, d2;
  4904. op1 = RT_CONSTANT(opline, opline->op1);
  4905. op2 = RT_CONSTANT(opline, opline->op2);
  4906. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  4907. /* pass */
  4908. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  4909. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  4910. result = EX_VAR(opline->result.var);
  4911. fast_long_sub_function(result, op1, op2);
  4912. ZEND_VM_NEXT_OPCODE();
  4913. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  4914. d1 = (double)Z_LVAL_P(op1);
  4915. d2 = Z_DVAL_P(op2);
  4916. goto sub_double;
  4917. }
  4918. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  4919. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  4920. d1 = Z_DVAL_P(op1);
  4921. d2 = Z_DVAL_P(op2);
  4922. sub_double:
  4923. result = EX_VAR(opline->result.var);
  4924. ZVAL_DOUBLE(result, d1 - d2);
  4925. ZEND_VM_NEXT_OPCODE();
  4926. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  4927. d1 = Z_DVAL_P(op1);
  4928. d2 = (double)Z_LVAL_P(op2);
  4929. goto sub_double;
  4930. }
  4931. }
  4932. ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  4933. }
  4934. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4935. {
  4936. USE_OPLINE
  4937. zval *op1, *op2, *result;
  4938. double d1, d2;
  4939. op1 = RT_CONSTANT(opline, opline->op1);
  4940. op2 = RT_CONSTANT(opline, opline->op2);
  4941. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  4942. /* pass */
  4943. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  4944. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  4945. zend_long overflow;
  4946. result = EX_VAR(opline->result.var);
  4947. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  4948. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  4949. ZEND_VM_NEXT_OPCODE();
  4950. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  4951. d1 = (double)Z_LVAL_P(op1);
  4952. d2 = Z_DVAL_P(op2);
  4953. goto mul_double;
  4954. }
  4955. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  4956. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  4957. d1 = Z_DVAL_P(op1);
  4958. d2 = Z_DVAL_P(op2);
  4959. mul_double:
  4960. result = EX_VAR(opline->result.var);
  4961. ZVAL_DOUBLE(result, d1 * d2);
  4962. ZEND_VM_NEXT_OPCODE();
  4963. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  4964. d1 = Z_DVAL_P(op1);
  4965. d2 = (double)Z_LVAL_P(op2);
  4966. goto mul_double;
  4967. }
  4968. }
  4969. ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  4970. }
  4971. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4972. {
  4973. USE_OPLINE
  4974. zval *op1, *op2;
  4975. SAVE_OPLINE();
  4976. op1 = RT_CONSTANT(opline, opline->op1);
  4977. op2 = RT_CONSTANT(opline, opline->op2);
  4978. div_function(EX_VAR(opline->result.var), op1, op2);
  4979. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4980. }
  4981. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4982. {
  4983. USE_OPLINE
  4984. zval *op1, *op2, *result;
  4985. op1 = RT_CONSTANT(opline, opline->op1);
  4986. op2 = RT_CONSTANT(opline, opline->op2);
  4987. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  4988. /* pass */
  4989. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  4990. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  4991. result = EX_VAR(opline->result.var);
  4992. if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
  4993. ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  4994. } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
  4995. /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
  4996. ZVAL_LONG(result, 0);
  4997. } else {
  4998. ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
  4999. }
  5000. ZEND_VM_NEXT_OPCODE();
  5001. }
  5002. }
  5003. ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5004. }
  5005. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5006. {
  5007. USE_OPLINE
  5008. zval *op1, *op2;
  5009. op1 = RT_CONSTANT(opline, opline->op1);
  5010. op2 = RT_CONSTANT(opline, opline->op2);
  5011. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  5012. /* pass */
  5013. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  5014. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  5015. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  5016. /* Perform shift on unsigned numbers to get well-defined wrap behavior. */
  5017. ZVAL_LONG(EX_VAR(opline->result.var),
  5018. (zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
  5019. ZEND_VM_NEXT_OPCODE();
  5020. }
  5021. ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5022. }
  5023. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5024. {
  5025. USE_OPLINE
  5026. zval *op1, *op2;
  5027. op1 = RT_CONSTANT(opline, opline->op1);
  5028. op2 = RT_CONSTANT(opline, opline->op2);
  5029. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  5030. /* pass */
  5031. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  5032. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  5033. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  5034. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
  5035. ZEND_VM_NEXT_OPCODE();
  5036. }
  5037. ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5038. }
  5039. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5040. {
  5041. USE_OPLINE
  5042. zval *op1, *op2;
  5043. SAVE_OPLINE();
  5044. op1 = RT_CONSTANT(opline, opline->op1);
  5045. op2 = RT_CONSTANT(opline, opline->op2);
  5046. pow_function(EX_VAR(opline->result.var), op1, op2);
  5047. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5048. }
  5049. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5050. {
  5051. USE_OPLINE
  5052. zval *op1, *op2;
  5053. bool result;
  5054. SAVE_OPLINE();
  5055. op1 = RT_CONSTANT(opline, opline->op1);
  5056. op2 = RT_CONSTANT(opline, opline->op2);
  5057. result = fast_is_identical_function(op1, op2);
  5058. ZEND_VM_SMART_BRANCH(result, 1);
  5059. }
  5060. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5061. {
  5062. USE_OPLINE
  5063. zval *op1, *op2;
  5064. bool result;
  5065. SAVE_OPLINE();
  5066. op1 = RT_CONSTANT(opline, opline->op1);
  5067. op2 = RT_CONSTANT(opline, opline->op2);
  5068. result = fast_is_not_identical_function(op1, op2);
  5069. ZEND_VM_SMART_BRANCH(result, 1);
  5070. }
  5071. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5072. {
  5073. USE_OPLINE
  5074. zval *op1, *op2;
  5075. double d1, d2;
  5076. op1 = RT_CONSTANT(opline, opline->op1);
  5077. op2 = RT_CONSTANT(opline, opline->op2);
  5078. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  5079. /* pass */
  5080. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  5081. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  5082. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  5083. is_equal_true:
  5084. ZEND_VM_SMART_BRANCH_TRUE();
  5085. } else {
  5086. is_equal_false:
  5087. ZEND_VM_SMART_BRANCH_FALSE();
  5088. }
  5089. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  5090. d1 = (double)Z_LVAL_P(op1);
  5091. d2 = Z_DVAL_P(op2);
  5092. goto is_equal_double;
  5093. }
  5094. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  5095. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  5096. d1 = Z_DVAL_P(op1);
  5097. d2 = Z_DVAL_P(op2);
  5098. is_equal_double:
  5099. if (d1 == d2) {
  5100. goto is_equal_true;
  5101. } else {
  5102. goto is_equal_false;
  5103. }
  5104. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  5105. d1 = Z_DVAL_P(op1);
  5106. d2 = (double)Z_LVAL_P(op2);
  5107. goto is_equal_double;
  5108. }
  5109. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  5110. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  5111. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  5112. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5113. zval_ptr_dtor_str(op1);
  5114. }
  5115. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5116. zval_ptr_dtor_str(op2);
  5117. }
  5118. if (result) {
  5119. goto is_equal_true;
  5120. } else {
  5121. goto is_equal_false;
  5122. }
  5123. }
  5124. }
  5125. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5126. }
  5127. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5128. {
  5129. USE_OPLINE
  5130. zval *op1, *op2;
  5131. double d1, d2;
  5132. op1 = RT_CONSTANT(opline, opline->op1);
  5133. op2 = RT_CONSTANT(opline, opline->op2);
  5134. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  5135. /* pass */
  5136. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  5137. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  5138. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  5139. is_not_equal_true:
  5140. ZEND_VM_SMART_BRANCH_TRUE();
  5141. } else {
  5142. is_not_equal_false:
  5143. ZEND_VM_SMART_BRANCH_FALSE();
  5144. }
  5145. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  5146. d1 = (double)Z_LVAL_P(op1);
  5147. d2 = Z_DVAL_P(op2);
  5148. goto is_not_equal_double;
  5149. }
  5150. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  5151. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  5152. d1 = Z_DVAL_P(op1);
  5153. d2 = Z_DVAL_P(op2);
  5154. is_not_equal_double:
  5155. if (d1 != d2) {
  5156. goto is_not_equal_true;
  5157. } else {
  5158. goto is_not_equal_false;
  5159. }
  5160. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  5161. d1 = Z_DVAL_P(op1);
  5162. d2 = (double)Z_LVAL_P(op2);
  5163. goto is_not_equal_double;
  5164. }
  5165. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  5166. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  5167. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  5168. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5169. zval_ptr_dtor_str(op1);
  5170. }
  5171. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5172. zval_ptr_dtor_str(op2);
  5173. }
  5174. if (!result) {
  5175. goto is_not_equal_true;
  5176. } else {
  5177. goto is_not_equal_false;
  5178. }
  5179. }
  5180. }
  5181. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5182. }
  5183. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5184. {
  5185. USE_OPLINE
  5186. zval *op1, *op2;
  5187. double d1, d2;
  5188. op1 = RT_CONSTANT(opline, opline->op1);
  5189. op2 = RT_CONSTANT(opline, opline->op2);
  5190. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  5191. /* pass */
  5192. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  5193. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5194. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  5195. is_smaller_true:
  5196. ZEND_VM_SMART_BRANCH_TRUE();
  5197. } else {
  5198. is_smaller_false:
  5199. ZEND_VM_SMART_BRANCH_FALSE();
  5200. }
  5201. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  5202. d1 = (double)Z_LVAL_P(op1);
  5203. d2 = Z_DVAL_P(op2);
  5204. goto is_smaller_double;
  5205. }
  5206. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  5207. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  5208. d1 = Z_DVAL_P(op1);
  5209. d2 = Z_DVAL_P(op2);
  5210. is_smaller_double:
  5211. if (d1 < d2) {
  5212. goto is_smaller_true;
  5213. } else {
  5214. goto is_smaller_false;
  5215. }
  5216. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5217. d1 = Z_DVAL_P(op1);
  5218. d2 = (double)Z_LVAL_P(op2);
  5219. goto is_smaller_double;
  5220. }
  5221. }
  5222. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5223. }
  5224. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5225. {
  5226. USE_OPLINE
  5227. zval *op1, *op2;
  5228. double d1, d2;
  5229. op1 = RT_CONSTANT(opline, opline->op1);
  5230. op2 = RT_CONSTANT(opline, opline->op2);
  5231. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  5232. /* pass */
  5233. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  5234. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5235. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  5236. is_smaller_or_equal_true:
  5237. ZEND_VM_SMART_BRANCH_TRUE();
  5238. ZVAL_TRUE(EX_VAR(opline->result.var));
  5239. ZEND_VM_NEXT_OPCODE();
  5240. } else {
  5241. is_smaller_or_equal_false:
  5242. ZEND_VM_SMART_BRANCH_FALSE();
  5243. ZVAL_FALSE(EX_VAR(opline->result.var));
  5244. ZEND_VM_NEXT_OPCODE();
  5245. }
  5246. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  5247. d1 = (double)Z_LVAL_P(op1);
  5248. d2 = Z_DVAL_P(op2);
  5249. goto is_smaller_or_equal_double;
  5250. }
  5251. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  5252. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  5253. d1 = Z_DVAL_P(op1);
  5254. d2 = Z_DVAL_P(op2);
  5255. is_smaller_or_equal_double:
  5256. if (d1 <= d2) {
  5257. goto is_smaller_or_equal_true;
  5258. } else {
  5259. goto is_smaller_or_equal_false;
  5260. }
  5261. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5262. d1 = Z_DVAL_P(op1);
  5263. d2 = (double)Z_LVAL_P(op2);
  5264. goto is_smaller_or_equal_double;
  5265. }
  5266. }
  5267. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5268. }
  5269. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5270. {
  5271. USE_OPLINE
  5272. zval *op1, *op2;
  5273. SAVE_OPLINE();
  5274. op1 = RT_CONSTANT(opline, opline->op1);
  5275. op2 = RT_CONSTANT(opline, opline->op2);
  5276. compare_function(EX_VAR(opline->result.var), op1, op2);
  5277. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5278. }
  5279. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5280. {
  5281. USE_OPLINE
  5282. zval *op1, *op2;
  5283. op1 = RT_CONSTANT(opline, opline->op1);
  5284. op2 = RT_CONSTANT(opline, opline->op2);
  5285. if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
  5286. /* pass */
  5287. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  5288. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5289. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
  5290. ZEND_VM_NEXT_OPCODE();
  5291. }
  5292. ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5293. }
  5294. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_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_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5308. }
  5309. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_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_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  5323. }
  5324. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5325. {
  5326. USE_OPLINE
  5327. zval *op1, *op2;
  5328. SAVE_OPLINE();
  5329. op1 = RT_CONSTANT(opline, opline->op1);
  5330. op2 = RT_CONSTANT(opline, opline->op2);
  5331. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  5332. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5333. }
  5334. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5335. {
  5336. USE_OPLINE
  5337. zval *container, *dim, *value;
  5338. SAVE_OPLINE();
  5339. container = RT_CONSTANT(opline, opline->op1);
  5340. dim = RT_CONSTANT(opline, opline->op2);
  5341. if (IS_CONST != IS_CONST) {
  5342. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  5343. fetch_dim_r_array:
  5344. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
  5345. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  5346. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  5347. container = Z_REFVAL_P(container);
  5348. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  5349. goto fetch_dim_r_array;
  5350. } else {
  5351. goto fetch_dim_r_slow;
  5352. }
  5353. } else {
  5354. fetch_dim_r_slow:
  5355. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  5356. dim++;
  5357. }
  5358. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  5359. }
  5360. } else {
  5361. zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  5362. }
  5363. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5364. }
  5365. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5366. {
  5367. USE_OPLINE
  5368. zval *container;
  5369. SAVE_OPLINE();
  5370. container = RT_CONSTANT(opline, opline->op1);
  5371. zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  5372. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5373. }
  5374. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5375. {
  5376. #if 0
  5377. USE_OPLINE
  5378. #endif
  5379. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  5380. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  5381. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5382. }
  5383. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5384. } else {
  5385. if (IS_CONST == IS_UNUSED) {
  5386. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5387. }
  5388. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5389. }
  5390. }
  5391. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5392. {
  5393. USE_OPLINE
  5394. zval *container;
  5395. void **cache_slot = NULL;
  5396. SAVE_OPLINE();
  5397. container = RT_CONSTANT(opline, opline->op1);
  5398. if (IS_CONST == IS_CONST ||
  5399. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  5400. do {
  5401. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  5402. container = Z_REFVAL_P(container);
  5403. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  5404. break;
  5405. }
  5406. }
  5407. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  5408. ZVAL_UNDEFINED_OP1();
  5409. }
  5410. zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
  5411. ZVAL_NULL(EX_VAR(opline->result.var));
  5412. goto fetch_obj_r_finish;
  5413. } while (0);
  5414. }
  5415. /* here we are sure we are dealing with an object */
  5416. do {
  5417. zend_object *zobj = Z_OBJ_P(container);
  5418. zend_string *name, *tmp_name;
  5419. zval *retval;
  5420. if (IS_CONST == IS_CONST) {
  5421. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  5422. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  5423. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  5424. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  5425. retval = OBJ_PROP(zobj, prop_offset);
  5426. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  5427. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  5428. goto fetch_obj_r_copy;
  5429. } else {
  5430. fetch_obj_r_fast_copy:
  5431. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  5432. ZEND_VM_NEXT_OPCODE();
  5433. }
  5434. }
  5435. } else if (EXPECTED(zobj->properties != NULL)) {
  5436. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  5437. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  5438. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  5439. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  5440. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  5441. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  5442. (EXPECTED(p->key == name) ||
  5443. (EXPECTED(p->h == ZSTR_H(name)) &&
  5444. EXPECTED(p->key != NULL) &&
  5445. EXPECTED(zend_string_equal_content(p->key, name))))) {
  5446. retval = &p->val;
  5447. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  5448. goto fetch_obj_r_copy;
  5449. } else {
  5450. goto fetch_obj_r_fast_copy;
  5451. }
  5452. }
  5453. }
  5454. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  5455. }
  5456. retval = zend_hash_find_known_hash(zobj->properties, name);
  5457. if (EXPECTED(retval)) {
  5458. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  5459. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  5460. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  5461. goto fetch_obj_r_copy;
  5462. } else {
  5463. goto fetch_obj_r_fast_copy;
  5464. }
  5465. }
  5466. }
  5467. }
  5468. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  5469. } else {
  5470. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  5471. if (UNEXPECTED(!name)) {
  5472. ZVAL_UNDEF(EX_VAR(opline->result.var));
  5473. break;
  5474. }
  5475. }
  5476. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  5477. #if ZEND_DEBUG
  5478. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  5479. zend_verify_internal_read_property_type(zobj, name, retval);
  5480. }
  5481. #endif
  5482. if (IS_CONST != IS_CONST) {
  5483. zend_tmp_string_release(tmp_name);
  5484. }
  5485. if (retval != EX_VAR(opline->result.var)) {
  5486. fetch_obj_r_copy:
  5487. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  5488. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  5489. zend_unwrap_reference(retval);
  5490. }
  5491. } while (0);
  5492. fetch_obj_r_finish:
  5493. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5494. }
  5495. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5496. {
  5497. USE_OPLINE
  5498. zval *container;
  5499. void **cache_slot = NULL;
  5500. SAVE_OPLINE();
  5501. container = RT_CONSTANT(opline, opline->op1);
  5502. if (IS_CONST == IS_CONST ||
  5503. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  5504. do {
  5505. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  5506. container = Z_REFVAL_P(container);
  5507. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  5508. break;
  5509. }
  5510. }
  5511. if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  5512. ZVAL_UNDEFINED_OP2();
  5513. }
  5514. ZVAL_NULL(EX_VAR(opline->result.var));
  5515. goto fetch_obj_is_finish;
  5516. } while (0);
  5517. }
  5518. /* here we are sure we are dealing with an object */
  5519. do {
  5520. zend_object *zobj = Z_OBJ_P(container);
  5521. zend_string *name, *tmp_name;
  5522. zval *retval;
  5523. if (IS_CONST == IS_CONST) {
  5524. cache_slot = CACHE_ADDR(opline->extended_value);
  5525. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  5526. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  5527. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  5528. retval = OBJ_PROP(zobj, prop_offset);
  5529. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  5530. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  5531. goto fetch_obj_is_copy;
  5532. } else {
  5533. fetch_obj_is_fast_copy:
  5534. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  5535. ZEND_VM_NEXT_OPCODE();
  5536. }
  5537. }
  5538. } else if (EXPECTED(zobj->properties != NULL)) {
  5539. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  5540. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  5541. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  5542. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  5543. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  5544. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  5545. (EXPECTED(p->key == name) ||
  5546. (EXPECTED(p->h == ZSTR_H(name)) &&
  5547. EXPECTED(p->key != NULL) &&
  5548. EXPECTED(zend_string_equal_content(p->key, name))))) {
  5549. retval = &p->val;
  5550. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  5551. goto fetch_obj_is_copy;
  5552. } else {
  5553. goto fetch_obj_is_fast_copy;
  5554. }
  5555. }
  5556. }
  5557. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  5558. }
  5559. retval = zend_hash_find_known_hash(zobj->properties, name);
  5560. if (EXPECTED(retval)) {
  5561. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  5562. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  5563. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  5564. goto fetch_obj_is_copy;
  5565. } else {
  5566. goto fetch_obj_is_fast_copy;
  5567. }
  5568. }
  5569. }
  5570. }
  5571. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  5572. } else {
  5573. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  5574. if (UNEXPECTED(!name)) {
  5575. ZVAL_UNDEF(EX_VAR(opline->result.var));
  5576. break;
  5577. }
  5578. }
  5579. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  5580. if (IS_CONST != IS_CONST) {
  5581. zend_tmp_string_release(tmp_name);
  5582. }
  5583. if (retval != EX_VAR(opline->result.var)) {
  5584. fetch_obj_is_copy:
  5585. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  5586. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  5587. zend_unwrap_reference(retval);
  5588. }
  5589. } while (0);
  5590. fetch_obj_is_finish:
  5591. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5592. }
  5593. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5594. {
  5595. #if 0
  5596. USE_OPLINE
  5597. #endif
  5598. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  5599. /* Behave like FETCH_OBJ_W */
  5600. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  5601. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5602. }
  5603. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5604. } else {
  5605. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5606. }
  5607. }
  5608. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5609. {
  5610. USE_OPLINE
  5611. zval *container;
  5612. SAVE_OPLINE();
  5613. container = RT_CONSTANT(opline, opline->op1);
  5614. zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  5615. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5616. }
  5617. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5618. {
  5619. USE_OPLINE
  5620. zval *op1, *op2;
  5621. zend_string *op1_str, *op2_str, *str;
  5622. op1 = RT_CONSTANT(opline, opline->op1);
  5623. op2 = RT_CONSTANT(opline, opline->op2);
  5624. if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  5625. (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  5626. zend_string *op1_str = Z_STR_P(op1);
  5627. zend_string *op2_str = Z_STR_P(op2);
  5628. zend_string *str;
  5629. if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  5630. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  5631. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  5632. } else {
  5633. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  5634. }
  5635. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5636. zend_string_release_ex(op1_str, 0);
  5637. }
  5638. } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  5639. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  5640. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  5641. } else {
  5642. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  5643. }
  5644. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5645. zend_string_release_ex(op2_str, 0);
  5646. }
  5647. } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
  5648. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  5649. size_t len = ZSTR_LEN(op1_str);
  5650. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  5651. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  5652. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  5653. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5654. zend_string_release_ex(op2_str, 0);
  5655. }
  5656. } else {
  5657. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  5658. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  5659. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  5660. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  5661. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5662. zend_string_release_ex(op1_str, 0);
  5663. }
  5664. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5665. zend_string_release_ex(op2_str, 0);
  5666. }
  5667. }
  5668. ZEND_VM_NEXT_OPCODE();
  5669. }
  5670. SAVE_OPLINE();
  5671. if (IS_CONST == IS_CONST) {
  5672. op1_str = Z_STR_P(op1);
  5673. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  5674. op1_str = zend_string_copy(Z_STR_P(op1));
  5675. } else {
  5676. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  5677. ZVAL_UNDEFINED_OP1();
  5678. }
  5679. op1_str = zval_get_string_func(op1);
  5680. }
  5681. if (IS_CONST == IS_CONST) {
  5682. op2_str = Z_STR_P(op2);
  5683. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  5684. op2_str = zend_string_copy(Z_STR_P(op2));
  5685. } else {
  5686. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  5687. ZVAL_UNDEFINED_OP2();
  5688. }
  5689. op2_str = zval_get_string_func(op2);
  5690. }
  5691. do {
  5692. if (IS_CONST != IS_CONST) {
  5693. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  5694. if (IS_CONST == IS_CONST) {
  5695. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  5696. GC_ADDREF(op2_str);
  5697. }
  5698. }
  5699. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  5700. zend_string_release_ex(op1_str, 0);
  5701. break;
  5702. }
  5703. }
  5704. if (IS_CONST != IS_CONST) {
  5705. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  5706. if (IS_CONST == IS_CONST) {
  5707. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  5708. GC_ADDREF(op1_str);
  5709. }
  5710. }
  5711. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  5712. zend_string_release_ex(op2_str, 0);
  5713. break;
  5714. }
  5715. }
  5716. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  5717. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  5718. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  5719. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  5720. if (IS_CONST != IS_CONST) {
  5721. zend_string_release_ex(op1_str, 0);
  5722. }
  5723. if (IS_CONST != IS_CONST) {
  5724. zend_string_release_ex(op2_str, 0);
  5725. }
  5726. } while (0);
  5727. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5728. }
  5729. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5730. {
  5731. USE_OPLINE
  5732. zval *function_name;
  5733. zval *object;
  5734. zend_function *fbc;
  5735. zend_class_entry *called_scope;
  5736. zend_object *obj;
  5737. zend_execute_data *call;
  5738. uint32_t call_info;
  5739. SAVE_OPLINE();
  5740. object = RT_CONSTANT(opline, opline->op1);
  5741. if (IS_CONST != IS_CONST) {
  5742. function_name = RT_CONSTANT(opline, opline->op2);
  5743. }
  5744. if (IS_CONST != IS_CONST &&
  5745. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  5746. do {
  5747. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  5748. function_name = Z_REFVAL_P(function_name);
  5749. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  5750. break;
  5751. }
  5752. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  5753. ZVAL_UNDEFINED_OP2();
  5754. if (UNEXPECTED(EG(exception) != NULL)) {
  5755. HANDLE_EXCEPTION();
  5756. }
  5757. }
  5758. zend_throw_error(NULL, "Method name must be a string");
  5759. HANDLE_EXCEPTION();
  5760. } while (0);
  5761. }
  5762. if (IS_CONST == IS_UNUSED) {
  5763. obj = Z_OBJ_P(object);
  5764. } else {
  5765. do {
  5766. if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  5767. obj = Z_OBJ_P(object);
  5768. } else {
  5769. if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  5770. zend_reference *ref = Z_REF_P(object);
  5771. object = &ref->val;
  5772. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  5773. obj = Z_OBJ_P(object);
  5774. if (IS_CONST & IS_VAR) {
  5775. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  5776. efree_size(ref, sizeof(zend_reference));
  5777. } else {
  5778. Z_ADDREF_P(object);
  5779. }
  5780. }
  5781. break;
  5782. }
  5783. }
  5784. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  5785. object = ZVAL_UNDEFINED_OP1();
  5786. if (UNEXPECTED(EG(exception) != NULL)) {
  5787. if (IS_CONST != IS_CONST) {
  5788. }
  5789. HANDLE_EXCEPTION();
  5790. }
  5791. }
  5792. if (IS_CONST == IS_CONST) {
  5793. function_name = RT_CONSTANT(opline, opline->op2);
  5794. }
  5795. zend_invalid_method_call(object, function_name);
  5796. HANDLE_EXCEPTION();
  5797. }
  5798. } while (0);
  5799. }
  5800. called_scope = obj->ce;
  5801. if (IS_CONST == IS_CONST &&
  5802. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  5803. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  5804. } else {
  5805. zend_object *orig_obj = obj;
  5806. if (IS_CONST == IS_CONST) {
  5807. function_name = RT_CONSTANT(opline, opline->op2);
  5808. }
  5809. /* First, locate the function. */
  5810. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  5811. if (UNEXPECTED(fbc == NULL)) {
  5812. if (EXPECTED(!EG(exception))) {
  5813. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  5814. }
  5815. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  5816. zend_objects_store_del(orig_obj);
  5817. }
  5818. HANDLE_EXCEPTION();
  5819. }
  5820. if (IS_CONST == IS_CONST &&
  5821. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  5822. EXPECTED(obj == orig_obj)) {
  5823. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  5824. }
  5825. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  5826. GC_ADDREF(obj); /* For $this pointer */
  5827. if (GC_DELREF(orig_obj) == 0) {
  5828. zend_objects_store_del(orig_obj);
  5829. }
  5830. }
  5831. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  5832. init_func_run_time_cache(&fbc->op_array);
  5833. }
  5834. }
  5835. if (IS_CONST != IS_CONST) {
  5836. }
  5837. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  5838. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  5839. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  5840. zend_objects_store_del(obj);
  5841. if (UNEXPECTED(EG(exception))) {
  5842. HANDLE_EXCEPTION();
  5843. }
  5844. }
  5845. /* call static method */
  5846. obj = (zend_object*)called_scope;
  5847. call_info = ZEND_CALL_NESTED_FUNCTION;
  5848. } else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  5849. if (IS_CONST == IS_CV) {
  5850. GC_ADDREF(obj); /* For $this pointer */
  5851. }
  5852. /* CV may be changed indirectly (e.g. when it's a reference) */
  5853. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  5854. }
  5855. call = zend_vm_stack_push_call_frame(call_info,
  5856. fbc, opline->extended_value, obj);
  5857. call->prev_execute_data = EX(call);
  5858. EX(call) = call;
  5859. ZEND_VM_NEXT_OPCODE();
  5860. }
  5861. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5862. {
  5863. USE_OPLINE
  5864. zval *function_name;
  5865. zend_class_entry *ce;
  5866. uint32_t call_info;
  5867. zend_function *fbc;
  5868. zend_execute_data *call;
  5869. SAVE_OPLINE();
  5870. if (IS_CONST == IS_CONST) {
  5871. /* no function found. try a static method in class */
  5872. ce = CACHED_PTR(opline->result.num);
  5873. if (UNEXPECTED(ce == NULL)) {
  5874. 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);
  5875. if (UNEXPECTED(ce == NULL)) {
  5876. HANDLE_EXCEPTION();
  5877. }
  5878. if (IS_CONST != IS_CONST) {
  5879. CACHE_PTR(opline->result.num, ce);
  5880. }
  5881. }
  5882. } else if (IS_CONST == IS_UNUSED) {
  5883. ce = zend_fetch_class(NULL, opline->op1.num);
  5884. if (UNEXPECTED(ce == NULL)) {
  5885. HANDLE_EXCEPTION();
  5886. }
  5887. } else {
  5888. ce = Z_CE_P(EX_VAR(opline->op1.var));
  5889. }
  5890. if (IS_CONST == IS_CONST &&
  5891. IS_CONST == IS_CONST &&
  5892. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  5893. /* nothing to do */
  5894. } else if (IS_CONST != IS_CONST &&
  5895. IS_CONST == IS_CONST &&
  5896. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  5897. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  5898. } else if (IS_CONST != IS_UNUSED) {
  5899. function_name = RT_CONSTANT(opline, opline->op2);
  5900. if (IS_CONST != IS_CONST) {
  5901. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  5902. do {
  5903. if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  5904. function_name = Z_REFVAL_P(function_name);
  5905. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  5906. break;
  5907. }
  5908. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  5909. ZVAL_UNDEFINED_OP2();
  5910. if (UNEXPECTED(EG(exception) != NULL)) {
  5911. HANDLE_EXCEPTION();
  5912. }
  5913. }
  5914. zend_throw_error(NULL, "Method name must be a string");
  5915. HANDLE_EXCEPTION();
  5916. } while (0);
  5917. }
  5918. }
  5919. if (ce->get_static_method) {
  5920. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  5921. } else {
  5922. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  5923. }
  5924. if (UNEXPECTED(fbc == NULL)) {
  5925. if (EXPECTED(!EG(exception))) {
  5926. zend_undefined_method(ce, Z_STR_P(function_name));
  5927. }
  5928. HANDLE_EXCEPTION();
  5929. }
  5930. if (IS_CONST == IS_CONST &&
  5931. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  5932. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  5933. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  5934. }
  5935. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  5936. init_func_run_time_cache(&fbc->op_array);
  5937. }
  5938. if (IS_CONST != IS_CONST) {
  5939. }
  5940. } else {
  5941. if (UNEXPECTED(ce->constructor == NULL)) {
  5942. zend_throw_error(NULL, "Cannot call constructor");
  5943. HANDLE_EXCEPTION();
  5944. }
  5945. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  5946. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  5947. HANDLE_EXCEPTION();
  5948. }
  5949. fbc = ce->constructor;
  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. }
  5954. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  5955. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  5956. ce = (zend_class_entry*)Z_OBJ(EX(This));
  5957. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  5958. } else {
  5959. zend_non_static_method_call(fbc);
  5960. HANDLE_EXCEPTION();
  5961. }
  5962. } else {
  5963. /* previous opcode is ZEND_FETCH_CLASS */
  5964. if (IS_CONST == IS_UNUSED
  5965. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  5966. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  5967. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  5968. ce = Z_OBJCE(EX(This));
  5969. } else {
  5970. ce = Z_CE(EX(This));
  5971. }
  5972. }
  5973. call_info = ZEND_CALL_NESTED_FUNCTION;
  5974. }
  5975. call = zend_vm_stack_push_call_frame(call_info,
  5976. fbc, opline->extended_value, ce);
  5977. call->prev_execute_data = EX(call);
  5978. EX(call) = call;
  5979. ZEND_VM_NEXT_OPCODE();
  5980. }
  5981. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5982. {
  5983. USE_OPLINE
  5984. zval *function_name;
  5985. zend_fcall_info_cache fcc;
  5986. char *error = NULL;
  5987. zend_function *func;
  5988. void *object_or_called_scope;
  5989. zend_execute_data *call;
  5990. uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
  5991. SAVE_OPLINE();
  5992. function_name = RT_CONSTANT(opline, opline->op2);
  5993. if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
  5994. ZEND_ASSERT(!error);
  5995. func = fcc.function_handler;
  5996. object_or_called_scope = fcc.called_scope;
  5997. if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
  5998. /* Delay closure destruction until its invocation */
  5999. GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
  6000. call_info |= ZEND_CALL_CLOSURE;
  6001. if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
  6002. call_info |= ZEND_CALL_FAKE_CLOSURE;
  6003. }
  6004. if (fcc.object) {
  6005. object_or_called_scope = fcc.object;
  6006. call_info |= ZEND_CALL_HAS_THIS;
  6007. }
  6008. } else if (fcc.object) {
  6009. GC_ADDREF(fcc.object); /* For $this pointer */
  6010. object_or_called_scope = fcc.object;
  6011. call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
  6012. }
  6013. if ((IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
  6014. if (call_info & ZEND_CALL_CLOSURE) {
  6015. zend_object_release(ZEND_CLOSURE_OBJECT(func));
  6016. } else if (call_info & ZEND_CALL_RELEASE_THIS) {
  6017. zend_object_release(fcc.object);
  6018. }
  6019. HANDLE_EXCEPTION();
  6020. }
  6021. if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
  6022. init_func_run_time_cache(&func->op_array);
  6023. }
  6024. } else {
  6025. zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
  6026. efree(error);
  6027. HANDLE_EXCEPTION();
  6028. }
  6029. call = zend_vm_stack_push_call_frame(call_info,
  6030. func, opline->extended_value, object_or_called_scope);
  6031. call->prev_execute_data = EX(call);
  6032. EX(call) = call;
  6033. ZEND_VM_NEXT_OPCODE();
  6034. }
  6035. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6036. {
  6037. USE_OPLINE
  6038. zval *value, *arg;
  6039. if (IS_CONST == IS_CONST) {
  6040. SAVE_OPLINE();
  6041. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  6042. uint32_t arg_num;
  6043. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  6044. if (UNEXPECTED(!arg)) {
  6045. HANDLE_EXCEPTION();
  6046. }
  6047. } else {
  6048. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  6049. }
  6050. value = RT_CONSTANT(opline, opline->op1);
  6051. ZVAL_COPY_VALUE(arg, value);
  6052. if (IS_CONST == IS_CONST) {
  6053. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  6054. Z_ADDREF_P(arg);
  6055. }
  6056. }
  6057. ZEND_VM_NEXT_OPCODE();
  6058. }
  6059. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6060. {
  6061. USE_OPLINE
  6062. zval *value, *arg;
  6063. uint32_t arg_num;
  6064. if (IS_CONST == IS_CONST) {
  6065. SAVE_OPLINE();
  6066. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  6067. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  6068. if (UNEXPECTED(!arg)) {
  6069. HANDLE_EXCEPTION();
  6070. }
  6071. } else {
  6072. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  6073. arg_num = opline->op2.num;
  6074. }
  6075. if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
  6076. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  6077. goto send_val_by_ref;
  6078. }
  6079. } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  6080. send_val_by_ref:
  6081. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6082. }
  6083. value = RT_CONSTANT(opline, opline->op1);
  6084. ZVAL_COPY_VALUE(arg, value);
  6085. if (IS_CONST == IS_CONST) {
  6086. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  6087. Z_ADDREF_P(arg);
  6088. }
  6089. }
  6090. ZEND_VM_NEXT_OPCODE();
  6091. }
  6092. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6093. {
  6094. zend_class_entry *ce, *scope;
  6095. zend_class_constant *c;
  6096. zval *value, *zv;
  6097. USE_OPLINE
  6098. SAVE_OPLINE();
  6099. do {
  6100. if (IS_CONST == IS_CONST) {
  6101. if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
  6102. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  6103. break;
  6104. } else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
  6105. ce = CACHED_PTR(opline->extended_value);
  6106. } else {
  6107. 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);
  6108. if (UNEXPECTED(ce == NULL)) {
  6109. ZVAL_UNDEF(EX_VAR(opline->result.var));
  6110. HANDLE_EXCEPTION();
  6111. }
  6112. }
  6113. } else {
  6114. if (IS_CONST == IS_UNUSED) {
  6115. ce = zend_fetch_class(NULL, opline->op1.num);
  6116. if (UNEXPECTED(ce == NULL)) {
  6117. ZVAL_UNDEF(EX_VAR(opline->result.var));
  6118. HANDLE_EXCEPTION();
  6119. }
  6120. } else {
  6121. ce = Z_CE_P(EX_VAR(opline->op1.var));
  6122. }
  6123. if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  6124. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  6125. break;
  6126. }
  6127. }
  6128. zv = zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), Z_STR_P(RT_CONSTANT(opline, opline->op2)));
  6129. if (EXPECTED(zv != NULL)) {
  6130. c = Z_PTR_P(zv);
  6131. scope = EX(func)->op_array.scope;
  6132. if (!zend_verify_const_access(c, scope)) {
  6133. 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)));
  6134. ZVAL_UNDEF(EX_VAR(opline->result.var));
  6135. HANDLE_EXCEPTION();
  6136. }
  6137. value = &c->value;
  6138. if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
  6139. zval_update_constant_ex(value, c->ce);
  6140. if (UNEXPECTED(EG(exception) != NULL)) {
  6141. ZVAL_UNDEF(EX_VAR(opline->result.var));
  6142. HANDLE_EXCEPTION();
  6143. }
  6144. }
  6145. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
  6146. } else {
  6147. zend_throw_error(NULL, "Undefined constant %s::%s",
  6148. 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. } while (0);
  6153. ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
  6154. ZEND_VM_NEXT_OPCODE();
  6155. }
  6156. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6157. {
  6158. USE_OPLINE
  6159. zval *expr_ptr, new_expr;
  6160. SAVE_OPLINE();
  6161. if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
  6162. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  6163. expr_ptr = NULL;
  6164. if (Z_ISREF_P(expr_ptr)) {
  6165. Z_ADDREF_P(expr_ptr);
  6166. } else {
  6167. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  6168. }
  6169. } else {
  6170. expr_ptr = RT_CONSTANT(opline, opline->op1);
  6171. if (IS_CONST == IS_TMP_VAR) {
  6172. /* pass */
  6173. } else if (IS_CONST == IS_CONST) {
  6174. Z_TRY_ADDREF_P(expr_ptr);
  6175. } else if (IS_CONST == IS_CV) {
  6176. ZVAL_DEREF(expr_ptr);
  6177. Z_TRY_ADDREF_P(expr_ptr);
  6178. } else /* if (IS_CONST == IS_VAR) */ {
  6179. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  6180. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  6181. expr_ptr = Z_REFVAL_P(expr_ptr);
  6182. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  6183. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  6184. expr_ptr = &new_expr;
  6185. efree_size(ref, sizeof(zend_reference));
  6186. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  6187. Z_ADDREF_P(expr_ptr);
  6188. }
  6189. }
  6190. }
  6191. }
  6192. if (IS_CONST != IS_UNUSED) {
  6193. zval *offset = RT_CONSTANT(opline, opline->op2);
  6194. zend_string *str;
  6195. zend_ulong hval;
  6196. add_again:
  6197. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  6198. str = Z_STR_P(offset);
  6199. if (IS_CONST != IS_CONST) {
  6200. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  6201. goto num_index;
  6202. }
  6203. }
  6204. str_index:
  6205. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  6206. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  6207. hval = Z_LVAL_P(offset);
  6208. num_index:
  6209. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  6210. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  6211. offset = Z_REFVAL_P(offset);
  6212. goto add_again;
  6213. } else if (Z_TYPE_P(offset) == IS_NULL) {
  6214. str = ZSTR_EMPTY_ALLOC();
  6215. goto str_index;
  6216. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  6217. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  6218. goto num_index;
  6219. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  6220. hval = 0;
  6221. goto num_index;
  6222. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  6223. hval = 1;
  6224. goto num_index;
  6225. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  6226. zend_use_resource_as_offset(offset);
  6227. hval = Z_RES_HANDLE_P(offset);
  6228. goto num_index;
  6229. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  6230. ZVAL_UNDEFINED_OP2();
  6231. str = ZSTR_EMPTY_ALLOC();
  6232. goto str_index;
  6233. } else {
  6234. zend_illegal_offset();
  6235. zval_ptr_dtor_nogc(expr_ptr);
  6236. }
  6237. } else {
  6238. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  6239. zend_cannot_add_element();
  6240. zval_ptr_dtor_nogc(expr_ptr);
  6241. }
  6242. }
  6243. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  6244. }
  6245. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6246. {
  6247. zval *array;
  6248. uint32_t size;
  6249. USE_OPLINE
  6250. array = EX_VAR(opline->result.var);
  6251. if (IS_CONST != IS_UNUSED) {
  6252. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  6253. ZVAL_ARR(array, zend_new_array(size));
  6254. /* Explicitly initialize array as not-packed if flag is set */
  6255. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  6256. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  6257. }
  6258. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  6259. } else {
  6260. ZVAL_ARR(array, zend_new_array(0));
  6261. ZEND_VM_NEXT_OPCODE();
  6262. }
  6263. }
  6264. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6265. {
  6266. USE_OPLINE
  6267. zval *container;
  6268. bool result;
  6269. zend_ulong hval;
  6270. zval *offset;
  6271. SAVE_OPLINE();
  6272. container = RT_CONSTANT(opline, opline->op1);
  6273. offset = RT_CONSTANT(opline, opline->op2);
  6274. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  6275. HashTable *ht;
  6276. zval *value;
  6277. zend_string *str;
  6278. isset_dim_obj_array:
  6279. ht = Z_ARRVAL_P(container);
  6280. isset_again:
  6281. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  6282. str = Z_STR_P(offset);
  6283. if (IS_CONST != IS_CONST) {
  6284. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  6285. goto num_index_prop;
  6286. }
  6287. }
  6288. value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
  6289. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  6290. hval = Z_LVAL_P(offset);
  6291. num_index_prop:
  6292. value = zend_hash_index_find(ht, hval);
  6293. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  6294. offset = Z_REFVAL_P(offset);
  6295. goto isset_again;
  6296. } else {
  6297. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  6298. if (UNEXPECTED(EG(exception))) {
  6299. result = 0;
  6300. goto isset_dim_obj_exit;
  6301. }
  6302. }
  6303. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  6304. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  6305. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  6306. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  6307. if (IS_CONST & (IS_CONST|IS_CV)) {
  6308. /* avoid exception check */
  6309. ZEND_VM_SMART_BRANCH(result, 0);
  6310. }
  6311. } else {
  6312. result = (value == NULL || !i_zend_is_true(value));
  6313. }
  6314. goto isset_dim_obj_exit;
  6315. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  6316. container = Z_REFVAL_P(container);
  6317. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  6318. goto isset_dim_obj_array;
  6319. }
  6320. }
  6321. if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  6322. offset++;
  6323. }
  6324. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  6325. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  6326. } else {
  6327. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  6328. }
  6329. isset_dim_obj_exit:
  6330. ZEND_VM_SMART_BRANCH(result, 1);
  6331. }
  6332. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6333. {
  6334. USE_OPLINE
  6335. zval *container;
  6336. int result;
  6337. zval *offset;
  6338. zend_string *name, *tmp_name;
  6339. SAVE_OPLINE();
  6340. container = RT_CONSTANT(opline, opline->op1);
  6341. offset = RT_CONSTANT(opline, opline->op2);
  6342. if (IS_CONST == IS_CONST ||
  6343. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  6344. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  6345. container = Z_REFVAL_P(container);
  6346. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  6347. result = (opline->extended_value & ZEND_ISEMPTY);
  6348. goto isset_object_finish;
  6349. }
  6350. } else {
  6351. result = (opline->extended_value & ZEND_ISEMPTY);
  6352. goto isset_object_finish;
  6353. }
  6354. }
  6355. if (IS_CONST == IS_CONST) {
  6356. name = Z_STR_P(offset);
  6357. } else {
  6358. name = zval_try_get_tmp_string(offset, &tmp_name);
  6359. if (UNEXPECTED(!name)) {
  6360. result = 0;
  6361. goto isset_object_finish;
  6362. }
  6363. }
  6364. result =
  6365. (opline->extended_value & ZEND_ISEMPTY) ^
  6366. 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));
  6367. if (IS_CONST != IS_CONST) {
  6368. zend_tmp_string_release(tmp_name);
  6369. }
  6370. isset_object_finish:
  6371. ZEND_VM_SMART_BRANCH(result, 1);
  6372. }
  6373. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6374. {
  6375. USE_OPLINE
  6376. zval *key, *subject;
  6377. HashTable *ht;
  6378. bool result;
  6379. SAVE_OPLINE();
  6380. key = RT_CONSTANT(opline, opline->op1);
  6381. subject = RT_CONSTANT(opline, opline->op2);
  6382. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  6383. array_key_exists_array:
  6384. ht = Z_ARRVAL_P(subject);
  6385. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  6386. } else {
  6387. if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  6388. subject = Z_REFVAL_P(subject);
  6389. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  6390. goto array_key_exists_array;
  6391. }
  6392. }
  6393. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  6394. result = 0;
  6395. }
  6396. ZEND_VM_SMART_BRANCH(result, 1);
  6397. }
  6398. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  6399. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6400. {
  6401. USE_OPLINE
  6402. zend_class_entry *ce = CACHED_PTR(opline->extended_value);
  6403. if (ce == NULL) {
  6404. zval *lcname = RT_CONSTANT(opline, opline->op1);
  6405. zval *zv = zend_hash_find_known_hash(EG(class_table), Z_STR_P(lcname + 1));
  6406. if (zv) {
  6407. SAVE_OPLINE();
  6408. ce = zend_bind_class_in_slot(zv, lcname, Z_STR_P(RT_CONSTANT(opline, opline->op2)));
  6409. if (!ce) {
  6410. HANDLE_EXCEPTION();
  6411. }
  6412. }
  6413. CACHE_PTR(opline->extended_value, ce);
  6414. }
  6415. ZEND_VM_NEXT_OPCODE();
  6416. }
  6417. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6418. {
  6419. USE_OPLINE
  6420. zval *name;
  6421. zval *val;
  6422. zend_constant c;
  6423. SAVE_OPLINE();
  6424. name = RT_CONSTANT(opline, opline->op1);
  6425. val = RT_CONSTANT(opline, opline->op2);
  6426. ZVAL_COPY(&c.value, val);
  6427. if (Z_OPT_CONSTANT(c.value)) {
  6428. if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) {
  6429. zval_ptr_dtor_nogc(&c.value);
  6430. HANDLE_EXCEPTION();
  6431. }
  6432. }
  6433. /* non persistent, case sensitive */
  6434. ZEND_CONSTANT_SET_FLAGS(&c, CONST_CS, PHP_USER_CONSTANT);
  6435. c.name = zend_string_copy(Z_STR_P(name));
  6436. if (zend_register_constant(&c) == FAILURE) {
  6437. }
  6438. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  6439. }
  6440. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6441. {
  6442. USE_OPLINE
  6443. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  6444. SAVE_OPLINE();
  6445. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  6446. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  6447. }
  6448. /* Destroy the previously yielded value */
  6449. zval_ptr_dtor(&generator->value);
  6450. /* Destroy the previously yielded key */
  6451. zval_ptr_dtor(&generator->key);
  6452. /* Set the new yielded value */
  6453. if (IS_CONST != IS_UNUSED) {
  6454. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  6455. /* Constants and temporary variables aren't yieldable by reference,
  6456. * but we still allow them with a notice. */
  6457. if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
  6458. zval *value;
  6459. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  6460. value = RT_CONSTANT(opline, opline->op1);
  6461. ZVAL_COPY_VALUE(&generator->value, value);
  6462. if (IS_CONST == IS_CONST) {
  6463. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  6464. Z_ADDREF(generator->value);
  6465. }
  6466. }
  6467. } else {
  6468. zval *value_ptr = NULL;
  6469. /* If a function call result is yielded and the function did
  6470. * not return by reference we throw a notice. */
  6471. do {
  6472. if (IS_CONST == IS_VAR) {
  6473. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  6474. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  6475. && !Z_ISREF_P(value_ptr)) {
  6476. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  6477. ZVAL_COPY(&generator->value, value_ptr);
  6478. break;
  6479. }
  6480. }
  6481. if (Z_ISREF_P(value_ptr)) {
  6482. Z_ADDREF_P(value_ptr);
  6483. } else {
  6484. ZVAL_MAKE_REF_EX(value_ptr, 2);
  6485. }
  6486. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  6487. } while (0);
  6488. }
  6489. } else {
  6490. zval *value = RT_CONSTANT(opline, opline->op1);
  6491. /* Consts, temporary variables and references need copying */
  6492. if (IS_CONST == IS_CONST) {
  6493. ZVAL_COPY_VALUE(&generator->value, value);
  6494. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  6495. Z_ADDREF(generator->value);
  6496. }
  6497. } else if (IS_CONST == IS_TMP_VAR) {
  6498. ZVAL_COPY_VALUE(&generator->value, value);
  6499. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  6500. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  6501. } else {
  6502. ZVAL_COPY_VALUE(&generator->value, value);
  6503. if (IS_CONST == IS_CV) {
  6504. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  6505. }
  6506. }
  6507. }
  6508. } else {
  6509. /* If no value was specified yield null */
  6510. ZVAL_NULL(&generator->value);
  6511. }
  6512. /* Set the new yielded key */
  6513. if (IS_CONST != IS_UNUSED) {
  6514. zval *key = RT_CONSTANT(opline, opline->op2);
  6515. if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  6516. key = Z_REFVAL_P(key);
  6517. }
  6518. ZVAL_COPY(&generator->key, key);
  6519. if (Z_TYPE(generator->key) == IS_LONG
  6520. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  6521. ) {
  6522. generator->largest_used_integer_key = Z_LVAL(generator->key);
  6523. }
  6524. } else {
  6525. /* If no key was specified we use auto-increment keys */
  6526. generator->largest_used_integer_key++;
  6527. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  6528. }
  6529. if (RETURN_VALUE_USED(opline)) {
  6530. /* If the return value of yield is used set the send
  6531. * target and initialize it to NULL */
  6532. generator->send_target = EX_VAR(opline->result.var);
  6533. ZVAL_NULL(generator->send_target);
  6534. } else {
  6535. generator->send_target = NULL;
  6536. }
  6537. /* We increment to the next op, so we are at the correct position when the
  6538. * generator is resumed. */
  6539. ZEND_VM_INC_OPCODE();
  6540. /* The GOTO VM uses a local opline variable. We need to set the opline
  6541. * variable in execute_data so we don't resume at an old position. */
  6542. SAVE_OPLINE();
  6543. ZEND_VM_RETURN();
  6544. }
  6545. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6546. {
  6547. USE_OPLINE
  6548. zval *op, *jump_zv;
  6549. HashTable *jumptable;
  6550. op = RT_CONSTANT(opline, opline->op1);
  6551. if (Z_TYPE_P(op) != IS_LONG) {
  6552. ZVAL_DEREF(op);
  6553. if (Z_TYPE_P(op) != IS_LONG) {
  6554. /* Wrong type, fall back to ZEND_CASE chain */
  6555. ZEND_VM_NEXT_OPCODE();
  6556. }
  6557. }
  6558. jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  6559. jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
  6560. if (jump_zv != NULL) {
  6561. ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
  6562. ZEND_VM_CONTINUE();
  6563. } else {
  6564. /* default */
  6565. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  6566. ZEND_VM_CONTINUE();
  6567. }
  6568. }
  6569. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6570. {
  6571. USE_OPLINE
  6572. zval *op, *jump_zv;
  6573. HashTable *jumptable;
  6574. op = RT_CONSTANT(opline, opline->op1);
  6575. if (Z_TYPE_P(op) != IS_STRING) {
  6576. if (IS_CONST == IS_CONST) {
  6577. /* Wrong type, fall back to ZEND_CASE chain */
  6578. ZEND_VM_NEXT_OPCODE();
  6579. } else {
  6580. ZVAL_DEREF(op);
  6581. if (Z_TYPE_P(op) != IS_STRING) {
  6582. /* Wrong type, fall back to ZEND_CASE chain */
  6583. ZEND_VM_NEXT_OPCODE();
  6584. }
  6585. }
  6586. }
  6587. jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  6588. jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
  6589. if (jump_zv != NULL) {
  6590. ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
  6591. ZEND_VM_CONTINUE();
  6592. } else {
  6593. /* default */
  6594. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  6595. ZEND_VM_CONTINUE();
  6596. }
  6597. }
  6598. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6599. {
  6600. USE_OPLINE
  6601. zval *op, *jump_zv;
  6602. HashTable *jumptable;
  6603. op = RT_CONSTANT(opline, opline->op1);
  6604. jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  6605. match_try_again:
  6606. if (Z_TYPE_P(op) == IS_LONG) {
  6607. jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
  6608. } else if (Z_TYPE_P(op) == IS_STRING) {
  6609. jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
  6610. } else if (Z_TYPE_P(op) == IS_REFERENCE) {
  6611. op = Z_REFVAL_P(op);
  6612. goto match_try_again;
  6613. } else {
  6614. if (UNEXPECTED((IS_CONST & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) {
  6615. SAVE_OPLINE();
  6616. op = ZVAL_UNDEFINED_OP1();
  6617. if (UNEXPECTED(EG(exception))) {
  6618. HANDLE_EXCEPTION();
  6619. }
  6620. goto match_try_again;
  6621. }
  6622. goto default_branch;
  6623. }
  6624. if (jump_zv != NULL) {
  6625. ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
  6626. ZEND_VM_CONTINUE();
  6627. } else {
  6628. default_branch:
  6629. /* default */
  6630. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  6631. ZEND_VM_CONTINUE();
  6632. }
  6633. }
  6634. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6635. {
  6636. USE_OPLINE
  6637. zval *op1;
  6638. HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  6639. zval *result;
  6640. op1 = RT_CONSTANT(opline, opline->op1);
  6641. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  6642. result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CONST == IS_CONST);
  6643. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  6644. zval_ptr_dtor_str(op1);
  6645. }
  6646. ZEND_VM_SMART_BRANCH(result, 0);
  6647. }
  6648. if (opline->extended_value) {
  6649. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  6650. result = zend_hash_index_find(ht, Z_LVAL_P(op1));
  6651. ZEND_VM_SMART_BRANCH(result, 0);
  6652. }
  6653. SAVE_OPLINE();
  6654. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
  6655. op1 = Z_REFVAL_P(op1);
  6656. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  6657. result = zend_hash_find(ht, Z_STR_P(op1));
  6658. ZEND_VM_SMART_BRANCH(result, 0);
  6659. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  6660. result = zend_hash_index_find(ht, Z_LVAL_P(op1));
  6661. ZEND_VM_SMART_BRANCH(result, 0);
  6662. }
  6663. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  6664. ZVAL_UNDEFINED_OP1();
  6665. }
  6666. } else if (Z_TYPE_P(op1) <= IS_FALSE) {
  6667. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  6668. SAVE_OPLINE();
  6669. ZVAL_UNDEFINED_OP1();
  6670. if (UNEXPECTED(EG(exception) != NULL)) {
  6671. HANDLE_EXCEPTION();
  6672. }
  6673. }
  6674. result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
  6675. ZEND_VM_SMART_BRANCH(result, 0);
  6676. } else {
  6677. zend_string *key;
  6678. zval key_tmp;
  6679. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
  6680. op1 = Z_REFVAL_P(op1);
  6681. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  6682. result = zend_hash_find(ht, Z_STR_P(op1));
  6683. ZEND_VM_SMART_BRANCH(result, 0);
  6684. }
  6685. }
  6686. SAVE_OPLINE();
  6687. ZEND_HASH_FOREACH_STR_KEY(ht, key) {
  6688. ZVAL_STR(&key_tmp, key);
  6689. if (zend_compare(op1, &key_tmp) == 0) {
  6690. ZEND_VM_SMART_BRANCH(1, 1);
  6691. }
  6692. } ZEND_HASH_FOREACH_END();
  6693. }
  6694. ZEND_VM_SMART_BRANCH(0, 1);
  6695. }
  6696. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6697. {
  6698. USE_OPLINE
  6699. zval *op1, *op2, *result;
  6700. double d1, d2;
  6701. op1 = RT_CONSTANT(opline, opline->op1);
  6702. op2 = EX_VAR(opline->op2.var);
  6703. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6704. /* pass */
  6705. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  6706. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6707. result = EX_VAR(opline->result.var);
  6708. fast_long_add_function(result, op1, op2);
  6709. ZEND_VM_NEXT_OPCODE();
  6710. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6711. d1 = (double)Z_LVAL_P(op1);
  6712. d2 = Z_DVAL_P(op2);
  6713. goto add_double;
  6714. }
  6715. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  6716. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6717. d1 = Z_DVAL_P(op1);
  6718. d2 = Z_DVAL_P(op2);
  6719. add_double:
  6720. result = EX_VAR(opline->result.var);
  6721. ZVAL_DOUBLE(result, d1 + d2);
  6722. ZEND_VM_NEXT_OPCODE();
  6723. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6724. d1 = Z_DVAL_P(op1);
  6725. d2 = (double)Z_LVAL_P(op2);
  6726. goto add_double;
  6727. }
  6728. }
  6729. ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6730. }
  6731. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6732. {
  6733. USE_OPLINE
  6734. zval *op1, *op2, *result;
  6735. double d1, d2;
  6736. op1 = RT_CONSTANT(opline, opline->op1);
  6737. op2 = EX_VAR(opline->op2.var);
  6738. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6739. /* pass */
  6740. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  6741. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6742. result = EX_VAR(opline->result.var);
  6743. fast_long_sub_function(result, op1, op2);
  6744. ZEND_VM_NEXT_OPCODE();
  6745. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6746. d1 = (double)Z_LVAL_P(op1);
  6747. d2 = Z_DVAL_P(op2);
  6748. goto sub_double;
  6749. }
  6750. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  6751. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6752. d1 = Z_DVAL_P(op1);
  6753. d2 = Z_DVAL_P(op2);
  6754. sub_double:
  6755. result = EX_VAR(opline->result.var);
  6756. ZVAL_DOUBLE(result, d1 - d2);
  6757. ZEND_VM_NEXT_OPCODE();
  6758. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6759. d1 = Z_DVAL_P(op1);
  6760. d2 = (double)Z_LVAL_P(op2);
  6761. goto sub_double;
  6762. }
  6763. }
  6764. ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6765. }
  6766. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6767. {
  6768. USE_OPLINE
  6769. zval *op1, *op2, *result;
  6770. op1 = RT_CONSTANT(opline, opline->op1);
  6771. op2 = EX_VAR(opline->op2.var);
  6772. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6773. /* pass */
  6774. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  6775. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6776. result = EX_VAR(opline->result.var);
  6777. if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
  6778. ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  6779. } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
  6780. /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
  6781. ZVAL_LONG(result, 0);
  6782. } else {
  6783. ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
  6784. }
  6785. ZEND_VM_NEXT_OPCODE();
  6786. }
  6787. }
  6788. ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6789. }
  6790. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6791. {
  6792. USE_OPLINE
  6793. zval *op1, *op2;
  6794. op1 = RT_CONSTANT(opline, opline->op1);
  6795. op2 = EX_VAR(opline->op2.var);
  6796. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6797. /* pass */
  6798. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  6799. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  6800. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  6801. /* Perform shift on unsigned numbers to get well-defined wrap behavior. */
  6802. ZVAL_LONG(EX_VAR(opline->result.var),
  6803. (zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
  6804. ZEND_VM_NEXT_OPCODE();
  6805. }
  6806. ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6807. }
  6808. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6809. {
  6810. USE_OPLINE
  6811. zval *op1, *op2;
  6812. op1 = RT_CONSTANT(opline, opline->op1);
  6813. op2 = EX_VAR(opline->op2.var);
  6814. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6815. /* pass */
  6816. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  6817. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  6818. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  6819. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
  6820. ZEND_VM_NEXT_OPCODE();
  6821. }
  6822. ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6823. }
  6824. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6825. {
  6826. USE_OPLINE
  6827. zval *op1, *op2;
  6828. double d1, d2;
  6829. op1 = RT_CONSTANT(opline, opline->op1);
  6830. op2 = EX_VAR(opline->op2.var);
  6831. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6832. /* pass */
  6833. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  6834. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6835. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  6836. is_smaller_true:
  6837. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  6838. } else {
  6839. is_smaller_false:
  6840. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  6841. }
  6842. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6843. d1 = (double)Z_LVAL_P(op1);
  6844. d2 = Z_DVAL_P(op2);
  6845. goto is_smaller_double;
  6846. }
  6847. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  6848. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6849. d1 = Z_DVAL_P(op1);
  6850. d2 = Z_DVAL_P(op2);
  6851. is_smaller_double:
  6852. if (d1 < d2) {
  6853. goto is_smaller_true;
  6854. } else {
  6855. goto is_smaller_false;
  6856. }
  6857. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6858. d1 = Z_DVAL_P(op1);
  6859. d2 = (double)Z_LVAL_P(op2);
  6860. goto is_smaller_double;
  6861. }
  6862. }
  6863. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6864. }
  6865. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6866. {
  6867. USE_OPLINE
  6868. zval *op1, *op2;
  6869. double d1, d2;
  6870. op1 = RT_CONSTANT(opline, opline->op1);
  6871. op2 = EX_VAR(opline->op2.var);
  6872. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6873. /* pass */
  6874. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  6875. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6876. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  6877. is_smaller_true:
  6878. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  6879. } else {
  6880. is_smaller_false:
  6881. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  6882. }
  6883. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6884. d1 = (double)Z_LVAL_P(op1);
  6885. d2 = Z_DVAL_P(op2);
  6886. goto is_smaller_double;
  6887. }
  6888. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  6889. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6890. d1 = Z_DVAL_P(op1);
  6891. d2 = Z_DVAL_P(op2);
  6892. is_smaller_double:
  6893. if (d1 < d2) {
  6894. goto is_smaller_true;
  6895. } else {
  6896. goto is_smaller_false;
  6897. }
  6898. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6899. d1 = Z_DVAL_P(op1);
  6900. d2 = (double)Z_LVAL_P(op2);
  6901. goto is_smaller_double;
  6902. }
  6903. }
  6904. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6905. }
  6906. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6907. {
  6908. USE_OPLINE
  6909. zval *op1, *op2;
  6910. double d1, d2;
  6911. op1 = RT_CONSTANT(opline, opline->op1);
  6912. op2 = EX_VAR(opline->op2.var);
  6913. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6914. /* pass */
  6915. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  6916. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6917. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  6918. is_smaller_true:
  6919. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  6920. } else {
  6921. is_smaller_false:
  6922. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  6923. }
  6924. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6925. d1 = (double)Z_LVAL_P(op1);
  6926. d2 = Z_DVAL_P(op2);
  6927. goto is_smaller_double;
  6928. }
  6929. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  6930. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6931. d1 = Z_DVAL_P(op1);
  6932. d2 = Z_DVAL_P(op2);
  6933. is_smaller_double:
  6934. if (d1 < d2) {
  6935. goto is_smaller_true;
  6936. } else {
  6937. goto is_smaller_false;
  6938. }
  6939. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6940. d1 = Z_DVAL_P(op1);
  6941. d2 = (double)Z_LVAL_P(op2);
  6942. goto is_smaller_double;
  6943. }
  6944. }
  6945. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6946. }
  6947. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6948. {
  6949. USE_OPLINE
  6950. zval *op1, *op2;
  6951. double d1, d2;
  6952. op1 = RT_CONSTANT(opline, opline->op1);
  6953. op2 = EX_VAR(opline->op2.var);
  6954. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  6955. /* pass */
  6956. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  6957. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6958. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  6959. is_smaller_or_equal_true:
  6960. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  6961. ZVAL_TRUE(EX_VAR(opline->result.var));
  6962. ZEND_VM_NEXT_OPCODE();
  6963. } else {
  6964. is_smaller_or_equal_false:
  6965. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  6966. ZVAL_FALSE(EX_VAR(opline->result.var));
  6967. ZEND_VM_NEXT_OPCODE();
  6968. }
  6969. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6970. d1 = (double)Z_LVAL_P(op1);
  6971. d2 = Z_DVAL_P(op2);
  6972. goto is_smaller_or_equal_double;
  6973. }
  6974. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  6975. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  6976. d1 = Z_DVAL_P(op1);
  6977. d2 = Z_DVAL_P(op2);
  6978. is_smaller_or_equal_double:
  6979. if (d1 <= d2) {
  6980. goto is_smaller_or_equal_true;
  6981. } else {
  6982. goto is_smaller_or_equal_false;
  6983. }
  6984. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  6985. d1 = Z_DVAL_P(op1);
  6986. d2 = (double)Z_LVAL_P(op2);
  6987. goto is_smaller_or_equal_double;
  6988. }
  6989. }
  6990. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6991. }
  6992. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6993. {
  6994. USE_OPLINE
  6995. zval *op1, *op2;
  6996. double d1, d2;
  6997. op1 = RT_CONSTANT(opline, opline->op1);
  6998. op2 = EX_VAR(opline->op2.var);
  6999. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  7000. /* pass */
  7001. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  7002. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  7003. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  7004. is_smaller_or_equal_true:
  7005. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  7006. ZVAL_TRUE(EX_VAR(opline->result.var));
  7007. ZEND_VM_NEXT_OPCODE();
  7008. } else {
  7009. is_smaller_or_equal_false:
  7010. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  7011. ZVAL_FALSE(EX_VAR(opline->result.var));
  7012. ZEND_VM_NEXT_OPCODE();
  7013. }
  7014. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  7015. d1 = (double)Z_LVAL_P(op1);
  7016. d2 = Z_DVAL_P(op2);
  7017. goto is_smaller_or_equal_double;
  7018. }
  7019. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  7020. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  7021. d1 = Z_DVAL_P(op1);
  7022. d2 = Z_DVAL_P(op2);
  7023. is_smaller_or_equal_double:
  7024. if (d1 <= d2) {
  7025. goto is_smaller_or_equal_true;
  7026. } else {
  7027. goto is_smaller_or_equal_false;
  7028. }
  7029. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  7030. d1 = Z_DVAL_P(op1);
  7031. d2 = (double)Z_LVAL_P(op2);
  7032. goto is_smaller_or_equal_double;
  7033. }
  7034. }
  7035. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  7036. }
  7037. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7038. {
  7039. USE_OPLINE
  7040. zval *op1, *op2;
  7041. double d1, d2;
  7042. op1 = RT_CONSTANT(opline, opline->op1);
  7043. op2 = EX_VAR(opline->op2.var);
  7044. if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  7045. /* pass */
  7046. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  7047. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  7048. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  7049. is_smaller_or_equal_true:
  7050. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  7051. ZVAL_TRUE(EX_VAR(opline->result.var));
  7052. ZEND_VM_NEXT_OPCODE();
  7053. } else {
  7054. is_smaller_or_equal_false:
  7055. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  7056. ZVAL_FALSE(EX_VAR(opline->result.var));
  7057. ZEND_VM_NEXT_OPCODE();
  7058. }
  7059. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  7060. d1 = (double)Z_LVAL_P(op1);
  7061. d2 = Z_DVAL_P(op2);
  7062. goto is_smaller_or_equal_double;
  7063. }
  7064. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  7065. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  7066. d1 = Z_DVAL_P(op1);
  7067. d2 = Z_DVAL_P(op2);
  7068. is_smaller_or_equal_double:
  7069. if (d1 <= d2) {
  7070. goto is_smaller_or_equal_true;
  7071. } else {
  7072. goto is_smaller_or_equal_false;
  7073. }
  7074. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  7075. d1 = Z_DVAL_P(op1);
  7076. d2 = (double)Z_LVAL_P(op2);
  7077. goto is_smaller_or_equal_double;
  7078. }
  7079. }
  7080. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  7081. }
  7082. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7083. {
  7084. USE_OPLINE
  7085. zval *op1, *op2, *result;
  7086. op1 = RT_CONSTANT(opline, opline->op1);
  7087. op2 = EX_VAR(opline->op2.var);
  7088. result = EX_VAR(opline->result.var);
  7089. ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
  7090. ZEND_VM_NEXT_OPCODE();
  7091. }
  7092. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7093. {
  7094. USE_OPLINE
  7095. zval *op1, *op2, *result;
  7096. op1 = RT_CONSTANT(opline, opline->op1);
  7097. op2 = EX_VAR(opline->op2.var);
  7098. result = EX_VAR(opline->result.var);
  7099. fast_long_sub_function(result, op1, op2);
  7100. ZEND_VM_NEXT_OPCODE();
  7101. }
  7102. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7103. {
  7104. USE_OPLINE
  7105. zval *op1, *op2, *result;
  7106. op1 = RT_CONSTANT(opline, opline->op1);
  7107. op2 = EX_VAR(opline->op2.var);
  7108. result = EX_VAR(opline->result.var);
  7109. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  7110. ZEND_VM_NEXT_OPCODE();
  7111. }
  7112. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7113. {
  7114. USE_OPLINE
  7115. zval *op1, *op2;
  7116. bool result;
  7117. op1 = RT_CONSTANT(opline, opline->op1);
  7118. op2 = EX_VAR(opline->op2.var);
  7119. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  7120. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  7121. }
  7122. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7123. {
  7124. USE_OPLINE
  7125. zval *op1, *op2;
  7126. bool result;
  7127. op1 = RT_CONSTANT(opline, opline->op1);
  7128. op2 = EX_VAR(opline->op2.var);
  7129. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  7130. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  7131. }
  7132. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7133. {
  7134. USE_OPLINE
  7135. zval *op1, *op2;
  7136. bool result;
  7137. op1 = RT_CONSTANT(opline, opline->op1);
  7138. op2 = EX_VAR(opline->op2.var);
  7139. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  7140. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  7141. }
  7142. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7143. {
  7144. USE_OPLINE
  7145. zval *op1, *op2;
  7146. bool result;
  7147. op1 = RT_CONSTANT(opline, opline->op1);
  7148. op2 = EX_VAR(opline->op2.var);
  7149. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  7150. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  7151. }
  7152. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7153. {
  7154. USE_OPLINE
  7155. zval *op1, *op2;
  7156. bool result;
  7157. op1 = RT_CONSTANT(opline, opline->op1);
  7158. op2 = EX_VAR(opline->op2.var);
  7159. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  7160. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  7161. }
  7162. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7163. {
  7164. USE_OPLINE
  7165. zval *op1, *op2;
  7166. bool result;
  7167. op1 = RT_CONSTANT(opline, opline->op1);
  7168. op2 = EX_VAR(opline->op2.var);
  7169. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  7170. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  7171. }
  7172. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7173. {
  7174. USE_OPLINE
  7175. zval *op1, *op2;
  7176. bool result;
  7177. op1 = RT_CONSTANT(opline, opline->op1);
  7178. op2 = EX_VAR(opline->op2.var);
  7179. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  7180. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  7181. }
  7182. 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)
  7183. {
  7184. USE_OPLINE
  7185. zval *op1, *op2;
  7186. bool result;
  7187. op1 = RT_CONSTANT(opline, opline->op1);
  7188. op2 = EX_VAR(opline->op2.var);
  7189. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  7190. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  7191. }
  7192. 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)
  7193. {
  7194. USE_OPLINE
  7195. zval *op1, *op2;
  7196. bool result;
  7197. op1 = RT_CONSTANT(opline, opline->op1);
  7198. op2 = EX_VAR(opline->op2.var);
  7199. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  7200. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  7201. }
  7202. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7203. {
  7204. USE_OPLINE
  7205. zval *op1, *op2;
  7206. bool result;
  7207. op1 = RT_CONSTANT(opline, opline->op1);
  7208. op2 = EX_VAR(opline->op2.var);
  7209. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  7210. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  7211. }
  7212. 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)
  7213. {
  7214. USE_OPLINE
  7215. zval *op1, *op2;
  7216. bool result;
  7217. op1 = RT_CONSTANT(opline, opline->op1);
  7218. op2 = EX_VAR(opline->op2.var);
  7219. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  7220. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  7221. }
  7222. 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)
  7223. {
  7224. USE_OPLINE
  7225. zval *op1, *op2;
  7226. bool result;
  7227. op1 = RT_CONSTANT(opline, opline->op1);
  7228. op2 = EX_VAR(opline->op2.var);
  7229. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  7230. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  7231. }
  7232. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7233. {
  7234. USE_OPLINE
  7235. zval *container, *dim, *value;
  7236. zend_long offset;
  7237. HashTable *ht;
  7238. container = RT_CONSTANT(opline, opline->op1);
  7239. dim = EX_VAR(opline->op2.var);
  7240. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  7241. fetch_dim_r_index_array:
  7242. if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
  7243. offset = Z_LVAL_P(dim);
  7244. } else {
  7245. SAVE_OPLINE();
  7246. zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);
  7247. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7248. }
  7249. ht = Z_ARRVAL_P(container);
  7250. ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
  7251. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  7252. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  7253. SAVE_OPLINE();
  7254. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7255. } else {
  7256. ZEND_VM_NEXT_OPCODE();
  7257. }
  7258. } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  7259. container = Z_REFVAL_P(container);
  7260. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  7261. goto fetch_dim_r_index_array;
  7262. } else {
  7263. goto fetch_dim_r_index_slow;
  7264. }
  7265. } else {
  7266. fetch_dim_r_index_slow:
  7267. SAVE_OPLINE();
  7268. if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  7269. dim++;
  7270. }
  7271. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  7272. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7273. }
  7274. fetch_dim_r_index_undef:
  7275. ZVAL_NULL(EX_VAR(opline->result.var));
  7276. SAVE_OPLINE();
  7277. zend_undefined_offset(offset);
  7278. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7279. }
  7280. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7281. {
  7282. USE_OPLINE
  7283. zval *op1, *op2;
  7284. SAVE_OPLINE();
  7285. op1 = RT_CONSTANT(opline, opline->op1);
  7286. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7287. div_function(EX_VAR(opline->result.var), op1, op2);
  7288. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7289. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7290. }
  7291. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7292. {
  7293. USE_OPLINE
  7294. zval *op1, *op2;
  7295. SAVE_OPLINE();
  7296. op1 = RT_CONSTANT(opline, opline->op1);
  7297. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7298. pow_function(EX_VAR(opline->result.var), op1, op2);
  7299. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7300. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7301. }
  7302. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7303. {
  7304. USE_OPLINE
  7305. zval *op1, *op2;
  7306. op1 = RT_CONSTANT(opline, opline->op1);
  7307. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7308. if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  7309. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  7310. zend_string *op1_str = Z_STR_P(op1);
  7311. zend_string *op2_str = Z_STR_P(op2);
  7312. zend_string *str;
  7313. if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  7314. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  7315. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  7316. } else {
  7317. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  7318. }
  7319. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  7320. zend_string_release_ex(op1_str, 0);
  7321. }
  7322. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  7323. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  7324. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  7325. } else {
  7326. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  7327. }
  7328. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  7329. zend_string_release_ex(op2_str, 0);
  7330. }
  7331. } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
  7332. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  7333. size_t len = ZSTR_LEN(op1_str);
  7334. if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
  7335. zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
  7336. }
  7337. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  7338. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  7339. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  7340. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  7341. zend_string_release_ex(op2_str, 0);
  7342. }
  7343. } else {
  7344. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  7345. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  7346. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  7347. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  7348. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  7349. zend_string_release_ex(op1_str, 0);
  7350. }
  7351. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  7352. zend_string_release_ex(op2_str, 0);
  7353. }
  7354. }
  7355. ZEND_VM_NEXT_OPCODE();
  7356. } else {
  7357. SAVE_OPLINE();
  7358. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  7359. op1 = ZVAL_UNDEFINED_OP1();
  7360. }
  7361. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  7362. op2 = ZVAL_UNDEFINED_OP2();
  7363. }
  7364. concat_function(EX_VAR(opline->result.var), op1, op2);
  7365. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7366. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7367. }
  7368. }
  7369. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7370. {
  7371. USE_OPLINE
  7372. zval *op1, *op2;
  7373. SAVE_OPLINE();
  7374. op1 = RT_CONSTANT(opline, opline->op1);
  7375. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7376. compare_function(EX_VAR(opline->result.var), op1, op2);
  7377. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7378. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7379. }
  7380. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7381. {
  7382. USE_OPLINE
  7383. zval *container, *dim, *value;
  7384. SAVE_OPLINE();
  7385. container = RT_CONSTANT(opline, opline->op1);
  7386. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7387. if (IS_CONST != IS_CONST) {
  7388. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  7389. fetch_dim_r_array:
  7390. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
  7391. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  7392. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  7393. container = Z_REFVAL_P(container);
  7394. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  7395. goto fetch_dim_r_array;
  7396. } else {
  7397. goto fetch_dim_r_slow;
  7398. }
  7399. } else {
  7400. fetch_dim_r_slow:
  7401. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  7402. dim++;
  7403. }
  7404. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  7405. }
  7406. } else {
  7407. zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  7408. }
  7409. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7410. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7411. }
  7412. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7413. {
  7414. USE_OPLINE
  7415. zval *container;
  7416. SAVE_OPLINE();
  7417. container = RT_CONSTANT(opline, opline->op1);
  7418. 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);
  7419. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7420. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7421. }
  7422. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7423. {
  7424. #if 0
  7425. USE_OPLINE
  7426. #endif
  7427. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  7428. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  7429. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7430. }
  7431. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7432. } else {
  7433. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  7434. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7435. }
  7436. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7437. }
  7438. }
  7439. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7440. {
  7441. USE_OPLINE
  7442. zval *container;
  7443. void **cache_slot = NULL;
  7444. SAVE_OPLINE();
  7445. container = RT_CONSTANT(opline, opline->op1);
  7446. if (IS_CONST == IS_CONST ||
  7447. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  7448. do {
  7449. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  7450. container = Z_REFVAL_P(container);
  7451. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  7452. break;
  7453. }
  7454. }
  7455. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  7456. ZVAL_UNDEFINED_OP1();
  7457. }
  7458. zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  7459. ZVAL_NULL(EX_VAR(opline->result.var));
  7460. goto fetch_obj_r_finish;
  7461. } while (0);
  7462. }
  7463. /* here we are sure we are dealing with an object */
  7464. do {
  7465. zend_object *zobj = Z_OBJ_P(container);
  7466. zend_string *name, *tmp_name;
  7467. zval *retval;
  7468. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  7469. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  7470. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  7471. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  7472. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  7473. retval = OBJ_PROP(zobj, prop_offset);
  7474. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  7475. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  7476. goto fetch_obj_r_copy;
  7477. } else {
  7478. fetch_obj_r_fast_copy:
  7479. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  7480. ZEND_VM_NEXT_OPCODE();
  7481. }
  7482. }
  7483. } else if (EXPECTED(zobj->properties != NULL)) {
  7484. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  7485. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  7486. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  7487. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  7488. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  7489. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  7490. (EXPECTED(p->key == name) ||
  7491. (EXPECTED(p->h == ZSTR_H(name)) &&
  7492. EXPECTED(p->key != NULL) &&
  7493. EXPECTED(zend_string_equal_content(p->key, name))))) {
  7494. retval = &p->val;
  7495. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  7496. goto fetch_obj_r_copy;
  7497. } else {
  7498. goto fetch_obj_r_fast_copy;
  7499. }
  7500. }
  7501. }
  7502. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  7503. }
  7504. retval = zend_hash_find_known_hash(zobj->properties, name);
  7505. if (EXPECTED(retval)) {
  7506. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  7507. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  7508. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  7509. goto fetch_obj_r_copy;
  7510. } else {
  7511. goto fetch_obj_r_fast_copy;
  7512. }
  7513. }
  7514. }
  7515. }
  7516. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  7517. } else {
  7518. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  7519. if (UNEXPECTED(!name)) {
  7520. ZVAL_UNDEF(EX_VAR(opline->result.var));
  7521. break;
  7522. }
  7523. }
  7524. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  7525. #if ZEND_DEBUG
  7526. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  7527. zend_verify_internal_read_property_type(zobj, name, retval);
  7528. }
  7529. #endif
  7530. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7531. zend_tmp_string_release(tmp_name);
  7532. }
  7533. if (retval != EX_VAR(opline->result.var)) {
  7534. fetch_obj_r_copy:
  7535. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  7536. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  7537. zend_unwrap_reference(retval);
  7538. }
  7539. } while (0);
  7540. fetch_obj_r_finish:
  7541. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7542. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7543. }
  7544. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7545. {
  7546. USE_OPLINE
  7547. zval *container;
  7548. void **cache_slot = NULL;
  7549. SAVE_OPLINE();
  7550. container = RT_CONSTANT(opline, opline->op1);
  7551. if (IS_CONST == IS_CONST ||
  7552. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  7553. do {
  7554. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  7555. container = Z_REFVAL_P(container);
  7556. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  7557. break;
  7558. }
  7559. }
  7560. if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  7561. ZVAL_UNDEFINED_OP2();
  7562. }
  7563. ZVAL_NULL(EX_VAR(opline->result.var));
  7564. goto fetch_obj_is_finish;
  7565. } while (0);
  7566. }
  7567. /* here we are sure we are dealing with an object */
  7568. do {
  7569. zend_object *zobj = Z_OBJ_P(container);
  7570. zend_string *name, *tmp_name;
  7571. zval *retval;
  7572. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  7573. cache_slot = CACHE_ADDR(opline->extended_value);
  7574. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  7575. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  7576. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  7577. retval = OBJ_PROP(zobj, prop_offset);
  7578. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  7579. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  7580. goto fetch_obj_is_copy;
  7581. } else {
  7582. fetch_obj_is_fast_copy:
  7583. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  7584. ZEND_VM_NEXT_OPCODE();
  7585. }
  7586. }
  7587. } else if (EXPECTED(zobj->properties != NULL)) {
  7588. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  7589. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  7590. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  7591. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  7592. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  7593. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  7594. (EXPECTED(p->key == name) ||
  7595. (EXPECTED(p->h == ZSTR_H(name)) &&
  7596. EXPECTED(p->key != NULL) &&
  7597. EXPECTED(zend_string_equal_content(p->key, name))))) {
  7598. retval = &p->val;
  7599. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  7600. goto fetch_obj_is_copy;
  7601. } else {
  7602. goto fetch_obj_is_fast_copy;
  7603. }
  7604. }
  7605. }
  7606. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  7607. }
  7608. retval = zend_hash_find_known_hash(zobj->properties, name);
  7609. if (EXPECTED(retval)) {
  7610. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  7611. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  7612. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  7613. goto fetch_obj_is_copy;
  7614. } else {
  7615. goto fetch_obj_is_fast_copy;
  7616. }
  7617. }
  7618. }
  7619. }
  7620. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  7621. } else {
  7622. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  7623. if (UNEXPECTED(!name)) {
  7624. ZVAL_UNDEF(EX_VAR(opline->result.var));
  7625. break;
  7626. }
  7627. }
  7628. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  7629. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7630. zend_tmp_string_release(tmp_name);
  7631. }
  7632. if (retval != EX_VAR(opline->result.var)) {
  7633. fetch_obj_is_copy:
  7634. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  7635. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  7636. zend_unwrap_reference(retval);
  7637. }
  7638. } while (0);
  7639. fetch_obj_is_finish:
  7640. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7641. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7642. }
  7643. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7644. {
  7645. #if 0
  7646. USE_OPLINE
  7647. #endif
  7648. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  7649. /* Behave like FETCH_OBJ_W */
  7650. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  7651. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7652. }
  7653. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7654. } else {
  7655. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7656. }
  7657. }
  7658. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7659. {
  7660. USE_OPLINE
  7661. zval *container;
  7662. SAVE_OPLINE();
  7663. container = RT_CONSTANT(opline, opline->op1);
  7664. 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);
  7665. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7666. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7667. }
  7668. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7669. {
  7670. USE_OPLINE
  7671. zval *op1, *op2;
  7672. zend_string *op1_str, *op2_str, *str;
  7673. op1 = RT_CONSTANT(opline, opline->op1);
  7674. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7675. if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  7676. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  7677. zend_string *op1_str = Z_STR_P(op1);
  7678. zend_string *op2_str = Z_STR_P(op2);
  7679. zend_string *str;
  7680. if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  7681. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  7682. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  7683. } else {
  7684. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  7685. }
  7686. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  7687. zend_string_release_ex(op1_str, 0);
  7688. }
  7689. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  7690. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  7691. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  7692. } else {
  7693. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  7694. }
  7695. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  7696. zend_string_release_ex(op2_str, 0);
  7697. }
  7698. } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
  7699. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  7700. size_t len = ZSTR_LEN(op1_str);
  7701. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  7702. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  7703. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  7704. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  7705. zend_string_release_ex(op2_str, 0);
  7706. }
  7707. } else {
  7708. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  7709. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  7710. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  7711. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  7712. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  7713. zend_string_release_ex(op1_str, 0);
  7714. }
  7715. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  7716. zend_string_release_ex(op2_str, 0);
  7717. }
  7718. }
  7719. ZEND_VM_NEXT_OPCODE();
  7720. }
  7721. SAVE_OPLINE();
  7722. if (IS_CONST == IS_CONST) {
  7723. op1_str = Z_STR_P(op1);
  7724. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  7725. op1_str = zend_string_copy(Z_STR_P(op1));
  7726. } else {
  7727. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  7728. ZVAL_UNDEFINED_OP1();
  7729. }
  7730. op1_str = zval_get_string_func(op1);
  7731. }
  7732. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  7733. op2_str = Z_STR_P(op2);
  7734. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  7735. op2_str = zend_string_copy(Z_STR_P(op2));
  7736. } else {
  7737. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  7738. ZVAL_UNDEFINED_OP2();
  7739. }
  7740. op2_str = zval_get_string_func(op2);
  7741. }
  7742. do {
  7743. if (IS_CONST != IS_CONST) {
  7744. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  7745. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  7746. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  7747. GC_ADDREF(op2_str);
  7748. }
  7749. }
  7750. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  7751. zend_string_release_ex(op1_str, 0);
  7752. break;
  7753. }
  7754. }
  7755. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7756. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  7757. if (IS_CONST == IS_CONST) {
  7758. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  7759. GC_ADDREF(op1_str);
  7760. }
  7761. }
  7762. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  7763. zend_string_release_ex(op2_str, 0);
  7764. break;
  7765. }
  7766. }
  7767. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  7768. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  7769. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  7770. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  7771. if (IS_CONST != IS_CONST) {
  7772. zend_string_release_ex(op1_str, 0);
  7773. }
  7774. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7775. zend_string_release_ex(op2_str, 0);
  7776. }
  7777. } while (0);
  7778. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7779. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7780. }
  7781. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7782. {
  7783. USE_OPLINE
  7784. zval *function_name;
  7785. zval *object;
  7786. zend_function *fbc;
  7787. zend_class_entry *called_scope;
  7788. zend_object *obj;
  7789. zend_execute_data *call;
  7790. uint32_t call_info;
  7791. SAVE_OPLINE();
  7792. object = RT_CONSTANT(opline, opline->op1);
  7793. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7794. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7795. }
  7796. if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
  7797. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  7798. do {
  7799. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  7800. function_name = Z_REFVAL_P(function_name);
  7801. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  7802. break;
  7803. }
  7804. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  7805. ZVAL_UNDEFINED_OP2();
  7806. if (UNEXPECTED(EG(exception) != NULL)) {
  7807. HANDLE_EXCEPTION();
  7808. }
  7809. }
  7810. zend_throw_error(NULL, "Method name must be a string");
  7811. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7812. HANDLE_EXCEPTION();
  7813. } while (0);
  7814. }
  7815. if (IS_CONST == IS_UNUSED) {
  7816. obj = Z_OBJ_P(object);
  7817. } else {
  7818. do {
  7819. if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  7820. obj = Z_OBJ_P(object);
  7821. } else {
  7822. if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  7823. zend_reference *ref = Z_REF_P(object);
  7824. object = &ref->val;
  7825. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  7826. obj = Z_OBJ_P(object);
  7827. if (IS_CONST & IS_VAR) {
  7828. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  7829. efree_size(ref, sizeof(zend_reference));
  7830. } else {
  7831. Z_ADDREF_P(object);
  7832. }
  7833. }
  7834. break;
  7835. }
  7836. }
  7837. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  7838. object = ZVAL_UNDEFINED_OP1();
  7839. if (UNEXPECTED(EG(exception) != NULL)) {
  7840. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7841. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7842. }
  7843. HANDLE_EXCEPTION();
  7844. }
  7845. }
  7846. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  7847. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7848. }
  7849. zend_invalid_method_call(object, function_name);
  7850. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7851. HANDLE_EXCEPTION();
  7852. }
  7853. } while (0);
  7854. }
  7855. called_scope = obj->ce;
  7856. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  7857. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  7858. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  7859. } else {
  7860. zend_object *orig_obj = obj;
  7861. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  7862. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7863. }
  7864. /* First, locate the function. */
  7865. 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));
  7866. if (UNEXPECTED(fbc == NULL)) {
  7867. if (EXPECTED(!EG(exception))) {
  7868. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  7869. }
  7870. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7871. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  7872. zend_objects_store_del(orig_obj);
  7873. }
  7874. HANDLE_EXCEPTION();
  7875. }
  7876. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  7877. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  7878. EXPECTED(obj == orig_obj)) {
  7879. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  7880. }
  7881. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  7882. GC_ADDREF(obj); /* For $this pointer */
  7883. if (GC_DELREF(orig_obj) == 0) {
  7884. zend_objects_store_del(orig_obj);
  7885. }
  7886. }
  7887. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  7888. init_func_run_time_cache(&fbc->op_array);
  7889. }
  7890. }
  7891. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7892. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7893. }
  7894. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  7895. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  7896. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  7897. zend_objects_store_del(obj);
  7898. if (UNEXPECTED(EG(exception))) {
  7899. HANDLE_EXCEPTION();
  7900. }
  7901. }
  7902. /* call static method */
  7903. obj = (zend_object*)called_scope;
  7904. call_info = ZEND_CALL_NESTED_FUNCTION;
  7905. } else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  7906. if (IS_CONST == IS_CV) {
  7907. GC_ADDREF(obj); /* For $this pointer */
  7908. }
  7909. /* CV may be changed indirectly (e.g. when it's a reference) */
  7910. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  7911. }
  7912. call = zend_vm_stack_push_call_frame(call_info,
  7913. fbc, opline->extended_value, obj);
  7914. call->prev_execute_data = EX(call);
  7915. EX(call) = call;
  7916. ZEND_VM_NEXT_OPCODE();
  7917. }
  7918. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7919. {
  7920. USE_OPLINE
  7921. zval *function_name;
  7922. zend_class_entry *ce;
  7923. uint32_t call_info;
  7924. zend_function *fbc;
  7925. zend_execute_data *call;
  7926. SAVE_OPLINE();
  7927. if (IS_CONST == IS_CONST) {
  7928. /* no function found. try a static method in class */
  7929. ce = CACHED_PTR(opline->result.num);
  7930. if (UNEXPECTED(ce == NULL)) {
  7931. 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);
  7932. if (UNEXPECTED(ce == NULL)) {
  7933. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7934. HANDLE_EXCEPTION();
  7935. }
  7936. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7937. CACHE_PTR(opline->result.num, ce);
  7938. }
  7939. }
  7940. } else if (IS_CONST == IS_UNUSED) {
  7941. ce = zend_fetch_class(NULL, opline->op1.num);
  7942. if (UNEXPECTED(ce == NULL)) {
  7943. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7944. HANDLE_EXCEPTION();
  7945. }
  7946. } else {
  7947. ce = Z_CE_P(EX_VAR(opline->op1.var));
  7948. }
  7949. if (IS_CONST == IS_CONST &&
  7950. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  7951. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  7952. /* nothing to do */
  7953. } else if (IS_CONST != IS_CONST &&
  7954. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  7955. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  7956. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  7957. } else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  7958. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  7959. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  7960. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  7961. do {
  7962. if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  7963. function_name = Z_REFVAL_P(function_name);
  7964. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  7965. break;
  7966. }
  7967. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  7968. ZVAL_UNDEFINED_OP2();
  7969. if (UNEXPECTED(EG(exception) != NULL)) {
  7970. HANDLE_EXCEPTION();
  7971. }
  7972. }
  7973. zend_throw_error(NULL, "Method name must be a string");
  7974. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7975. HANDLE_EXCEPTION();
  7976. } while (0);
  7977. }
  7978. }
  7979. if (ce->get_static_method) {
  7980. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  7981. } else {
  7982. 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));
  7983. }
  7984. if (UNEXPECTED(fbc == NULL)) {
  7985. if (EXPECTED(!EG(exception))) {
  7986. zend_undefined_method(ce, Z_STR_P(function_name));
  7987. }
  7988. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  7989. HANDLE_EXCEPTION();
  7990. }
  7991. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  7992. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  7993. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  7994. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  7995. }
  7996. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  7997. init_func_run_time_cache(&fbc->op_array);
  7998. }
  7999. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  8000. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8001. }
  8002. } else {
  8003. if (UNEXPECTED(ce->constructor == NULL)) {
  8004. zend_throw_error(NULL, "Cannot call constructor");
  8005. HANDLE_EXCEPTION();
  8006. }
  8007. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  8008. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  8009. HANDLE_EXCEPTION();
  8010. }
  8011. fbc = ce->constructor;
  8012. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  8013. init_func_run_time_cache(&fbc->op_array);
  8014. }
  8015. }
  8016. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  8017. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  8018. ce = (zend_class_entry*)Z_OBJ(EX(This));
  8019. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  8020. } else {
  8021. zend_non_static_method_call(fbc);
  8022. HANDLE_EXCEPTION();
  8023. }
  8024. } else {
  8025. /* previous opcode is ZEND_FETCH_CLASS */
  8026. if (IS_CONST == IS_UNUSED
  8027. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  8028. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  8029. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  8030. ce = Z_OBJCE(EX(This));
  8031. } else {
  8032. ce = Z_CE(EX(This));
  8033. }
  8034. }
  8035. call_info = ZEND_CALL_NESTED_FUNCTION;
  8036. }
  8037. call = zend_vm_stack_push_call_frame(call_info,
  8038. fbc, opline->extended_value, ce);
  8039. call->prev_execute_data = EX(call);
  8040. EX(call) = call;
  8041. ZEND_VM_NEXT_OPCODE();
  8042. }
  8043. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8044. {
  8045. USE_OPLINE
  8046. zval *function_name;
  8047. zend_fcall_info_cache fcc;
  8048. char *error = NULL;
  8049. zend_function *func;
  8050. void *object_or_called_scope;
  8051. zend_execute_data *call;
  8052. uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
  8053. SAVE_OPLINE();
  8054. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  8055. if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
  8056. ZEND_ASSERT(!error);
  8057. func = fcc.function_handler;
  8058. object_or_called_scope = fcc.called_scope;
  8059. if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
  8060. /* Delay closure destruction until its invocation */
  8061. GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
  8062. call_info |= ZEND_CALL_CLOSURE;
  8063. if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
  8064. call_info |= ZEND_CALL_FAKE_CLOSURE;
  8065. }
  8066. if (fcc.object) {
  8067. object_or_called_scope = fcc.object;
  8068. call_info |= ZEND_CALL_HAS_THIS;
  8069. }
  8070. } else if (fcc.object) {
  8071. GC_ADDREF(fcc.object); /* For $this pointer */
  8072. object_or_called_scope = fcc.object;
  8073. call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
  8074. }
  8075. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8076. if (((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
  8077. if (call_info & ZEND_CALL_CLOSURE) {
  8078. zend_object_release(ZEND_CLOSURE_OBJECT(func));
  8079. } else if (call_info & ZEND_CALL_RELEASE_THIS) {
  8080. zend_object_release(fcc.object);
  8081. }
  8082. HANDLE_EXCEPTION();
  8083. }
  8084. if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
  8085. init_func_run_time_cache(&func->op_array);
  8086. }
  8087. } else {
  8088. zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
  8089. efree(error);
  8090. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8091. HANDLE_EXCEPTION();
  8092. }
  8093. call = zend_vm_stack_push_call_frame(call_info,
  8094. func, opline->extended_value, object_or_called_scope);
  8095. call->prev_execute_data = EX(call);
  8096. EX(call) = call;
  8097. ZEND_VM_NEXT_OPCODE();
  8098. }
  8099. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8100. {
  8101. USE_OPLINE
  8102. zval *expr_ptr, new_expr;
  8103. SAVE_OPLINE();
  8104. if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
  8105. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  8106. expr_ptr = NULL;
  8107. if (Z_ISREF_P(expr_ptr)) {
  8108. Z_ADDREF_P(expr_ptr);
  8109. } else {
  8110. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  8111. }
  8112. } else {
  8113. expr_ptr = RT_CONSTANT(opline, opline->op1);
  8114. if (IS_CONST == IS_TMP_VAR) {
  8115. /* pass */
  8116. } else if (IS_CONST == IS_CONST) {
  8117. Z_TRY_ADDREF_P(expr_ptr);
  8118. } else if (IS_CONST == IS_CV) {
  8119. ZVAL_DEREF(expr_ptr);
  8120. Z_TRY_ADDREF_P(expr_ptr);
  8121. } else /* if (IS_CONST == IS_VAR) */ {
  8122. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  8123. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  8124. expr_ptr = Z_REFVAL_P(expr_ptr);
  8125. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  8126. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  8127. expr_ptr = &new_expr;
  8128. efree_size(ref, sizeof(zend_reference));
  8129. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  8130. Z_ADDREF_P(expr_ptr);
  8131. }
  8132. }
  8133. }
  8134. }
  8135. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  8136. zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  8137. zend_string *str;
  8138. zend_ulong hval;
  8139. add_again:
  8140. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  8141. str = Z_STR_P(offset);
  8142. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  8143. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  8144. goto num_index;
  8145. }
  8146. }
  8147. str_index:
  8148. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  8149. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  8150. hval = Z_LVAL_P(offset);
  8151. num_index:
  8152. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  8153. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  8154. offset = Z_REFVAL_P(offset);
  8155. goto add_again;
  8156. } else if (Z_TYPE_P(offset) == IS_NULL) {
  8157. str = ZSTR_EMPTY_ALLOC();
  8158. goto str_index;
  8159. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  8160. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  8161. goto num_index;
  8162. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  8163. hval = 0;
  8164. goto num_index;
  8165. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  8166. hval = 1;
  8167. goto num_index;
  8168. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  8169. zend_use_resource_as_offset(offset);
  8170. hval = Z_RES_HANDLE_P(offset);
  8171. goto num_index;
  8172. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  8173. ZVAL_UNDEFINED_OP2();
  8174. str = ZSTR_EMPTY_ALLOC();
  8175. goto str_index;
  8176. } else {
  8177. zend_illegal_offset();
  8178. zval_ptr_dtor_nogc(expr_ptr);
  8179. }
  8180. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8181. } else {
  8182. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  8183. zend_cannot_add_element();
  8184. zval_ptr_dtor_nogc(expr_ptr);
  8185. }
  8186. }
  8187. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8188. }
  8189. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8190. {
  8191. zval *array;
  8192. uint32_t size;
  8193. USE_OPLINE
  8194. array = EX_VAR(opline->result.var);
  8195. if (IS_CONST != IS_UNUSED) {
  8196. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  8197. ZVAL_ARR(array, zend_new_array(size));
  8198. /* Explicitly initialize array as not-packed if flag is set */
  8199. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  8200. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  8201. }
  8202. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8203. } else {
  8204. ZVAL_ARR(array, zend_new_array(0));
  8205. ZEND_VM_NEXT_OPCODE();
  8206. }
  8207. }
  8208. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8209. {
  8210. USE_OPLINE
  8211. zval *container;
  8212. bool result;
  8213. zend_ulong hval;
  8214. zval *offset;
  8215. SAVE_OPLINE();
  8216. container = RT_CONSTANT(opline, opline->op1);
  8217. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  8218. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  8219. HashTable *ht;
  8220. zval *value;
  8221. zend_string *str;
  8222. isset_dim_obj_array:
  8223. ht = Z_ARRVAL_P(container);
  8224. isset_again:
  8225. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  8226. str = Z_STR_P(offset);
  8227. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  8228. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  8229. goto num_index_prop;
  8230. }
  8231. }
  8232. value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
  8233. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  8234. hval = Z_LVAL_P(offset);
  8235. num_index_prop:
  8236. value = zend_hash_index_find(ht, hval);
  8237. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  8238. offset = Z_REFVAL_P(offset);
  8239. goto isset_again;
  8240. } else {
  8241. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  8242. if (UNEXPECTED(EG(exception))) {
  8243. result = 0;
  8244. goto isset_dim_obj_exit;
  8245. }
  8246. }
  8247. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  8248. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  8249. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  8250. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  8251. if (IS_CONST & (IS_CONST|IS_CV)) {
  8252. /* avoid exception check */
  8253. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8254. ZEND_VM_SMART_BRANCH(result, 0);
  8255. }
  8256. } else {
  8257. result = (value == NULL || !i_zend_is_true(value));
  8258. }
  8259. goto isset_dim_obj_exit;
  8260. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  8261. container = Z_REFVAL_P(container);
  8262. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  8263. goto isset_dim_obj_array;
  8264. }
  8265. }
  8266. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  8267. offset++;
  8268. }
  8269. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  8270. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  8271. } else {
  8272. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  8273. }
  8274. isset_dim_obj_exit:
  8275. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8276. ZEND_VM_SMART_BRANCH(result, 1);
  8277. }
  8278. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8279. {
  8280. USE_OPLINE
  8281. zval *container;
  8282. int result;
  8283. zval *offset;
  8284. zend_string *name, *tmp_name;
  8285. SAVE_OPLINE();
  8286. container = RT_CONSTANT(opline, opline->op1);
  8287. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  8288. if (IS_CONST == IS_CONST ||
  8289. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  8290. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  8291. container = Z_REFVAL_P(container);
  8292. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  8293. result = (opline->extended_value & ZEND_ISEMPTY);
  8294. goto isset_object_finish;
  8295. }
  8296. } else {
  8297. result = (opline->extended_value & ZEND_ISEMPTY);
  8298. goto isset_object_finish;
  8299. }
  8300. }
  8301. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  8302. name = Z_STR_P(offset);
  8303. } else {
  8304. name = zval_try_get_tmp_string(offset, &tmp_name);
  8305. if (UNEXPECTED(!name)) {
  8306. result = 0;
  8307. goto isset_object_finish;
  8308. }
  8309. }
  8310. result =
  8311. (opline->extended_value & ZEND_ISEMPTY) ^
  8312. 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));
  8313. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  8314. zend_tmp_string_release(tmp_name);
  8315. }
  8316. isset_object_finish:
  8317. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8318. ZEND_VM_SMART_BRANCH(result, 1);
  8319. }
  8320. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8321. {
  8322. USE_OPLINE
  8323. zval *key, *subject;
  8324. HashTable *ht;
  8325. bool result;
  8326. SAVE_OPLINE();
  8327. key = RT_CONSTANT(opline, opline->op1);
  8328. subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  8329. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  8330. array_key_exists_array:
  8331. ht = Z_ARRVAL_P(subject);
  8332. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  8333. } else {
  8334. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  8335. subject = Z_REFVAL_P(subject);
  8336. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  8337. goto array_key_exists_array;
  8338. }
  8339. }
  8340. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  8341. result = 0;
  8342. }
  8343. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8344. ZEND_VM_SMART_BRANCH(result, 1);
  8345. }
  8346. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  8347. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8348. {
  8349. USE_OPLINE
  8350. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  8351. SAVE_OPLINE();
  8352. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  8353. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8354. }
  8355. /* Destroy the previously yielded value */
  8356. zval_ptr_dtor(&generator->value);
  8357. /* Destroy the previously yielded key */
  8358. zval_ptr_dtor(&generator->key);
  8359. /* Set the new yielded value */
  8360. if (IS_CONST != IS_UNUSED) {
  8361. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  8362. /* Constants and temporary variables aren't yieldable by reference,
  8363. * but we still allow them with a notice. */
  8364. if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
  8365. zval *value;
  8366. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  8367. value = RT_CONSTANT(opline, opline->op1);
  8368. ZVAL_COPY_VALUE(&generator->value, value);
  8369. if (IS_CONST == IS_CONST) {
  8370. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  8371. Z_ADDREF(generator->value);
  8372. }
  8373. }
  8374. } else {
  8375. zval *value_ptr = NULL;
  8376. /* If a function call result is yielded and the function did
  8377. * not return by reference we throw a notice. */
  8378. do {
  8379. if (IS_CONST == IS_VAR) {
  8380. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  8381. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  8382. && !Z_ISREF_P(value_ptr)) {
  8383. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  8384. ZVAL_COPY(&generator->value, value_ptr);
  8385. break;
  8386. }
  8387. }
  8388. if (Z_ISREF_P(value_ptr)) {
  8389. Z_ADDREF_P(value_ptr);
  8390. } else {
  8391. ZVAL_MAKE_REF_EX(value_ptr, 2);
  8392. }
  8393. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  8394. } while (0);
  8395. }
  8396. } else {
  8397. zval *value = RT_CONSTANT(opline, opline->op1);
  8398. /* Consts, temporary variables and references need copying */
  8399. if (IS_CONST == IS_CONST) {
  8400. ZVAL_COPY_VALUE(&generator->value, value);
  8401. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  8402. Z_ADDREF(generator->value);
  8403. }
  8404. } else if (IS_CONST == IS_TMP_VAR) {
  8405. ZVAL_COPY_VALUE(&generator->value, value);
  8406. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  8407. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  8408. } else {
  8409. ZVAL_COPY_VALUE(&generator->value, value);
  8410. if (IS_CONST == IS_CV) {
  8411. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  8412. }
  8413. }
  8414. }
  8415. } else {
  8416. /* If no value was specified yield null */
  8417. ZVAL_NULL(&generator->value);
  8418. }
  8419. /* Set the new yielded key */
  8420. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  8421. zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  8422. if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  8423. key = Z_REFVAL_P(key);
  8424. }
  8425. ZVAL_COPY(&generator->key, key);
  8426. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  8427. if (Z_TYPE(generator->key) == IS_LONG
  8428. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  8429. ) {
  8430. generator->largest_used_integer_key = Z_LVAL(generator->key);
  8431. }
  8432. } else {
  8433. /* If no key was specified we use auto-increment keys */
  8434. generator->largest_used_integer_key++;
  8435. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  8436. }
  8437. if (RETURN_VALUE_USED(opline)) {
  8438. /* If the return value of yield is used set the send
  8439. * target and initialize it to NULL */
  8440. generator->send_target = EX_VAR(opline->result.var);
  8441. ZVAL_NULL(generator->send_target);
  8442. } else {
  8443. generator->send_target = NULL;
  8444. }
  8445. /* We increment to the next op, so we are at the correct position when the
  8446. * generator is resumed. */
  8447. ZEND_VM_INC_OPCODE();
  8448. /* The GOTO VM uses a local opline variable. We need to set the opline
  8449. * variable in execute_data so we don't resume at an old position. */
  8450. SAVE_OPLINE();
  8451. ZEND_VM_RETURN();
  8452. }
  8453. 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)
  8454. {
  8455. USE_OPLINE
  8456. zval *varname;
  8457. zval *retval;
  8458. zend_string *name, *tmp_name;
  8459. HashTable *target_symbol_table;
  8460. SAVE_OPLINE();
  8461. varname = RT_CONSTANT(opline, opline->op1);
  8462. if (IS_CONST == IS_CONST) {
  8463. name = Z_STR_P(varname);
  8464. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  8465. name = Z_STR_P(varname);
  8466. tmp_name = NULL;
  8467. } else {
  8468. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  8469. ZVAL_UNDEFINED_OP1();
  8470. }
  8471. name = zval_try_get_tmp_string(varname, &tmp_name);
  8472. if (UNEXPECTED(!name)) {
  8473. if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
  8474. }
  8475. ZVAL_UNDEF(EX_VAR(opline->result.var));
  8476. HANDLE_EXCEPTION();
  8477. }
  8478. }
  8479. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  8480. retval = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
  8481. if (retval == NULL) {
  8482. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  8483. fetch_this:
  8484. zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
  8485. if (IS_CONST != IS_CONST) {
  8486. zend_tmp_string_release(tmp_name);
  8487. }
  8488. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8489. }
  8490. if (type == BP_VAR_W) {
  8491. retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
  8492. } else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
  8493. retval = &EG(uninitialized_zval);
  8494. } else {
  8495. zend_error(E_WARNING, "Undefined %svariable $%s",
  8496. (opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
  8497. if (type == BP_VAR_RW && !EG(exception)) {
  8498. retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
  8499. } else {
  8500. retval = &EG(uninitialized_zval);
  8501. }
  8502. }
  8503. /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
  8504. } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
  8505. retval = Z_INDIRECT_P(retval);
  8506. if (Z_TYPE_P(retval) == IS_UNDEF) {
  8507. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  8508. goto fetch_this;
  8509. }
  8510. if (type == BP_VAR_W) {
  8511. ZVAL_NULL(retval);
  8512. } else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
  8513. retval = &EG(uninitialized_zval);
  8514. } else {
  8515. zend_error(E_WARNING, "Undefined %svariable $%s",
  8516. (opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
  8517. if (type == BP_VAR_RW && !EG(exception)) {
  8518. ZVAL_NULL(retval);
  8519. } else {
  8520. retval = &EG(uninitialized_zval);
  8521. }
  8522. }
  8523. }
  8524. }
  8525. if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
  8526. }
  8527. if (IS_CONST != IS_CONST) {
  8528. zend_tmp_string_release(tmp_name);
  8529. }
  8530. ZEND_ASSERT(retval != NULL);
  8531. if (type == BP_VAR_R || type == BP_VAR_IS) {
  8532. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  8533. } else {
  8534. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  8535. }
  8536. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8537. }
  8538. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8539. {
  8540. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  8541. }
  8542. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8543. {
  8544. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  8545. }
  8546. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8547. {
  8548. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  8549. }
  8550. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8551. {
  8552. int fetch_type =
  8553. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  8554. BP_VAR_W : BP_VAR_R;
  8555. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  8556. }
  8557. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8558. {
  8559. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  8560. }
  8561. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8562. {
  8563. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  8564. }
  8565. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  8566. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8567. {
  8568. #if 0
  8569. USE_OPLINE
  8570. #endif
  8571. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  8572. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  8573. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8574. }
  8575. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8576. } else {
  8577. if (IS_UNUSED == IS_UNUSED) {
  8578. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8579. }
  8580. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8581. }
  8582. }
  8583. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8584. {
  8585. USE_OPLINE
  8586. zval *function_name;
  8587. zend_class_entry *ce;
  8588. uint32_t call_info;
  8589. zend_function *fbc;
  8590. zend_execute_data *call;
  8591. SAVE_OPLINE();
  8592. if (IS_CONST == IS_CONST) {
  8593. /* no function found. try a static method in class */
  8594. ce = CACHED_PTR(opline->result.num);
  8595. if (UNEXPECTED(ce == NULL)) {
  8596. 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);
  8597. if (UNEXPECTED(ce == NULL)) {
  8598. HANDLE_EXCEPTION();
  8599. }
  8600. if (IS_UNUSED != IS_CONST) {
  8601. CACHE_PTR(opline->result.num, ce);
  8602. }
  8603. }
  8604. } else if (IS_CONST == IS_UNUSED) {
  8605. ce = zend_fetch_class(NULL, opline->op1.num);
  8606. if (UNEXPECTED(ce == NULL)) {
  8607. HANDLE_EXCEPTION();
  8608. }
  8609. } else {
  8610. ce = Z_CE_P(EX_VAR(opline->op1.var));
  8611. }
  8612. if (IS_CONST == IS_CONST &&
  8613. IS_UNUSED == IS_CONST &&
  8614. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  8615. /* nothing to do */
  8616. } else if (IS_CONST != IS_CONST &&
  8617. IS_UNUSED == IS_CONST &&
  8618. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  8619. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  8620. } else if (IS_UNUSED != IS_UNUSED) {
  8621. function_name = NULL;
  8622. if (IS_UNUSED != IS_CONST) {
  8623. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  8624. do {
  8625. if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  8626. function_name = Z_REFVAL_P(function_name);
  8627. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  8628. break;
  8629. }
  8630. } else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  8631. ZVAL_UNDEFINED_OP2();
  8632. if (UNEXPECTED(EG(exception) != NULL)) {
  8633. HANDLE_EXCEPTION();
  8634. }
  8635. }
  8636. zend_throw_error(NULL, "Method name must be a string");
  8637. HANDLE_EXCEPTION();
  8638. } while (0);
  8639. }
  8640. }
  8641. if (ce->get_static_method) {
  8642. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  8643. } else {
  8644. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  8645. }
  8646. if (UNEXPECTED(fbc == NULL)) {
  8647. if (EXPECTED(!EG(exception))) {
  8648. zend_undefined_method(ce, Z_STR_P(function_name));
  8649. }
  8650. HANDLE_EXCEPTION();
  8651. }
  8652. if (IS_UNUSED == IS_CONST &&
  8653. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  8654. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  8655. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  8656. }
  8657. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  8658. init_func_run_time_cache(&fbc->op_array);
  8659. }
  8660. if (IS_UNUSED != IS_CONST) {
  8661. }
  8662. } else {
  8663. if (UNEXPECTED(ce->constructor == NULL)) {
  8664. zend_throw_error(NULL, "Cannot call constructor");
  8665. HANDLE_EXCEPTION();
  8666. }
  8667. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  8668. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  8669. HANDLE_EXCEPTION();
  8670. }
  8671. fbc = ce->constructor;
  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. }
  8676. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  8677. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  8678. ce = (zend_class_entry*)Z_OBJ(EX(This));
  8679. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  8680. } else {
  8681. zend_non_static_method_call(fbc);
  8682. HANDLE_EXCEPTION();
  8683. }
  8684. } else {
  8685. /* previous opcode is ZEND_FETCH_CLASS */
  8686. if (IS_CONST == IS_UNUSED
  8687. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  8688. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  8689. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  8690. ce = Z_OBJCE(EX(This));
  8691. } else {
  8692. ce = Z_CE(EX(This));
  8693. }
  8694. }
  8695. call_info = ZEND_CALL_NESTED_FUNCTION;
  8696. }
  8697. call = zend_vm_stack_push_call_frame(call_info,
  8698. fbc, opline->extended_value, ce);
  8699. call->prev_execute_data = EX(call);
  8700. EX(call) = call;
  8701. ZEND_VM_NEXT_OPCODE();
  8702. }
  8703. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8704. {
  8705. if (IS_CONST == IS_UNUSED) {
  8706. SAVE_OPLINE();
  8707. zend_verify_missing_return_type(EX(func));
  8708. HANDLE_EXCEPTION();
  8709. } else {
  8710. /* prevents "undefined variable opline" errors */
  8711. #if 0 || (IS_CONST != IS_UNUSED)
  8712. USE_OPLINE
  8713. zval *retval_ref, *retval_ptr;
  8714. zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
  8715. retval_ref = retval_ptr = RT_CONSTANT(opline, opline->op1);
  8716. if (IS_CONST == IS_CONST) {
  8717. ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
  8718. retval_ref = retval_ptr = EX_VAR(opline->result.var);
  8719. } else if (IS_CONST == IS_VAR) {
  8720. if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
  8721. retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
  8722. }
  8723. ZVAL_DEREF(retval_ptr);
  8724. } else if (IS_CONST == IS_CV) {
  8725. ZVAL_DEREF(retval_ptr);
  8726. }
  8727. if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
  8728. ZEND_VM_NEXT_OPCODE();
  8729. }
  8730. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
  8731. SAVE_OPLINE();
  8732. retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
  8733. if (UNEXPECTED(EG(exception))) {
  8734. HANDLE_EXCEPTION();
  8735. }
  8736. if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
  8737. ZEND_VM_NEXT_OPCODE();
  8738. }
  8739. }
  8740. zend_reference *ref = NULL;
  8741. void *cache_slot = CACHE_ADDR(opline->op2.num);
  8742. if (UNEXPECTED(retval_ref != retval_ptr)) {
  8743. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  8744. ref = Z_REF_P(retval_ref);
  8745. } else {
  8746. /* A cast might happen - unwrap the reference if this is a by-value return */
  8747. if (Z_REFCOUNT_P(retval_ref) == 1) {
  8748. ZVAL_UNREF(retval_ref);
  8749. } else {
  8750. Z_DELREF_P(retval_ref);
  8751. ZVAL_COPY(retval_ref, retval_ptr);
  8752. }
  8753. retval_ptr = retval_ref;
  8754. }
  8755. }
  8756. SAVE_OPLINE();
  8757. if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
  8758. zend_verify_return_error(EX(func), retval_ptr);
  8759. HANDLE_EXCEPTION();
  8760. }
  8761. ZEND_VM_NEXT_OPCODE();
  8762. #endif
  8763. }
  8764. }
  8765. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8766. {
  8767. USE_OPLINE
  8768. zval *value, *arg;
  8769. if (IS_UNUSED == IS_CONST) {
  8770. SAVE_OPLINE();
  8771. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  8772. uint32_t arg_num;
  8773. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  8774. if (UNEXPECTED(!arg)) {
  8775. HANDLE_EXCEPTION();
  8776. }
  8777. } else {
  8778. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  8779. }
  8780. value = RT_CONSTANT(opline, opline->op1);
  8781. ZVAL_COPY_VALUE(arg, value);
  8782. if (IS_CONST == IS_CONST) {
  8783. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  8784. Z_ADDREF_P(arg);
  8785. }
  8786. }
  8787. ZEND_VM_NEXT_OPCODE();
  8788. }
  8789. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8790. {
  8791. USE_OPLINE
  8792. zval *value, *arg;
  8793. uint32_t arg_num;
  8794. if (IS_UNUSED == IS_CONST) {
  8795. SAVE_OPLINE();
  8796. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  8797. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  8798. if (UNEXPECTED(!arg)) {
  8799. HANDLE_EXCEPTION();
  8800. }
  8801. } else {
  8802. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  8803. arg_num = opline->op2.num;
  8804. }
  8805. if (EXPECTED(0)) {
  8806. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  8807. goto send_val_by_ref;
  8808. }
  8809. } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  8810. send_val_by_ref:
  8811. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  8812. }
  8813. value = RT_CONSTANT(opline, opline->op1);
  8814. ZVAL_COPY_VALUE(arg, value);
  8815. if (IS_CONST == IS_CONST) {
  8816. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  8817. Z_ADDREF_P(arg);
  8818. }
  8819. }
  8820. ZEND_VM_NEXT_OPCODE();
  8821. }
  8822. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8823. {
  8824. USE_OPLINE
  8825. zval *value, *arg;
  8826. uint32_t arg_num;
  8827. if (IS_UNUSED == IS_CONST) {
  8828. SAVE_OPLINE();
  8829. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  8830. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  8831. if (UNEXPECTED(!arg)) {
  8832. HANDLE_EXCEPTION();
  8833. }
  8834. } else {
  8835. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  8836. arg_num = opline->op2.num;
  8837. }
  8838. if (EXPECTED(1)) {
  8839. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  8840. goto send_val_by_ref;
  8841. }
  8842. } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  8843. send_val_by_ref:
  8844. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  8845. }
  8846. value = RT_CONSTANT(opline, opline->op1);
  8847. ZVAL_COPY_VALUE(arg, value);
  8848. if (IS_CONST == IS_CONST) {
  8849. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  8850. Z_ADDREF_P(arg);
  8851. }
  8852. }
  8853. ZEND_VM_NEXT_OPCODE();
  8854. }
  8855. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8856. {
  8857. USE_OPLINE
  8858. zval *result;
  8859. zend_function *constructor;
  8860. zend_class_entry *ce;
  8861. zend_execute_data *call;
  8862. SAVE_OPLINE();
  8863. if (IS_CONST == IS_CONST) {
  8864. ce = CACHED_PTR(opline->op2.num);
  8865. if (UNEXPECTED(ce == NULL)) {
  8866. 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);
  8867. if (UNEXPECTED(ce == NULL)) {
  8868. ZVAL_UNDEF(EX_VAR(opline->result.var));
  8869. HANDLE_EXCEPTION();
  8870. }
  8871. CACHE_PTR(opline->op2.num, ce);
  8872. }
  8873. } else if (IS_CONST == IS_UNUSED) {
  8874. ce = zend_fetch_class(NULL, opline->op1.num);
  8875. if (UNEXPECTED(ce == NULL)) {
  8876. ZVAL_UNDEF(EX_VAR(opline->result.var));
  8877. HANDLE_EXCEPTION();
  8878. }
  8879. } else {
  8880. ce = Z_CE_P(EX_VAR(opline->op1.var));
  8881. }
  8882. result = EX_VAR(opline->result.var);
  8883. if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
  8884. ZVAL_UNDEF(result);
  8885. HANDLE_EXCEPTION();
  8886. }
  8887. constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
  8888. if (constructor == NULL) {
  8889. if (UNEXPECTED(EG(exception))) {
  8890. HANDLE_EXCEPTION();
  8891. }
  8892. /* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
  8893. * opcode is DO_FCALL in case EXT instructions are used. */
  8894. if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
  8895. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  8896. }
  8897. /* Perform a dummy function call */
  8898. call = zend_vm_stack_push_call_frame(
  8899. ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
  8900. opline->extended_value, NULL);
  8901. } else {
  8902. if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
  8903. init_func_run_time_cache(&constructor->op_array);
  8904. }
  8905. /* We are not handling overloaded classes right now */
  8906. call = zend_vm_stack_push_call_frame(
  8907. ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
  8908. constructor,
  8909. opline->extended_value,
  8910. Z_OBJ_P(result));
  8911. Z_ADDREF_P(result);
  8912. }
  8913. call->prev_execute_data = EX(call);
  8914. EX(call) = call;
  8915. ZEND_VM_NEXT_OPCODE();
  8916. }
  8917. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8918. {
  8919. USE_OPLINE
  8920. zval *expr_ptr, new_expr;
  8921. SAVE_OPLINE();
  8922. if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
  8923. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  8924. expr_ptr = NULL;
  8925. if (Z_ISREF_P(expr_ptr)) {
  8926. Z_ADDREF_P(expr_ptr);
  8927. } else {
  8928. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  8929. }
  8930. } else {
  8931. expr_ptr = RT_CONSTANT(opline, opline->op1);
  8932. if (IS_CONST == IS_TMP_VAR) {
  8933. /* pass */
  8934. } else if (IS_CONST == IS_CONST) {
  8935. Z_TRY_ADDREF_P(expr_ptr);
  8936. } else if (IS_CONST == IS_CV) {
  8937. ZVAL_DEREF(expr_ptr);
  8938. Z_TRY_ADDREF_P(expr_ptr);
  8939. } else /* if (IS_CONST == IS_VAR) */ {
  8940. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  8941. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  8942. expr_ptr = Z_REFVAL_P(expr_ptr);
  8943. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  8944. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  8945. expr_ptr = &new_expr;
  8946. efree_size(ref, sizeof(zend_reference));
  8947. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  8948. Z_ADDREF_P(expr_ptr);
  8949. }
  8950. }
  8951. }
  8952. }
  8953. if (IS_UNUSED != IS_UNUSED) {
  8954. zval *offset = NULL;
  8955. zend_string *str;
  8956. zend_ulong hval;
  8957. add_again:
  8958. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  8959. str = Z_STR_P(offset);
  8960. if (IS_UNUSED != IS_CONST) {
  8961. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  8962. goto num_index;
  8963. }
  8964. }
  8965. str_index:
  8966. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  8967. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  8968. hval = Z_LVAL_P(offset);
  8969. num_index:
  8970. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  8971. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  8972. offset = Z_REFVAL_P(offset);
  8973. goto add_again;
  8974. } else if (Z_TYPE_P(offset) == IS_NULL) {
  8975. str = ZSTR_EMPTY_ALLOC();
  8976. goto str_index;
  8977. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  8978. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  8979. goto num_index;
  8980. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  8981. hval = 0;
  8982. goto num_index;
  8983. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  8984. hval = 1;
  8985. goto num_index;
  8986. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  8987. zend_use_resource_as_offset(offset);
  8988. hval = Z_RES_HANDLE_P(offset);
  8989. goto num_index;
  8990. } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  8991. ZVAL_UNDEFINED_OP2();
  8992. str = ZSTR_EMPTY_ALLOC();
  8993. goto str_index;
  8994. } else {
  8995. zend_illegal_offset();
  8996. zval_ptr_dtor_nogc(expr_ptr);
  8997. }
  8998. } else {
  8999. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  9000. zend_cannot_add_element();
  9001. zval_ptr_dtor_nogc(expr_ptr);
  9002. }
  9003. }
  9004. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9005. }
  9006. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9007. {
  9008. zval *array;
  9009. uint32_t size;
  9010. USE_OPLINE
  9011. array = EX_VAR(opline->result.var);
  9012. if (IS_CONST != IS_UNUSED) {
  9013. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  9014. ZVAL_ARR(array, zend_new_array(size));
  9015. /* Explicitly initialize array as not-packed if flag is set */
  9016. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  9017. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  9018. }
  9019. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9020. } else {
  9021. ZVAL_ARR(array, zend_new_array(0));
  9022. ZEND_VM_NEXT_OPCODE();
  9023. }
  9024. }
  9025. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9026. {
  9027. USE_OPLINE
  9028. zval *varname;
  9029. zend_string *name, *tmp_name;
  9030. HashTable *target_symbol_table;
  9031. SAVE_OPLINE();
  9032. varname = RT_CONSTANT(opline, opline->op1);
  9033. if (IS_CONST == IS_CONST) {
  9034. name = Z_STR_P(varname);
  9035. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  9036. name = Z_STR_P(varname);
  9037. tmp_name = NULL;
  9038. } else {
  9039. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  9040. varname = ZVAL_UNDEFINED_OP1();
  9041. }
  9042. name = zval_try_get_tmp_string(varname, &tmp_name);
  9043. if (UNEXPECTED(!name)) {
  9044. HANDLE_EXCEPTION();
  9045. }
  9046. }
  9047. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  9048. zend_hash_del_ind(target_symbol_table, name);
  9049. if (IS_CONST != IS_CONST) {
  9050. zend_tmp_string_release(tmp_name);
  9051. }
  9052. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9053. }
  9054. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  9055. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9056. {
  9057. USE_OPLINE
  9058. zval *value;
  9059. /* Should be bool result? as below got: result = (opline->extended_value & ZEND_ISEMPTY) */
  9060. int result;
  9061. zval *varname;
  9062. zend_string *name, *tmp_name;
  9063. HashTable *target_symbol_table;
  9064. SAVE_OPLINE();
  9065. varname = RT_CONSTANT(opline, opline->op1);
  9066. if (IS_CONST == IS_CONST) {
  9067. name = Z_STR_P(varname);
  9068. } else {
  9069. name = zval_get_tmp_string(varname, &tmp_name);
  9070. }
  9071. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  9072. value = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
  9073. if (IS_CONST != IS_CONST) {
  9074. zend_tmp_string_release(tmp_name);
  9075. }
  9076. if (!value) {
  9077. result = (opline->extended_value & ZEND_ISEMPTY);
  9078. } else {
  9079. if (Z_TYPE_P(value) == IS_INDIRECT) {
  9080. value = Z_INDIRECT_P(value);
  9081. }
  9082. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  9083. if (Z_ISREF_P(value)) {
  9084. value = Z_REFVAL_P(value);
  9085. }
  9086. result = Z_TYPE_P(value) > IS_NULL;
  9087. } else {
  9088. result = !i_zend_is_true(value);
  9089. }
  9090. }
  9091. ZEND_VM_SMART_BRANCH(result, 1);
  9092. }
  9093. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  9094. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9095. {
  9096. USE_OPLINE
  9097. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  9098. SAVE_OPLINE();
  9099. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  9100. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9101. }
  9102. /* Destroy the previously yielded value */
  9103. zval_ptr_dtor(&generator->value);
  9104. /* Destroy the previously yielded key */
  9105. zval_ptr_dtor(&generator->key);
  9106. /* Set the new yielded value */
  9107. if (IS_CONST != IS_UNUSED) {
  9108. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  9109. /* Constants and temporary variables aren't yieldable by reference,
  9110. * but we still allow them with a notice. */
  9111. if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
  9112. zval *value;
  9113. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  9114. value = RT_CONSTANT(opline, opline->op1);
  9115. ZVAL_COPY_VALUE(&generator->value, value);
  9116. if (IS_CONST == IS_CONST) {
  9117. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  9118. Z_ADDREF(generator->value);
  9119. }
  9120. }
  9121. } else {
  9122. zval *value_ptr = NULL;
  9123. /* If a function call result is yielded and the function did
  9124. * not return by reference we throw a notice. */
  9125. do {
  9126. if (IS_CONST == IS_VAR) {
  9127. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  9128. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  9129. && !Z_ISREF_P(value_ptr)) {
  9130. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  9131. ZVAL_COPY(&generator->value, value_ptr);
  9132. break;
  9133. }
  9134. }
  9135. if (Z_ISREF_P(value_ptr)) {
  9136. Z_ADDREF_P(value_ptr);
  9137. } else {
  9138. ZVAL_MAKE_REF_EX(value_ptr, 2);
  9139. }
  9140. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  9141. } while (0);
  9142. }
  9143. } else {
  9144. zval *value = RT_CONSTANT(opline, opline->op1);
  9145. /* Consts, temporary variables and references need copying */
  9146. if (IS_CONST == IS_CONST) {
  9147. ZVAL_COPY_VALUE(&generator->value, value);
  9148. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  9149. Z_ADDREF(generator->value);
  9150. }
  9151. } else if (IS_CONST == IS_TMP_VAR) {
  9152. ZVAL_COPY_VALUE(&generator->value, value);
  9153. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  9154. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  9155. } else {
  9156. ZVAL_COPY_VALUE(&generator->value, value);
  9157. if (IS_CONST == IS_CV) {
  9158. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  9159. }
  9160. }
  9161. }
  9162. } else {
  9163. /* If no value was specified yield null */
  9164. ZVAL_NULL(&generator->value);
  9165. }
  9166. /* Set the new yielded key */
  9167. if (IS_UNUSED != IS_UNUSED) {
  9168. zval *key = NULL;
  9169. if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  9170. key = Z_REFVAL_P(key);
  9171. }
  9172. ZVAL_COPY(&generator->key, key);
  9173. if (Z_TYPE(generator->key) == IS_LONG
  9174. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  9175. ) {
  9176. generator->largest_used_integer_key = Z_LVAL(generator->key);
  9177. }
  9178. } else {
  9179. /* If no key was specified we use auto-increment keys */
  9180. generator->largest_used_integer_key++;
  9181. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  9182. }
  9183. if (RETURN_VALUE_USED(opline)) {
  9184. /* If the return value of yield is used set the send
  9185. * target and initialize it to NULL */
  9186. generator->send_target = EX_VAR(opline->result.var);
  9187. ZVAL_NULL(generator->send_target);
  9188. } else {
  9189. generator->send_target = NULL;
  9190. }
  9191. /* We increment to the next op, so we are at the correct position when the
  9192. * generator is resumed. */
  9193. ZEND_VM_INC_OPCODE();
  9194. /* The GOTO VM uses a local opline variable. We need to set the opline
  9195. * variable in execute_data so we don't resume at an old position. */
  9196. SAVE_OPLINE();
  9197. ZEND_VM_RETURN();
  9198. }
  9199. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9200. {
  9201. USE_OPLINE
  9202. zval *op;
  9203. SAVE_OPLINE();
  9204. op = RT_CONSTANT(opline, opline->op1);
  9205. zend_match_unhandled_error(op);
  9206. HANDLE_EXCEPTION();
  9207. }
  9208. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9209. {
  9210. USE_OPLINE
  9211. zval *op1;
  9212. zend_long count;
  9213. SAVE_OPLINE();
  9214. op1 = RT_CONSTANT(opline, opline->op1);
  9215. while (1) {
  9216. if (Z_TYPE_P(op1) == IS_ARRAY) {
  9217. count = zend_hash_num_elements(Z_ARRVAL_P(op1));
  9218. break;
  9219. } else if (Z_TYPE_P(op1) == IS_OBJECT) {
  9220. zend_object *zobj = Z_OBJ_P(op1);
  9221. /* first, we check if the handler is defined */
  9222. if (zobj->handlers->count_elements) {
  9223. if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
  9224. break;
  9225. }
  9226. if (UNEXPECTED(EG(exception))) {
  9227. count = 0;
  9228. break;
  9229. }
  9230. }
  9231. /* if not and the object implements Countable we call its count() method */
  9232. if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
  9233. zval retval;
  9234. zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
  9235. count = zval_get_long(&retval);
  9236. zval_ptr_dtor(&retval);
  9237. break;
  9238. }
  9239. /* If There's no handler and it doesn't implement Countable then emit a TypeError */
  9240. } else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
  9241. op1 = Z_REFVAL_P(op1);
  9242. continue;
  9243. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  9244. ZVAL_UNDEFINED_OP1();
  9245. }
  9246. count = 0;
  9247. 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));
  9248. break;
  9249. }
  9250. ZVAL_LONG(EX_VAR(opline->result.var), count);
  9251. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9252. }
  9253. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9254. {
  9255. USE_OPLINE
  9256. if (IS_CONST == IS_UNUSED) {
  9257. if (UNEXPECTED(!EX(func)->common.scope)) {
  9258. SAVE_OPLINE();
  9259. zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
  9260. ZVAL_UNDEF(EX_VAR(opline->result.var));
  9261. HANDLE_EXCEPTION();
  9262. } else {
  9263. ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
  9264. ZEND_VM_NEXT_OPCODE();
  9265. }
  9266. } else {
  9267. zval *op1;
  9268. SAVE_OPLINE();
  9269. op1 = RT_CONSTANT(opline, opline->op1);
  9270. while (1) {
  9271. if (Z_TYPE_P(op1) == IS_OBJECT) {
  9272. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
  9273. } else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
  9274. op1 = Z_REFVAL_P(op1);
  9275. continue;
  9276. } else {
  9277. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  9278. ZVAL_UNDEFINED_OP1();
  9279. }
  9280. zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_type_name(op1));
  9281. ZVAL_UNDEF(EX_VAR(opline->result.var));
  9282. }
  9283. break;
  9284. }
  9285. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9286. }
  9287. }
  9288. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9289. {
  9290. USE_OPLINE
  9291. zval *op1;
  9292. zend_string *type;
  9293. SAVE_OPLINE();
  9294. op1 = RT_CONSTANT(opline, opline->op1);
  9295. type = zend_zval_get_legacy_type(op1);
  9296. if (EXPECTED(type)) {
  9297. ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
  9298. } else {
  9299. ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
  9300. }
  9301. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9302. }
  9303. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9304. {
  9305. USE_OPLINE
  9306. zend_array *ht;
  9307. uint32_t arg_count, result_size, skip;
  9308. arg_count = EX_NUM_ARGS();
  9309. if (IS_CONST == IS_CONST) {
  9310. skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
  9311. if (arg_count < skip) {
  9312. result_size = 0;
  9313. } else {
  9314. result_size = arg_count - skip;
  9315. }
  9316. } else {
  9317. skip = 0;
  9318. result_size = arg_count;
  9319. }
  9320. if (result_size) {
  9321. uint32_t first_extra_arg = EX(func)->op_array.num_args;
  9322. ht = zend_new_array(result_size);
  9323. ZVAL_ARR(EX_VAR(opline->result.var), ht);
  9324. zend_hash_real_init_packed(ht);
  9325. ZEND_HASH_FILL_PACKED(ht) {
  9326. zval *p, *q;
  9327. uint32_t i = skip;
  9328. p = EX_VAR_NUM(i);
  9329. if (arg_count > first_extra_arg) {
  9330. while (i < first_extra_arg) {
  9331. q = p;
  9332. if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
  9333. ZVAL_DEREF(q);
  9334. if (Z_OPT_REFCOUNTED_P(q)) {
  9335. Z_ADDREF_P(q);
  9336. }
  9337. ZEND_HASH_FILL_SET(q);
  9338. } else {
  9339. ZEND_HASH_FILL_SET_NULL();
  9340. }
  9341. ZEND_HASH_FILL_NEXT();
  9342. p++;
  9343. i++;
  9344. }
  9345. if (skip < first_extra_arg) {
  9346. skip = 0;
  9347. } else {
  9348. skip -= first_extra_arg;
  9349. }
  9350. p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
  9351. }
  9352. while (i < arg_count) {
  9353. q = p;
  9354. if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
  9355. ZVAL_DEREF(q);
  9356. if (Z_OPT_REFCOUNTED_P(q)) {
  9357. Z_ADDREF_P(q);
  9358. }
  9359. ZEND_HASH_FILL_SET(q);
  9360. } else {
  9361. ZEND_HASH_FILL_SET_NULL();
  9362. }
  9363. ZEND_HASH_FILL_NEXT();
  9364. p++;
  9365. i++;
  9366. }
  9367. } ZEND_HASH_FILL_END();
  9368. ht->nNumOfElements = result_size;
  9369. } else {
  9370. ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
  9371. }
  9372. ZEND_VM_NEXT_OPCODE();
  9373. }
  9374. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9375. {
  9376. USE_OPLINE
  9377. zval *op1, *op2;
  9378. SAVE_OPLINE();
  9379. op1 = RT_CONSTANT(opline, opline->op1);
  9380. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  9381. div_function(EX_VAR(opline->result.var), op1, op2);
  9382. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9383. }
  9384. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9385. {
  9386. USE_OPLINE
  9387. zval *op1, *op2;
  9388. SAVE_OPLINE();
  9389. op1 = RT_CONSTANT(opline, opline->op1);
  9390. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  9391. pow_function(EX_VAR(opline->result.var), op1, op2);
  9392. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9393. }
  9394. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9395. {
  9396. USE_OPLINE
  9397. zval *op1, *op2;
  9398. op1 = RT_CONSTANT(opline, opline->op1);
  9399. op2 = EX_VAR(opline->op2.var);
  9400. if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  9401. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  9402. zend_string *op1_str = Z_STR_P(op1);
  9403. zend_string *op2_str = Z_STR_P(op2);
  9404. zend_string *str;
  9405. if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  9406. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  9407. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  9408. } else {
  9409. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  9410. }
  9411. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  9412. zend_string_release_ex(op1_str, 0);
  9413. }
  9414. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  9415. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  9416. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  9417. } else {
  9418. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  9419. }
  9420. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  9421. zend_string_release_ex(op2_str, 0);
  9422. }
  9423. } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
  9424. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  9425. size_t len = ZSTR_LEN(op1_str);
  9426. if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
  9427. zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
  9428. }
  9429. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  9430. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  9431. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  9432. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  9433. zend_string_release_ex(op2_str, 0);
  9434. }
  9435. } else {
  9436. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  9437. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  9438. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  9439. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  9440. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  9441. zend_string_release_ex(op1_str, 0);
  9442. }
  9443. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  9444. zend_string_release_ex(op2_str, 0);
  9445. }
  9446. }
  9447. ZEND_VM_NEXT_OPCODE();
  9448. } else {
  9449. SAVE_OPLINE();
  9450. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  9451. op1 = ZVAL_UNDEFINED_OP1();
  9452. }
  9453. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  9454. op2 = ZVAL_UNDEFINED_OP2();
  9455. }
  9456. concat_function(EX_VAR(opline->result.var), op1, op2);
  9457. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9458. }
  9459. }
  9460. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9461. {
  9462. USE_OPLINE
  9463. zval *op1, *op2;
  9464. SAVE_OPLINE();
  9465. op1 = RT_CONSTANT(opline, opline->op1);
  9466. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  9467. compare_function(EX_VAR(opline->result.var), op1, op2);
  9468. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9469. }
  9470. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9471. {
  9472. USE_OPLINE
  9473. zval *container, *dim, *value;
  9474. SAVE_OPLINE();
  9475. container = RT_CONSTANT(opline, opline->op1);
  9476. dim = EX_VAR(opline->op2.var);
  9477. if (IS_CONST != IS_CONST) {
  9478. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  9479. fetch_dim_r_array:
  9480. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
  9481. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  9482. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  9483. container = Z_REFVAL_P(container);
  9484. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  9485. goto fetch_dim_r_array;
  9486. } else {
  9487. goto fetch_dim_r_slow;
  9488. }
  9489. } else {
  9490. fetch_dim_r_slow:
  9491. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  9492. dim++;
  9493. }
  9494. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  9495. }
  9496. } else {
  9497. zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
  9498. }
  9499. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9500. }
  9501. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9502. {
  9503. USE_OPLINE
  9504. zval *container;
  9505. SAVE_OPLINE();
  9506. container = RT_CONSTANT(opline, opline->op1);
  9507. zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  9508. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9509. }
  9510. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9511. {
  9512. #if 0
  9513. USE_OPLINE
  9514. #endif
  9515. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  9516. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  9517. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9518. }
  9519. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9520. } else {
  9521. if (IS_CV == IS_UNUSED) {
  9522. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9523. }
  9524. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9525. }
  9526. }
  9527. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9528. {
  9529. USE_OPLINE
  9530. zval *container;
  9531. void **cache_slot = NULL;
  9532. SAVE_OPLINE();
  9533. container = RT_CONSTANT(opline, opline->op1);
  9534. if (IS_CONST == IS_CONST ||
  9535. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  9536. do {
  9537. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  9538. container = Z_REFVAL_P(container);
  9539. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  9540. break;
  9541. }
  9542. }
  9543. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  9544. ZVAL_UNDEFINED_OP1();
  9545. }
  9546. zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  9547. ZVAL_NULL(EX_VAR(opline->result.var));
  9548. goto fetch_obj_r_finish;
  9549. } while (0);
  9550. }
  9551. /* here we are sure we are dealing with an object */
  9552. do {
  9553. zend_object *zobj = Z_OBJ_P(container);
  9554. zend_string *name, *tmp_name;
  9555. zval *retval;
  9556. if (IS_CV == IS_CONST) {
  9557. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  9558. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  9559. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  9560. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  9561. retval = OBJ_PROP(zobj, prop_offset);
  9562. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  9563. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  9564. goto fetch_obj_r_copy;
  9565. } else {
  9566. fetch_obj_r_fast_copy:
  9567. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  9568. ZEND_VM_NEXT_OPCODE();
  9569. }
  9570. }
  9571. } else if (EXPECTED(zobj->properties != NULL)) {
  9572. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  9573. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  9574. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  9575. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  9576. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  9577. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  9578. (EXPECTED(p->key == name) ||
  9579. (EXPECTED(p->h == ZSTR_H(name)) &&
  9580. EXPECTED(p->key != NULL) &&
  9581. EXPECTED(zend_string_equal_content(p->key, name))))) {
  9582. retval = &p->val;
  9583. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  9584. goto fetch_obj_r_copy;
  9585. } else {
  9586. goto fetch_obj_r_fast_copy;
  9587. }
  9588. }
  9589. }
  9590. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  9591. }
  9592. retval = zend_hash_find_known_hash(zobj->properties, name);
  9593. if (EXPECTED(retval)) {
  9594. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  9595. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  9596. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  9597. goto fetch_obj_r_copy;
  9598. } else {
  9599. goto fetch_obj_r_fast_copy;
  9600. }
  9601. }
  9602. }
  9603. }
  9604. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  9605. } else {
  9606. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  9607. if (UNEXPECTED(!name)) {
  9608. ZVAL_UNDEF(EX_VAR(opline->result.var));
  9609. break;
  9610. }
  9611. }
  9612. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  9613. #if ZEND_DEBUG
  9614. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  9615. zend_verify_internal_read_property_type(zobj, name, retval);
  9616. }
  9617. #endif
  9618. if (IS_CV != IS_CONST) {
  9619. zend_tmp_string_release(tmp_name);
  9620. }
  9621. if (retval != EX_VAR(opline->result.var)) {
  9622. fetch_obj_r_copy:
  9623. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  9624. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  9625. zend_unwrap_reference(retval);
  9626. }
  9627. } while (0);
  9628. fetch_obj_r_finish:
  9629. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9630. }
  9631. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9632. {
  9633. USE_OPLINE
  9634. zval *container;
  9635. void **cache_slot = NULL;
  9636. SAVE_OPLINE();
  9637. container = RT_CONSTANT(opline, opline->op1);
  9638. if (IS_CONST == IS_CONST ||
  9639. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  9640. do {
  9641. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  9642. container = Z_REFVAL_P(container);
  9643. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  9644. break;
  9645. }
  9646. }
  9647. if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  9648. ZVAL_UNDEFINED_OP2();
  9649. }
  9650. ZVAL_NULL(EX_VAR(opline->result.var));
  9651. goto fetch_obj_is_finish;
  9652. } while (0);
  9653. }
  9654. /* here we are sure we are dealing with an object */
  9655. do {
  9656. zend_object *zobj = Z_OBJ_P(container);
  9657. zend_string *name, *tmp_name;
  9658. zval *retval;
  9659. if (IS_CV == IS_CONST) {
  9660. cache_slot = CACHE_ADDR(opline->extended_value);
  9661. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  9662. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  9663. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  9664. retval = OBJ_PROP(zobj, prop_offset);
  9665. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  9666. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  9667. goto fetch_obj_is_copy;
  9668. } else {
  9669. fetch_obj_is_fast_copy:
  9670. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  9671. ZEND_VM_NEXT_OPCODE();
  9672. }
  9673. }
  9674. } else if (EXPECTED(zobj->properties != NULL)) {
  9675. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  9676. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  9677. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  9678. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  9679. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  9680. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  9681. (EXPECTED(p->key == name) ||
  9682. (EXPECTED(p->h == ZSTR_H(name)) &&
  9683. EXPECTED(p->key != NULL) &&
  9684. EXPECTED(zend_string_equal_content(p->key, name))))) {
  9685. retval = &p->val;
  9686. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  9687. goto fetch_obj_is_copy;
  9688. } else {
  9689. goto fetch_obj_is_fast_copy;
  9690. }
  9691. }
  9692. }
  9693. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  9694. }
  9695. retval = zend_hash_find_known_hash(zobj->properties, name);
  9696. if (EXPECTED(retval)) {
  9697. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  9698. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  9699. if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
  9700. goto fetch_obj_is_copy;
  9701. } else {
  9702. goto fetch_obj_is_fast_copy;
  9703. }
  9704. }
  9705. }
  9706. }
  9707. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  9708. } else {
  9709. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  9710. if (UNEXPECTED(!name)) {
  9711. ZVAL_UNDEF(EX_VAR(opline->result.var));
  9712. break;
  9713. }
  9714. }
  9715. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  9716. if (IS_CV != IS_CONST) {
  9717. zend_tmp_string_release(tmp_name);
  9718. }
  9719. if (retval != EX_VAR(opline->result.var)) {
  9720. fetch_obj_is_copy:
  9721. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  9722. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  9723. zend_unwrap_reference(retval);
  9724. }
  9725. } while (0);
  9726. fetch_obj_is_finish:
  9727. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9728. }
  9729. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9730. {
  9731. #if 0
  9732. USE_OPLINE
  9733. #endif
  9734. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  9735. /* Behave like FETCH_OBJ_W */
  9736. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  9737. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9738. }
  9739. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9740. } else {
  9741. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9742. }
  9743. }
  9744. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9745. {
  9746. USE_OPLINE
  9747. zval *container;
  9748. SAVE_OPLINE();
  9749. container = RT_CONSTANT(opline, opline->op1);
  9750. zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  9751. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9752. }
  9753. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9754. {
  9755. USE_OPLINE
  9756. zval *op1, *op2;
  9757. zend_string *op1_str, *op2_str, *str;
  9758. op1 = RT_CONSTANT(opline, opline->op1);
  9759. op2 = EX_VAR(opline->op2.var);
  9760. if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  9761. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  9762. zend_string *op1_str = Z_STR_P(op1);
  9763. zend_string *op2_str = Z_STR_P(op2);
  9764. zend_string *str;
  9765. if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  9766. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  9767. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  9768. } else {
  9769. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  9770. }
  9771. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  9772. zend_string_release_ex(op1_str, 0);
  9773. }
  9774. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  9775. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  9776. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  9777. } else {
  9778. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  9779. }
  9780. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  9781. zend_string_release_ex(op2_str, 0);
  9782. }
  9783. } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
  9784. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  9785. size_t len = ZSTR_LEN(op1_str);
  9786. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  9787. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  9788. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  9789. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  9790. zend_string_release_ex(op2_str, 0);
  9791. }
  9792. } else {
  9793. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  9794. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  9795. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  9796. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  9797. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  9798. zend_string_release_ex(op1_str, 0);
  9799. }
  9800. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  9801. zend_string_release_ex(op2_str, 0);
  9802. }
  9803. }
  9804. ZEND_VM_NEXT_OPCODE();
  9805. }
  9806. SAVE_OPLINE();
  9807. if (IS_CONST == IS_CONST) {
  9808. op1_str = Z_STR_P(op1);
  9809. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  9810. op1_str = zend_string_copy(Z_STR_P(op1));
  9811. } else {
  9812. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  9813. ZVAL_UNDEFINED_OP1();
  9814. }
  9815. op1_str = zval_get_string_func(op1);
  9816. }
  9817. if (IS_CV == IS_CONST) {
  9818. op2_str = Z_STR_P(op2);
  9819. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  9820. op2_str = zend_string_copy(Z_STR_P(op2));
  9821. } else {
  9822. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  9823. ZVAL_UNDEFINED_OP2();
  9824. }
  9825. op2_str = zval_get_string_func(op2);
  9826. }
  9827. do {
  9828. if (IS_CONST != IS_CONST) {
  9829. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  9830. if (IS_CV == IS_CONST) {
  9831. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  9832. GC_ADDREF(op2_str);
  9833. }
  9834. }
  9835. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  9836. zend_string_release_ex(op1_str, 0);
  9837. break;
  9838. }
  9839. }
  9840. if (IS_CV != IS_CONST) {
  9841. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  9842. if (IS_CONST == IS_CONST) {
  9843. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  9844. GC_ADDREF(op1_str);
  9845. }
  9846. }
  9847. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  9848. zend_string_release_ex(op2_str, 0);
  9849. break;
  9850. }
  9851. }
  9852. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  9853. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  9854. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  9855. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  9856. if (IS_CONST != IS_CONST) {
  9857. zend_string_release_ex(op1_str, 0);
  9858. }
  9859. if (IS_CV != IS_CONST) {
  9860. zend_string_release_ex(op2_str, 0);
  9861. }
  9862. } while (0);
  9863. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9864. }
  9865. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9866. {
  9867. USE_OPLINE
  9868. zval *function_name;
  9869. zval *object;
  9870. zend_function *fbc;
  9871. zend_class_entry *called_scope;
  9872. zend_object *obj;
  9873. zend_execute_data *call;
  9874. uint32_t call_info;
  9875. SAVE_OPLINE();
  9876. object = RT_CONSTANT(opline, opline->op1);
  9877. if (IS_CV != IS_CONST) {
  9878. function_name = EX_VAR(opline->op2.var);
  9879. }
  9880. if (IS_CV != IS_CONST &&
  9881. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  9882. do {
  9883. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  9884. function_name = Z_REFVAL_P(function_name);
  9885. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  9886. break;
  9887. }
  9888. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  9889. ZVAL_UNDEFINED_OP2();
  9890. if (UNEXPECTED(EG(exception) != NULL)) {
  9891. HANDLE_EXCEPTION();
  9892. }
  9893. }
  9894. zend_throw_error(NULL, "Method name must be a string");
  9895. HANDLE_EXCEPTION();
  9896. } while (0);
  9897. }
  9898. if (IS_CONST == IS_UNUSED) {
  9899. obj = Z_OBJ_P(object);
  9900. } else {
  9901. do {
  9902. if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  9903. obj = Z_OBJ_P(object);
  9904. } else {
  9905. if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  9906. zend_reference *ref = Z_REF_P(object);
  9907. object = &ref->val;
  9908. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  9909. obj = Z_OBJ_P(object);
  9910. if (IS_CONST & IS_VAR) {
  9911. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  9912. efree_size(ref, sizeof(zend_reference));
  9913. } else {
  9914. Z_ADDREF_P(object);
  9915. }
  9916. }
  9917. break;
  9918. }
  9919. }
  9920. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  9921. object = ZVAL_UNDEFINED_OP1();
  9922. if (UNEXPECTED(EG(exception) != NULL)) {
  9923. if (IS_CV != IS_CONST) {
  9924. }
  9925. HANDLE_EXCEPTION();
  9926. }
  9927. }
  9928. if (IS_CV == IS_CONST) {
  9929. function_name = EX_VAR(opline->op2.var);
  9930. }
  9931. zend_invalid_method_call(object, function_name);
  9932. HANDLE_EXCEPTION();
  9933. }
  9934. } while (0);
  9935. }
  9936. called_scope = obj->ce;
  9937. if (IS_CV == IS_CONST &&
  9938. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  9939. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  9940. } else {
  9941. zend_object *orig_obj = obj;
  9942. if (IS_CV == IS_CONST) {
  9943. function_name = EX_VAR(opline->op2.var);
  9944. }
  9945. /* First, locate the function. */
  9946. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  9947. if (UNEXPECTED(fbc == NULL)) {
  9948. if (EXPECTED(!EG(exception))) {
  9949. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  9950. }
  9951. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  9952. zend_objects_store_del(orig_obj);
  9953. }
  9954. HANDLE_EXCEPTION();
  9955. }
  9956. if (IS_CV == IS_CONST &&
  9957. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  9958. EXPECTED(obj == orig_obj)) {
  9959. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  9960. }
  9961. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  9962. GC_ADDREF(obj); /* For $this pointer */
  9963. if (GC_DELREF(orig_obj) == 0) {
  9964. zend_objects_store_del(orig_obj);
  9965. }
  9966. }
  9967. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  9968. init_func_run_time_cache(&fbc->op_array);
  9969. }
  9970. }
  9971. if (IS_CV != IS_CONST) {
  9972. }
  9973. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  9974. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  9975. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  9976. zend_objects_store_del(obj);
  9977. if (UNEXPECTED(EG(exception))) {
  9978. HANDLE_EXCEPTION();
  9979. }
  9980. }
  9981. /* call static method */
  9982. obj = (zend_object*)called_scope;
  9983. call_info = ZEND_CALL_NESTED_FUNCTION;
  9984. } else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  9985. if (IS_CONST == IS_CV) {
  9986. GC_ADDREF(obj); /* For $this pointer */
  9987. }
  9988. /* CV may be changed indirectly (e.g. when it's a reference) */
  9989. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  9990. }
  9991. call = zend_vm_stack_push_call_frame(call_info,
  9992. fbc, opline->extended_value, obj);
  9993. call->prev_execute_data = EX(call);
  9994. EX(call) = call;
  9995. ZEND_VM_NEXT_OPCODE();
  9996. }
  9997. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9998. {
  9999. USE_OPLINE
  10000. zval *function_name;
  10001. zend_class_entry *ce;
  10002. uint32_t call_info;
  10003. zend_function *fbc;
  10004. zend_execute_data *call;
  10005. SAVE_OPLINE();
  10006. if (IS_CONST == IS_CONST) {
  10007. /* no function found. try a static method in class */
  10008. ce = CACHED_PTR(opline->result.num);
  10009. if (UNEXPECTED(ce == NULL)) {
  10010. 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);
  10011. if (UNEXPECTED(ce == NULL)) {
  10012. HANDLE_EXCEPTION();
  10013. }
  10014. if (IS_CV != IS_CONST) {
  10015. CACHE_PTR(opline->result.num, ce);
  10016. }
  10017. }
  10018. } else if (IS_CONST == IS_UNUSED) {
  10019. ce = zend_fetch_class(NULL, opline->op1.num);
  10020. if (UNEXPECTED(ce == NULL)) {
  10021. HANDLE_EXCEPTION();
  10022. }
  10023. } else {
  10024. ce = Z_CE_P(EX_VAR(opline->op1.var));
  10025. }
  10026. if (IS_CONST == IS_CONST &&
  10027. IS_CV == IS_CONST &&
  10028. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  10029. /* nothing to do */
  10030. } else if (IS_CONST != IS_CONST &&
  10031. IS_CV == IS_CONST &&
  10032. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  10033. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  10034. } else if (IS_CV != IS_UNUSED) {
  10035. function_name = EX_VAR(opline->op2.var);
  10036. if (IS_CV != IS_CONST) {
  10037. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  10038. do {
  10039. if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  10040. function_name = Z_REFVAL_P(function_name);
  10041. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  10042. break;
  10043. }
  10044. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  10045. ZVAL_UNDEFINED_OP2();
  10046. if (UNEXPECTED(EG(exception) != NULL)) {
  10047. HANDLE_EXCEPTION();
  10048. }
  10049. }
  10050. zend_throw_error(NULL, "Method name must be a string");
  10051. HANDLE_EXCEPTION();
  10052. } while (0);
  10053. }
  10054. }
  10055. if (ce->get_static_method) {
  10056. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  10057. } else {
  10058. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  10059. }
  10060. if (UNEXPECTED(fbc == NULL)) {
  10061. if (EXPECTED(!EG(exception))) {
  10062. zend_undefined_method(ce, Z_STR_P(function_name));
  10063. }
  10064. HANDLE_EXCEPTION();
  10065. }
  10066. if (IS_CV == IS_CONST &&
  10067. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  10068. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  10069. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  10070. }
  10071. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  10072. init_func_run_time_cache(&fbc->op_array);
  10073. }
  10074. if (IS_CV != IS_CONST) {
  10075. }
  10076. } else {
  10077. if (UNEXPECTED(ce->constructor == NULL)) {
  10078. zend_throw_error(NULL, "Cannot call constructor");
  10079. HANDLE_EXCEPTION();
  10080. }
  10081. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  10082. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  10083. HANDLE_EXCEPTION();
  10084. }
  10085. fbc = ce->constructor;
  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. }
  10090. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  10091. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  10092. ce = (zend_class_entry*)Z_OBJ(EX(This));
  10093. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  10094. } else {
  10095. zend_non_static_method_call(fbc);
  10096. HANDLE_EXCEPTION();
  10097. }
  10098. } else {
  10099. /* previous opcode is ZEND_FETCH_CLASS */
  10100. if (IS_CONST == IS_UNUSED
  10101. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  10102. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  10103. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  10104. ce = Z_OBJCE(EX(This));
  10105. } else {
  10106. ce = Z_CE(EX(This));
  10107. }
  10108. }
  10109. call_info = ZEND_CALL_NESTED_FUNCTION;
  10110. }
  10111. call = zend_vm_stack_push_call_frame(call_info,
  10112. fbc, opline->extended_value, ce);
  10113. call->prev_execute_data = EX(call);
  10114. EX(call) = call;
  10115. ZEND_VM_NEXT_OPCODE();
  10116. }
  10117. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10118. {
  10119. USE_OPLINE
  10120. zval *function_name;
  10121. zend_fcall_info_cache fcc;
  10122. char *error = NULL;
  10123. zend_function *func;
  10124. void *object_or_called_scope;
  10125. zend_execute_data *call;
  10126. uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
  10127. SAVE_OPLINE();
  10128. function_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  10129. if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
  10130. ZEND_ASSERT(!error);
  10131. func = fcc.function_handler;
  10132. object_or_called_scope = fcc.called_scope;
  10133. if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
  10134. /* Delay closure destruction until its invocation */
  10135. GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
  10136. call_info |= ZEND_CALL_CLOSURE;
  10137. if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
  10138. call_info |= ZEND_CALL_FAKE_CLOSURE;
  10139. }
  10140. if (fcc.object) {
  10141. object_or_called_scope = fcc.object;
  10142. call_info |= ZEND_CALL_HAS_THIS;
  10143. }
  10144. } else if (fcc.object) {
  10145. GC_ADDREF(fcc.object); /* For $this pointer */
  10146. object_or_called_scope = fcc.object;
  10147. call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
  10148. }
  10149. if ((IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
  10150. if (call_info & ZEND_CALL_CLOSURE) {
  10151. zend_object_release(ZEND_CLOSURE_OBJECT(func));
  10152. } else if (call_info & ZEND_CALL_RELEASE_THIS) {
  10153. zend_object_release(fcc.object);
  10154. }
  10155. HANDLE_EXCEPTION();
  10156. }
  10157. if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
  10158. init_func_run_time_cache(&func->op_array);
  10159. }
  10160. } else {
  10161. zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
  10162. efree(error);
  10163. HANDLE_EXCEPTION();
  10164. }
  10165. call = zend_vm_stack_push_call_frame(call_info,
  10166. func, opline->extended_value, object_or_called_scope);
  10167. call->prev_execute_data = EX(call);
  10168. EX(call) = call;
  10169. ZEND_VM_NEXT_OPCODE();
  10170. }
  10171. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10172. {
  10173. USE_OPLINE
  10174. zval *expr_ptr, new_expr;
  10175. SAVE_OPLINE();
  10176. if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
  10177. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  10178. expr_ptr = NULL;
  10179. if (Z_ISREF_P(expr_ptr)) {
  10180. Z_ADDREF_P(expr_ptr);
  10181. } else {
  10182. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  10183. }
  10184. } else {
  10185. expr_ptr = RT_CONSTANT(opline, opline->op1);
  10186. if (IS_CONST == IS_TMP_VAR) {
  10187. /* pass */
  10188. } else if (IS_CONST == IS_CONST) {
  10189. Z_TRY_ADDREF_P(expr_ptr);
  10190. } else if (IS_CONST == IS_CV) {
  10191. ZVAL_DEREF(expr_ptr);
  10192. Z_TRY_ADDREF_P(expr_ptr);
  10193. } else /* if (IS_CONST == IS_VAR) */ {
  10194. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  10195. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  10196. expr_ptr = Z_REFVAL_P(expr_ptr);
  10197. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  10198. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  10199. expr_ptr = &new_expr;
  10200. efree_size(ref, sizeof(zend_reference));
  10201. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  10202. Z_ADDREF_P(expr_ptr);
  10203. }
  10204. }
  10205. }
  10206. }
  10207. if (IS_CV != IS_UNUSED) {
  10208. zval *offset = EX_VAR(opline->op2.var);
  10209. zend_string *str;
  10210. zend_ulong hval;
  10211. add_again:
  10212. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  10213. str = Z_STR_P(offset);
  10214. if (IS_CV != IS_CONST) {
  10215. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  10216. goto num_index;
  10217. }
  10218. }
  10219. str_index:
  10220. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  10221. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  10222. hval = Z_LVAL_P(offset);
  10223. num_index:
  10224. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  10225. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  10226. offset = Z_REFVAL_P(offset);
  10227. goto add_again;
  10228. } else if (Z_TYPE_P(offset) == IS_NULL) {
  10229. str = ZSTR_EMPTY_ALLOC();
  10230. goto str_index;
  10231. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  10232. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  10233. goto num_index;
  10234. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  10235. hval = 0;
  10236. goto num_index;
  10237. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  10238. hval = 1;
  10239. goto num_index;
  10240. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  10241. zend_use_resource_as_offset(offset);
  10242. hval = Z_RES_HANDLE_P(offset);
  10243. goto num_index;
  10244. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  10245. ZVAL_UNDEFINED_OP2();
  10246. str = ZSTR_EMPTY_ALLOC();
  10247. goto str_index;
  10248. } else {
  10249. zend_illegal_offset();
  10250. zval_ptr_dtor_nogc(expr_ptr);
  10251. }
  10252. } else {
  10253. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  10254. zend_cannot_add_element();
  10255. zval_ptr_dtor_nogc(expr_ptr);
  10256. }
  10257. }
  10258. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10259. }
  10260. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10261. {
  10262. zval *array;
  10263. uint32_t size;
  10264. USE_OPLINE
  10265. array = EX_VAR(opline->result.var);
  10266. if (IS_CONST != IS_UNUSED) {
  10267. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  10268. ZVAL_ARR(array, zend_new_array(size));
  10269. /* Explicitly initialize array as not-packed if flag is set */
  10270. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  10271. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  10272. }
  10273. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  10274. } else {
  10275. ZVAL_ARR(array, zend_new_array(0));
  10276. ZEND_VM_NEXT_OPCODE();
  10277. }
  10278. }
  10279. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10280. {
  10281. USE_OPLINE
  10282. zval *container;
  10283. bool result;
  10284. zend_ulong hval;
  10285. zval *offset;
  10286. SAVE_OPLINE();
  10287. container = RT_CONSTANT(opline, opline->op1);
  10288. offset = EX_VAR(opline->op2.var);
  10289. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  10290. HashTable *ht;
  10291. zval *value;
  10292. zend_string *str;
  10293. isset_dim_obj_array:
  10294. ht = Z_ARRVAL_P(container);
  10295. isset_again:
  10296. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  10297. str = Z_STR_P(offset);
  10298. if (IS_CV != IS_CONST) {
  10299. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  10300. goto num_index_prop;
  10301. }
  10302. }
  10303. value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
  10304. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  10305. hval = Z_LVAL_P(offset);
  10306. num_index_prop:
  10307. value = zend_hash_index_find(ht, hval);
  10308. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  10309. offset = Z_REFVAL_P(offset);
  10310. goto isset_again;
  10311. } else {
  10312. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  10313. if (UNEXPECTED(EG(exception))) {
  10314. result = 0;
  10315. goto isset_dim_obj_exit;
  10316. }
  10317. }
  10318. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  10319. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  10320. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  10321. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  10322. if (IS_CONST & (IS_CONST|IS_CV)) {
  10323. /* avoid exception check */
  10324. ZEND_VM_SMART_BRANCH(result, 0);
  10325. }
  10326. } else {
  10327. result = (value == NULL || !i_zend_is_true(value));
  10328. }
  10329. goto isset_dim_obj_exit;
  10330. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  10331. container = Z_REFVAL_P(container);
  10332. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  10333. goto isset_dim_obj_array;
  10334. }
  10335. }
  10336. if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  10337. offset++;
  10338. }
  10339. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  10340. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  10341. } else {
  10342. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  10343. }
  10344. isset_dim_obj_exit:
  10345. ZEND_VM_SMART_BRANCH(result, 1);
  10346. }
  10347. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10348. {
  10349. USE_OPLINE
  10350. zval *container;
  10351. int result;
  10352. zval *offset;
  10353. zend_string *name, *tmp_name;
  10354. SAVE_OPLINE();
  10355. container = RT_CONSTANT(opline, opline->op1);
  10356. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  10357. if (IS_CONST == IS_CONST ||
  10358. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  10359. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  10360. container = Z_REFVAL_P(container);
  10361. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  10362. result = (opline->extended_value & ZEND_ISEMPTY);
  10363. goto isset_object_finish;
  10364. }
  10365. } else {
  10366. result = (opline->extended_value & ZEND_ISEMPTY);
  10367. goto isset_object_finish;
  10368. }
  10369. }
  10370. if (IS_CV == IS_CONST) {
  10371. name = Z_STR_P(offset);
  10372. } else {
  10373. name = zval_try_get_tmp_string(offset, &tmp_name);
  10374. if (UNEXPECTED(!name)) {
  10375. result = 0;
  10376. goto isset_object_finish;
  10377. }
  10378. }
  10379. result =
  10380. (opline->extended_value & ZEND_ISEMPTY) ^
  10381. 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));
  10382. if (IS_CV != IS_CONST) {
  10383. zend_tmp_string_release(tmp_name);
  10384. }
  10385. isset_object_finish:
  10386. ZEND_VM_SMART_BRANCH(result, 1);
  10387. }
  10388. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10389. {
  10390. USE_OPLINE
  10391. zval *key, *subject;
  10392. HashTable *ht;
  10393. bool result;
  10394. SAVE_OPLINE();
  10395. key = RT_CONSTANT(opline, opline->op1);
  10396. subject = EX_VAR(opline->op2.var);
  10397. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  10398. array_key_exists_array:
  10399. ht = Z_ARRVAL_P(subject);
  10400. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  10401. } else {
  10402. if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  10403. subject = Z_REFVAL_P(subject);
  10404. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  10405. goto array_key_exists_array;
  10406. }
  10407. }
  10408. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  10409. result = 0;
  10410. }
  10411. ZEND_VM_SMART_BRANCH(result, 1);
  10412. }
  10413. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  10414. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10415. {
  10416. USE_OPLINE
  10417. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  10418. SAVE_OPLINE();
  10419. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  10420. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  10421. }
  10422. /* Destroy the previously yielded value */
  10423. zval_ptr_dtor(&generator->value);
  10424. /* Destroy the previously yielded key */
  10425. zval_ptr_dtor(&generator->key);
  10426. /* Set the new yielded value */
  10427. if (IS_CONST != IS_UNUSED) {
  10428. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  10429. /* Constants and temporary variables aren't yieldable by reference,
  10430. * but we still allow them with a notice. */
  10431. if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
  10432. zval *value;
  10433. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  10434. value = RT_CONSTANT(opline, opline->op1);
  10435. ZVAL_COPY_VALUE(&generator->value, value);
  10436. if (IS_CONST == IS_CONST) {
  10437. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  10438. Z_ADDREF(generator->value);
  10439. }
  10440. }
  10441. } else {
  10442. zval *value_ptr = NULL;
  10443. /* If a function call result is yielded and the function did
  10444. * not return by reference we throw a notice. */
  10445. do {
  10446. if (IS_CONST == IS_VAR) {
  10447. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  10448. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  10449. && !Z_ISREF_P(value_ptr)) {
  10450. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  10451. ZVAL_COPY(&generator->value, value_ptr);
  10452. break;
  10453. }
  10454. }
  10455. if (Z_ISREF_P(value_ptr)) {
  10456. Z_ADDREF_P(value_ptr);
  10457. } else {
  10458. ZVAL_MAKE_REF_EX(value_ptr, 2);
  10459. }
  10460. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  10461. } while (0);
  10462. }
  10463. } else {
  10464. zval *value = RT_CONSTANT(opline, opline->op1);
  10465. /* Consts, temporary variables and references need copying */
  10466. if (IS_CONST == IS_CONST) {
  10467. ZVAL_COPY_VALUE(&generator->value, value);
  10468. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  10469. Z_ADDREF(generator->value);
  10470. }
  10471. } else if (IS_CONST == IS_TMP_VAR) {
  10472. ZVAL_COPY_VALUE(&generator->value, value);
  10473. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  10474. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  10475. } else {
  10476. ZVAL_COPY_VALUE(&generator->value, value);
  10477. if (IS_CONST == IS_CV) {
  10478. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  10479. }
  10480. }
  10481. }
  10482. } else {
  10483. /* If no value was specified yield null */
  10484. ZVAL_NULL(&generator->value);
  10485. }
  10486. /* Set the new yielded key */
  10487. if (IS_CV != IS_UNUSED) {
  10488. zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  10489. if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  10490. key = Z_REFVAL_P(key);
  10491. }
  10492. ZVAL_COPY(&generator->key, key);
  10493. if (Z_TYPE(generator->key) == IS_LONG
  10494. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  10495. ) {
  10496. generator->largest_used_integer_key = Z_LVAL(generator->key);
  10497. }
  10498. } else {
  10499. /* If no key was specified we use auto-increment keys */
  10500. generator->largest_used_integer_key++;
  10501. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  10502. }
  10503. if (RETURN_VALUE_USED(opline)) {
  10504. /* If the return value of yield is used set the send
  10505. * target and initialize it to NULL */
  10506. generator->send_target = EX_VAR(opline->result.var);
  10507. ZVAL_NULL(generator->send_target);
  10508. } else {
  10509. generator->send_target = NULL;
  10510. }
  10511. /* We increment to the next op, so we are at the correct position when the
  10512. * generator is resumed. */
  10513. ZEND_VM_INC_OPCODE();
  10514. /* The GOTO VM uses a local opline variable. We need to set the opline
  10515. * variable in execute_data so we don't resume at an old position. */
  10516. SAVE_OPLINE();
  10517. ZEND_VM_RETURN();
  10518. }
  10519. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10520. {
  10521. USE_OPLINE
  10522. zval *op1;
  10523. op1 = EX_VAR(opline->op1.var);
  10524. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10525. ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
  10526. ZEND_VM_NEXT_OPCODE();
  10527. }
  10528. ZEND_VM_TAIL_CALL(zend_bw_not_helper_SPEC(op1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10529. }
  10530. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10531. {
  10532. USE_OPLINE
  10533. zval *value;
  10534. value = EX_VAR(opline->op1.var);
  10535. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
  10536. ZEND_VM_NEXT_OPCODE();
  10537. }
  10538. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10539. {
  10540. USE_OPLINE
  10541. zval *value;
  10542. value = EX_VAR(opline->op1.var);
  10543. ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
  10544. ZEND_VM_NEXT_OPCODE();
  10545. }
  10546. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10547. {
  10548. USE_OPLINE
  10549. zval *value;
  10550. value = EX_VAR(opline->op1.var);
  10551. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
  10552. ZEND_VM_NEXT_OPCODE();
  10553. }
  10554. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10555. {
  10556. USE_OPLINE
  10557. zval *op1, *op2, *result;
  10558. double d1, d2;
  10559. op1 = EX_VAR(opline->op1.var);
  10560. op2 = RT_CONSTANT(opline, opline->op2);
  10561. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10562. /* pass */
  10563. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10564. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10565. result = EX_VAR(opline->result.var);
  10566. fast_long_add_function(result, op1, op2);
  10567. ZEND_VM_NEXT_OPCODE();
  10568. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10569. d1 = (double)Z_LVAL_P(op1);
  10570. d2 = Z_DVAL_P(op2);
  10571. goto add_double;
  10572. }
  10573. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10574. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10575. d1 = Z_DVAL_P(op1);
  10576. d2 = Z_DVAL_P(op2);
  10577. add_double:
  10578. result = EX_VAR(opline->result.var);
  10579. ZVAL_DOUBLE(result, d1 + d2);
  10580. ZEND_VM_NEXT_OPCODE();
  10581. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10582. d1 = Z_DVAL_P(op1);
  10583. d2 = (double)Z_LVAL_P(op2);
  10584. goto add_double;
  10585. }
  10586. }
  10587. ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10588. }
  10589. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10590. {
  10591. USE_OPLINE
  10592. zval *op1, *op2, *result;
  10593. double d1, d2;
  10594. op1 = EX_VAR(opline->op1.var);
  10595. op2 = RT_CONSTANT(opline, opline->op2);
  10596. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10597. /* pass */
  10598. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10599. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10600. result = EX_VAR(opline->result.var);
  10601. fast_long_sub_function(result, op1, op2);
  10602. ZEND_VM_NEXT_OPCODE();
  10603. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10604. d1 = (double)Z_LVAL_P(op1);
  10605. d2 = Z_DVAL_P(op2);
  10606. goto sub_double;
  10607. }
  10608. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10609. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10610. d1 = Z_DVAL_P(op1);
  10611. d2 = Z_DVAL_P(op2);
  10612. sub_double:
  10613. result = EX_VAR(opline->result.var);
  10614. ZVAL_DOUBLE(result, d1 - d2);
  10615. ZEND_VM_NEXT_OPCODE();
  10616. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10617. d1 = Z_DVAL_P(op1);
  10618. d2 = (double)Z_LVAL_P(op2);
  10619. goto sub_double;
  10620. }
  10621. }
  10622. ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10623. }
  10624. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10625. {
  10626. USE_OPLINE
  10627. zval *op1, *op2, *result;
  10628. double d1, d2;
  10629. op1 = EX_VAR(opline->op1.var);
  10630. op2 = RT_CONSTANT(opline, opline->op2);
  10631. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10632. /* pass */
  10633. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10634. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10635. zend_long overflow;
  10636. result = EX_VAR(opline->result.var);
  10637. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  10638. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  10639. ZEND_VM_NEXT_OPCODE();
  10640. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10641. d1 = (double)Z_LVAL_P(op1);
  10642. d2 = Z_DVAL_P(op2);
  10643. goto mul_double;
  10644. }
  10645. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10646. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10647. d1 = Z_DVAL_P(op1);
  10648. d2 = Z_DVAL_P(op2);
  10649. mul_double:
  10650. result = EX_VAR(opline->result.var);
  10651. ZVAL_DOUBLE(result, d1 * d2);
  10652. ZEND_VM_NEXT_OPCODE();
  10653. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10654. d1 = Z_DVAL_P(op1);
  10655. d2 = (double)Z_LVAL_P(op2);
  10656. goto mul_double;
  10657. }
  10658. }
  10659. ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10660. }
  10661. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10662. {
  10663. USE_OPLINE
  10664. zval *op1, *op2, *result;
  10665. op1 = EX_VAR(opline->op1.var);
  10666. op2 = RT_CONSTANT(opline, opline->op2);
  10667. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10668. /* pass */
  10669. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10670. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10671. result = EX_VAR(opline->result.var);
  10672. if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
  10673. ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  10674. } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
  10675. /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
  10676. ZVAL_LONG(result, 0);
  10677. } else {
  10678. ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
  10679. }
  10680. ZEND_VM_NEXT_OPCODE();
  10681. }
  10682. }
  10683. ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10684. }
  10685. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10686. {
  10687. USE_OPLINE
  10688. zval *op1, *op2;
  10689. op1 = EX_VAR(opline->op1.var);
  10690. op2 = RT_CONSTANT(opline, opline->op2);
  10691. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10692. /* pass */
  10693. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  10694. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  10695. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  10696. /* Perform shift on unsigned numbers to get well-defined wrap behavior. */
  10697. ZVAL_LONG(EX_VAR(opline->result.var),
  10698. (zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
  10699. ZEND_VM_NEXT_OPCODE();
  10700. }
  10701. ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10702. }
  10703. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10704. {
  10705. USE_OPLINE
  10706. zval *op1, *op2;
  10707. op1 = EX_VAR(opline->op1.var);
  10708. op2 = RT_CONSTANT(opline, opline->op2);
  10709. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10710. /* pass */
  10711. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  10712. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  10713. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  10714. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
  10715. ZEND_VM_NEXT_OPCODE();
  10716. }
  10717. ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10718. }
  10719. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10720. {
  10721. USE_OPLINE
  10722. zval *op1, *op2;
  10723. double d1, d2;
  10724. op1 = EX_VAR(opline->op1.var);
  10725. op2 = RT_CONSTANT(opline, opline->op2);
  10726. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10727. /* pass */
  10728. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10729. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10730. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  10731. is_smaller_true:
  10732. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  10733. } else {
  10734. is_smaller_false:
  10735. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  10736. }
  10737. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10738. d1 = (double)Z_LVAL_P(op1);
  10739. d2 = Z_DVAL_P(op2);
  10740. goto is_smaller_double;
  10741. }
  10742. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10743. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10744. d1 = Z_DVAL_P(op1);
  10745. d2 = Z_DVAL_P(op2);
  10746. is_smaller_double:
  10747. if (d1 < d2) {
  10748. goto is_smaller_true;
  10749. } else {
  10750. goto is_smaller_false;
  10751. }
  10752. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10753. d1 = Z_DVAL_P(op1);
  10754. d2 = (double)Z_LVAL_P(op2);
  10755. goto is_smaller_double;
  10756. }
  10757. }
  10758. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10759. }
  10760. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10761. {
  10762. USE_OPLINE
  10763. zval *op1, *op2;
  10764. double d1, d2;
  10765. op1 = EX_VAR(opline->op1.var);
  10766. op2 = RT_CONSTANT(opline, opline->op2);
  10767. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10768. /* pass */
  10769. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10770. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10771. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  10772. is_smaller_true:
  10773. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  10774. } else {
  10775. is_smaller_false:
  10776. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  10777. }
  10778. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10779. d1 = (double)Z_LVAL_P(op1);
  10780. d2 = Z_DVAL_P(op2);
  10781. goto is_smaller_double;
  10782. }
  10783. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10784. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10785. d1 = Z_DVAL_P(op1);
  10786. d2 = Z_DVAL_P(op2);
  10787. is_smaller_double:
  10788. if (d1 < d2) {
  10789. goto is_smaller_true;
  10790. } else {
  10791. goto is_smaller_false;
  10792. }
  10793. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10794. d1 = Z_DVAL_P(op1);
  10795. d2 = (double)Z_LVAL_P(op2);
  10796. goto is_smaller_double;
  10797. }
  10798. }
  10799. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10800. }
  10801. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10802. {
  10803. USE_OPLINE
  10804. zval *op1, *op2;
  10805. double d1, d2;
  10806. op1 = EX_VAR(opline->op1.var);
  10807. op2 = RT_CONSTANT(opline, opline->op2);
  10808. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10809. /* pass */
  10810. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10811. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10812. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  10813. is_smaller_true:
  10814. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  10815. } else {
  10816. is_smaller_false:
  10817. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  10818. }
  10819. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10820. d1 = (double)Z_LVAL_P(op1);
  10821. d2 = Z_DVAL_P(op2);
  10822. goto is_smaller_double;
  10823. }
  10824. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10825. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10826. d1 = Z_DVAL_P(op1);
  10827. d2 = Z_DVAL_P(op2);
  10828. is_smaller_double:
  10829. if (d1 < d2) {
  10830. goto is_smaller_true;
  10831. } else {
  10832. goto is_smaller_false;
  10833. }
  10834. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10835. d1 = Z_DVAL_P(op1);
  10836. d2 = (double)Z_LVAL_P(op2);
  10837. goto is_smaller_double;
  10838. }
  10839. }
  10840. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10841. }
  10842. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10843. {
  10844. USE_OPLINE
  10845. zval *op1, *op2;
  10846. double d1, d2;
  10847. op1 = EX_VAR(opline->op1.var);
  10848. op2 = RT_CONSTANT(opline, opline->op2);
  10849. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10850. /* pass */
  10851. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10852. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10853. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  10854. is_smaller_or_equal_true:
  10855. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  10856. ZVAL_TRUE(EX_VAR(opline->result.var));
  10857. ZEND_VM_NEXT_OPCODE();
  10858. } else {
  10859. is_smaller_or_equal_false:
  10860. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  10861. ZVAL_FALSE(EX_VAR(opline->result.var));
  10862. ZEND_VM_NEXT_OPCODE();
  10863. }
  10864. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10865. d1 = (double)Z_LVAL_P(op1);
  10866. d2 = Z_DVAL_P(op2);
  10867. goto is_smaller_or_equal_double;
  10868. }
  10869. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10870. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10871. d1 = Z_DVAL_P(op1);
  10872. d2 = Z_DVAL_P(op2);
  10873. is_smaller_or_equal_double:
  10874. if (d1 <= d2) {
  10875. goto is_smaller_or_equal_true;
  10876. } else {
  10877. goto is_smaller_or_equal_false;
  10878. }
  10879. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10880. d1 = Z_DVAL_P(op1);
  10881. d2 = (double)Z_LVAL_P(op2);
  10882. goto is_smaller_or_equal_double;
  10883. }
  10884. }
  10885. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10886. }
  10887. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10888. {
  10889. USE_OPLINE
  10890. zval *op1, *op2;
  10891. double d1, d2;
  10892. op1 = EX_VAR(opline->op1.var);
  10893. op2 = RT_CONSTANT(opline, opline->op2);
  10894. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10895. /* pass */
  10896. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10897. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10898. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  10899. is_smaller_or_equal_true:
  10900. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  10901. ZVAL_TRUE(EX_VAR(opline->result.var));
  10902. ZEND_VM_NEXT_OPCODE();
  10903. } else {
  10904. is_smaller_or_equal_false:
  10905. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  10906. ZVAL_FALSE(EX_VAR(opline->result.var));
  10907. ZEND_VM_NEXT_OPCODE();
  10908. }
  10909. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10910. d1 = (double)Z_LVAL_P(op1);
  10911. d2 = Z_DVAL_P(op2);
  10912. goto is_smaller_or_equal_double;
  10913. }
  10914. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10915. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10916. d1 = Z_DVAL_P(op1);
  10917. d2 = Z_DVAL_P(op2);
  10918. is_smaller_or_equal_double:
  10919. if (d1 <= d2) {
  10920. goto is_smaller_or_equal_true;
  10921. } else {
  10922. goto is_smaller_or_equal_false;
  10923. }
  10924. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10925. d1 = Z_DVAL_P(op1);
  10926. d2 = (double)Z_LVAL_P(op2);
  10927. goto is_smaller_or_equal_double;
  10928. }
  10929. }
  10930. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10931. }
  10932. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10933. {
  10934. USE_OPLINE
  10935. zval *op1, *op2;
  10936. double d1, d2;
  10937. op1 = EX_VAR(opline->op1.var);
  10938. op2 = RT_CONSTANT(opline, opline->op2);
  10939. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10940. /* pass */
  10941. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10942. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10943. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  10944. is_smaller_or_equal_true:
  10945. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  10946. ZVAL_TRUE(EX_VAR(opline->result.var));
  10947. ZEND_VM_NEXT_OPCODE();
  10948. } else {
  10949. is_smaller_or_equal_false:
  10950. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  10951. ZVAL_FALSE(EX_VAR(opline->result.var));
  10952. ZEND_VM_NEXT_OPCODE();
  10953. }
  10954. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10955. d1 = (double)Z_LVAL_P(op1);
  10956. d2 = Z_DVAL_P(op2);
  10957. goto is_smaller_or_equal_double;
  10958. }
  10959. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10960. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10961. d1 = Z_DVAL_P(op1);
  10962. d2 = Z_DVAL_P(op2);
  10963. is_smaller_or_equal_double:
  10964. if (d1 <= d2) {
  10965. goto is_smaller_or_equal_true;
  10966. } else {
  10967. goto is_smaller_or_equal_false;
  10968. }
  10969. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10970. d1 = Z_DVAL_P(op1);
  10971. d2 = (double)Z_LVAL_P(op2);
  10972. goto is_smaller_or_equal_double;
  10973. }
  10974. }
  10975. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10976. }
  10977. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10978. {
  10979. USE_OPLINE
  10980. zval *op1, *op2;
  10981. op1 = EX_VAR(opline->op1.var);
  10982. op2 = RT_CONSTANT(opline, opline->op2);
  10983. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
  10984. /* pass */
  10985. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  10986. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10987. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
  10988. ZEND_VM_NEXT_OPCODE();
  10989. }
  10990. ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  10991. }
  10992. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_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_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11006. }
  11007. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_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_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11021. }
  11022. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11023. {
  11024. USE_OPLINE
  11025. zval *container;
  11026. SAVE_OPLINE();
  11027. container = EX_VAR(opline->op1.var);
  11028. zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  11029. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11030. }
  11031. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11032. {
  11033. USE_OPLINE
  11034. zval *op, *jump_zv;
  11035. HashTable *jumptable;
  11036. op = EX_VAR(opline->op1.var);
  11037. if (Z_TYPE_P(op) != IS_LONG) {
  11038. ZVAL_DEREF(op);
  11039. if (Z_TYPE_P(op) != IS_LONG) {
  11040. /* Wrong type, fall back to ZEND_CASE chain */
  11041. ZEND_VM_NEXT_OPCODE();
  11042. }
  11043. }
  11044. jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  11045. jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
  11046. if (jump_zv != NULL) {
  11047. ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
  11048. ZEND_VM_CONTINUE();
  11049. } else {
  11050. /* default */
  11051. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  11052. ZEND_VM_CONTINUE();
  11053. }
  11054. }
  11055. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11056. {
  11057. USE_OPLINE
  11058. zval *op, *jump_zv;
  11059. HashTable *jumptable;
  11060. op = EX_VAR(opline->op1.var);
  11061. if (Z_TYPE_P(op) != IS_STRING) {
  11062. if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11063. /* Wrong type, fall back to ZEND_CASE chain */
  11064. ZEND_VM_NEXT_OPCODE();
  11065. } else {
  11066. ZVAL_DEREF(op);
  11067. if (Z_TYPE_P(op) != IS_STRING) {
  11068. /* Wrong type, fall back to ZEND_CASE chain */
  11069. ZEND_VM_NEXT_OPCODE();
  11070. }
  11071. }
  11072. }
  11073. jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  11074. jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
  11075. if (jump_zv != NULL) {
  11076. ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
  11077. ZEND_VM_CONTINUE();
  11078. } else {
  11079. /* default */
  11080. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  11081. ZEND_VM_CONTINUE();
  11082. }
  11083. }
  11084. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11085. {
  11086. USE_OPLINE
  11087. zval *op, *jump_zv;
  11088. HashTable *jumptable;
  11089. op = EX_VAR(opline->op1.var);
  11090. jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  11091. match_try_again:
  11092. if (Z_TYPE_P(op) == IS_LONG) {
  11093. jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
  11094. } else if (Z_TYPE_P(op) == IS_STRING) {
  11095. jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
  11096. } else if (Z_TYPE_P(op) == IS_REFERENCE) {
  11097. op = Z_REFVAL_P(op);
  11098. goto match_try_again;
  11099. } else {
  11100. if (UNEXPECTED(((IS_TMP_VAR|IS_VAR|IS_CV) & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) {
  11101. SAVE_OPLINE();
  11102. op = ZVAL_UNDEFINED_OP1();
  11103. if (UNEXPECTED(EG(exception))) {
  11104. HANDLE_EXCEPTION();
  11105. }
  11106. goto match_try_again;
  11107. }
  11108. goto default_branch;
  11109. }
  11110. if (jump_zv != NULL) {
  11111. ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
  11112. ZEND_VM_CONTINUE();
  11113. } else {
  11114. default_branch:
  11115. /* default */
  11116. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  11117. ZEND_VM_CONTINUE();
  11118. }
  11119. }
  11120. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11121. {
  11122. USE_OPLINE
  11123. zval *op1, *op2, *result;
  11124. op1 = EX_VAR(opline->op1.var);
  11125. op2 = RT_CONSTANT(opline, opline->op2);
  11126. result = EX_VAR(opline->result.var);
  11127. ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
  11128. ZEND_VM_NEXT_OPCODE();
  11129. }
  11130. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11131. {
  11132. USE_OPLINE
  11133. zval *op1, *op2, *result;
  11134. op1 = EX_VAR(opline->op1.var);
  11135. op2 = RT_CONSTANT(opline, opline->op2);
  11136. result = EX_VAR(opline->result.var);
  11137. fast_long_add_function(result, op1, op2);
  11138. ZEND_VM_NEXT_OPCODE();
  11139. }
  11140. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11141. {
  11142. USE_OPLINE
  11143. zval *op1, *op2, *result;
  11144. op1 = EX_VAR(opline->op1.var);
  11145. op2 = RT_CONSTANT(opline, opline->op2);
  11146. result = EX_VAR(opline->result.var);
  11147. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
  11148. ZEND_VM_NEXT_OPCODE();
  11149. }
  11150. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11151. {
  11152. USE_OPLINE
  11153. zval *op1, *op2, *result;
  11154. op1 = EX_VAR(opline->op1.var);
  11155. op2 = RT_CONSTANT(opline, opline->op2);
  11156. result = EX_VAR(opline->result.var);
  11157. ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
  11158. ZEND_VM_NEXT_OPCODE();
  11159. }
  11160. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11161. {
  11162. USE_OPLINE
  11163. zval *op1, *op2, *result;
  11164. op1 = EX_VAR(opline->op1.var);
  11165. op2 = RT_CONSTANT(opline, opline->op2);
  11166. result = EX_VAR(opline->result.var);
  11167. fast_long_sub_function(result, op1, op2);
  11168. ZEND_VM_NEXT_OPCODE();
  11169. }
  11170. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11171. {
  11172. USE_OPLINE
  11173. zval *op1, *op2, *result;
  11174. op1 = EX_VAR(opline->op1.var);
  11175. op2 = RT_CONSTANT(opline, opline->op2);
  11176. result = EX_VAR(opline->result.var);
  11177. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  11178. ZEND_VM_NEXT_OPCODE();
  11179. }
  11180. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11181. {
  11182. USE_OPLINE
  11183. zval *op1, *op2, *result;
  11184. op1 = EX_VAR(opline->op1.var);
  11185. op2 = RT_CONSTANT(opline, opline->op2);
  11186. result = EX_VAR(opline->result.var);
  11187. ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
  11188. ZEND_VM_NEXT_OPCODE();
  11189. }
  11190. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11191. {
  11192. USE_OPLINE
  11193. zval *op1, *op2, *result;
  11194. zend_long overflow;
  11195. op1 = EX_VAR(opline->op1.var);
  11196. op2 = RT_CONSTANT(opline, opline->op2);
  11197. result = EX_VAR(opline->result.var);
  11198. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  11199. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  11200. ZEND_VM_NEXT_OPCODE();
  11201. }
  11202. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11203. {
  11204. USE_OPLINE
  11205. zval *op1, *op2, *result;
  11206. op1 = EX_VAR(opline->op1.var);
  11207. op2 = RT_CONSTANT(opline, opline->op2);
  11208. result = EX_VAR(opline->result.var);
  11209. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
  11210. ZEND_VM_NEXT_OPCODE();
  11211. }
  11212. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11213. {
  11214. USE_OPLINE
  11215. zval *op1, *op2;
  11216. bool result;
  11217. op1 = EX_VAR(opline->op1.var);
  11218. op2 = RT_CONSTANT(opline, opline->op2);
  11219. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  11220. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  11221. }
  11222. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11223. {
  11224. USE_OPLINE
  11225. zval *op1, *op2;
  11226. bool result;
  11227. op1 = EX_VAR(opline->op1.var);
  11228. op2 = RT_CONSTANT(opline, opline->op2);
  11229. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  11230. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  11231. }
  11232. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11233. {
  11234. USE_OPLINE
  11235. zval *op1, *op2;
  11236. bool result;
  11237. op1 = EX_VAR(opline->op1.var);
  11238. op2 = RT_CONSTANT(opline, opline->op2);
  11239. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  11240. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  11241. }
  11242. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11243. {
  11244. USE_OPLINE
  11245. zval *op1, *op2;
  11246. bool result;
  11247. op1 = EX_VAR(opline->op1.var);
  11248. op2 = RT_CONSTANT(opline, opline->op2);
  11249. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  11250. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  11251. }
  11252. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11253. {
  11254. USE_OPLINE
  11255. zval *op1, *op2;
  11256. bool result;
  11257. op1 = EX_VAR(opline->op1.var);
  11258. op2 = RT_CONSTANT(opline, opline->op2);
  11259. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  11260. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  11261. }
  11262. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11263. {
  11264. USE_OPLINE
  11265. zval *op1, *op2;
  11266. bool result;
  11267. op1 = EX_VAR(opline->op1.var);
  11268. op2 = RT_CONSTANT(opline, opline->op2);
  11269. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  11270. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  11271. }
  11272. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11273. {
  11274. USE_OPLINE
  11275. zval *op1, *op2;
  11276. bool result;
  11277. op1 = EX_VAR(opline->op1.var);
  11278. op2 = RT_CONSTANT(opline, opline->op2);
  11279. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  11280. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  11281. }
  11282. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11283. {
  11284. USE_OPLINE
  11285. zval *op1, *op2;
  11286. bool result;
  11287. op1 = EX_VAR(opline->op1.var);
  11288. op2 = RT_CONSTANT(opline, opline->op2);
  11289. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  11290. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  11291. }
  11292. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11293. {
  11294. USE_OPLINE
  11295. zval *op1, *op2;
  11296. bool result;
  11297. op1 = EX_VAR(opline->op1.var);
  11298. op2 = RT_CONSTANT(opline, opline->op2);
  11299. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  11300. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  11301. }
  11302. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11303. {
  11304. USE_OPLINE
  11305. zval *op1, *op2;
  11306. bool result;
  11307. op1 = EX_VAR(opline->op1.var);
  11308. op2 = RT_CONSTANT(opline, opline->op2);
  11309. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  11310. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  11311. }
  11312. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11313. {
  11314. USE_OPLINE
  11315. zval *op1, *op2;
  11316. bool result;
  11317. op1 = EX_VAR(opline->op1.var);
  11318. op2 = RT_CONSTANT(opline, opline->op2);
  11319. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  11320. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  11321. }
  11322. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11323. {
  11324. USE_OPLINE
  11325. zval *op1, *op2;
  11326. bool result;
  11327. op1 = EX_VAR(opline->op1.var);
  11328. op2 = RT_CONSTANT(opline, opline->op2);
  11329. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  11330. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  11331. }
  11332. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11333. {
  11334. USE_OPLINE
  11335. zval *op1, *op2;
  11336. bool result;
  11337. op1 = EX_VAR(opline->op1.var);
  11338. op2 = RT_CONSTANT(opline, opline->op2);
  11339. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  11340. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  11341. }
  11342. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11343. {
  11344. USE_OPLINE
  11345. zval *op1, *op2;
  11346. bool result;
  11347. op1 = EX_VAR(opline->op1.var);
  11348. op2 = RT_CONSTANT(opline, opline->op2);
  11349. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  11350. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  11351. }
  11352. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11353. {
  11354. USE_OPLINE
  11355. zval *op1, *op2;
  11356. bool result;
  11357. op1 = EX_VAR(opline->op1.var);
  11358. op2 = RT_CONSTANT(opline, opline->op2);
  11359. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  11360. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  11361. }
  11362. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11363. {
  11364. USE_OPLINE
  11365. zval *op1, *op2;
  11366. bool result;
  11367. op1 = EX_VAR(opline->op1.var);
  11368. op2 = RT_CONSTANT(opline, opline->op2);
  11369. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  11370. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  11371. }
  11372. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11373. {
  11374. USE_OPLINE
  11375. zval *op1, *op2;
  11376. bool result;
  11377. op1 = EX_VAR(opline->op1.var);
  11378. op2 = RT_CONSTANT(opline, opline->op2);
  11379. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  11380. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  11381. }
  11382. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11383. {
  11384. USE_OPLINE
  11385. zval *op1, *op2;
  11386. bool result;
  11387. op1 = EX_VAR(opline->op1.var);
  11388. op2 = RT_CONSTANT(opline, opline->op2);
  11389. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  11390. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  11391. }
  11392. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11393. {
  11394. USE_OPLINE
  11395. zval *op1, *op2;
  11396. bool result;
  11397. op1 = EX_VAR(opline->op1.var);
  11398. op2 = RT_CONSTANT(opline, opline->op2);
  11399. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  11400. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  11401. }
  11402. 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)
  11403. {
  11404. USE_OPLINE
  11405. zval *op1, *op2;
  11406. bool result;
  11407. op1 = EX_VAR(opline->op1.var);
  11408. op2 = RT_CONSTANT(opline, opline->op2);
  11409. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  11410. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  11411. }
  11412. 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)
  11413. {
  11414. USE_OPLINE
  11415. zval *op1, *op2;
  11416. bool result;
  11417. op1 = EX_VAR(opline->op1.var);
  11418. op2 = RT_CONSTANT(opline, opline->op2);
  11419. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  11420. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  11421. }
  11422. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11423. {
  11424. USE_OPLINE
  11425. zval *op1, *op2;
  11426. bool result;
  11427. op1 = EX_VAR(opline->op1.var);
  11428. op2 = RT_CONSTANT(opline, opline->op2);
  11429. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  11430. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  11431. }
  11432. 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)
  11433. {
  11434. USE_OPLINE
  11435. zval *op1, *op2;
  11436. bool result;
  11437. op1 = EX_VAR(opline->op1.var);
  11438. op2 = RT_CONSTANT(opline, opline->op2);
  11439. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  11440. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  11441. }
  11442. 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)
  11443. {
  11444. USE_OPLINE
  11445. zval *op1, *op2;
  11446. bool result;
  11447. op1 = EX_VAR(opline->op1.var);
  11448. op2 = RT_CONSTANT(opline, opline->op2);
  11449. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  11450. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  11451. }
  11452. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11453. {
  11454. USE_OPLINE
  11455. zval *op1, *op2, *result;
  11456. double d1, d2;
  11457. op1 = EX_VAR(opline->op1.var);
  11458. op2 = EX_VAR(opline->op2.var);
  11459. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11460. /* pass */
  11461. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11462. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11463. result = EX_VAR(opline->result.var);
  11464. fast_long_add_function(result, op1, op2);
  11465. ZEND_VM_NEXT_OPCODE();
  11466. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11467. d1 = (double)Z_LVAL_P(op1);
  11468. d2 = Z_DVAL_P(op2);
  11469. goto add_double;
  11470. }
  11471. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11472. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11473. d1 = Z_DVAL_P(op1);
  11474. d2 = Z_DVAL_P(op2);
  11475. add_double:
  11476. result = EX_VAR(opline->result.var);
  11477. ZVAL_DOUBLE(result, d1 + d2);
  11478. ZEND_VM_NEXT_OPCODE();
  11479. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11480. d1 = Z_DVAL_P(op1);
  11481. d2 = (double)Z_LVAL_P(op2);
  11482. goto add_double;
  11483. }
  11484. }
  11485. ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11486. }
  11487. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11488. {
  11489. USE_OPLINE
  11490. zval *op1, *op2, *result;
  11491. double d1, d2;
  11492. op1 = EX_VAR(opline->op1.var);
  11493. op2 = EX_VAR(opline->op2.var);
  11494. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11495. /* pass */
  11496. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11497. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11498. result = EX_VAR(opline->result.var);
  11499. fast_long_sub_function(result, op1, op2);
  11500. ZEND_VM_NEXT_OPCODE();
  11501. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11502. d1 = (double)Z_LVAL_P(op1);
  11503. d2 = Z_DVAL_P(op2);
  11504. goto sub_double;
  11505. }
  11506. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11507. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11508. d1 = Z_DVAL_P(op1);
  11509. d2 = Z_DVAL_P(op2);
  11510. sub_double:
  11511. result = EX_VAR(opline->result.var);
  11512. ZVAL_DOUBLE(result, d1 - d2);
  11513. ZEND_VM_NEXT_OPCODE();
  11514. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11515. d1 = Z_DVAL_P(op1);
  11516. d2 = (double)Z_LVAL_P(op2);
  11517. goto sub_double;
  11518. }
  11519. }
  11520. ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11521. }
  11522. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11523. {
  11524. USE_OPLINE
  11525. zval *op1, *op2, *result;
  11526. double d1, d2;
  11527. op1 = EX_VAR(opline->op1.var);
  11528. op2 = EX_VAR(opline->op2.var);
  11529. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11530. /* pass */
  11531. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11532. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11533. zend_long overflow;
  11534. result = EX_VAR(opline->result.var);
  11535. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  11536. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  11537. ZEND_VM_NEXT_OPCODE();
  11538. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11539. d1 = (double)Z_LVAL_P(op1);
  11540. d2 = Z_DVAL_P(op2);
  11541. goto mul_double;
  11542. }
  11543. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11544. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11545. d1 = Z_DVAL_P(op1);
  11546. d2 = Z_DVAL_P(op2);
  11547. mul_double:
  11548. result = EX_VAR(opline->result.var);
  11549. ZVAL_DOUBLE(result, d1 * d2);
  11550. ZEND_VM_NEXT_OPCODE();
  11551. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11552. d1 = Z_DVAL_P(op1);
  11553. d2 = (double)Z_LVAL_P(op2);
  11554. goto mul_double;
  11555. }
  11556. }
  11557. ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11558. }
  11559. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11560. {
  11561. USE_OPLINE
  11562. zval *op1, *op2, *result;
  11563. op1 = EX_VAR(opline->op1.var);
  11564. op2 = EX_VAR(opline->op2.var);
  11565. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11566. /* pass */
  11567. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11568. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11569. result = EX_VAR(opline->result.var);
  11570. if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
  11571. ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  11572. } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
  11573. /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
  11574. ZVAL_LONG(result, 0);
  11575. } else {
  11576. ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
  11577. }
  11578. ZEND_VM_NEXT_OPCODE();
  11579. }
  11580. }
  11581. ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11582. }
  11583. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11584. {
  11585. USE_OPLINE
  11586. zval *op1, *op2;
  11587. op1 = EX_VAR(opline->op1.var);
  11588. op2 = EX_VAR(opline->op2.var);
  11589. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11590. /* pass */
  11591. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  11592. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  11593. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  11594. /* Perform shift on unsigned numbers to get well-defined wrap behavior. */
  11595. ZVAL_LONG(EX_VAR(opline->result.var),
  11596. (zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
  11597. ZEND_VM_NEXT_OPCODE();
  11598. }
  11599. ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11600. }
  11601. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11602. {
  11603. USE_OPLINE
  11604. zval *op1, *op2;
  11605. op1 = EX_VAR(opline->op1.var);
  11606. op2 = EX_VAR(opline->op2.var);
  11607. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11608. /* pass */
  11609. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  11610. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  11611. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  11612. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
  11613. ZEND_VM_NEXT_OPCODE();
  11614. }
  11615. ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11616. }
  11617. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11618. {
  11619. USE_OPLINE
  11620. zval *op1, *op2;
  11621. double d1, d2;
  11622. op1 = EX_VAR(opline->op1.var);
  11623. op2 = EX_VAR(opline->op2.var);
  11624. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11625. /* pass */
  11626. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11627. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11628. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  11629. is_smaller_true:
  11630. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  11631. } else {
  11632. is_smaller_false:
  11633. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  11634. }
  11635. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11636. d1 = (double)Z_LVAL_P(op1);
  11637. d2 = Z_DVAL_P(op2);
  11638. goto is_smaller_double;
  11639. }
  11640. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11641. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11642. d1 = Z_DVAL_P(op1);
  11643. d2 = Z_DVAL_P(op2);
  11644. is_smaller_double:
  11645. if (d1 < d2) {
  11646. goto is_smaller_true;
  11647. } else {
  11648. goto is_smaller_false;
  11649. }
  11650. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11651. d1 = Z_DVAL_P(op1);
  11652. d2 = (double)Z_LVAL_P(op2);
  11653. goto is_smaller_double;
  11654. }
  11655. }
  11656. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11657. }
  11658. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11659. {
  11660. USE_OPLINE
  11661. zval *op1, *op2;
  11662. double d1, d2;
  11663. op1 = EX_VAR(opline->op1.var);
  11664. op2 = EX_VAR(opline->op2.var);
  11665. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11666. /* pass */
  11667. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11668. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11669. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  11670. is_smaller_true:
  11671. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  11672. } else {
  11673. is_smaller_false:
  11674. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  11675. }
  11676. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11677. d1 = (double)Z_LVAL_P(op1);
  11678. d2 = Z_DVAL_P(op2);
  11679. goto is_smaller_double;
  11680. }
  11681. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11682. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11683. d1 = Z_DVAL_P(op1);
  11684. d2 = Z_DVAL_P(op2);
  11685. is_smaller_double:
  11686. if (d1 < d2) {
  11687. goto is_smaller_true;
  11688. } else {
  11689. goto is_smaller_false;
  11690. }
  11691. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11692. d1 = Z_DVAL_P(op1);
  11693. d2 = (double)Z_LVAL_P(op2);
  11694. goto is_smaller_double;
  11695. }
  11696. }
  11697. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11698. }
  11699. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11700. {
  11701. USE_OPLINE
  11702. zval *op1, *op2;
  11703. double d1, d2;
  11704. op1 = EX_VAR(opline->op1.var);
  11705. op2 = EX_VAR(opline->op2.var);
  11706. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11707. /* pass */
  11708. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11709. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11710. if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
  11711. is_smaller_true:
  11712. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  11713. } else {
  11714. is_smaller_false:
  11715. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  11716. }
  11717. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11718. d1 = (double)Z_LVAL_P(op1);
  11719. d2 = Z_DVAL_P(op2);
  11720. goto is_smaller_double;
  11721. }
  11722. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11723. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11724. d1 = Z_DVAL_P(op1);
  11725. d2 = Z_DVAL_P(op2);
  11726. is_smaller_double:
  11727. if (d1 < d2) {
  11728. goto is_smaller_true;
  11729. } else {
  11730. goto is_smaller_false;
  11731. }
  11732. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11733. d1 = Z_DVAL_P(op1);
  11734. d2 = (double)Z_LVAL_P(op2);
  11735. goto is_smaller_double;
  11736. }
  11737. }
  11738. ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11739. }
  11740. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11741. {
  11742. USE_OPLINE
  11743. zval *op1, *op2;
  11744. double d1, d2;
  11745. op1 = EX_VAR(opline->op1.var);
  11746. op2 = EX_VAR(opline->op2.var);
  11747. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11748. /* pass */
  11749. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11750. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11751. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  11752. is_smaller_or_equal_true:
  11753. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  11754. ZVAL_TRUE(EX_VAR(opline->result.var));
  11755. ZEND_VM_NEXT_OPCODE();
  11756. } else {
  11757. is_smaller_or_equal_false:
  11758. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  11759. ZVAL_FALSE(EX_VAR(opline->result.var));
  11760. ZEND_VM_NEXT_OPCODE();
  11761. }
  11762. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11763. d1 = (double)Z_LVAL_P(op1);
  11764. d2 = Z_DVAL_P(op2);
  11765. goto is_smaller_or_equal_double;
  11766. }
  11767. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11768. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11769. d1 = Z_DVAL_P(op1);
  11770. d2 = Z_DVAL_P(op2);
  11771. is_smaller_or_equal_double:
  11772. if (d1 <= d2) {
  11773. goto is_smaller_or_equal_true;
  11774. } else {
  11775. goto is_smaller_or_equal_false;
  11776. }
  11777. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11778. d1 = Z_DVAL_P(op1);
  11779. d2 = (double)Z_LVAL_P(op2);
  11780. goto is_smaller_or_equal_double;
  11781. }
  11782. }
  11783. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11784. }
  11785. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11786. {
  11787. USE_OPLINE
  11788. zval *op1, *op2;
  11789. double d1, d2;
  11790. op1 = EX_VAR(opline->op1.var);
  11791. op2 = EX_VAR(opline->op2.var);
  11792. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11793. /* pass */
  11794. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11795. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11796. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  11797. is_smaller_or_equal_true:
  11798. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  11799. ZVAL_TRUE(EX_VAR(opline->result.var));
  11800. ZEND_VM_NEXT_OPCODE();
  11801. } else {
  11802. is_smaller_or_equal_false:
  11803. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  11804. ZVAL_FALSE(EX_VAR(opline->result.var));
  11805. ZEND_VM_NEXT_OPCODE();
  11806. }
  11807. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11808. d1 = (double)Z_LVAL_P(op1);
  11809. d2 = Z_DVAL_P(op2);
  11810. goto is_smaller_or_equal_double;
  11811. }
  11812. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11813. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11814. d1 = Z_DVAL_P(op1);
  11815. d2 = Z_DVAL_P(op2);
  11816. is_smaller_or_equal_double:
  11817. if (d1 <= d2) {
  11818. goto is_smaller_or_equal_true;
  11819. } else {
  11820. goto is_smaller_or_equal_false;
  11821. }
  11822. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11823. d1 = Z_DVAL_P(op1);
  11824. d2 = (double)Z_LVAL_P(op2);
  11825. goto is_smaller_or_equal_double;
  11826. }
  11827. }
  11828. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11829. }
  11830. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11831. {
  11832. USE_OPLINE
  11833. zval *op1, *op2;
  11834. double d1, d2;
  11835. op1 = EX_VAR(opline->op1.var);
  11836. op2 = EX_VAR(opline->op2.var);
  11837. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11838. /* pass */
  11839. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11840. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11841. if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
  11842. is_smaller_or_equal_true:
  11843. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  11844. ZVAL_TRUE(EX_VAR(opline->result.var));
  11845. ZEND_VM_NEXT_OPCODE();
  11846. } else {
  11847. is_smaller_or_equal_false:
  11848. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  11849. ZVAL_FALSE(EX_VAR(opline->result.var));
  11850. ZEND_VM_NEXT_OPCODE();
  11851. }
  11852. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11853. d1 = (double)Z_LVAL_P(op1);
  11854. d2 = Z_DVAL_P(op2);
  11855. goto is_smaller_or_equal_double;
  11856. }
  11857. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11858. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11859. d1 = Z_DVAL_P(op1);
  11860. d2 = Z_DVAL_P(op2);
  11861. is_smaller_or_equal_double:
  11862. if (d1 <= d2) {
  11863. goto is_smaller_or_equal_true;
  11864. } else {
  11865. goto is_smaller_or_equal_false;
  11866. }
  11867. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11868. d1 = Z_DVAL_P(op1);
  11869. d2 = (double)Z_LVAL_P(op2);
  11870. goto is_smaller_or_equal_double;
  11871. }
  11872. }
  11873. ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11874. }
  11875. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11876. {
  11877. USE_OPLINE
  11878. zval *op1, *op2;
  11879. op1 = EX_VAR(opline->op1.var);
  11880. op2 = EX_VAR(opline->op2.var);
  11881. if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  11882. /* pass */
  11883. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  11884. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11885. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
  11886. ZEND_VM_NEXT_OPCODE();
  11887. }
  11888. ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11889. }
  11890. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_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_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11904. }
  11905. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_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_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11919. }
  11920. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11921. {
  11922. USE_OPLINE
  11923. zval *op1, *op2, *result;
  11924. op1 = EX_VAR(opline->op1.var);
  11925. op2 = EX_VAR(opline->op2.var);
  11926. result = EX_VAR(opline->result.var);
  11927. ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
  11928. ZEND_VM_NEXT_OPCODE();
  11929. }
  11930. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11931. {
  11932. USE_OPLINE
  11933. zval *op1, *op2, *result;
  11934. op1 = EX_VAR(opline->op1.var);
  11935. op2 = EX_VAR(opline->op2.var);
  11936. result = EX_VAR(opline->result.var);
  11937. fast_long_add_function(result, op1, op2);
  11938. ZEND_VM_NEXT_OPCODE();
  11939. }
  11940. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11941. {
  11942. USE_OPLINE
  11943. zval *op1, *op2, *result;
  11944. op1 = EX_VAR(opline->op1.var);
  11945. op2 = EX_VAR(opline->op2.var);
  11946. result = EX_VAR(opline->result.var);
  11947. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
  11948. ZEND_VM_NEXT_OPCODE();
  11949. }
  11950. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11951. {
  11952. USE_OPLINE
  11953. zval *op1, *op2, *result;
  11954. op1 = EX_VAR(opline->op1.var);
  11955. op2 = EX_VAR(opline->op2.var);
  11956. result = EX_VAR(opline->result.var);
  11957. ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
  11958. ZEND_VM_NEXT_OPCODE();
  11959. }
  11960. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11961. {
  11962. USE_OPLINE
  11963. zval *op1, *op2, *result;
  11964. op1 = EX_VAR(opline->op1.var);
  11965. op2 = EX_VAR(opline->op2.var);
  11966. result = EX_VAR(opline->result.var);
  11967. fast_long_sub_function(result, op1, op2);
  11968. ZEND_VM_NEXT_OPCODE();
  11969. }
  11970. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11971. {
  11972. USE_OPLINE
  11973. zval *op1, *op2, *result;
  11974. op1 = EX_VAR(opline->op1.var);
  11975. op2 = EX_VAR(opline->op2.var);
  11976. result = EX_VAR(opline->result.var);
  11977. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  11978. ZEND_VM_NEXT_OPCODE();
  11979. }
  11980. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11981. {
  11982. USE_OPLINE
  11983. zval *op1, *op2, *result;
  11984. op1 = EX_VAR(opline->op1.var);
  11985. op2 = EX_VAR(opline->op2.var);
  11986. result = EX_VAR(opline->result.var);
  11987. ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
  11988. ZEND_VM_NEXT_OPCODE();
  11989. }
  11990. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11991. {
  11992. USE_OPLINE
  11993. zval *op1, *op2, *result;
  11994. zend_long overflow;
  11995. op1 = EX_VAR(opline->op1.var);
  11996. op2 = EX_VAR(opline->op2.var);
  11997. result = EX_VAR(opline->result.var);
  11998. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  11999. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  12000. ZEND_VM_NEXT_OPCODE();
  12001. }
  12002. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12003. {
  12004. USE_OPLINE
  12005. zval *op1, *op2, *result;
  12006. op1 = EX_VAR(opline->op1.var);
  12007. op2 = EX_VAR(opline->op2.var);
  12008. result = EX_VAR(opline->result.var);
  12009. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
  12010. ZEND_VM_NEXT_OPCODE();
  12011. }
  12012. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12013. {
  12014. USE_OPLINE
  12015. zval *op1, *op2;
  12016. bool result;
  12017. op1 = EX_VAR(opline->op1.var);
  12018. op2 = EX_VAR(opline->op2.var);
  12019. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  12020. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  12021. }
  12022. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12023. {
  12024. USE_OPLINE
  12025. zval *op1, *op2;
  12026. bool result;
  12027. op1 = EX_VAR(opline->op1.var);
  12028. op2 = EX_VAR(opline->op2.var);
  12029. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  12030. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  12031. }
  12032. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12033. {
  12034. USE_OPLINE
  12035. zval *op1, *op2;
  12036. bool result;
  12037. op1 = EX_VAR(opline->op1.var);
  12038. op2 = EX_VAR(opline->op2.var);
  12039. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  12040. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  12041. }
  12042. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12043. {
  12044. USE_OPLINE
  12045. zval *op1, *op2;
  12046. bool result;
  12047. op1 = EX_VAR(opline->op1.var);
  12048. op2 = EX_VAR(opline->op2.var);
  12049. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  12050. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  12051. }
  12052. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12053. {
  12054. USE_OPLINE
  12055. zval *op1, *op2;
  12056. bool result;
  12057. op1 = EX_VAR(opline->op1.var);
  12058. op2 = EX_VAR(opline->op2.var);
  12059. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  12060. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  12061. }
  12062. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12063. {
  12064. USE_OPLINE
  12065. zval *op1, *op2;
  12066. bool result;
  12067. op1 = EX_VAR(opline->op1.var);
  12068. op2 = EX_VAR(opline->op2.var);
  12069. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  12070. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  12071. }
  12072. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12073. {
  12074. USE_OPLINE
  12075. zval *op1, *op2;
  12076. bool result;
  12077. op1 = EX_VAR(opline->op1.var);
  12078. op2 = EX_VAR(opline->op2.var);
  12079. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  12080. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  12081. }
  12082. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12083. {
  12084. USE_OPLINE
  12085. zval *op1, *op2;
  12086. bool result;
  12087. op1 = EX_VAR(opline->op1.var);
  12088. op2 = EX_VAR(opline->op2.var);
  12089. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  12090. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  12091. }
  12092. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12093. {
  12094. USE_OPLINE
  12095. zval *op1, *op2;
  12096. bool result;
  12097. op1 = EX_VAR(opline->op1.var);
  12098. op2 = EX_VAR(opline->op2.var);
  12099. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  12100. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  12101. }
  12102. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12103. {
  12104. USE_OPLINE
  12105. zval *op1, *op2;
  12106. bool result;
  12107. op1 = EX_VAR(opline->op1.var);
  12108. op2 = EX_VAR(opline->op2.var);
  12109. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  12110. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  12111. }
  12112. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12113. {
  12114. USE_OPLINE
  12115. zval *op1, *op2;
  12116. bool result;
  12117. op1 = EX_VAR(opline->op1.var);
  12118. op2 = EX_VAR(opline->op2.var);
  12119. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  12120. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  12121. }
  12122. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12123. {
  12124. USE_OPLINE
  12125. zval *op1, *op2;
  12126. bool result;
  12127. op1 = EX_VAR(opline->op1.var);
  12128. op2 = EX_VAR(opline->op2.var);
  12129. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  12130. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  12131. }
  12132. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12133. {
  12134. USE_OPLINE
  12135. zval *op1, *op2;
  12136. bool result;
  12137. op1 = EX_VAR(opline->op1.var);
  12138. op2 = EX_VAR(opline->op2.var);
  12139. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  12140. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  12141. }
  12142. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12143. {
  12144. USE_OPLINE
  12145. zval *op1, *op2;
  12146. bool result;
  12147. op1 = EX_VAR(opline->op1.var);
  12148. op2 = EX_VAR(opline->op2.var);
  12149. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  12150. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  12151. }
  12152. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12153. {
  12154. USE_OPLINE
  12155. zval *op1, *op2;
  12156. bool result;
  12157. op1 = EX_VAR(opline->op1.var);
  12158. op2 = EX_VAR(opline->op2.var);
  12159. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  12160. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  12161. }
  12162. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12163. {
  12164. USE_OPLINE
  12165. zval *op1, *op2;
  12166. bool result;
  12167. op1 = EX_VAR(opline->op1.var);
  12168. op2 = EX_VAR(opline->op2.var);
  12169. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  12170. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  12171. }
  12172. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12173. {
  12174. USE_OPLINE
  12175. zval *op1, *op2;
  12176. bool result;
  12177. op1 = EX_VAR(opline->op1.var);
  12178. op2 = EX_VAR(opline->op2.var);
  12179. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  12180. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  12181. }
  12182. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12183. {
  12184. USE_OPLINE
  12185. zval *op1, *op2;
  12186. bool result;
  12187. op1 = EX_VAR(opline->op1.var);
  12188. op2 = EX_VAR(opline->op2.var);
  12189. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  12190. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  12191. }
  12192. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12193. {
  12194. USE_OPLINE
  12195. zval *op1, *op2;
  12196. bool result;
  12197. op1 = EX_VAR(opline->op1.var);
  12198. op2 = EX_VAR(opline->op2.var);
  12199. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  12200. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  12201. }
  12202. 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)
  12203. {
  12204. USE_OPLINE
  12205. zval *op1, *op2;
  12206. bool result;
  12207. op1 = EX_VAR(opline->op1.var);
  12208. op2 = EX_VAR(opline->op2.var);
  12209. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  12210. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  12211. }
  12212. 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)
  12213. {
  12214. USE_OPLINE
  12215. zval *op1, *op2;
  12216. bool result;
  12217. op1 = EX_VAR(opline->op1.var);
  12218. op2 = EX_VAR(opline->op2.var);
  12219. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  12220. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  12221. }
  12222. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12223. {
  12224. USE_OPLINE
  12225. zval *op1, *op2;
  12226. bool result;
  12227. op1 = EX_VAR(opline->op1.var);
  12228. op2 = EX_VAR(opline->op2.var);
  12229. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  12230. ZEND_VM_SMART_BRANCH_NONE(result, 0);
  12231. }
  12232. 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)
  12233. {
  12234. USE_OPLINE
  12235. zval *op1, *op2;
  12236. bool result;
  12237. op1 = EX_VAR(opline->op1.var);
  12238. op2 = EX_VAR(opline->op2.var);
  12239. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  12240. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  12241. }
  12242. 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)
  12243. {
  12244. USE_OPLINE
  12245. zval *op1, *op2;
  12246. bool result;
  12247. op1 = EX_VAR(opline->op1.var);
  12248. op2 = EX_VAR(opline->op2.var);
  12249. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  12250. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  12251. }
  12252. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12253. {
  12254. USE_OPLINE
  12255. zval *container;
  12256. SAVE_OPLINE();
  12257. container = EX_VAR(opline->op1.var);
  12258. 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);
  12259. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  12260. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12261. }
  12262. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12263. {
  12264. USE_OPLINE
  12265. zval *op;
  12266. SAVE_OPLINE();
  12267. op = EX_VAR(opline->op1.var);
  12268. zend_match_unhandled_error(op);
  12269. HANDLE_EXCEPTION();
  12270. }
  12271. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12272. {
  12273. USE_OPLINE
  12274. zval *container;
  12275. SAVE_OPLINE();
  12276. container = EX_VAR(opline->op1.var);
  12277. zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  12278. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12279. }
  12280. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12281. {
  12282. USE_OPLINE
  12283. zval *val;
  12284. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12285. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  12286. ZVAL_FALSE(EX_VAR(opline->result.var));
  12287. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  12288. /* The result and op1 can be the same cv zval */
  12289. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  12290. ZVAL_TRUE(EX_VAR(opline->result.var));
  12291. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  12292. SAVE_OPLINE();
  12293. ZVAL_UNDEFINED_OP1();
  12294. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12295. }
  12296. } else {
  12297. SAVE_OPLINE();
  12298. ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
  12299. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12300. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12301. }
  12302. ZEND_VM_NEXT_OPCODE();
  12303. }
  12304. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12305. {
  12306. USE_OPLINE
  12307. zval *z;
  12308. SAVE_OPLINE();
  12309. z = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12310. if (Z_TYPE_P(z) == IS_STRING) {
  12311. zend_string *str = Z_STR_P(z);
  12312. if (ZSTR_LEN(str) != 0) {
  12313. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  12314. }
  12315. } else {
  12316. zend_string *str = zval_get_string_func(z);
  12317. if (ZSTR_LEN(str) != 0) {
  12318. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  12319. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
  12320. ZVAL_UNDEFINED_OP1();
  12321. }
  12322. zend_string_release_ex(str, 0);
  12323. }
  12324. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12325. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12326. }
  12327. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12328. {
  12329. USE_OPLINE
  12330. zval *val;
  12331. zend_uchar op1_type;
  12332. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12333. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  12334. ZEND_VM_NEXT_OPCODE();
  12335. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  12336. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  12337. SAVE_OPLINE();
  12338. ZVAL_UNDEFINED_OP1();
  12339. if (UNEXPECTED(EG(exception))) {
  12340. HANDLE_EXCEPTION();
  12341. }
  12342. }
  12343. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  12344. }
  12345. SAVE_OPLINE();
  12346. op1_type = (IS_TMP_VAR|IS_VAR);
  12347. if (i_zend_is_true(val)) {
  12348. opline++;
  12349. } else {
  12350. opline = OP_JMP_ADDR(opline, opline->op2);
  12351. }
  12352. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  12353. zval_ptr_dtor_nogc(val);
  12354. }
  12355. ZEND_VM_JMP(opline);
  12356. }
  12357. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12358. {
  12359. USE_OPLINE
  12360. zval *val;
  12361. zend_uchar op1_type;
  12362. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12363. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  12364. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  12365. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  12366. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  12367. SAVE_OPLINE();
  12368. ZVAL_UNDEFINED_OP1();
  12369. if (UNEXPECTED(EG(exception))) {
  12370. HANDLE_EXCEPTION();
  12371. }
  12372. }
  12373. ZEND_VM_NEXT_OPCODE();
  12374. }
  12375. SAVE_OPLINE();
  12376. op1_type = (IS_TMP_VAR|IS_VAR);
  12377. if (i_zend_is_true(val)) {
  12378. opline = OP_JMP_ADDR(opline, opline->op2);
  12379. } else {
  12380. opline++;
  12381. }
  12382. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  12383. zval_ptr_dtor_nogc(val);
  12384. }
  12385. ZEND_VM_JMP(opline);
  12386. }
  12387. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12388. {
  12389. USE_OPLINE
  12390. zval *val;
  12391. zend_uchar op1_type;
  12392. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12393. if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
  12394. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  12395. ZEND_VM_CONTINUE();
  12396. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  12397. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  12398. SAVE_OPLINE();
  12399. ZVAL_UNDEFINED_OP1();
  12400. if (UNEXPECTED(EG(exception))) {
  12401. HANDLE_EXCEPTION();
  12402. }
  12403. }
  12404. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  12405. }
  12406. SAVE_OPLINE();
  12407. op1_type = (IS_TMP_VAR|IS_VAR);
  12408. if (i_zend_is_true(val)) {
  12409. opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
  12410. } else {
  12411. opline = OP_JMP_ADDR(opline, opline->op2);
  12412. }
  12413. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  12414. zval_ptr_dtor_nogc(val);
  12415. }
  12416. ZEND_VM_JMP(opline);
  12417. }
  12418. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12419. {
  12420. USE_OPLINE
  12421. zval *val;
  12422. bool ret;
  12423. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12424. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  12425. ZVAL_TRUE(EX_VAR(opline->result.var));
  12426. ZEND_VM_NEXT_OPCODE();
  12427. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  12428. ZVAL_FALSE(EX_VAR(opline->result.var));
  12429. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  12430. SAVE_OPLINE();
  12431. ZVAL_UNDEFINED_OP1();
  12432. if (UNEXPECTED(EG(exception))) {
  12433. HANDLE_EXCEPTION();
  12434. }
  12435. }
  12436. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  12437. }
  12438. SAVE_OPLINE();
  12439. ret = i_zend_is_true(val);
  12440. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12441. if (ret) {
  12442. ZVAL_TRUE(EX_VAR(opline->result.var));
  12443. opline++;
  12444. } else {
  12445. ZVAL_FALSE(EX_VAR(opline->result.var));
  12446. opline = OP_JMP_ADDR(opline, opline->op2);
  12447. }
  12448. ZEND_VM_JMP(opline);
  12449. }
  12450. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12451. {
  12452. USE_OPLINE
  12453. zval *val;
  12454. bool ret;
  12455. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12456. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  12457. ZVAL_TRUE(EX_VAR(opline->result.var));
  12458. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  12459. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  12460. ZVAL_FALSE(EX_VAR(opline->result.var));
  12461. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  12462. SAVE_OPLINE();
  12463. ZVAL_UNDEFINED_OP1();
  12464. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12465. } else {
  12466. ZEND_VM_NEXT_OPCODE();
  12467. }
  12468. }
  12469. SAVE_OPLINE();
  12470. ret = i_zend_is_true(val);
  12471. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12472. if (ret) {
  12473. ZVAL_TRUE(EX_VAR(opline->result.var));
  12474. opline = OP_JMP_ADDR(opline, opline->op2);
  12475. } else {
  12476. ZVAL_FALSE(EX_VAR(opline->result.var));
  12477. opline++;
  12478. }
  12479. ZEND_VM_JMP(opline);
  12480. }
  12481. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12482. {
  12483. USE_OPLINE
  12484. SAVE_OPLINE();
  12485. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12486. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12487. }
  12488. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12489. {
  12490. zval *var;
  12491. USE_OPLINE
  12492. var = EX_VAR(opline->op1.var);
  12493. if (Z_TYPE_P(var) != IS_ARRAY) {
  12494. SAVE_OPLINE();
  12495. if (Z_FE_ITER_P(var) != (uint32_t)-1) {
  12496. zend_hash_iterator_del(Z_FE_ITER_P(var));
  12497. }
  12498. zval_ptr_dtor_nogc(var);
  12499. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12500. }
  12501. /* This is freeing an array. Use an inlined version of zval_ptr_dtor_nogc. */
  12502. /* 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) */
  12503. if (Z_REFCOUNTED_P(var) && !Z_DELREF_P(var)) {
  12504. SAVE_OPLINE();
  12505. rc_dtor_func(Z_COUNTED_P(var));
  12506. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12507. }
  12508. ZEND_VM_NEXT_OPCODE();
  12509. }
  12510. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12511. {
  12512. USE_OPLINE
  12513. zval *value;
  12514. SAVE_OPLINE();
  12515. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12516. do {
  12517. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
  12518. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  12519. value = Z_REFVAL_P(value);
  12520. if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
  12521. break;
  12522. }
  12523. }
  12524. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  12525. ZVAL_UNDEFINED_OP1();
  12526. if (UNEXPECTED(EG(exception) != NULL)) {
  12527. HANDLE_EXCEPTION();
  12528. }
  12529. }
  12530. zend_throw_error(NULL, "Can only throw objects");
  12531. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12532. HANDLE_EXCEPTION();
  12533. }
  12534. } while (0);
  12535. zend_exception_save();
  12536. Z_TRY_ADDREF_P(value);
  12537. zend_throw_exception_object(value);
  12538. zend_exception_restore();
  12539. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12540. HANDLE_EXCEPTION();
  12541. }
  12542. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12543. {
  12544. USE_OPLINE
  12545. zval *val;
  12546. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12547. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  12548. ZVAL_TRUE(EX_VAR(opline->result.var));
  12549. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  12550. /* The result and op1 can be the same cv zval */
  12551. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  12552. ZVAL_FALSE(EX_VAR(opline->result.var));
  12553. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  12554. SAVE_OPLINE();
  12555. ZVAL_UNDEFINED_OP1();
  12556. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12557. }
  12558. } else {
  12559. SAVE_OPLINE();
  12560. ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
  12561. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12562. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12563. }
  12564. ZEND_VM_NEXT_OPCODE();
  12565. }
  12566. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12567. {
  12568. USE_OPLINE
  12569. zval *obj;
  12570. zend_object *zobj;
  12571. zend_class_entry *ce, *scope;
  12572. zend_function *clone;
  12573. zend_object_clone_obj_t clone_call;
  12574. SAVE_OPLINE();
  12575. obj = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12576. do {
  12577. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  12578. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
  12579. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
  12580. obj = Z_REFVAL_P(obj);
  12581. if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
  12582. break;
  12583. }
  12584. }
  12585. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12586. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
  12587. ZVAL_UNDEFINED_OP1();
  12588. if (UNEXPECTED(EG(exception) != NULL)) {
  12589. HANDLE_EXCEPTION();
  12590. }
  12591. }
  12592. zend_throw_error(NULL, "__clone method called on non-object");
  12593. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12594. HANDLE_EXCEPTION();
  12595. }
  12596. } while (0);
  12597. zobj = Z_OBJ_P(obj);
  12598. ce = zobj->ce;
  12599. clone = ce->clone;
  12600. clone_call = zobj->handlers->clone_obj;
  12601. if (UNEXPECTED(clone_call == NULL)) {
  12602. zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
  12603. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12604. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12605. HANDLE_EXCEPTION();
  12606. }
  12607. if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
  12608. scope = EX(func)->op_array.scope;
  12609. if (clone->common.scope != scope) {
  12610. if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
  12611. || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
  12612. zend_wrong_clone_call(clone, scope);
  12613. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12614. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12615. HANDLE_EXCEPTION();
  12616. }
  12617. }
  12618. }
  12619. ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
  12620. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12621. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12622. }
  12623. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12624. {
  12625. USE_OPLINE
  12626. zend_op_array *new_op_array;
  12627. zval *inc_filename;
  12628. SAVE_OPLINE();
  12629. inc_filename = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12630. new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
  12631. if (UNEXPECTED(EG(exception) != NULL)) {
  12632. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12633. if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
  12634. destroy_op_array(new_op_array);
  12635. efree_size(new_op_array, sizeof(zend_op_array));
  12636. }
  12637. UNDEF_RESULT();
  12638. HANDLE_EXCEPTION();
  12639. } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
  12640. if (RETURN_VALUE_USED(opline)) {
  12641. ZVAL_TRUE(EX_VAR(opline->result.var));
  12642. }
  12643. } else if (EXPECTED(new_op_array != NULL)) {
  12644. zval *return_value = NULL;
  12645. zend_execute_data *call;
  12646. if (RETURN_VALUE_USED(opline)) {
  12647. return_value = EX_VAR(opline->result.var);
  12648. }
  12649. new_op_array->scope = EX(func)->op_array.scope;
  12650. call = zend_vm_stack_push_call_frame(
  12651. (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
  12652. (zend_function*)new_op_array, 0,
  12653. Z_PTR(EX(This)));
  12654. if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
  12655. call->symbol_table = EX(symbol_table);
  12656. } else {
  12657. call->symbol_table = zend_rebuild_symbol_table();
  12658. }
  12659. call->prev_execute_data = execute_data;
  12660. i_init_code_execute_data(call, new_op_array, return_value);
  12661. if (EXPECTED(zend_execute_ex == execute_ex)) {
  12662. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12663. ZEND_VM_ENTER();
  12664. } else {
  12665. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  12666. zend_execute_ex(call);
  12667. zend_vm_stack_free_call_frame(call);
  12668. }
  12669. zend_destroy_static_vars(new_op_array);
  12670. destroy_op_array(new_op_array);
  12671. efree_size(new_op_array, sizeof(zend_op_array));
  12672. if (UNEXPECTED(EG(exception) != NULL)) {
  12673. zend_rethrow_exception(execute_data);
  12674. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12675. UNDEF_RESULT();
  12676. HANDLE_EXCEPTION();
  12677. }
  12678. } else if (RETURN_VALUE_USED(opline)) {
  12679. ZVAL_FALSE(EX_VAR(opline->result.var));
  12680. }
  12681. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12682. ZEND_VM_NEXT_OPCODE();
  12683. }
  12684. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12685. {
  12686. USE_OPLINE
  12687. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  12688. zval *val;
  12689. SAVE_OPLINE();
  12690. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12691. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  12692. zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
  12693. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12694. UNDEF_RESULT();
  12695. HANDLE_EXCEPTION();
  12696. }
  12697. yield_from_try_again:
  12698. if (Z_TYPE_P(val) == IS_ARRAY) {
  12699. ZVAL_COPY_VALUE(&generator->values, val);
  12700. if (Z_OPT_REFCOUNTED_P(val)) {
  12701. Z_ADDREF_P(val);
  12702. }
  12703. Z_FE_POS(generator->values) = 0;
  12704. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12705. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
  12706. zend_class_entry *ce = Z_OBJCE_P(val);
  12707. if (ce == zend_ce_generator) {
  12708. zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
  12709. Z_ADDREF_P(val);
  12710. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12711. if (UNEXPECTED(new_gen->execute_data == NULL)) {
  12712. zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
  12713. zval_ptr_dtor(val);
  12714. UNDEF_RESULT();
  12715. HANDLE_EXCEPTION();
  12716. } else if (Z_ISUNDEF(new_gen->retval)) {
  12717. if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
  12718. zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
  12719. zval_ptr_dtor(val);
  12720. UNDEF_RESULT();
  12721. HANDLE_EXCEPTION();
  12722. } else {
  12723. zend_generator_yield_from(generator, new_gen);
  12724. }
  12725. } else {
  12726. if (RETURN_VALUE_USED(opline)) {
  12727. ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
  12728. }
  12729. ZEND_VM_NEXT_OPCODE();
  12730. }
  12731. } else {
  12732. zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
  12733. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12734. if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
  12735. if (!EG(exception)) {
  12736. zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
  12737. }
  12738. UNDEF_RESULT();
  12739. HANDLE_EXCEPTION();
  12740. }
  12741. iter->index = 0;
  12742. if (iter->funcs->rewind) {
  12743. iter->funcs->rewind(iter);
  12744. if (UNEXPECTED(EG(exception) != NULL)) {
  12745. OBJ_RELEASE(&iter->std);
  12746. UNDEF_RESULT();
  12747. HANDLE_EXCEPTION();
  12748. }
  12749. }
  12750. ZVAL_OBJ(&generator->values, &iter->std);
  12751. }
  12752. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
  12753. val = Z_REFVAL_P(val);
  12754. goto yield_from_try_again;
  12755. } else {
  12756. zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
  12757. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12758. UNDEF_RESULT();
  12759. HANDLE_EXCEPTION();
  12760. }
  12761. /* This is the default return value
  12762. * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
  12763. if (RETURN_VALUE_USED(opline)) {
  12764. ZVAL_NULL(EX_VAR(opline->result.var));
  12765. }
  12766. /* This generator has no send target (though the generator we delegate to might have one) */
  12767. generator->send_target = NULL;
  12768. /* We increment to the next op, so we are at the correct position when the
  12769. * generator is resumed. */
  12770. ZEND_VM_INC_OPCODE();
  12771. /* The GOTO VM uses a local opline variable. We need to set the opline
  12772. * variable in execute_data so we don't resume at an old position. */
  12773. SAVE_OPLINE();
  12774. ZEND_VM_RETURN();
  12775. }
  12776. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12777. {
  12778. USE_OPLINE
  12779. zval *value;
  12780. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12781. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  12782. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  12783. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  12784. zval_ptr_dtor_str(value);
  12785. }
  12786. ZEND_VM_NEXT_OPCODE();
  12787. } else {
  12788. bool strict;
  12789. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
  12790. value = Z_REFVAL_P(value);
  12791. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  12792. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  12793. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12794. ZEND_VM_NEXT_OPCODE();
  12795. }
  12796. }
  12797. SAVE_OPLINE();
  12798. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  12799. value = ZVAL_UNDEFINED_OP1();
  12800. }
  12801. strict = EX_USES_STRICT_TYPES();
  12802. do {
  12803. if (EXPECTED(!strict)) {
  12804. zend_string *str;
  12805. zval tmp;
  12806. if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
  12807. zend_error(E_DEPRECATED,
  12808. "strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
  12809. ZVAL_LONG(EX_VAR(opline->result.var), 0);
  12810. if (UNEXPECTED(EG(exception))) {
  12811. HANDLE_EXCEPTION();
  12812. }
  12813. break;
  12814. }
  12815. ZVAL_COPY(&tmp, value);
  12816. if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
  12817. ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
  12818. zval_ptr_dtor(&tmp);
  12819. break;
  12820. }
  12821. zval_ptr_dtor(&tmp);
  12822. }
  12823. if (!EG(exception)) {
  12824. zend_type_error("strlen(): Argument #1 ($str) must be of type string, %s given", zend_zval_type_name(value));
  12825. }
  12826. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12827. } while (0);
  12828. }
  12829. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12830. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12831. }
  12832. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12833. {
  12834. USE_OPLINE
  12835. zval *value;
  12836. int result = 0;
  12837. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12838. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  12839. type_check_resource:
  12840. if (opline->extended_value != MAY_BE_RESOURCE
  12841. || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
  12842. result = 1;
  12843. }
  12844. } else if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
  12845. value = Z_REFVAL_P(value);
  12846. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  12847. goto type_check_resource;
  12848. }
  12849. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  12850. result = ((1 << IS_NULL) & opline->extended_value) != 0;
  12851. SAVE_OPLINE();
  12852. ZVAL_UNDEFINED_OP1();
  12853. if (UNEXPECTED(EG(exception))) {
  12854. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12855. HANDLE_EXCEPTION();
  12856. }
  12857. }
  12858. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  12859. SAVE_OPLINE();
  12860. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12861. ZEND_VM_SMART_BRANCH(result, 1);
  12862. } else {
  12863. ZEND_VM_SMART_BRANCH(result, 0);
  12864. }
  12865. }
  12866. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12867. {
  12868. uint32_t fetch_type;
  12869. zend_class_entry *called_scope, *scope;
  12870. USE_OPLINE
  12871. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  12872. SAVE_OPLINE();
  12873. zval *op = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12874. if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
  12875. ZVAL_DEREF(op);
  12876. if (Z_TYPE_P(op) != IS_OBJECT) {
  12877. zend_type_error("Cannot use \"::class\" on value of type %s", zend_zval_type_name(op));
  12878. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12879. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12880. HANDLE_EXCEPTION();
  12881. }
  12882. }
  12883. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
  12884. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12885. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12886. }
  12887. fetch_type = opline->op1.num;
  12888. scope = EX(func)->op_array.scope;
  12889. if (UNEXPECTED(scope == NULL)) {
  12890. SAVE_OPLINE();
  12891. zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
  12892. fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
  12893. fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
  12894. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12895. HANDLE_EXCEPTION();
  12896. }
  12897. switch (fetch_type) {
  12898. case ZEND_FETCH_CLASS_SELF:
  12899. ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
  12900. break;
  12901. case ZEND_FETCH_CLASS_PARENT:
  12902. if (UNEXPECTED(scope->parent == NULL)) {
  12903. SAVE_OPLINE();
  12904. zend_throw_error(NULL,
  12905. "Cannot use \"parent\" when current class scope has no parent");
  12906. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12907. HANDLE_EXCEPTION();
  12908. }
  12909. ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
  12910. break;
  12911. case ZEND_FETCH_CLASS_STATIC:
  12912. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  12913. called_scope = Z_OBJCE(EX(This));
  12914. } else {
  12915. called_scope = Z_CE(EX(This));
  12916. }
  12917. ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
  12918. break;
  12919. EMPTY_SWITCH_DEFAULT_CASE()
  12920. }
  12921. ZEND_VM_NEXT_OPCODE();
  12922. }
  12923. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12924. {
  12925. USE_OPLINE
  12926. zval *op1, *op2;
  12927. SAVE_OPLINE();
  12928. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12929. op2 = RT_CONSTANT(opline, opline->op2);
  12930. div_function(EX_VAR(opline->result.var), op1, op2);
  12931. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12932. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12933. }
  12934. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12935. {
  12936. USE_OPLINE
  12937. zval *op1, *op2;
  12938. SAVE_OPLINE();
  12939. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12940. op2 = RT_CONSTANT(opline, opline->op2);
  12941. pow_function(EX_VAR(opline->result.var), op1, op2);
  12942. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12943. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12944. }
  12945. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12946. {
  12947. USE_OPLINE
  12948. zval *op1, *op2;
  12949. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  12950. op2 = RT_CONSTANT(opline, opline->op2);
  12951. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  12952. (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  12953. zend_string *op1_str = Z_STR_P(op1);
  12954. zend_string *op2_str = Z_STR_P(op2);
  12955. zend_string *str;
  12956. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  12957. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  12958. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  12959. } else {
  12960. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  12961. }
  12962. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  12963. zend_string_release_ex(op1_str, 0);
  12964. }
  12965. } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  12966. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  12967. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  12968. } else {
  12969. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  12970. }
  12971. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  12972. zend_string_release_ex(op2_str, 0);
  12973. }
  12974. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  12975. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  12976. size_t len = ZSTR_LEN(op1_str);
  12977. if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
  12978. zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
  12979. }
  12980. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  12981. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  12982. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  12983. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  12984. zend_string_release_ex(op2_str, 0);
  12985. }
  12986. } else {
  12987. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  12988. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  12989. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  12990. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  12991. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  12992. zend_string_release_ex(op1_str, 0);
  12993. }
  12994. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  12995. zend_string_release_ex(op2_str, 0);
  12996. }
  12997. }
  12998. ZEND_VM_NEXT_OPCODE();
  12999. } else {
  13000. SAVE_OPLINE();
  13001. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  13002. op1 = ZVAL_UNDEFINED_OP1();
  13003. }
  13004. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  13005. op2 = ZVAL_UNDEFINED_OP2();
  13006. }
  13007. concat_function(EX_VAR(opline->result.var), op1, op2);
  13008. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13009. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13010. }
  13011. }
  13012. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13013. {
  13014. USE_OPLINE
  13015. zval *op1, *op2;
  13016. double d1, d2;
  13017. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13018. op2 = RT_CONSTANT(opline, opline->op2);
  13019. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
  13020. /* pass */
  13021. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  13022. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13023. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  13024. is_equal_true:
  13025. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  13026. } else {
  13027. is_equal_false:
  13028. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  13029. }
  13030. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13031. d1 = (double)Z_LVAL_P(op1);
  13032. d2 = Z_DVAL_P(op2);
  13033. goto is_equal_double;
  13034. }
  13035. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  13036. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13037. d1 = Z_DVAL_P(op1);
  13038. d2 = Z_DVAL_P(op2);
  13039. is_equal_double:
  13040. if (d1 == d2) {
  13041. goto is_equal_true;
  13042. } else {
  13043. goto is_equal_false;
  13044. }
  13045. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13046. d1 = Z_DVAL_P(op1);
  13047. d2 = (double)Z_LVAL_P(op2);
  13048. goto is_equal_double;
  13049. }
  13050. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13051. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13052. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  13053. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  13054. zval_ptr_dtor_str(op1);
  13055. }
  13056. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13057. zval_ptr_dtor_str(op2);
  13058. }
  13059. if (result) {
  13060. goto is_equal_true;
  13061. } else {
  13062. goto is_equal_false;
  13063. }
  13064. }
  13065. }
  13066. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13067. }
  13068. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13069. {
  13070. USE_OPLINE
  13071. zval *op1, *op2;
  13072. double d1, d2;
  13073. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13074. op2 = RT_CONSTANT(opline, opline->op2);
  13075. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
  13076. /* pass */
  13077. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  13078. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13079. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  13080. is_equal_true:
  13081. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  13082. } else {
  13083. is_equal_false:
  13084. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  13085. }
  13086. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13087. d1 = (double)Z_LVAL_P(op1);
  13088. d2 = Z_DVAL_P(op2);
  13089. goto is_equal_double;
  13090. }
  13091. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  13092. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13093. d1 = Z_DVAL_P(op1);
  13094. d2 = Z_DVAL_P(op2);
  13095. is_equal_double:
  13096. if (d1 == d2) {
  13097. goto is_equal_true;
  13098. } else {
  13099. goto is_equal_false;
  13100. }
  13101. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13102. d1 = Z_DVAL_P(op1);
  13103. d2 = (double)Z_LVAL_P(op2);
  13104. goto is_equal_double;
  13105. }
  13106. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13107. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13108. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  13109. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  13110. zval_ptr_dtor_str(op1);
  13111. }
  13112. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13113. zval_ptr_dtor_str(op2);
  13114. }
  13115. if (result) {
  13116. goto is_equal_true;
  13117. } else {
  13118. goto is_equal_false;
  13119. }
  13120. }
  13121. }
  13122. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13123. }
  13124. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13125. {
  13126. USE_OPLINE
  13127. zval *op1, *op2;
  13128. double d1, d2;
  13129. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13130. op2 = RT_CONSTANT(opline, opline->op2);
  13131. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
  13132. /* pass */
  13133. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  13134. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13135. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  13136. is_equal_true:
  13137. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  13138. } else {
  13139. is_equal_false:
  13140. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  13141. }
  13142. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13143. d1 = (double)Z_LVAL_P(op1);
  13144. d2 = Z_DVAL_P(op2);
  13145. goto is_equal_double;
  13146. }
  13147. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  13148. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13149. d1 = Z_DVAL_P(op1);
  13150. d2 = Z_DVAL_P(op2);
  13151. is_equal_double:
  13152. if (d1 == d2) {
  13153. goto is_equal_true;
  13154. } else {
  13155. goto is_equal_false;
  13156. }
  13157. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13158. d1 = Z_DVAL_P(op1);
  13159. d2 = (double)Z_LVAL_P(op2);
  13160. goto is_equal_double;
  13161. }
  13162. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13163. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13164. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  13165. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  13166. zval_ptr_dtor_str(op1);
  13167. }
  13168. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13169. zval_ptr_dtor_str(op2);
  13170. }
  13171. if (result) {
  13172. goto is_equal_true;
  13173. } else {
  13174. goto is_equal_false;
  13175. }
  13176. }
  13177. }
  13178. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13179. }
  13180. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13181. {
  13182. USE_OPLINE
  13183. zval *op1, *op2;
  13184. double d1, d2;
  13185. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13186. op2 = RT_CONSTANT(opline, opline->op2);
  13187. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
  13188. /* pass */
  13189. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  13190. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13191. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  13192. is_not_equal_true:
  13193. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  13194. } else {
  13195. is_not_equal_false:
  13196. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  13197. }
  13198. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13199. d1 = (double)Z_LVAL_P(op1);
  13200. d2 = Z_DVAL_P(op2);
  13201. goto is_not_equal_double;
  13202. }
  13203. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  13204. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13205. d1 = Z_DVAL_P(op1);
  13206. d2 = Z_DVAL_P(op2);
  13207. is_not_equal_double:
  13208. if (d1 != d2) {
  13209. goto is_not_equal_true;
  13210. } else {
  13211. goto is_not_equal_false;
  13212. }
  13213. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13214. d1 = Z_DVAL_P(op1);
  13215. d2 = (double)Z_LVAL_P(op2);
  13216. goto is_not_equal_double;
  13217. }
  13218. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13219. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13220. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  13221. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  13222. zval_ptr_dtor_str(op1);
  13223. }
  13224. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13225. zval_ptr_dtor_str(op2);
  13226. }
  13227. if (!result) {
  13228. goto is_not_equal_true;
  13229. } else {
  13230. goto is_not_equal_false;
  13231. }
  13232. }
  13233. }
  13234. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13235. }
  13236. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13237. {
  13238. USE_OPLINE
  13239. zval *op1, *op2;
  13240. double d1, d2;
  13241. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13242. op2 = RT_CONSTANT(opline, opline->op2);
  13243. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
  13244. /* pass */
  13245. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  13246. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13247. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  13248. is_not_equal_true:
  13249. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  13250. } else {
  13251. is_not_equal_false:
  13252. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  13253. }
  13254. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13255. d1 = (double)Z_LVAL_P(op1);
  13256. d2 = Z_DVAL_P(op2);
  13257. goto is_not_equal_double;
  13258. }
  13259. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  13260. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13261. d1 = Z_DVAL_P(op1);
  13262. d2 = Z_DVAL_P(op2);
  13263. is_not_equal_double:
  13264. if (d1 != d2) {
  13265. goto is_not_equal_true;
  13266. } else {
  13267. goto is_not_equal_false;
  13268. }
  13269. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13270. d1 = Z_DVAL_P(op1);
  13271. d2 = (double)Z_LVAL_P(op2);
  13272. goto is_not_equal_double;
  13273. }
  13274. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13275. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13276. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  13277. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  13278. zval_ptr_dtor_str(op1);
  13279. }
  13280. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13281. zval_ptr_dtor_str(op2);
  13282. }
  13283. if (!result) {
  13284. goto is_not_equal_true;
  13285. } else {
  13286. goto is_not_equal_false;
  13287. }
  13288. }
  13289. }
  13290. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13291. }
  13292. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13293. {
  13294. USE_OPLINE
  13295. zval *op1, *op2;
  13296. double d1, d2;
  13297. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13298. op2 = RT_CONSTANT(opline, opline->op2);
  13299. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
  13300. /* pass */
  13301. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  13302. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13303. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  13304. is_not_equal_true:
  13305. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  13306. } else {
  13307. is_not_equal_false:
  13308. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  13309. }
  13310. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13311. d1 = (double)Z_LVAL_P(op1);
  13312. d2 = Z_DVAL_P(op2);
  13313. goto is_not_equal_double;
  13314. }
  13315. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  13316. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13317. d1 = Z_DVAL_P(op1);
  13318. d2 = Z_DVAL_P(op2);
  13319. is_not_equal_double:
  13320. if (d1 != d2) {
  13321. goto is_not_equal_true;
  13322. } else {
  13323. goto is_not_equal_false;
  13324. }
  13325. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13326. d1 = Z_DVAL_P(op1);
  13327. d2 = (double)Z_LVAL_P(op2);
  13328. goto is_not_equal_double;
  13329. }
  13330. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13331. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13332. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  13333. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  13334. zval_ptr_dtor_str(op1);
  13335. }
  13336. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13337. zval_ptr_dtor_str(op2);
  13338. }
  13339. if (!result) {
  13340. goto is_not_equal_true;
  13341. } else {
  13342. goto is_not_equal_false;
  13343. }
  13344. }
  13345. }
  13346. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13347. }
  13348. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13349. {
  13350. USE_OPLINE
  13351. zval *op1, *op2;
  13352. SAVE_OPLINE();
  13353. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13354. op2 = RT_CONSTANT(opline, opline->op2);
  13355. compare_function(EX_VAR(opline->result.var), op1, op2);
  13356. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13357. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13358. }
  13359. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13360. {
  13361. USE_OPLINE
  13362. zval *op1, *op2;
  13363. SAVE_OPLINE();
  13364. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13365. op2 = RT_CONSTANT(opline, opline->op2);
  13366. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  13367. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13368. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13369. }
  13370. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13371. {
  13372. USE_OPLINE
  13373. zval *container, *dim, *value;
  13374. SAVE_OPLINE();
  13375. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13376. dim = RT_CONSTANT(opline, opline->op2);
  13377. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13378. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  13379. fetch_dim_r_array:
  13380. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
  13381. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  13382. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  13383. container = Z_REFVAL_P(container);
  13384. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  13385. goto fetch_dim_r_array;
  13386. } else {
  13387. goto fetch_dim_r_slow;
  13388. }
  13389. } else {
  13390. fetch_dim_r_slow:
  13391. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  13392. dim++;
  13393. }
  13394. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  13395. }
  13396. } else {
  13397. zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  13398. }
  13399. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13400. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13401. }
  13402. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13403. {
  13404. USE_OPLINE
  13405. zval *container;
  13406. SAVE_OPLINE();
  13407. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13408. zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  13409. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13410. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13411. }
  13412. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13413. {
  13414. USE_OPLINE
  13415. zval *container;
  13416. void **cache_slot = NULL;
  13417. SAVE_OPLINE();
  13418. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13419. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  13420. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  13421. do {
  13422. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  13423. container = Z_REFVAL_P(container);
  13424. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  13425. break;
  13426. }
  13427. }
  13428. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  13429. ZVAL_UNDEFINED_OP1();
  13430. }
  13431. zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
  13432. ZVAL_NULL(EX_VAR(opline->result.var));
  13433. goto fetch_obj_r_finish;
  13434. } while (0);
  13435. }
  13436. /* here we are sure we are dealing with an object */
  13437. do {
  13438. zend_object *zobj = Z_OBJ_P(container);
  13439. zend_string *name, *tmp_name;
  13440. zval *retval;
  13441. if (IS_CONST == IS_CONST) {
  13442. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  13443. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  13444. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  13445. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  13446. retval = OBJ_PROP(zobj, prop_offset);
  13447. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  13448. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  13449. goto fetch_obj_r_copy;
  13450. } else {
  13451. fetch_obj_r_fast_copy:
  13452. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  13453. ZEND_VM_NEXT_OPCODE();
  13454. }
  13455. }
  13456. } else if (EXPECTED(zobj->properties != NULL)) {
  13457. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  13458. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  13459. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  13460. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  13461. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  13462. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  13463. (EXPECTED(p->key == name) ||
  13464. (EXPECTED(p->h == ZSTR_H(name)) &&
  13465. EXPECTED(p->key != NULL) &&
  13466. EXPECTED(zend_string_equal_content(p->key, name))))) {
  13467. retval = &p->val;
  13468. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  13469. goto fetch_obj_r_copy;
  13470. } else {
  13471. goto fetch_obj_r_fast_copy;
  13472. }
  13473. }
  13474. }
  13475. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  13476. }
  13477. retval = zend_hash_find_known_hash(zobj->properties, name);
  13478. if (EXPECTED(retval)) {
  13479. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  13480. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  13481. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  13482. goto fetch_obj_r_copy;
  13483. } else {
  13484. goto fetch_obj_r_fast_copy;
  13485. }
  13486. }
  13487. }
  13488. }
  13489. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  13490. } else {
  13491. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  13492. if (UNEXPECTED(!name)) {
  13493. ZVAL_UNDEF(EX_VAR(opline->result.var));
  13494. break;
  13495. }
  13496. }
  13497. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  13498. #if ZEND_DEBUG
  13499. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  13500. zend_verify_internal_read_property_type(zobj, name, retval);
  13501. }
  13502. #endif
  13503. if (IS_CONST != IS_CONST) {
  13504. zend_tmp_string_release(tmp_name);
  13505. }
  13506. if (retval != EX_VAR(opline->result.var)) {
  13507. fetch_obj_r_copy:
  13508. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  13509. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  13510. zend_unwrap_reference(retval);
  13511. }
  13512. } while (0);
  13513. fetch_obj_r_finish:
  13514. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13515. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13516. }
  13517. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13518. {
  13519. USE_OPLINE
  13520. zval *container;
  13521. void **cache_slot = NULL;
  13522. SAVE_OPLINE();
  13523. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13524. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  13525. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  13526. do {
  13527. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  13528. container = Z_REFVAL_P(container);
  13529. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  13530. break;
  13531. }
  13532. }
  13533. if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  13534. ZVAL_UNDEFINED_OP2();
  13535. }
  13536. ZVAL_NULL(EX_VAR(opline->result.var));
  13537. goto fetch_obj_is_finish;
  13538. } while (0);
  13539. }
  13540. /* here we are sure we are dealing with an object */
  13541. do {
  13542. zend_object *zobj = Z_OBJ_P(container);
  13543. zend_string *name, *tmp_name;
  13544. zval *retval;
  13545. if (IS_CONST == IS_CONST) {
  13546. cache_slot = CACHE_ADDR(opline->extended_value);
  13547. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  13548. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  13549. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  13550. retval = OBJ_PROP(zobj, prop_offset);
  13551. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  13552. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  13553. goto fetch_obj_is_copy;
  13554. } else {
  13555. fetch_obj_is_fast_copy:
  13556. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  13557. ZEND_VM_NEXT_OPCODE();
  13558. }
  13559. }
  13560. } else if (EXPECTED(zobj->properties != NULL)) {
  13561. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  13562. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  13563. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  13564. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  13565. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  13566. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  13567. (EXPECTED(p->key == name) ||
  13568. (EXPECTED(p->h == ZSTR_H(name)) &&
  13569. EXPECTED(p->key != NULL) &&
  13570. EXPECTED(zend_string_equal_content(p->key, name))))) {
  13571. retval = &p->val;
  13572. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  13573. goto fetch_obj_is_copy;
  13574. } else {
  13575. goto fetch_obj_is_fast_copy;
  13576. }
  13577. }
  13578. }
  13579. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  13580. }
  13581. retval = zend_hash_find_known_hash(zobj->properties, name);
  13582. if (EXPECTED(retval)) {
  13583. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  13584. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  13585. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  13586. goto fetch_obj_is_copy;
  13587. } else {
  13588. goto fetch_obj_is_fast_copy;
  13589. }
  13590. }
  13591. }
  13592. }
  13593. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  13594. } else {
  13595. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  13596. if (UNEXPECTED(!name)) {
  13597. ZVAL_UNDEF(EX_VAR(opline->result.var));
  13598. break;
  13599. }
  13600. }
  13601. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  13602. if (IS_CONST != IS_CONST) {
  13603. zend_tmp_string_release(tmp_name);
  13604. }
  13605. if (retval != EX_VAR(opline->result.var)) {
  13606. fetch_obj_is_copy:
  13607. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  13608. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  13609. zend_unwrap_reference(retval);
  13610. }
  13611. } while (0);
  13612. fetch_obj_is_finish:
  13613. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13614. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13615. }
  13616. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13617. {
  13618. USE_OPLINE
  13619. zval *op1, *op2;
  13620. zend_string *op1_str, *op2_str, *str;
  13621. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13622. op2 = RT_CONSTANT(opline, opline->op2);
  13623. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  13624. (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  13625. zend_string *op1_str = Z_STR_P(op1);
  13626. zend_string *op2_str = Z_STR_P(op2);
  13627. zend_string *str;
  13628. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  13629. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  13630. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  13631. } else {
  13632. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  13633. }
  13634. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  13635. zend_string_release_ex(op1_str, 0);
  13636. }
  13637. } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  13638. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  13639. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  13640. } else {
  13641. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  13642. }
  13643. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13644. zend_string_release_ex(op2_str, 0);
  13645. }
  13646. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  13647. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  13648. size_t len = ZSTR_LEN(op1_str);
  13649. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  13650. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  13651. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  13652. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13653. zend_string_release_ex(op2_str, 0);
  13654. }
  13655. } else {
  13656. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  13657. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  13658. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  13659. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  13660. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  13661. zend_string_release_ex(op1_str, 0);
  13662. }
  13663. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  13664. zend_string_release_ex(op2_str, 0);
  13665. }
  13666. }
  13667. ZEND_VM_NEXT_OPCODE();
  13668. }
  13669. SAVE_OPLINE();
  13670. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13671. op1_str = Z_STR_P(op1);
  13672. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13673. op1_str = zend_string_copy(Z_STR_P(op1));
  13674. } else {
  13675. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  13676. ZVAL_UNDEFINED_OP1();
  13677. }
  13678. op1_str = zval_get_string_func(op1);
  13679. }
  13680. if (IS_CONST == IS_CONST) {
  13681. op2_str = Z_STR_P(op2);
  13682. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13683. op2_str = zend_string_copy(Z_STR_P(op2));
  13684. } else {
  13685. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  13686. ZVAL_UNDEFINED_OP2();
  13687. }
  13688. op2_str = zval_get_string_func(op2);
  13689. }
  13690. do {
  13691. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13692. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  13693. if (IS_CONST == IS_CONST) {
  13694. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  13695. GC_ADDREF(op2_str);
  13696. }
  13697. }
  13698. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  13699. zend_string_release_ex(op1_str, 0);
  13700. break;
  13701. }
  13702. }
  13703. if (IS_CONST != IS_CONST) {
  13704. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  13705. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13706. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  13707. GC_ADDREF(op1_str);
  13708. }
  13709. }
  13710. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  13711. zend_string_release_ex(op2_str, 0);
  13712. break;
  13713. }
  13714. }
  13715. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  13716. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  13717. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  13718. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  13719. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13720. zend_string_release_ex(op1_str, 0);
  13721. }
  13722. if (IS_CONST != IS_CONST) {
  13723. zend_string_release_ex(op2_str, 0);
  13724. }
  13725. } while (0);
  13726. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13727. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13728. }
  13729. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13730. {
  13731. USE_OPLINE
  13732. zval *function_name;
  13733. zval *object;
  13734. zend_function *fbc;
  13735. zend_class_entry *called_scope;
  13736. zend_object *obj;
  13737. zend_execute_data *call;
  13738. uint32_t call_info;
  13739. SAVE_OPLINE();
  13740. object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13741. if (IS_CONST != IS_CONST) {
  13742. function_name = RT_CONSTANT(opline, opline->op2);
  13743. }
  13744. if (IS_CONST != IS_CONST &&
  13745. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  13746. do {
  13747. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  13748. function_name = Z_REFVAL_P(function_name);
  13749. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  13750. break;
  13751. }
  13752. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  13753. ZVAL_UNDEFINED_OP2();
  13754. if (UNEXPECTED(EG(exception) != NULL)) {
  13755. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13756. HANDLE_EXCEPTION();
  13757. }
  13758. }
  13759. zend_throw_error(NULL, "Method name must be a string");
  13760. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13761. HANDLE_EXCEPTION();
  13762. } while (0);
  13763. }
  13764. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  13765. obj = Z_OBJ_P(object);
  13766. } else {
  13767. do {
  13768. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  13769. obj = Z_OBJ_P(object);
  13770. } else {
  13771. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  13772. zend_reference *ref = Z_REF_P(object);
  13773. object = &ref->val;
  13774. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  13775. obj = Z_OBJ_P(object);
  13776. if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
  13777. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  13778. efree_size(ref, sizeof(zend_reference));
  13779. } else {
  13780. Z_ADDREF_P(object);
  13781. }
  13782. }
  13783. break;
  13784. }
  13785. }
  13786. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  13787. object = ZVAL_UNDEFINED_OP1();
  13788. if (UNEXPECTED(EG(exception) != NULL)) {
  13789. if (IS_CONST != IS_CONST) {
  13790. }
  13791. HANDLE_EXCEPTION();
  13792. }
  13793. }
  13794. if (IS_CONST == IS_CONST) {
  13795. function_name = RT_CONSTANT(opline, opline->op2);
  13796. }
  13797. zend_invalid_method_call(object, function_name);
  13798. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13799. HANDLE_EXCEPTION();
  13800. }
  13801. } while (0);
  13802. }
  13803. called_scope = obj->ce;
  13804. if (IS_CONST == IS_CONST &&
  13805. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  13806. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  13807. } else {
  13808. zend_object *orig_obj = obj;
  13809. if (IS_CONST == IS_CONST) {
  13810. function_name = RT_CONSTANT(opline, opline->op2);
  13811. }
  13812. /* First, locate the function. */
  13813. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  13814. if (UNEXPECTED(fbc == NULL)) {
  13815. if (EXPECTED(!EG(exception))) {
  13816. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  13817. }
  13818. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  13819. zend_objects_store_del(orig_obj);
  13820. }
  13821. HANDLE_EXCEPTION();
  13822. }
  13823. if (IS_CONST == IS_CONST &&
  13824. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  13825. EXPECTED(obj == orig_obj)) {
  13826. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  13827. }
  13828. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  13829. GC_ADDREF(obj); /* For $this pointer */
  13830. if (GC_DELREF(orig_obj) == 0) {
  13831. zend_objects_store_del(orig_obj);
  13832. }
  13833. }
  13834. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  13835. init_func_run_time_cache(&fbc->op_array);
  13836. }
  13837. }
  13838. if (IS_CONST != IS_CONST) {
  13839. }
  13840. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  13841. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  13842. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  13843. zend_objects_store_del(obj);
  13844. if (UNEXPECTED(EG(exception))) {
  13845. HANDLE_EXCEPTION();
  13846. }
  13847. }
  13848. /* call static method */
  13849. obj = (zend_object*)called_scope;
  13850. call_info = ZEND_CALL_NESTED_FUNCTION;
  13851. } else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  13852. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  13853. GC_ADDREF(obj); /* For $this pointer */
  13854. }
  13855. /* CV may be changed indirectly (e.g. when it's a reference) */
  13856. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  13857. }
  13858. call = zend_vm_stack_push_call_frame(call_info,
  13859. fbc, opline->extended_value, obj);
  13860. call->prev_execute_data = EX(call);
  13861. EX(call) = call;
  13862. ZEND_VM_NEXT_OPCODE();
  13863. }
  13864. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13865. {
  13866. USE_OPLINE
  13867. zval *value, *arg;
  13868. if (IS_CONST == IS_CONST) {
  13869. SAVE_OPLINE();
  13870. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  13871. uint32_t arg_num;
  13872. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  13873. if (UNEXPECTED(!arg)) {
  13874. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13875. HANDLE_EXCEPTION();
  13876. }
  13877. } else {
  13878. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  13879. }
  13880. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13881. ZVAL_COPY_VALUE(arg, value);
  13882. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13883. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  13884. Z_ADDREF_P(arg);
  13885. }
  13886. }
  13887. ZEND_VM_NEXT_OPCODE();
  13888. }
  13889. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13890. {
  13891. USE_OPLINE
  13892. zval *op1, *op2;
  13893. double d1, d2;
  13894. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13895. op2 = RT_CONSTANT(opline, opline->op2);
  13896. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  13897. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13898. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  13899. case_true:
  13900. ZEND_VM_SMART_BRANCH_TRUE();
  13901. } else {
  13902. case_false:
  13903. ZEND_VM_SMART_BRANCH_FALSE();
  13904. }
  13905. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13906. d1 = (double)Z_LVAL_P(op1);
  13907. d2 = Z_DVAL_P(op2);
  13908. goto case_double;
  13909. }
  13910. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  13911. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13912. d1 = Z_DVAL_P(op1);
  13913. d2 = Z_DVAL_P(op2);
  13914. case_double:
  13915. if (d1 == d2) {
  13916. goto case_true;
  13917. } else {
  13918. goto case_false;
  13919. }
  13920. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13921. d1 = Z_DVAL_P(op1);
  13922. d2 = (double)Z_LVAL_P(op2);
  13923. goto case_double;
  13924. }
  13925. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13926. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13927. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  13928. if (result) {
  13929. goto case_true;
  13930. } else {
  13931. goto case_false;
  13932. }
  13933. }
  13934. }
  13935. ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13936. }
  13937. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13938. {
  13939. USE_OPLINE
  13940. zval *container;
  13941. bool result;
  13942. zend_ulong hval;
  13943. zval *offset;
  13944. SAVE_OPLINE();
  13945. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  13946. offset = RT_CONSTANT(opline, opline->op2);
  13947. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  13948. HashTable *ht;
  13949. zval *value;
  13950. zend_string *str;
  13951. isset_dim_obj_array:
  13952. ht = Z_ARRVAL_P(container);
  13953. isset_again:
  13954. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  13955. str = Z_STR_P(offset);
  13956. if (IS_CONST != IS_CONST) {
  13957. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  13958. goto num_index_prop;
  13959. }
  13960. }
  13961. value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
  13962. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  13963. hval = Z_LVAL_P(offset);
  13964. num_index_prop:
  13965. value = zend_hash_index_find(ht, hval);
  13966. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  13967. offset = Z_REFVAL_P(offset);
  13968. goto isset_again;
  13969. } else {
  13970. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  13971. if (UNEXPECTED(EG(exception))) {
  13972. result = 0;
  13973. goto isset_dim_obj_exit;
  13974. }
  13975. }
  13976. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  13977. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  13978. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  13979. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  13980. if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
  13981. /* avoid exception check */
  13982. ZEND_VM_SMART_BRANCH(result, 0);
  13983. }
  13984. } else {
  13985. result = (value == NULL || !i_zend_is_true(value));
  13986. }
  13987. goto isset_dim_obj_exit;
  13988. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  13989. container = Z_REFVAL_P(container);
  13990. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  13991. goto isset_dim_obj_array;
  13992. }
  13993. }
  13994. if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  13995. offset++;
  13996. }
  13997. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  13998. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  13999. } else {
  14000. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  14001. }
  14002. isset_dim_obj_exit:
  14003. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14004. ZEND_VM_SMART_BRANCH(result, 1);
  14005. }
  14006. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14007. {
  14008. USE_OPLINE
  14009. zval *container;
  14010. int result;
  14011. zval *offset;
  14012. zend_string *name, *tmp_name;
  14013. SAVE_OPLINE();
  14014. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14015. offset = RT_CONSTANT(opline, opline->op2);
  14016. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  14017. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  14018. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  14019. container = Z_REFVAL_P(container);
  14020. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  14021. result = (opline->extended_value & ZEND_ISEMPTY);
  14022. goto isset_object_finish;
  14023. }
  14024. } else {
  14025. result = (opline->extended_value & ZEND_ISEMPTY);
  14026. goto isset_object_finish;
  14027. }
  14028. }
  14029. if (IS_CONST == IS_CONST) {
  14030. name = Z_STR_P(offset);
  14031. } else {
  14032. name = zval_try_get_tmp_string(offset, &tmp_name);
  14033. if (UNEXPECTED(!name)) {
  14034. result = 0;
  14035. goto isset_object_finish;
  14036. }
  14037. }
  14038. result =
  14039. (opline->extended_value & ZEND_ISEMPTY) ^
  14040. 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));
  14041. if (IS_CONST != IS_CONST) {
  14042. zend_tmp_string_release(tmp_name);
  14043. }
  14044. isset_object_finish:
  14045. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14046. ZEND_VM_SMART_BRANCH(result, 1);
  14047. }
  14048. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14049. {
  14050. USE_OPLINE
  14051. zval *key, *subject;
  14052. HashTable *ht;
  14053. bool result;
  14054. SAVE_OPLINE();
  14055. key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14056. subject = RT_CONSTANT(opline, opline->op2);
  14057. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  14058. array_key_exists_array:
  14059. ht = Z_ARRVAL_P(subject);
  14060. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  14061. } else {
  14062. if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  14063. subject = Z_REFVAL_P(subject);
  14064. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  14065. goto array_key_exists_array;
  14066. }
  14067. }
  14068. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  14069. result = 0;
  14070. }
  14071. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14072. ZEND_VM_SMART_BRANCH(result, 1);
  14073. }
  14074. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  14075. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14076. {
  14077. USE_OPLINE
  14078. zval *expr;
  14079. bool result;
  14080. SAVE_OPLINE();
  14081. expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14082. try_instanceof:
  14083. if (Z_TYPE_P(expr) == IS_OBJECT) {
  14084. zend_class_entry *ce;
  14085. if (IS_CONST == IS_CONST) {
  14086. ce = CACHED_PTR(opline->extended_value);
  14087. if (UNEXPECTED(ce == NULL)) {
  14088. 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);
  14089. if (EXPECTED(ce)) {
  14090. CACHE_PTR(opline->extended_value, ce);
  14091. }
  14092. }
  14093. } else if (IS_CONST == IS_UNUSED) {
  14094. ce = zend_fetch_class(NULL, opline->op2.num);
  14095. if (UNEXPECTED(ce == NULL)) {
  14096. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14097. ZVAL_UNDEF(EX_VAR(opline->result.var));
  14098. HANDLE_EXCEPTION();
  14099. }
  14100. } else {
  14101. ce = Z_CE_P(EX_VAR(opline->op2.var));
  14102. }
  14103. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  14104. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  14105. expr = Z_REFVAL_P(expr);
  14106. goto try_instanceof;
  14107. } else {
  14108. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  14109. ZVAL_UNDEFINED_OP1();
  14110. }
  14111. result = 0;
  14112. }
  14113. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14114. ZEND_VM_SMART_BRANCH(result, 1);
  14115. }
  14116. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14117. {
  14118. USE_OPLINE
  14119. zval *container, *dim, *value;
  14120. zend_long offset;
  14121. HashTable *ht;
  14122. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14123. dim = RT_CONSTANT(opline, opline->op2);
  14124. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  14125. fetch_dim_r_index_array:
  14126. if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
  14127. offset = Z_LVAL_P(dim);
  14128. } else {
  14129. SAVE_OPLINE();
  14130. zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  14131. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14132. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14133. }
  14134. ht = Z_ARRVAL_P(container);
  14135. ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
  14136. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  14137. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14138. SAVE_OPLINE();
  14139. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14140. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14141. } else {
  14142. ZEND_VM_NEXT_OPCODE();
  14143. }
  14144. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  14145. container = Z_REFVAL_P(container);
  14146. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  14147. goto fetch_dim_r_index_array;
  14148. } else {
  14149. goto fetch_dim_r_index_slow;
  14150. }
  14151. } else {
  14152. fetch_dim_r_index_slow:
  14153. SAVE_OPLINE();
  14154. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  14155. dim++;
  14156. }
  14157. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  14158. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14159. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14160. }
  14161. fetch_dim_r_index_undef:
  14162. ZVAL_NULL(EX_VAR(opline->result.var));
  14163. SAVE_OPLINE();
  14164. zend_undefined_offset(offset);
  14165. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14166. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14167. }
  14168. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14169. {
  14170. USE_OPLINE
  14171. zval *container, *dim, *value;
  14172. zend_long offset;
  14173. HashTable *ht;
  14174. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14175. dim = EX_VAR(opline->op2.var);
  14176. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  14177. fetch_dim_r_index_array:
  14178. if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
  14179. offset = Z_LVAL_P(dim);
  14180. } else {
  14181. SAVE_OPLINE();
  14182. zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);
  14183. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14184. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14185. }
  14186. ht = Z_ARRVAL_P(container);
  14187. ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
  14188. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  14189. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14190. SAVE_OPLINE();
  14191. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14192. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14193. } else {
  14194. ZEND_VM_NEXT_OPCODE();
  14195. }
  14196. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  14197. container = Z_REFVAL_P(container);
  14198. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  14199. goto fetch_dim_r_index_array;
  14200. } else {
  14201. goto fetch_dim_r_index_slow;
  14202. }
  14203. } else {
  14204. fetch_dim_r_index_slow:
  14205. SAVE_OPLINE();
  14206. if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  14207. dim++;
  14208. }
  14209. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  14210. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14211. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14212. }
  14213. fetch_dim_r_index_undef:
  14214. ZVAL_NULL(EX_VAR(opline->result.var));
  14215. SAVE_OPLINE();
  14216. zend_undefined_offset(offset);
  14217. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14218. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14219. }
  14220. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14221. {
  14222. USE_OPLINE
  14223. zval *op1, *op2;
  14224. SAVE_OPLINE();
  14225. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14226. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14227. div_function(EX_VAR(opline->result.var), op1, op2);
  14228. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14229. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14230. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14231. }
  14232. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14233. {
  14234. USE_OPLINE
  14235. zval *op1, *op2;
  14236. SAVE_OPLINE();
  14237. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14238. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14239. pow_function(EX_VAR(opline->result.var), op1, op2);
  14240. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14241. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14242. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14243. }
  14244. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14245. {
  14246. USE_OPLINE
  14247. zval *op1, *op2;
  14248. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14249. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14250. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  14251. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  14252. zend_string *op1_str = Z_STR_P(op1);
  14253. zend_string *op2_str = Z_STR_P(op2);
  14254. zend_string *str;
  14255. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  14256. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  14257. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  14258. } else {
  14259. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  14260. }
  14261. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14262. zend_string_release_ex(op1_str, 0);
  14263. }
  14264. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  14265. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  14266. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  14267. } else {
  14268. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  14269. }
  14270. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14271. zend_string_release_ex(op2_str, 0);
  14272. }
  14273. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  14274. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  14275. size_t len = ZSTR_LEN(op1_str);
  14276. if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
  14277. zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
  14278. }
  14279. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  14280. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  14281. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  14282. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14283. zend_string_release_ex(op2_str, 0);
  14284. }
  14285. } else {
  14286. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  14287. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  14288. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  14289. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  14290. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14291. zend_string_release_ex(op1_str, 0);
  14292. }
  14293. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14294. zend_string_release_ex(op2_str, 0);
  14295. }
  14296. }
  14297. ZEND_VM_NEXT_OPCODE();
  14298. } else {
  14299. SAVE_OPLINE();
  14300. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  14301. op1 = ZVAL_UNDEFINED_OP1();
  14302. }
  14303. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  14304. op2 = ZVAL_UNDEFINED_OP2();
  14305. }
  14306. concat_function(EX_VAR(opline->result.var), op1, op2);
  14307. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14308. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14309. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14310. }
  14311. }
  14312. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14313. {
  14314. USE_OPLINE
  14315. zval *op1, *op2;
  14316. double d1, d2;
  14317. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14318. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14319. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14320. /* pass */
  14321. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  14322. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14323. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  14324. is_equal_true:
  14325. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  14326. } else {
  14327. is_equal_false:
  14328. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  14329. }
  14330. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14331. d1 = (double)Z_LVAL_P(op1);
  14332. d2 = Z_DVAL_P(op2);
  14333. goto is_equal_double;
  14334. }
  14335. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  14336. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14337. d1 = Z_DVAL_P(op1);
  14338. d2 = Z_DVAL_P(op2);
  14339. is_equal_double:
  14340. if (d1 == d2) {
  14341. goto is_equal_true;
  14342. } else {
  14343. goto is_equal_false;
  14344. }
  14345. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14346. d1 = Z_DVAL_P(op1);
  14347. d2 = (double)Z_LVAL_P(op2);
  14348. goto is_equal_double;
  14349. }
  14350. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  14351. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  14352. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  14353. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14354. zval_ptr_dtor_str(op1);
  14355. }
  14356. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14357. zval_ptr_dtor_str(op2);
  14358. }
  14359. if (result) {
  14360. goto is_equal_true;
  14361. } else {
  14362. goto is_equal_false;
  14363. }
  14364. }
  14365. }
  14366. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14367. }
  14368. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14369. {
  14370. USE_OPLINE
  14371. zval *op1, *op2;
  14372. double d1, d2;
  14373. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14374. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14375. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14376. /* pass */
  14377. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  14378. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14379. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  14380. is_equal_true:
  14381. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  14382. } else {
  14383. is_equal_false:
  14384. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  14385. }
  14386. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14387. d1 = (double)Z_LVAL_P(op1);
  14388. d2 = Z_DVAL_P(op2);
  14389. goto is_equal_double;
  14390. }
  14391. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  14392. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14393. d1 = Z_DVAL_P(op1);
  14394. d2 = Z_DVAL_P(op2);
  14395. is_equal_double:
  14396. if (d1 == d2) {
  14397. goto is_equal_true;
  14398. } else {
  14399. goto is_equal_false;
  14400. }
  14401. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14402. d1 = Z_DVAL_P(op1);
  14403. d2 = (double)Z_LVAL_P(op2);
  14404. goto is_equal_double;
  14405. }
  14406. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  14407. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  14408. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  14409. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14410. zval_ptr_dtor_str(op1);
  14411. }
  14412. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14413. zval_ptr_dtor_str(op2);
  14414. }
  14415. if (result) {
  14416. goto is_equal_true;
  14417. } else {
  14418. goto is_equal_false;
  14419. }
  14420. }
  14421. }
  14422. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14423. }
  14424. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14425. {
  14426. USE_OPLINE
  14427. zval *op1, *op2;
  14428. double d1, d2;
  14429. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14430. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14431. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14432. /* pass */
  14433. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  14434. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14435. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  14436. is_equal_true:
  14437. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  14438. } else {
  14439. is_equal_false:
  14440. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  14441. }
  14442. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14443. d1 = (double)Z_LVAL_P(op1);
  14444. d2 = Z_DVAL_P(op2);
  14445. goto is_equal_double;
  14446. }
  14447. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  14448. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14449. d1 = Z_DVAL_P(op1);
  14450. d2 = Z_DVAL_P(op2);
  14451. is_equal_double:
  14452. if (d1 == d2) {
  14453. goto is_equal_true;
  14454. } else {
  14455. goto is_equal_false;
  14456. }
  14457. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14458. d1 = Z_DVAL_P(op1);
  14459. d2 = (double)Z_LVAL_P(op2);
  14460. goto is_equal_double;
  14461. }
  14462. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  14463. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  14464. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  14465. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14466. zval_ptr_dtor_str(op1);
  14467. }
  14468. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14469. zval_ptr_dtor_str(op2);
  14470. }
  14471. if (result) {
  14472. goto is_equal_true;
  14473. } else {
  14474. goto is_equal_false;
  14475. }
  14476. }
  14477. }
  14478. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14479. }
  14480. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14481. {
  14482. USE_OPLINE
  14483. zval *op1, *op2;
  14484. double d1, d2;
  14485. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14486. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14487. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14488. /* pass */
  14489. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  14490. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14491. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  14492. is_not_equal_true:
  14493. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  14494. } else {
  14495. is_not_equal_false:
  14496. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  14497. }
  14498. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14499. d1 = (double)Z_LVAL_P(op1);
  14500. d2 = Z_DVAL_P(op2);
  14501. goto is_not_equal_double;
  14502. }
  14503. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  14504. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14505. d1 = Z_DVAL_P(op1);
  14506. d2 = Z_DVAL_P(op2);
  14507. is_not_equal_double:
  14508. if (d1 != d2) {
  14509. goto is_not_equal_true;
  14510. } else {
  14511. goto is_not_equal_false;
  14512. }
  14513. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14514. d1 = Z_DVAL_P(op1);
  14515. d2 = (double)Z_LVAL_P(op2);
  14516. goto is_not_equal_double;
  14517. }
  14518. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  14519. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  14520. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  14521. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14522. zval_ptr_dtor_str(op1);
  14523. }
  14524. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14525. zval_ptr_dtor_str(op2);
  14526. }
  14527. if (!result) {
  14528. goto is_not_equal_true;
  14529. } else {
  14530. goto is_not_equal_false;
  14531. }
  14532. }
  14533. }
  14534. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14535. }
  14536. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14537. {
  14538. USE_OPLINE
  14539. zval *op1, *op2;
  14540. double d1, d2;
  14541. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14542. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14543. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14544. /* pass */
  14545. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  14546. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14547. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  14548. is_not_equal_true:
  14549. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  14550. } else {
  14551. is_not_equal_false:
  14552. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  14553. }
  14554. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14555. d1 = (double)Z_LVAL_P(op1);
  14556. d2 = Z_DVAL_P(op2);
  14557. goto is_not_equal_double;
  14558. }
  14559. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  14560. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14561. d1 = Z_DVAL_P(op1);
  14562. d2 = Z_DVAL_P(op2);
  14563. is_not_equal_double:
  14564. if (d1 != d2) {
  14565. goto is_not_equal_true;
  14566. } else {
  14567. goto is_not_equal_false;
  14568. }
  14569. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14570. d1 = Z_DVAL_P(op1);
  14571. d2 = (double)Z_LVAL_P(op2);
  14572. goto is_not_equal_double;
  14573. }
  14574. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  14575. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  14576. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  14577. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14578. zval_ptr_dtor_str(op1);
  14579. }
  14580. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14581. zval_ptr_dtor_str(op2);
  14582. }
  14583. if (!result) {
  14584. goto is_not_equal_true;
  14585. } else {
  14586. goto is_not_equal_false;
  14587. }
  14588. }
  14589. }
  14590. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14591. }
  14592. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14593. {
  14594. USE_OPLINE
  14595. zval *op1, *op2;
  14596. double d1, d2;
  14597. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14598. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14599. if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14600. /* pass */
  14601. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  14602. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14603. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  14604. is_not_equal_true:
  14605. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  14606. } else {
  14607. is_not_equal_false:
  14608. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  14609. }
  14610. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14611. d1 = (double)Z_LVAL_P(op1);
  14612. d2 = Z_DVAL_P(op2);
  14613. goto is_not_equal_double;
  14614. }
  14615. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  14616. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  14617. d1 = Z_DVAL_P(op1);
  14618. d2 = Z_DVAL_P(op2);
  14619. is_not_equal_double:
  14620. if (d1 != d2) {
  14621. goto is_not_equal_true;
  14622. } else {
  14623. goto is_not_equal_false;
  14624. }
  14625. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  14626. d1 = Z_DVAL_P(op1);
  14627. d2 = (double)Z_LVAL_P(op2);
  14628. goto is_not_equal_double;
  14629. }
  14630. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  14631. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  14632. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  14633. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14634. zval_ptr_dtor_str(op1);
  14635. }
  14636. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14637. zval_ptr_dtor_str(op2);
  14638. }
  14639. if (!result) {
  14640. goto is_not_equal_true;
  14641. } else {
  14642. goto is_not_equal_false;
  14643. }
  14644. }
  14645. }
  14646. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14647. }
  14648. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14649. {
  14650. USE_OPLINE
  14651. zval *op1, *op2;
  14652. SAVE_OPLINE();
  14653. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14654. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14655. compare_function(EX_VAR(opline->result.var), op1, op2);
  14656. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14657. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14658. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14659. }
  14660. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14661. {
  14662. USE_OPLINE
  14663. zval *op1, *op2;
  14664. SAVE_OPLINE();
  14665. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14666. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14667. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  14668. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14669. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14670. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14671. }
  14672. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14673. {
  14674. USE_OPLINE
  14675. zval *container, *dim, *value;
  14676. SAVE_OPLINE();
  14677. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14678. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14679. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  14680. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  14681. fetch_dim_r_array:
  14682. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
  14683. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  14684. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  14685. container = Z_REFVAL_P(container);
  14686. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  14687. goto fetch_dim_r_array;
  14688. } else {
  14689. goto fetch_dim_r_slow;
  14690. }
  14691. } else {
  14692. fetch_dim_r_slow:
  14693. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  14694. dim++;
  14695. }
  14696. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  14697. }
  14698. } else {
  14699. zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  14700. }
  14701. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14702. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14703. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14704. }
  14705. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14706. {
  14707. USE_OPLINE
  14708. zval *container;
  14709. SAVE_OPLINE();
  14710. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14711. 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);
  14712. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14713. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14714. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14715. }
  14716. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14717. {
  14718. USE_OPLINE
  14719. zval *container;
  14720. void **cache_slot = NULL;
  14721. SAVE_OPLINE();
  14722. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14723. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  14724. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  14725. do {
  14726. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  14727. container = Z_REFVAL_P(container);
  14728. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  14729. break;
  14730. }
  14731. }
  14732. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  14733. ZVAL_UNDEFINED_OP1();
  14734. }
  14735. zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  14736. ZVAL_NULL(EX_VAR(opline->result.var));
  14737. goto fetch_obj_r_finish;
  14738. } while (0);
  14739. }
  14740. /* here we are sure we are dealing with an object */
  14741. do {
  14742. zend_object *zobj = Z_OBJ_P(container);
  14743. zend_string *name, *tmp_name;
  14744. zval *retval;
  14745. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14746. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  14747. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  14748. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  14749. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  14750. retval = OBJ_PROP(zobj, prop_offset);
  14751. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  14752. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  14753. goto fetch_obj_r_copy;
  14754. } else {
  14755. fetch_obj_r_fast_copy:
  14756. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  14757. ZEND_VM_NEXT_OPCODE();
  14758. }
  14759. }
  14760. } else if (EXPECTED(zobj->properties != NULL)) {
  14761. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  14762. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  14763. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  14764. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  14765. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  14766. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  14767. (EXPECTED(p->key == name) ||
  14768. (EXPECTED(p->h == ZSTR_H(name)) &&
  14769. EXPECTED(p->key != NULL) &&
  14770. EXPECTED(zend_string_equal_content(p->key, name))))) {
  14771. retval = &p->val;
  14772. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  14773. goto fetch_obj_r_copy;
  14774. } else {
  14775. goto fetch_obj_r_fast_copy;
  14776. }
  14777. }
  14778. }
  14779. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  14780. }
  14781. retval = zend_hash_find_known_hash(zobj->properties, name);
  14782. if (EXPECTED(retval)) {
  14783. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  14784. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  14785. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  14786. goto fetch_obj_r_copy;
  14787. } else {
  14788. goto fetch_obj_r_fast_copy;
  14789. }
  14790. }
  14791. }
  14792. }
  14793. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  14794. } else {
  14795. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  14796. if (UNEXPECTED(!name)) {
  14797. ZVAL_UNDEF(EX_VAR(opline->result.var));
  14798. break;
  14799. }
  14800. }
  14801. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  14802. #if ZEND_DEBUG
  14803. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  14804. zend_verify_internal_read_property_type(zobj, name, retval);
  14805. }
  14806. #endif
  14807. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  14808. zend_tmp_string_release(tmp_name);
  14809. }
  14810. if (retval != EX_VAR(opline->result.var)) {
  14811. fetch_obj_r_copy:
  14812. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  14813. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  14814. zend_unwrap_reference(retval);
  14815. }
  14816. } while (0);
  14817. fetch_obj_r_finish:
  14818. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14819. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14820. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14821. }
  14822. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14823. {
  14824. USE_OPLINE
  14825. zval *container;
  14826. void **cache_slot = NULL;
  14827. SAVE_OPLINE();
  14828. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14829. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  14830. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  14831. do {
  14832. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  14833. container = Z_REFVAL_P(container);
  14834. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  14835. break;
  14836. }
  14837. }
  14838. if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  14839. ZVAL_UNDEFINED_OP2();
  14840. }
  14841. ZVAL_NULL(EX_VAR(opline->result.var));
  14842. goto fetch_obj_is_finish;
  14843. } while (0);
  14844. }
  14845. /* here we are sure we are dealing with an object */
  14846. do {
  14847. zend_object *zobj = Z_OBJ_P(container);
  14848. zend_string *name, *tmp_name;
  14849. zval *retval;
  14850. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14851. cache_slot = CACHE_ADDR(opline->extended_value);
  14852. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  14853. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  14854. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  14855. retval = OBJ_PROP(zobj, prop_offset);
  14856. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  14857. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  14858. goto fetch_obj_is_copy;
  14859. } else {
  14860. fetch_obj_is_fast_copy:
  14861. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  14862. ZEND_VM_NEXT_OPCODE();
  14863. }
  14864. }
  14865. } else if (EXPECTED(zobj->properties != NULL)) {
  14866. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  14867. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  14868. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  14869. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  14870. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  14871. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  14872. (EXPECTED(p->key == name) ||
  14873. (EXPECTED(p->h == ZSTR_H(name)) &&
  14874. EXPECTED(p->key != NULL) &&
  14875. EXPECTED(zend_string_equal_content(p->key, name))))) {
  14876. retval = &p->val;
  14877. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  14878. goto fetch_obj_is_copy;
  14879. } else {
  14880. goto fetch_obj_is_fast_copy;
  14881. }
  14882. }
  14883. }
  14884. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  14885. }
  14886. retval = zend_hash_find_known_hash(zobj->properties, name);
  14887. if (EXPECTED(retval)) {
  14888. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  14889. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  14890. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  14891. goto fetch_obj_is_copy;
  14892. } else {
  14893. goto fetch_obj_is_fast_copy;
  14894. }
  14895. }
  14896. }
  14897. }
  14898. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  14899. } else {
  14900. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  14901. if (UNEXPECTED(!name)) {
  14902. ZVAL_UNDEF(EX_VAR(opline->result.var));
  14903. break;
  14904. }
  14905. }
  14906. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  14907. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  14908. zend_tmp_string_release(tmp_name);
  14909. }
  14910. if (retval != EX_VAR(opline->result.var)) {
  14911. fetch_obj_is_copy:
  14912. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  14913. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  14914. zend_unwrap_reference(retval);
  14915. }
  14916. } while (0);
  14917. fetch_obj_is_finish:
  14918. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  14919. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14920. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14921. }
  14922. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14923. {
  14924. USE_OPLINE
  14925. zval *op1, *op2;
  14926. zend_string *op1_str, *op2_str, *str;
  14927. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  14928. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  14929. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  14930. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  14931. zend_string *op1_str = Z_STR_P(op1);
  14932. zend_string *op2_str = Z_STR_P(op2);
  14933. zend_string *str;
  14934. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  14935. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  14936. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  14937. } else {
  14938. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  14939. }
  14940. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14941. zend_string_release_ex(op1_str, 0);
  14942. }
  14943. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  14944. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  14945. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  14946. } else {
  14947. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  14948. }
  14949. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14950. zend_string_release_ex(op2_str, 0);
  14951. }
  14952. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  14953. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  14954. size_t len = ZSTR_LEN(op1_str);
  14955. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  14956. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  14957. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  14958. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14959. zend_string_release_ex(op2_str, 0);
  14960. }
  14961. } else {
  14962. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  14963. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  14964. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  14965. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  14966. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14967. zend_string_release_ex(op1_str, 0);
  14968. }
  14969. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  14970. zend_string_release_ex(op2_str, 0);
  14971. }
  14972. }
  14973. ZEND_VM_NEXT_OPCODE();
  14974. }
  14975. SAVE_OPLINE();
  14976. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14977. op1_str = Z_STR_P(op1);
  14978. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  14979. op1_str = zend_string_copy(Z_STR_P(op1));
  14980. } else {
  14981. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  14982. ZVAL_UNDEFINED_OP1();
  14983. }
  14984. op1_str = zval_get_string_func(op1);
  14985. }
  14986. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14987. op2_str = Z_STR_P(op2);
  14988. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  14989. op2_str = zend_string_copy(Z_STR_P(op2));
  14990. } else {
  14991. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  14992. ZVAL_UNDEFINED_OP2();
  14993. }
  14994. op2_str = zval_get_string_func(op2);
  14995. }
  14996. do {
  14997. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  14998. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  14999. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15000. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  15001. GC_ADDREF(op2_str);
  15002. }
  15003. }
  15004. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  15005. zend_string_release_ex(op1_str, 0);
  15006. break;
  15007. }
  15008. }
  15009. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15010. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  15011. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15012. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  15013. GC_ADDREF(op1_str);
  15014. }
  15015. }
  15016. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  15017. zend_string_release_ex(op2_str, 0);
  15018. break;
  15019. }
  15020. }
  15021. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  15022. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  15023. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  15024. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  15025. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15026. zend_string_release_ex(op1_str, 0);
  15027. }
  15028. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15029. zend_string_release_ex(op2_str, 0);
  15030. }
  15031. } while (0);
  15032. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15033. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15034. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15035. }
  15036. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15037. {
  15038. USE_OPLINE
  15039. zval *function_name;
  15040. zval *object;
  15041. zend_function *fbc;
  15042. zend_class_entry *called_scope;
  15043. zend_object *obj;
  15044. zend_execute_data *call;
  15045. uint32_t call_info;
  15046. SAVE_OPLINE();
  15047. object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15048. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15049. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  15050. }
  15051. if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
  15052. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  15053. do {
  15054. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  15055. function_name = Z_REFVAL_P(function_name);
  15056. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  15057. break;
  15058. }
  15059. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  15060. ZVAL_UNDEFINED_OP2();
  15061. if (UNEXPECTED(EG(exception) != NULL)) {
  15062. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15063. HANDLE_EXCEPTION();
  15064. }
  15065. }
  15066. zend_throw_error(NULL, "Method name must be a string");
  15067. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15068. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15069. HANDLE_EXCEPTION();
  15070. } while (0);
  15071. }
  15072. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  15073. obj = Z_OBJ_P(object);
  15074. } else {
  15075. do {
  15076. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  15077. obj = Z_OBJ_P(object);
  15078. } else {
  15079. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  15080. zend_reference *ref = Z_REF_P(object);
  15081. object = &ref->val;
  15082. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  15083. obj = Z_OBJ_P(object);
  15084. if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
  15085. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  15086. efree_size(ref, sizeof(zend_reference));
  15087. } else {
  15088. Z_ADDREF_P(object);
  15089. }
  15090. }
  15091. break;
  15092. }
  15093. }
  15094. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  15095. object = ZVAL_UNDEFINED_OP1();
  15096. if (UNEXPECTED(EG(exception) != NULL)) {
  15097. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15098. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15099. }
  15100. HANDLE_EXCEPTION();
  15101. }
  15102. }
  15103. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15104. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  15105. }
  15106. zend_invalid_method_call(object, function_name);
  15107. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15108. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15109. HANDLE_EXCEPTION();
  15110. }
  15111. } while (0);
  15112. }
  15113. called_scope = obj->ce;
  15114. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  15115. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  15116. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  15117. } else {
  15118. zend_object *orig_obj = obj;
  15119. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15120. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  15121. }
  15122. /* First, locate the function. */
  15123. 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));
  15124. if (UNEXPECTED(fbc == NULL)) {
  15125. if (EXPECTED(!EG(exception))) {
  15126. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  15127. }
  15128. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15129. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  15130. zend_objects_store_del(orig_obj);
  15131. }
  15132. HANDLE_EXCEPTION();
  15133. }
  15134. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  15135. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  15136. EXPECTED(obj == orig_obj)) {
  15137. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  15138. }
  15139. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  15140. GC_ADDREF(obj); /* For $this pointer */
  15141. if (GC_DELREF(orig_obj) == 0) {
  15142. zend_objects_store_del(orig_obj);
  15143. }
  15144. }
  15145. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  15146. init_func_run_time_cache(&fbc->op_array);
  15147. }
  15148. }
  15149. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15150. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15151. }
  15152. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  15153. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  15154. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  15155. zend_objects_store_del(obj);
  15156. if (UNEXPECTED(EG(exception))) {
  15157. HANDLE_EXCEPTION();
  15158. }
  15159. }
  15160. /* call static method */
  15161. obj = (zend_object*)called_scope;
  15162. call_info = ZEND_CALL_NESTED_FUNCTION;
  15163. } else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  15164. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  15165. GC_ADDREF(obj); /* For $this pointer */
  15166. }
  15167. /* CV may be changed indirectly (e.g. when it's a reference) */
  15168. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  15169. }
  15170. call = zend_vm_stack_push_call_frame(call_info,
  15171. fbc, opline->extended_value, obj);
  15172. call->prev_execute_data = EX(call);
  15173. EX(call) = call;
  15174. ZEND_VM_NEXT_OPCODE();
  15175. }
  15176. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15177. {
  15178. USE_OPLINE
  15179. zval *op1, *op2;
  15180. double d1, d2;
  15181. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15182. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  15183. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  15184. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  15185. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  15186. case_true:
  15187. ZEND_VM_SMART_BRANCH_TRUE();
  15188. } else {
  15189. case_false:
  15190. ZEND_VM_SMART_BRANCH_FALSE();
  15191. }
  15192. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  15193. d1 = (double)Z_LVAL_P(op1);
  15194. d2 = Z_DVAL_P(op2);
  15195. goto case_double;
  15196. }
  15197. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  15198. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  15199. d1 = Z_DVAL_P(op1);
  15200. d2 = Z_DVAL_P(op2);
  15201. case_double:
  15202. if (d1 == d2) {
  15203. goto case_true;
  15204. } else {
  15205. goto case_false;
  15206. }
  15207. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  15208. d1 = Z_DVAL_P(op1);
  15209. d2 = (double)Z_LVAL_P(op2);
  15210. goto case_double;
  15211. }
  15212. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  15213. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  15214. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  15215. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15216. if (result) {
  15217. goto case_true;
  15218. } else {
  15219. goto case_false;
  15220. }
  15221. }
  15222. }
  15223. ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  15224. }
  15225. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15226. {
  15227. USE_OPLINE
  15228. zval *container;
  15229. bool result;
  15230. zend_ulong hval;
  15231. zval *offset;
  15232. SAVE_OPLINE();
  15233. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15234. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  15235. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  15236. HashTable *ht;
  15237. zval *value;
  15238. zend_string *str;
  15239. isset_dim_obj_array:
  15240. ht = Z_ARRVAL_P(container);
  15241. isset_again:
  15242. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  15243. str = Z_STR_P(offset);
  15244. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15245. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  15246. goto num_index_prop;
  15247. }
  15248. }
  15249. value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
  15250. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  15251. hval = Z_LVAL_P(offset);
  15252. num_index_prop:
  15253. value = zend_hash_index_find(ht, hval);
  15254. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  15255. offset = Z_REFVAL_P(offset);
  15256. goto isset_again;
  15257. } else {
  15258. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  15259. if (UNEXPECTED(EG(exception))) {
  15260. result = 0;
  15261. goto isset_dim_obj_exit;
  15262. }
  15263. }
  15264. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  15265. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  15266. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  15267. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  15268. if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
  15269. /* avoid exception check */
  15270. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15271. ZEND_VM_SMART_BRANCH(result, 0);
  15272. }
  15273. } else {
  15274. result = (value == NULL || !i_zend_is_true(value));
  15275. }
  15276. goto isset_dim_obj_exit;
  15277. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  15278. container = Z_REFVAL_P(container);
  15279. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  15280. goto isset_dim_obj_array;
  15281. }
  15282. }
  15283. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  15284. offset++;
  15285. }
  15286. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  15287. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  15288. } else {
  15289. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  15290. }
  15291. isset_dim_obj_exit:
  15292. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15293. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15294. ZEND_VM_SMART_BRANCH(result, 1);
  15295. }
  15296. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15297. {
  15298. USE_OPLINE
  15299. zval *container;
  15300. int result;
  15301. zval *offset;
  15302. zend_string *name, *tmp_name;
  15303. SAVE_OPLINE();
  15304. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15305. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  15306. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  15307. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  15308. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  15309. container = Z_REFVAL_P(container);
  15310. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  15311. result = (opline->extended_value & ZEND_ISEMPTY);
  15312. goto isset_object_finish;
  15313. }
  15314. } else {
  15315. result = (opline->extended_value & ZEND_ISEMPTY);
  15316. goto isset_object_finish;
  15317. }
  15318. }
  15319. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15320. name = Z_STR_P(offset);
  15321. } else {
  15322. name = zval_try_get_tmp_string(offset, &tmp_name);
  15323. if (UNEXPECTED(!name)) {
  15324. result = 0;
  15325. goto isset_object_finish;
  15326. }
  15327. }
  15328. result =
  15329. (opline->extended_value & ZEND_ISEMPTY) ^
  15330. 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));
  15331. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15332. zend_tmp_string_release(tmp_name);
  15333. }
  15334. isset_object_finish:
  15335. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15336. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15337. ZEND_VM_SMART_BRANCH(result, 1);
  15338. }
  15339. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15340. {
  15341. USE_OPLINE
  15342. zval *key, *subject;
  15343. HashTable *ht;
  15344. bool result;
  15345. SAVE_OPLINE();
  15346. key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15347. subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  15348. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  15349. array_key_exists_array:
  15350. ht = Z_ARRVAL_P(subject);
  15351. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  15352. } else {
  15353. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  15354. subject = Z_REFVAL_P(subject);
  15355. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  15356. goto array_key_exists_array;
  15357. }
  15358. }
  15359. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  15360. result = 0;
  15361. }
  15362. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  15363. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15364. ZEND_VM_SMART_BRANCH(result, 1);
  15365. }
  15366. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  15367. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15368. {
  15369. USE_OPLINE
  15370. zval *expr;
  15371. bool result;
  15372. SAVE_OPLINE();
  15373. expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15374. try_instanceof:
  15375. if (Z_TYPE_P(expr) == IS_OBJECT) {
  15376. zend_class_entry *ce;
  15377. if (IS_VAR == IS_CONST) {
  15378. ce = CACHED_PTR(opline->extended_value);
  15379. if (UNEXPECTED(ce == NULL)) {
  15380. 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);
  15381. if (EXPECTED(ce)) {
  15382. CACHE_PTR(opline->extended_value, ce);
  15383. }
  15384. }
  15385. } else if (IS_VAR == IS_UNUSED) {
  15386. ce = zend_fetch_class(NULL, opline->op2.num);
  15387. if (UNEXPECTED(ce == NULL)) {
  15388. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15389. ZVAL_UNDEF(EX_VAR(opline->result.var));
  15390. HANDLE_EXCEPTION();
  15391. }
  15392. } else {
  15393. ce = Z_CE_P(EX_VAR(opline->op2.var));
  15394. }
  15395. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  15396. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  15397. expr = Z_REFVAL_P(expr);
  15398. goto try_instanceof;
  15399. } else {
  15400. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  15401. ZVAL_UNDEFINED_OP1();
  15402. }
  15403. result = 0;
  15404. }
  15405. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15406. ZEND_VM_SMART_BRANCH(result, 1);
  15407. }
  15408. 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)
  15409. {
  15410. USE_OPLINE
  15411. zval *varname;
  15412. zval *retval;
  15413. zend_string *name, *tmp_name;
  15414. HashTable *target_symbol_table;
  15415. SAVE_OPLINE();
  15416. varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15417. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15418. name = Z_STR_P(varname);
  15419. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  15420. name = Z_STR_P(varname);
  15421. tmp_name = NULL;
  15422. } else {
  15423. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  15424. ZVAL_UNDEFINED_OP1();
  15425. }
  15426. name = zval_try_get_tmp_string(varname, &tmp_name);
  15427. if (UNEXPECTED(!name)) {
  15428. if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
  15429. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15430. }
  15431. ZVAL_UNDEF(EX_VAR(opline->result.var));
  15432. HANDLE_EXCEPTION();
  15433. }
  15434. }
  15435. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  15436. retval = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
  15437. if (retval == NULL) {
  15438. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  15439. fetch_this:
  15440. zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
  15441. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15442. zend_tmp_string_release(tmp_name);
  15443. }
  15444. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15445. }
  15446. if (type == BP_VAR_W) {
  15447. retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
  15448. } else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
  15449. retval = &EG(uninitialized_zval);
  15450. } else {
  15451. zend_error(E_WARNING, "Undefined %svariable $%s",
  15452. (opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
  15453. if (type == BP_VAR_RW && !EG(exception)) {
  15454. retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
  15455. } else {
  15456. retval = &EG(uninitialized_zval);
  15457. }
  15458. }
  15459. /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
  15460. } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
  15461. retval = Z_INDIRECT_P(retval);
  15462. if (Z_TYPE_P(retval) == IS_UNDEF) {
  15463. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  15464. goto fetch_this;
  15465. }
  15466. if (type == BP_VAR_W) {
  15467. ZVAL_NULL(retval);
  15468. } else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
  15469. retval = &EG(uninitialized_zval);
  15470. } else {
  15471. zend_error(E_WARNING, "Undefined %svariable $%s",
  15472. (opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
  15473. if (type == BP_VAR_RW && !EG(exception)) {
  15474. ZVAL_NULL(retval);
  15475. } else {
  15476. retval = &EG(uninitialized_zval);
  15477. }
  15478. }
  15479. }
  15480. }
  15481. if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
  15482. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15483. }
  15484. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15485. zend_tmp_string_release(tmp_name);
  15486. }
  15487. ZEND_ASSERT(retval != NULL);
  15488. if (type == BP_VAR_R || type == BP_VAR_IS) {
  15489. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  15490. } else {
  15491. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  15492. }
  15493. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15494. }
  15495. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15496. {
  15497. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  15498. }
  15499. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15500. {
  15501. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  15502. }
  15503. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15504. {
  15505. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  15506. }
  15507. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15508. {
  15509. int fetch_type =
  15510. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  15511. BP_VAR_W : BP_VAR_R;
  15512. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  15513. }
  15514. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15515. {
  15516. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  15517. }
  15518. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15519. {
  15520. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  15521. }
  15522. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  15523. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15524. {
  15525. USE_OPLINE
  15526. zval *value, *arg;
  15527. if (IS_UNUSED == IS_CONST) {
  15528. SAVE_OPLINE();
  15529. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  15530. uint32_t arg_num;
  15531. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  15532. if (UNEXPECTED(!arg)) {
  15533. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15534. HANDLE_EXCEPTION();
  15535. }
  15536. } else {
  15537. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  15538. }
  15539. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15540. ZVAL_COPY_VALUE(arg, value);
  15541. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15542. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  15543. Z_ADDREF_P(arg);
  15544. }
  15545. }
  15546. ZEND_VM_NEXT_OPCODE();
  15547. }
  15548. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15549. {
  15550. USE_OPLINE
  15551. zval *varname;
  15552. zend_string *name, *tmp_name;
  15553. HashTable *target_symbol_table;
  15554. SAVE_OPLINE();
  15555. varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15556. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15557. name = Z_STR_P(varname);
  15558. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  15559. name = Z_STR_P(varname);
  15560. tmp_name = NULL;
  15561. } else {
  15562. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  15563. varname = ZVAL_UNDEFINED_OP1();
  15564. }
  15565. name = zval_try_get_tmp_string(varname, &tmp_name);
  15566. if (UNEXPECTED(!name)) {
  15567. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15568. HANDLE_EXCEPTION();
  15569. }
  15570. }
  15571. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  15572. zend_hash_del_ind(target_symbol_table, name);
  15573. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15574. zend_tmp_string_release(tmp_name);
  15575. }
  15576. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15577. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15578. }
  15579. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  15580. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15581. {
  15582. USE_OPLINE
  15583. zval *value;
  15584. /* Should be bool result? as below got: result = (opline->extended_value & ZEND_ISEMPTY) */
  15585. int result;
  15586. zval *varname;
  15587. zend_string *name, *tmp_name;
  15588. HashTable *target_symbol_table;
  15589. SAVE_OPLINE();
  15590. varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15591. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  15592. name = Z_STR_P(varname);
  15593. } else {
  15594. name = zval_get_tmp_string(varname, &tmp_name);
  15595. }
  15596. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  15597. value = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
  15598. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15599. zend_tmp_string_release(tmp_name);
  15600. }
  15601. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15602. if (!value) {
  15603. result = (opline->extended_value & ZEND_ISEMPTY);
  15604. } else {
  15605. if (Z_TYPE_P(value) == IS_INDIRECT) {
  15606. value = Z_INDIRECT_P(value);
  15607. }
  15608. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  15609. if (Z_ISREF_P(value)) {
  15610. value = Z_REFVAL_P(value);
  15611. }
  15612. result = Z_TYPE_P(value) > IS_NULL;
  15613. } else {
  15614. result = !i_zend_is_true(value);
  15615. }
  15616. }
  15617. ZEND_VM_SMART_BRANCH(result, 1);
  15618. }
  15619. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  15620. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15621. {
  15622. USE_OPLINE
  15623. zval *expr;
  15624. bool result;
  15625. SAVE_OPLINE();
  15626. expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15627. try_instanceof:
  15628. if (Z_TYPE_P(expr) == IS_OBJECT) {
  15629. zend_class_entry *ce;
  15630. if (IS_UNUSED == IS_CONST) {
  15631. ce = CACHED_PTR(opline->extended_value);
  15632. if (UNEXPECTED(ce == NULL)) {
  15633. 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);
  15634. if (EXPECTED(ce)) {
  15635. CACHE_PTR(opline->extended_value, ce);
  15636. }
  15637. }
  15638. } else if (IS_UNUSED == IS_UNUSED) {
  15639. ce = zend_fetch_class(NULL, opline->op2.num);
  15640. if (UNEXPECTED(ce == NULL)) {
  15641. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15642. ZVAL_UNDEF(EX_VAR(opline->result.var));
  15643. HANDLE_EXCEPTION();
  15644. }
  15645. } else {
  15646. ce = Z_CE_P(EX_VAR(opline->op2.var));
  15647. }
  15648. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  15649. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  15650. expr = Z_REFVAL_P(expr);
  15651. goto try_instanceof;
  15652. } else {
  15653. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  15654. ZVAL_UNDEFINED_OP1();
  15655. }
  15656. result = 0;
  15657. }
  15658. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15659. ZEND_VM_SMART_BRANCH(result, 1);
  15660. }
  15661. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15662. {
  15663. USE_OPLINE
  15664. zval *op1;
  15665. zend_long count;
  15666. SAVE_OPLINE();
  15667. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15668. while (1) {
  15669. if (Z_TYPE_P(op1) == IS_ARRAY) {
  15670. count = zend_hash_num_elements(Z_ARRVAL_P(op1));
  15671. break;
  15672. } else if (Z_TYPE_P(op1) == IS_OBJECT) {
  15673. zend_object *zobj = Z_OBJ_P(op1);
  15674. /* first, we check if the handler is defined */
  15675. if (zobj->handlers->count_elements) {
  15676. if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
  15677. break;
  15678. }
  15679. if (UNEXPECTED(EG(exception))) {
  15680. count = 0;
  15681. break;
  15682. }
  15683. }
  15684. /* if not and the object implements Countable we call its count() method */
  15685. if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
  15686. zval retval;
  15687. zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
  15688. count = zval_get_long(&retval);
  15689. zval_ptr_dtor(&retval);
  15690. break;
  15691. }
  15692. /* If There's no handler and it doesn't implement Countable then emit a TypeError */
  15693. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
  15694. op1 = Z_REFVAL_P(op1);
  15695. continue;
  15696. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  15697. ZVAL_UNDEFINED_OP1();
  15698. }
  15699. count = 0;
  15700. 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));
  15701. break;
  15702. }
  15703. ZVAL_LONG(EX_VAR(opline->result.var), count);
  15704. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15705. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15706. }
  15707. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15708. {
  15709. USE_OPLINE
  15710. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  15711. if (UNEXPECTED(!EX(func)->common.scope)) {
  15712. SAVE_OPLINE();
  15713. zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
  15714. ZVAL_UNDEF(EX_VAR(opline->result.var));
  15715. HANDLE_EXCEPTION();
  15716. } else {
  15717. ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
  15718. ZEND_VM_NEXT_OPCODE();
  15719. }
  15720. } else {
  15721. zval *op1;
  15722. SAVE_OPLINE();
  15723. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15724. while (1) {
  15725. if (Z_TYPE_P(op1) == IS_OBJECT) {
  15726. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
  15727. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
  15728. op1 = Z_REFVAL_P(op1);
  15729. continue;
  15730. } else {
  15731. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  15732. ZVAL_UNDEFINED_OP1();
  15733. }
  15734. zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_type_name(op1));
  15735. ZVAL_UNDEF(EX_VAR(opline->result.var));
  15736. }
  15737. break;
  15738. }
  15739. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15740. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15741. }
  15742. }
  15743. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15744. {
  15745. USE_OPLINE
  15746. zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15747. zval *result = EX_VAR(opline->result.var);
  15748. ZVAL_COPY(result, value);
  15749. ZEND_VM_NEXT_OPCODE();
  15750. }
  15751. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15752. {
  15753. USE_OPLINE
  15754. zval *op1, *op2;
  15755. SAVE_OPLINE();
  15756. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15757. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  15758. div_function(EX_VAR(opline->result.var), op1, op2);
  15759. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15760. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15761. }
  15762. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15763. {
  15764. USE_OPLINE
  15765. zval *op1, *op2;
  15766. SAVE_OPLINE();
  15767. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15768. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  15769. pow_function(EX_VAR(opline->result.var), op1, op2);
  15770. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15771. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15772. }
  15773. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15774. {
  15775. USE_OPLINE
  15776. zval *op1, *op2;
  15777. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15778. op2 = EX_VAR(opline->op2.var);
  15779. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  15780. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  15781. zend_string *op1_str = Z_STR_P(op1);
  15782. zend_string *op2_str = Z_STR_P(op2);
  15783. zend_string *str;
  15784. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  15785. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  15786. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  15787. } else {
  15788. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  15789. }
  15790. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  15791. zend_string_release_ex(op1_str, 0);
  15792. }
  15793. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  15794. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  15795. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  15796. } else {
  15797. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  15798. }
  15799. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  15800. zend_string_release_ex(op2_str, 0);
  15801. }
  15802. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  15803. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  15804. size_t len = ZSTR_LEN(op1_str);
  15805. if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
  15806. zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
  15807. }
  15808. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  15809. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  15810. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  15811. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  15812. zend_string_release_ex(op2_str, 0);
  15813. }
  15814. } else {
  15815. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  15816. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  15817. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  15818. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  15819. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  15820. zend_string_release_ex(op1_str, 0);
  15821. }
  15822. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  15823. zend_string_release_ex(op2_str, 0);
  15824. }
  15825. }
  15826. ZEND_VM_NEXT_OPCODE();
  15827. } else {
  15828. SAVE_OPLINE();
  15829. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  15830. op1 = ZVAL_UNDEFINED_OP1();
  15831. }
  15832. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  15833. op2 = ZVAL_UNDEFINED_OP2();
  15834. }
  15835. concat_function(EX_VAR(opline->result.var), op1, op2);
  15836. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15837. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15838. }
  15839. }
  15840. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15841. {
  15842. USE_OPLINE
  15843. zval *op1, *op2;
  15844. SAVE_OPLINE();
  15845. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15846. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  15847. compare_function(EX_VAR(opline->result.var), op1, op2);
  15848. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15849. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15850. }
  15851. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15852. {
  15853. USE_OPLINE
  15854. zval *container, *dim, *value;
  15855. SAVE_OPLINE();
  15856. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15857. dim = EX_VAR(opline->op2.var);
  15858. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  15859. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  15860. fetch_dim_r_array:
  15861. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
  15862. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  15863. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  15864. container = Z_REFVAL_P(container);
  15865. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  15866. goto fetch_dim_r_array;
  15867. } else {
  15868. goto fetch_dim_r_slow;
  15869. }
  15870. } else {
  15871. fetch_dim_r_slow:
  15872. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  15873. dim++;
  15874. }
  15875. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  15876. }
  15877. } else {
  15878. zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
  15879. }
  15880. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15881. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15882. }
  15883. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15884. {
  15885. USE_OPLINE
  15886. zval *container;
  15887. SAVE_OPLINE();
  15888. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15889. zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  15890. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15891. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15892. }
  15893. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15894. {
  15895. USE_OPLINE
  15896. zval *container;
  15897. void **cache_slot = NULL;
  15898. SAVE_OPLINE();
  15899. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  15900. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  15901. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  15902. do {
  15903. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  15904. container = Z_REFVAL_P(container);
  15905. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  15906. break;
  15907. }
  15908. }
  15909. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  15910. ZVAL_UNDEFINED_OP1();
  15911. }
  15912. zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  15913. ZVAL_NULL(EX_VAR(opline->result.var));
  15914. goto fetch_obj_r_finish;
  15915. } while (0);
  15916. }
  15917. /* here we are sure we are dealing with an object */
  15918. do {
  15919. zend_object *zobj = Z_OBJ_P(container);
  15920. zend_string *name, *tmp_name;
  15921. zval *retval;
  15922. if (IS_CV == IS_CONST) {
  15923. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  15924. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  15925. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  15926. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  15927. retval = OBJ_PROP(zobj, prop_offset);
  15928. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  15929. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  15930. goto fetch_obj_r_copy;
  15931. } else {
  15932. fetch_obj_r_fast_copy:
  15933. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  15934. ZEND_VM_NEXT_OPCODE();
  15935. }
  15936. }
  15937. } else if (EXPECTED(zobj->properties != NULL)) {
  15938. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  15939. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  15940. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  15941. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  15942. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  15943. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  15944. (EXPECTED(p->key == name) ||
  15945. (EXPECTED(p->h == ZSTR_H(name)) &&
  15946. EXPECTED(p->key != NULL) &&
  15947. EXPECTED(zend_string_equal_content(p->key, name))))) {
  15948. retval = &p->val;
  15949. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  15950. goto fetch_obj_r_copy;
  15951. } else {
  15952. goto fetch_obj_r_fast_copy;
  15953. }
  15954. }
  15955. }
  15956. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  15957. }
  15958. retval = zend_hash_find_known_hash(zobj->properties, name);
  15959. if (EXPECTED(retval)) {
  15960. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  15961. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  15962. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  15963. goto fetch_obj_r_copy;
  15964. } else {
  15965. goto fetch_obj_r_fast_copy;
  15966. }
  15967. }
  15968. }
  15969. }
  15970. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  15971. } else {
  15972. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  15973. if (UNEXPECTED(!name)) {
  15974. ZVAL_UNDEF(EX_VAR(opline->result.var));
  15975. break;
  15976. }
  15977. }
  15978. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  15979. #if ZEND_DEBUG
  15980. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  15981. zend_verify_internal_read_property_type(zobj, name, retval);
  15982. }
  15983. #endif
  15984. if (IS_CV != IS_CONST) {
  15985. zend_tmp_string_release(tmp_name);
  15986. }
  15987. if (retval != EX_VAR(opline->result.var)) {
  15988. fetch_obj_r_copy:
  15989. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  15990. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  15991. zend_unwrap_reference(retval);
  15992. }
  15993. } while (0);
  15994. fetch_obj_r_finish:
  15995. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  15996. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15997. }
  15998. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15999. {
  16000. USE_OPLINE
  16001. zval *container;
  16002. void **cache_slot = NULL;
  16003. SAVE_OPLINE();
  16004. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  16005. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  16006. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  16007. do {
  16008. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  16009. container = Z_REFVAL_P(container);
  16010. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  16011. break;
  16012. }
  16013. }
  16014. if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  16015. ZVAL_UNDEFINED_OP2();
  16016. }
  16017. ZVAL_NULL(EX_VAR(opline->result.var));
  16018. goto fetch_obj_is_finish;
  16019. } while (0);
  16020. }
  16021. /* here we are sure we are dealing with an object */
  16022. do {
  16023. zend_object *zobj = Z_OBJ_P(container);
  16024. zend_string *name, *tmp_name;
  16025. zval *retval;
  16026. if (IS_CV == IS_CONST) {
  16027. cache_slot = CACHE_ADDR(opline->extended_value);
  16028. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  16029. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  16030. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  16031. retval = OBJ_PROP(zobj, prop_offset);
  16032. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  16033. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  16034. goto fetch_obj_is_copy;
  16035. } else {
  16036. fetch_obj_is_fast_copy:
  16037. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  16038. ZEND_VM_NEXT_OPCODE();
  16039. }
  16040. }
  16041. } else if (EXPECTED(zobj->properties != NULL)) {
  16042. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  16043. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  16044. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  16045. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  16046. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  16047. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  16048. (EXPECTED(p->key == name) ||
  16049. (EXPECTED(p->h == ZSTR_H(name)) &&
  16050. EXPECTED(p->key != NULL) &&
  16051. EXPECTED(zend_string_equal_content(p->key, name))))) {
  16052. retval = &p->val;
  16053. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  16054. goto fetch_obj_is_copy;
  16055. } else {
  16056. goto fetch_obj_is_fast_copy;
  16057. }
  16058. }
  16059. }
  16060. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  16061. }
  16062. retval = zend_hash_find_known_hash(zobj->properties, name);
  16063. if (EXPECTED(retval)) {
  16064. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  16065. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  16066. if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
  16067. goto fetch_obj_is_copy;
  16068. } else {
  16069. goto fetch_obj_is_fast_copy;
  16070. }
  16071. }
  16072. }
  16073. }
  16074. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  16075. } else {
  16076. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  16077. if (UNEXPECTED(!name)) {
  16078. ZVAL_UNDEF(EX_VAR(opline->result.var));
  16079. break;
  16080. }
  16081. }
  16082. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  16083. if (IS_CV != IS_CONST) {
  16084. zend_tmp_string_release(tmp_name);
  16085. }
  16086. if (retval != EX_VAR(opline->result.var)) {
  16087. fetch_obj_is_copy:
  16088. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  16089. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  16090. zend_unwrap_reference(retval);
  16091. }
  16092. } while (0);
  16093. fetch_obj_is_finish:
  16094. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16095. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16096. }
  16097. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16098. {
  16099. USE_OPLINE
  16100. zval *op1, *op2;
  16101. zend_string *op1_str, *op2_str, *str;
  16102. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  16103. op2 = EX_VAR(opline->op2.var);
  16104. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  16105. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  16106. zend_string *op1_str = Z_STR_P(op1);
  16107. zend_string *op2_str = Z_STR_P(op2);
  16108. zend_string *str;
  16109. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  16110. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  16111. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  16112. } else {
  16113. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  16114. }
  16115. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  16116. zend_string_release_ex(op1_str, 0);
  16117. }
  16118. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  16119. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  16120. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  16121. } else {
  16122. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  16123. }
  16124. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  16125. zend_string_release_ex(op2_str, 0);
  16126. }
  16127. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  16128. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  16129. size_t len = ZSTR_LEN(op1_str);
  16130. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  16131. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  16132. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  16133. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  16134. zend_string_release_ex(op2_str, 0);
  16135. }
  16136. } else {
  16137. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  16138. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  16139. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  16140. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  16141. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  16142. zend_string_release_ex(op1_str, 0);
  16143. }
  16144. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  16145. zend_string_release_ex(op2_str, 0);
  16146. }
  16147. }
  16148. ZEND_VM_NEXT_OPCODE();
  16149. }
  16150. SAVE_OPLINE();
  16151. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  16152. op1_str = Z_STR_P(op1);
  16153. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  16154. op1_str = zend_string_copy(Z_STR_P(op1));
  16155. } else {
  16156. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  16157. ZVAL_UNDEFINED_OP1();
  16158. }
  16159. op1_str = zval_get_string_func(op1);
  16160. }
  16161. if (IS_CV == IS_CONST) {
  16162. op2_str = Z_STR_P(op2);
  16163. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  16164. op2_str = zend_string_copy(Z_STR_P(op2));
  16165. } else {
  16166. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  16167. ZVAL_UNDEFINED_OP2();
  16168. }
  16169. op2_str = zval_get_string_func(op2);
  16170. }
  16171. do {
  16172. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  16173. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  16174. if (IS_CV == IS_CONST) {
  16175. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  16176. GC_ADDREF(op2_str);
  16177. }
  16178. }
  16179. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  16180. zend_string_release_ex(op1_str, 0);
  16181. break;
  16182. }
  16183. }
  16184. if (IS_CV != IS_CONST) {
  16185. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  16186. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  16187. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  16188. GC_ADDREF(op1_str);
  16189. }
  16190. }
  16191. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  16192. zend_string_release_ex(op2_str, 0);
  16193. break;
  16194. }
  16195. }
  16196. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  16197. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  16198. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  16199. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  16200. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  16201. zend_string_release_ex(op1_str, 0);
  16202. }
  16203. if (IS_CV != IS_CONST) {
  16204. zend_string_release_ex(op2_str, 0);
  16205. }
  16206. } while (0);
  16207. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16208. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16209. }
  16210. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16211. {
  16212. USE_OPLINE
  16213. zval *function_name;
  16214. zval *object;
  16215. zend_function *fbc;
  16216. zend_class_entry *called_scope;
  16217. zend_object *obj;
  16218. zend_execute_data *call;
  16219. uint32_t call_info;
  16220. SAVE_OPLINE();
  16221. object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  16222. if (IS_CV != IS_CONST) {
  16223. function_name = EX_VAR(opline->op2.var);
  16224. }
  16225. if (IS_CV != IS_CONST &&
  16226. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  16227. do {
  16228. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  16229. function_name = Z_REFVAL_P(function_name);
  16230. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  16231. break;
  16232. }
  16233. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  16234. ZVAL_UNDEFINED_OP2();
  16235. if (UNEXPECTED(EG(exception) != NULL)) {
  16236. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16237. HANDLE_EXCEPTION();
  16238. }
  16239. }
  16240. zend_throw_error(NULL, "Method name must be a string");
  16241. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16242. HANDLE_EXCEPTION();
  16243. } while (0);
  16244. }
  16245. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  16246. obj = Z_OBJ_P(object);
  16247. } else {
  16248. do {
  16249. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  16250. obj = Z_OBJ_P(object);
  16251. } else {
  16252. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  16253. zend_reference *ref = Z_REF_P(object);
  16254. object = &ref->val;
  16255. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  16256. obj = Z_OBJ_P(object);
  16257. if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
  16258. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  16259. efree_size(ref, sizeof(zend_reference));
  16260. } else {
  16261. Z_ADDREF_P(object);
  16262. }
  16263. }
  16264. break;
  16265. }
  16266. }
  16267. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  16268. object = ZVAL_UNDEFINED_OP1();
  16269. if (UNEXPECTED(EG(exception) != NULL)) {
  16270. if (IS_CV != IS_CONST) {
  16271. }
  16272. HANDLE_EXCEPTION();
  16273. }
  16274. }
  16275. if (IS_CV == IS_CONST) {
  16276. function_name = EX_VAR(opline->op2.var);
  16277. }
  16278. zend_invalid_method_call(object, function_name);
  16279. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16280. HANDLE_EXCEPTION();
  16281. }
  16282. } while (0);
  16283. }
  16284. called_scope = obj->ce;
  16285. if (IS_CV == IS_CONST &&
  16286. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  16287. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  16288. } else {
  16289. zend_object *orig_obj = obj;
  16290. if (IS_CV == IS_CONST) {
  16291. function_name = EX_VAR(opline->op2.var);
  16292. }
  16293. /* First, locate the function. */
  16294. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  16295. if (UNEXPECTED(fbc == NULL)) {
  16296. if (EXPECTED(!EG(exception))) {
  16297. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  16298. }
  16299. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  16300. zend_objects_store_del(orig_obj);
  16301. }
  16302. HANDLE_EXCEPTION();
  16303. }
  16304. if (IS_CV == IS_CONST &&
  16305. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  16306. EXPECTED(obj == orig_obj)) {
  16307. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  16308. }
  16309. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  16310. GC_ADDREF(obj); /* For $this pointer */
  16311. if (GC_DELREF(orig_obj) == 0) {
  16312. zend_objects_store_del(orig_obj);
  16313. }
  16314. }
  16315. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  16316. init_func_run_time_cache(&fbc->op_array);
  16317. }
  16318. }
  16319. if (IS_CV != IS_CONST) {
  16320. }
  16321. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  16322. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  16323. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  16324. zend_objects_store_del(obj);
  16325. if (UNEXPECTED(EG(exception))) {
  16326. HANDLE_EXCEPTION();
  16327. }
  16328. }
  16329. /* call static method */
  16330. obj = (zend_object*)called_scope;
  16331. call_info = ZEND_CALL_NESTED_FUNCTION;
  16332. } else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  16333. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  16334. GC_ADDREF(obj); /* For $this pointer */
  16335. }
  16336. /* CV may be changed indirectly (e.g. when it's a reference) */
  16337. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  16338. }
  16339. call = zend_vm_stack_push_call_frame(call_info,
  16340. fbc, opline->extended_value, obj);
  16341. call->prev_execute_data = EX(call);
  16342. EX(call) = call;
  16343. ZEND_VM_NEXT_OPCODE();
  16344. }
  16345. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16346. {
  16347. USE_OPLINE
  16348. zval *op1, *op2;
  16349. double d1, d2;
  16350. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  16351. op2 = EX_VAR(opline->op2.var);
  16352. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  16353. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  16354. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  16355. case_true:
  16356. ZEND_VM_SMART_BRANCH_TRUE();
  16357. } else {
  16358. case_false:
  16359. ZEND_VM_SMART_BRANCH_FALSE();
  16360. }
  16361. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  16362. d1 = (double)Z_LVAL_P(op1);
  16363. d2 = Z_DVAL_P(op2);
  16364. goto case_double;
  16365. }
  16366. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  16367. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  16368. d1 = Z_DVAL_P(op1);
  16369. d2 = Z_DVAL_P(op2);
  16370. case_double:
  16371. if (d1 == d2) {
  16372. goto case_true;
  16373. } else {
  16374. goto case_false;
  16375. }
  16376. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  16377. d1 = Z_DVAL_P(op1);
  16378. d2 = (double)Z_LVAL_P(op2);
  16379. goto case_double;
  16380. }
  16381. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  16382. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  16383. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  16384. if (result) {
  16385. goto case_true;
  16386. } else {
  16387. goto case_false;
  16388. }
  16389. }
  16390. }
  16391. ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  16392. }
  16393. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16394. {
  16395. USE_OPLINE
  16396. zval *container;
  16397. bool result;
  16398. zend_ulong hval;
  16399. zval *offset;
  16400. SAVE_OPLINE();
  16401. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  16402. offset = EX_VAR(opline->op2.var);
  16403. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  16404. HashTable *ht;
  16405. zval *value;
  16406. zend_string *str;
  16407. isset_dim_obj_array:
  16408. ht = Z_ARRVAL_P(container);
  16409. isset_again:
  16410. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  16411. str = Z_STR_P(offset);
  16412. if (IS_CV != IS_CONST) {
  16413. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  16414. goto num_index_prop;
  16415. }
  16416. }
  16417. value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
  16418. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  16419. hval = Z_LVAL_P(offset);
  16420. num_index_prop:
  16421. value = zend_hash_index_find(ht, hval);
  16422. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  16423. offset = Z_REFVAL_P(offset);
  16424. goto isset_again;
  16425. } else {
  16426. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  16427. if (UNEXPECTED(EG(exception))) {
  16428. result = 0;
  16429. goto isset_dim_obj_exit;
  16430. }
  16431. }
  16432. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  16433. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  16434. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  16435. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  16436. if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
  16437. /* avoid exception check */
  16438. ZEND_VM_SMART_BRANCH(result, 0);
  16439. }
  16440. } else {
  16441. result = (value == NULL || !i_zend_is_true(value));
  16442. }
  16443. goto isset_dim_obj_exit;
  16444. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  16445. container = Z_REFVAL_P(container);
  16446. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  16447. goto isset_dim_obj_array;
  16448. }
  16449. }
  16450. if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  16451. offset++;
  16452. }
  16453. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  16454. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  16455. } else {
  16456. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  16457. }
  16458. isset_dim_obj_exit:
  16459. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16460. ZEND_VM_SMART_BRANCH(result, 1);
  16461. }
  16462. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16463. {
  16464. USE_OPLINE
  16465. zval *container;
  16466. int result;
  16467. zval *offset;
  16468. zend_string *name, *tmp_name;
  16469. SAVE_OPLINE();
  16470. container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  16471. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  16472. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  16473. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  16474. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  16475. container = Z_REFVAL_P(container);
  16476. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  16477. result = (opline->extended_value & ZEND_ISEMPTY);
  16478. goto isset_object_finish;
  16479. }
  16480. } else {
  16481. result = (opline->extended_value & ZEND_ISEMPTY);
  16482. goto isset_object_finish;
  16483. }
  16484. }
  16485. if (IS_CV == IS_CONST) {
  16486. name = Z_STR_P(offset);
  16487. } else {
  16488. name = zval_try_get_tmp_string(offset, &tmp_name);
  16489. if (UNEXPECTED(!name)) {
  16490. result = 0;
  16491. goto isset_object_finish;
  16492. }
  16493. }
  16494. result =
  16495. (opline->extended_value & ZEND_ISEMPTY) ^
  16496. 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));
  16497. if (IS_CV != IS_CONST) {
  16498. zend_tmp_string_release(tmp_name);
  16499. }
  16500. isset_object_finish:
  16501. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16502. ZEND_VM_SMART_BRANCH(result, 1);
  16503. }
  16504. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16505. {
  16506. USE_OPLINE
  16507. zval *key, *subject;
  16508. HashTable *ht;
  16509. bool result;
  16510. SAVE_OPLINE();
  16511. key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  16512. subject = EX_VAR(opline->op2.var);
  16513. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  16514. array_key_exists_array:
  16515. ht = Z_ARRVAL_P(subject);
  16516. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  16517. } else {
  16518. if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  16519. subject = Z_REFVAL_P(subject);
  16520. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  16521. goto array_key_exists_array;
  16522. }
  16523. }
  16524. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  16525. result = 0;
  16526. }
  16527. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16528. ZEND_VM_SMART_BRANCH(result, 1);
  16529. }
  16530. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  16531. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16532. {
  16533. USE_OPLINE
  16534. zval *retval_ptr;
  16535. zval *return_value;
  16536. retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  16537. return_value = EX(return_value);
  16538. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  16539. SAVE_OPLINE();
  16540. retval_ptr = ZVAL_UNDEFINED_OP1();
  16541. if (return_value) {
  16542. ZVAL_NULL(return_value);
  16543. }
  16544. } else if (!return_value) {
  16545. if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
  16546. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  16547. SAVE_OPLINE();
  16548. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  16549. }
  16550. }
  16551. } else {
  16552. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  16553. ZVAL_COPY_VALUE(return_value, retval_ptr);
  16554. if (IS_TMP_VAR == IS_CONST) {
  16555. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  16556. Z_ADDREF_P(return_value);
  16557. }
  16558. }
  16559. } else if (IS_TMP_VAR == IS_CV) {
  16560. do {
  16561. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  16562. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  16563. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  16564. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  16565. ZVAL_COPY_VALUE(return_value, retval_ptr);
  16566. if (GC_MAY_LEAK(ref)) {
  16567. gc_possible_root(ref);
  16568. }
  16569. ZVAL_NULL(retval_ptr);
  16570. break;
  16571. } else {
  16572. Z_ADDREF_P(retval_ptr);
  16573. }
  16574. } else {
  16575. retval_ptr = Z_REFVAL_P(retval_ptr);
  16576. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  16577. Z_ADDREF_P(retval_ptr);
  16578. }
  16579. }
  16580. }
  16581. ZVAL_COPY_VALUE(return_value, retval_ptr);
  16582. } while (0);
  16583. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  16584. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  16585. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  16586. retval_ptr = Z_REFVAL_P(retval_ptr);
  16587. ZVAL_COPY_VALUE(return_value, retval_ptr);
  16588. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  16589. efree_size(ref, sizeof(zend_reference));
  16590. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  16591. Z_ADDREF_P(retval_ptr);
  16592. }
  16593. } else {
  16594. ZVAL_COPY_VALUE(return_value, retval_ptr);
  16595. }
  16596. }
  16597. }
  16598. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16599. }
  16600. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16601. {
  16602. USE_OPLINE
  16603. zval *retval_ptr;
  16604. zval *return_value;
  16605. SAVE_OPLINE();
  16606. return_value = EX(return_value);
  16607. do {
  16608. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) ||
  16609. (IS_TMP_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
  16610. /* Not supposed to happen, but we'll allow it */
  16611. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  16612. retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  16613. if (!return_value) {
  16614. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16615. } else {
  16616. if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  16617. ZVAL_COPY_VALUE(return_value, retval_ptr);
  16618. break;
  16619. }
  16620. ZVAL_NEW_REF(return_value, retval_ptr);
  16621. if (IS_TMP_VAR == IS_CONST) {
  16622. Z_TRY_ADDREF_P(retval_ptr);
  16623. }
  16624. }
  16625. break;
  16626. }
  16627. retval_ptr = NULL;
  16628. if (IS_TMP_VAR == IS_VAR) {
  16629. ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
  16630. if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
  16631. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  16632. if (return_value) {
  16633. ZVAL_NEW_REF(return_value, retval_ptr);
  16634. } else {
  16635. }
  16636. break;
  16637. }
  16638. }
  16639. if (return_value) {
  16640. if (Z_ISREF_P(retval_ptr)) {
  16641. Z_ADDREF_P(retval_ptr);
  16642. } else {
  16643. ZVAL_MAKE_REF_EX(retval_ptr, 2);
  16644. }
  16645. ZVAL_REF(return_value, Z_REF_P(retval_ptr));
  16646. }
  16647. } while (0);
  16648. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16649. }
  16650. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16651. {
  16652. USE_OPLINE
  16653. zval *retval;
  16654. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  16655. SAVE_OPLINE();
  16656. retval = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  16657. /* Copy return value into generator->retval */
  16658. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  16659. ZVAL_COPY_VALUE(&generator->retval, retval);
  16660. if (IS_TMP_VAR == IS_CONST) {
  16661. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
  16662. Z_ADDREF(generator->retval);
  16663. }
  16664. }
  16665. } else if (IS_TMP_VAR == IS_CV) {
  16666. ZVAL_COPY_DEREF(&generator->retval, retval);
  16667. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  16668. if (UNEXPECTED(Z_ISREF_P(retval))) {
  16669. zend_refcounted *ref = Z_COUNTED_P(retval);
  16670. retval = Z_REFVAL_P(retval);
  16671. ZVAL_COPY_VALUE(&generator->retval, retval);
  16672. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  16673. efree_size(ref, sizeof(zend_reference));
  16674. } else if (Z_OPT_REFCOUNTED_P(retval)) {
  16675. Z_ADDREF_P(retval);
  16676. }
  16677. } else {
  16678. ZVAL_COPY_VALUE(&generator->retval, retval);
  16679. }
  16680. }
  16681. /* Close the generator to free up resources */
  16682. zend_generator_close(generator, 1);
  16683. /* Pass execution back to handling code */
  16684. ZEND_VM_RETURN();
  16685. }
  16686. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16687. {
  16688. USE_OPLINE
  16689. zval *arg, *param;
  16690. SAVE_OPLINE();
  16691. arg = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  16692. param = ZEND_CALL_VAR(EX(call), opline->result.var);
  16693. if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
  16694. zend_param_must_be_ref(EX(call)->func, opline->op2.num);
  16695. Z_TRY_ADDREF_P(arg);
  16696. ZVAL_NEW_REF(param, arg);
  16697. } else {
  16698. ZVAL_COPY(param, arg);
  16699. }
  16700. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16701. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16702. }
  16703. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16704. {
  16705. USE_OPLINE
  16706. zval *expr;
  16707. zval *result = EX_VAR(opline->result.var);
  16708. HashTable *ht;
  16709. SAVE_OPLINE();
  16710. expr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  16711. switch (opline->extended_value) {
  16712. case IS_LONG:
  16713. ZVAL_LONG(result, zval_get_long(expr));
  16714. break;
  16715. case IS_DOUBLE:
  16716. ZVAL_DOUBLE(result, zval_get_double(expr));
  16717. break;
  16718. case IS_STRING:
  16719. ZVAL_STR(result, zval_get_string(expr));
  16720. break;
  16721. default:
  16722. ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
  16723. if (IS_TMP_VAR & (IS_VAR|IS_CV)) {
  16724. ZVAL_DEREF(expr);
  16725. }
  16726. /* If value is already of correct type, return it directly */
  16727. if (Z_TYPE_P(expr) == opline->extended_value) {
  16728. ZVAL_COPY_VALUE(result, expr);
  16729. if (IS_TMP_VAR == IS_CONST) {
  16730. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  16731. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  16732. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  16733. }
  16734. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16735. }
  16736. if (opline->extended_value == IS_ARRAY) {
  16737. if (IS_TMP_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
  16738. if (Z_TYPE_P(expr) != IS_NULL) {
  16739. ZVAL_ARR(result, zend_new_array(1));
  16740. expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
  16741. if (IS_TMP_VAR == IS_CONST) {
  16742. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  16743. } else {
  16744. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  16745. }
  16746. } else {
  16747. ZVAL_EMPTY_ARRAY(result);
  16748. }
  16749. } else if (Z_OBJ_P(expr)->properties == NULL
  16750. && Z_OBJ_HT_P(expr)->get_properties_for == NULL
  16751. && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
  16752. /* Optimized version without rebuilding properties HashTable */
  16753. ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
  16754. } else {
  16755. HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
  16756. if (obj_ht) {
  16757. /* fast copy */
  16758. ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
  16759. (Z_OBJCE_P(expr)->default_properties_count ||
  16760. Z_OBJ_P(expr)->handlers != &std_object_handlers ||
  16761. GC_IS_RECURSIVE(obj_ht))));
  16762. zend_release_properties(obj_ht);
  16763. } else {
  16764. ZVAL_EMPTY_ARRAY(result);
  16765. }
  16766. }
  16767. } else {
  16768. ZEND_ASSERT(opline->extended_value == IS_OBJECT);
  16769. ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
  16770. if (Z_TYPE_P(expr) == IS_ARRAY) {
  16771. ht = zend_symtable_to_proptable(Z_ARR_P(expr));
  16772. if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
  16773. /* TODO: try not to duplicate immutable arrays as well ??? */
  16774. ht = zend_array_dup(ht);
  16775. }
  16776. Z_OBJ_P(result)->properties = ht;
  16777. } else if (Z_TYPE_P(expr) != IS_NULL) {
  16778. Z_OBJ_P(result)->properties = ht = zend_new_array(1);
  16779. expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
  16780. if (IS_TMP_VAR == IS_CONST) {
  16781. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  16782. } else {
  16783. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  16784. }
  16785. }
  16786. }
  16787. }
  16788. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16789. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16790. }
  16791. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16792. {
  16793. USE_OPLINE
  16794. zval *array_ptr, *result;
  16795. SAVE_OPLINE();
  16796. array_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  16797. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  16798. result = EX_VAR(opline->result.var);
  16799. ZVAL_COPY_VALUE(result, array_ptr);
  16800. if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
  16801. Z_ADDREF_P(array_ptr);
  16802. }
  16803. Z_FE_POS_P(result) = 0;
  16804. ZEND_VM_NEXT_OPCODE();
  16805. } else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  16806. zend_object *zobj = Z_OBJ_P(array_ptr);
  16807. if (!zobj->ce->get_iterator) {
  16808. HashTable *properties = zobj->properties;
  16809. if (properties) {
  16810. if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
  16811. if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
  16812. GC_DELREF(properties);
  16813. }
  16814. properties = zobj->properties = zend_array_dup(properties);
  16815. }
  16816. } else {
  16817. properties = zobj->handlers->get_properties(zobj);
  16818. }
  16819. result = EX_VAR(opline->result.var);
  16820. ZVAL_COPY_VALUE(result, array_ptr);
  16821. if (IS_TMP_VAR != IS_TMP_VAR) {
  16822. Z_ADDREF_P(array_ptr);
  16823. }
  16824. if (zend_hash_num_elements(properties) == 0) {
  16825. Z_FE_ITER_P(result) = (uint32_t) -1;
  16826. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  16827. }
  16828. Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
  16829. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16830. } else {
  16831. bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
  16832. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16833. if (UNEXPECTED(EG(exception))) {
  16834. HANDLE_EXCEPTION();
  16835. } else if (is_empty) {
  16836. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  16837. } else {
  16838. ZEND_VM_NEXT_OPCODE();
  16839. }
  16840. }
  16841. } else {
  16842. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
  16843. ZVAL_UNDEF(EX_VAR(opline->result.var));
  16844. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  16845. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16846. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  16847. }
  16848. }
  16849. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16850. {
  16851. USE_OPLINE
  16852. zval *array_ptr, *array_ref;
  16853. SAVE_OPLINE();
  16854. if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
  16855. array_ref = array_ptr = NULL;
  16856. if (Z_ISREF_P(array_ref)) {
  16857. array_ptr = Z_REFVAL_P(array_ref);
  16858. }
  16859. } else {
  16860. array_ref = array_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  16861. }
  16862. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  16863. if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
  16864. if (array_ptr == array_ref) {
  16865. ZVAL_NEW_REF(array_ref, array_ref);
  16866. array_ptr = Z_REFVAL_P(array_ref);
  16867. }
  16868. Z_ADDREF_P(array_ref);
  16869. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  16870. } else {
  16871. array_ref = EX_VAR(opline->result.var);
  16872. ZVAL_NEW_REF(array_ref, array_ptr);
  16873. array_ptr = Z_REFVAL_P(array_ref);
  16874. }
  16875. if (IS_TMP_VAR == IS_CONST) {
  16876. ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
  16877. } else {
  16878. SEPARATE_ARRAY(array_ptr);
  16879. }
  16880. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
  16881. if (IS_TMP_VAR == IS_VAR) {
  16882. }
  16883. ZEND_VM_NEXT_OPCODE();
  16884. } else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  16885. if (!Z_OBJCE_P(array_ptr)->get_iterator) {
  16886. HashTable *properties;
  16887. if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
  16888. if (array_ptr == array_ref) {
  16889. ZVAL_NEW_REF(array_ref, array_ref);
  16890. array_ptr = Z_REFVAL_P(array_ref);
  16891. }
  16892. Z_ADDREF_P(array_ref);
  16893. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  16894. } else {
  16895. array_ptr = EX_VAR(opline->result.var);
  16896. ZVAL_COPY_VALUE(array_ptr, array_ref);
  16897. }
  16898. if (Z_OBJ_P(array_ptr)->properties
  16899. && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
  16900. if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
  16901. GC_DELREF(Z_OBJ_P(array_ptr)->properties);
  16902. }
  16903. Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
  16904. }
  16905. properties = Z_OBJPROP_P(array_ptr);
  16906. if (zend_hash_num_elements(properties) == 0) {
  16907. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
  16908. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  16909. }
  16910. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
  16911. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16912. } else {
  16913. bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
  16914. if (IS_TMP_VAR == IS_VAR) {
  16915. } else {
  16916. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16917. }
  16918. if (UNEXPECTED(EG(exception))) {
  16919. HANDLE_EXCEPTION();
  16920. } else if (is_empty) {
  16921. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  16922. } else {
  16923. ZEND_VM_NEXT_OPCODE();
  16924. }
  16925. }
  16926. } else {
  16927. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
  16928. ZVAL_UNDEF(EX_VAR(opline->result.var));
  16929. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  16930. if (IS_TMP_VAR == IS_VAR) {
  16931. } else {
  16932. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16933. }
  16934. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  16935. }
  16936. }
  16937. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16938. {
  16939. USE_OPLINE
  16940. if (E_HAS_ONLY_FATAL_ERRORS(EG(error_reporting))
  16941. && !E_HAS_ONLY_FATAL_ERRORS(Z_LVAL_P(EX_VAR(opline->op1.var)))) {
  16942. EG(error_reporting) = Z_LVAL_P(EX_VAR(opline->op1.var));
  16943. }
  16944. ZEND_VM_NEXT_OPCODE();
  16945. }
  16946. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16947. {
  16948. USE_OPLINE
  16949. zval *value;
  16950. zend_reference *ref = NULL;
  16951. bool ret;
  16952. SAVE_OPLINE();
  16953. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  16954. if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
  16955. if (IS_TMP_VAR == IS_VAR) {
  16956. ref = Z_REF_P(value);
  16957. }
  16958. value = Z_REFVAL_P(value);
  16959. }
  16960. ret = i_zend_is_true(value);
  16961. if (UNEXPECTED(EG(exception))) {
  16962. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16963. ZVAL_UNDEF(EX_VAR(opline->result.var));
  16964. HANDLE_EXCEPTION();
  16965. }
  16966. if (ret) {
  16967. zval *result = EX_VAR(opline->result.var);
  16968. ZVAL_COPY_VALUE(result, value);
  16969. if (IS_TMP_VAR == IS_CONST) {
  16970. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  16971. } else if (IS_TMP_VAR == IS_CV) {
  16972. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  16973. } else if (IS_TMP_VAR == IS_VAR && ref) {
  16974. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  16975. efree_size(ref, sizeof(zend_reference));
  16976. } else if (Z_OPT_REFCOUNTED_P(result)) {
  16977. Z_ADDREF_P(result);
  16978. }
  16979. }
  16980. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  16981. }
  16982. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  16983. ZEND_VM_NEXT_OPCODE();
  16984. }
  16985. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16986. {
  16987. USE_OPLINE
  16988. zval *value;
  16989. zend_reference *ref = NULL;
  16990. SAVE_OPLINE();
  16991. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  16992. if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  16993. if (IS_TMP_VAR & IS_VAR) {
  16994. ref = Z_REF_P(value);
  16995. }
  16996. value = Z_REFVAL_P(value);
  16997. }
  16998. if (Z_TYPE_P(value) > IS_NULL) {
  16999. zval *result = EX_VAR(opline->result.var);
  17000. ZVAL_COPY_VALUE(result, value);
  17001. if (IS_TMP_VAR == IS_CONST) {
  17002. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  17003. } else if (IS_TMP_VAR == IS_CV) {
  17004. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  17005. } else if ((IS_TMP_VAR & IS_VAR) && ref) {
  17006. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  17007. efree_size(ref, sizeof(zend_reference));
  17008. } else if (Z_OPT_REFCOUNTED_P(result)) {
  17009. Z_ADDREF_P(result);
  17010. }
  17011. }
  17012. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  17013. }
  17014. if ((IS_TMP_VAR & IS_VAR) && ref) {
  17015. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  17016. efree_size(ref, sizeof(zend_reference));
  17017. }
  17018. }
  17019. ZEND_VM_NEXT_OPCODE();
  17020. }
  17021. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17022. {
  17023. USE_OPLINE
  17024. zval *val, *result;
  17025. val = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17026. if (Z_TYPE_P(val) > IS_NULL) {
  17027. do {
  17028. if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
  17029. val = Z_REFVAL_P(val);
  17030. if (Z_TYPE_P(val) <= IS_NULL) {
  17031. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17032. break;
  17033. }
  17034. }
  17035. ZEND_VM_NEXT_OPCODE();
  17036. } while (0);
  17037. }
  17038. result = EX_VAR(opline->result.var);
  17039. if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
  17040. ZVAL_NULL(result);
  17041. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
  17042. SAVE_OPLINE();
  17043. ZVAL_UNDEFINED_OP1();
  17044. if (UNEXPECTED(EG(exception) != NULL)) {
  17045. HANDLE_EXCEPTION();
  17046. }
  17047. }
  17048. } else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
  17049. ZVAL_FALSE(result);
  17050. } else {
  17051. ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
  17052. ZVAL_TRUE(result);
  17053. }
  17054. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  17055. }
  17056. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17057. {
  17058. USE_OPLINE
  17059. zval *value;
  17060. zval *result = EX_VAR(opline->result.var);
  17061. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17062. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  17063. SAVE_OPLINE();
  17064. ZVAL_UNDEFINED_OP1();
  17065. ZVAL_NULL(result);
  17066. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17067. }
  17068. if (IS_TMP_VAR == IS_CV) {
  17069. ZVAL_COPY_DEREF(result, value);
  17070. } else if (IS_TMP_VAR == IS_VAR) {
  17071. if (UNEXPECTED(Z_ISREF_P(value))) {
  17072. ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
  17073. if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
  17074. efree_size(Z_REF_P(value), sizeof(zend_reference));
  17075. } else if (Z_OPT_REFCOUNTED_P(result)) {
  17076. Z_ADDREF_P(result);
  17077. }
  17078. } else {
  17079. ZVAL_COPY_VALUE(result, value);
  17080. }
  17081. } else {
  17082. ZVAL_COPY_VALUE(result, value);
  17083. if (IS_TMP_VAR == IS_CONST) {
  17084. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
  17085. Z_ADDREF_P(result);
  17086. }
  17087. }
  17088. }
  17089. ZEND_VM_NEXT_OPCODE();
  17090. }
  17091. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17092. {
  17093. USE_OPLINE
  17094. zval *op1, *op2;
  17095. bool result;
  17096. SAVE_OPLINE();
  17097. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17098. op2 = RT_CONSTANT(opline, opline->op2);
  17099. result = fast_is_identical_function(op1, op2);
  17100. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17101. ZEND_VM_SMART_BRANCH(result, 1);
  17102. }
  17103. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17104. {
  17105. USE_OPLINE
  17106. zval *op1, *op2;
  17107. bool result;
  17108. SAVE_OPLINE();
  17109. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17110. op2 = RT_CONSTANT(opline, opline->op2);
  17111. result = fast_is_identical_function(op1, op2);
  17112. ZEND_VM_SMART_BRANCH(result, 1);
  17113. }
  17114. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17115. {
  17116. USE_OPLINE
  17117. zval *op1, *op2;
  17118. bool result;
  17119. SAVE_OPLINE();
  17120. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17121. op2 = RT_CONSTANT(opline, opline->op2);
  17122. result = fast_is_not_identical_function(op1, op2);
  17123. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17124. ZEND_VM_SMART_BRANCH(result, 1);
  17125. }
  17126. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17127. {
  17128. #if 0
  17129. USE_OPLINE
  17130. #endif
  17131. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  17132. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  17133. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17134. }
  17135. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17136. } else {
  17137. if (IS_CONST == IS_UNUSED) {
  17138. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17139. }
  17140. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17141. }
  17142. }
  17143. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17144. {
  17145. #if 0
  17146. USE_OPLINE
  17147. #endif
  17148. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  17149. /* Behave like FETCH_OBJ_W */
  17150. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  17151. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17152. }
  17153. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17154. } else {
  17155. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17156. }
  17157. }
  17158. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17159. {
  17160. USE_OPLINE
  17161. zend_string **rope;
  17162. zval *var;
  17163. /* op1 and result are the same */
  17164. rope = (zend_string**)EX_VAR(opline->op1.var);
  17165. if (IS_CONST == IS_CONST) {
  17166. var = RT_CONSTANT(opline, opline->op2);
  17167. rope[opline->extended_value] = Z_STR_P(var);
  17168. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  17169. Z_ADDREF_P(var);
  17170. }
  17171. } else {
  17172. var = RT_CONSTANT(opline, opline->op2);
  17173. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  17174. if (IS_CONST == IS_CV) {
  17175. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  17176. } else {
  17177. rope[opline->extended_value] = Z_STR_P(var);
  17178. }
  17179. } else {
  17180. SAVE_OPLINE();
  17181. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  17182. ZVAL_UNDEFINED_OP2();
  17183. }
  17184. rope[opline->extended_value] = zval_get_string_func(var);
  17185. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17186. }
  17187. }
  17188. ZEND_VM_NEXT_OPCODE();
  17189. }
  17190. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17191. {
  17192. USE_OPLINE
  17193. zend_string **rope;
  17194. zval *var, *ret;
  17195. uint32_t i;
  17196. size_t len = 0;
  17197. char *target;
  17198. rope = (zend_string**)EX_VAR(opline->op1.var);
  17199. if (IS_CONST == IS_CONST) {
  17200. var = RT_CONSTANT(opline, opline->op2);
  17201. rope[opline->extended_value] = Z_STR_P(var);
  17202. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  17203. Z_ADDREF_P(var);
  17204. }
  17205. } else {
  17206. var = RT_CONSTANT(opline, opline->op2);
  17207. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  17208. if (IS_CONST == IS_CV) {
  17209. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  17210. } else {
  17211. rope[opline->extended_value] = Z_STR_P(var);
  17212. }
  17213. } else {
  17214. SAVE_OPLINE();
  17215. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  17216. ZVAL_UNDEFINED_OP2();
  17217. }
  17218. rope[opline->extended_value] = zval_get_string_func(var);
  17219. if (UNEXPECTED(EG(exception))) {
  17220. for (i = 0; i <= opline->extended_value; i++) {
  17221. zend_string_release_ex(rope[i], 0);
  17222. }
  17223. ZVAL_UNDEF(EX_VAR(opline->result.var));
  17224. HANDLE_EXCEPTION();
  17225. }
  17226. }
  17227. }
  17228. for (i = 0; i <= opline->extended_value; i++) {
  17229. len += ZSTR_LEN(rope[i]);
  17230. }
  17231. ret = EX_VAR(opline->result.var);
  17232. ZVAL_STR(ret, zend_string_alloc(len, 0));
  17233. target = Z_STRVAL_P(ret);
  17234. for (i = 0; i <= opline->extended_value; i++) {
  17235. memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
  17236. target += ZSTR_LEN(rope[i]);
  17237. zend_string_release_ex(rope[i], 0);
  17238. }
  17239. *target = '\0';
  17240. ZEND_VM_NEXT_OPCODE();
  17241. }
  17242. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17243. {
  17244. USE_OPLINE
  17245. zval *value, *arg;
  17246. uint32_t arg_num;
  17247. if (IS_CONST == IS_CONST) {
  17248. SAVE_OPLINE();
  17249. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  17250. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  17251. if (UNEXPECTED(!arg)) {
  17252. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17253. HANDLE_EXCEPTION();
  17254. }
  17255. } else {
  17256. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  17257. arg_num = opline->op2.num;
  17258. }
  17259. if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
  17260. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  17261. goto send_val_by_ref;
  17262. }
  17263. } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  17264. send_val_by_ref:
  17265. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  17266. }
  17267. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17268. ZVAL_COPY_VALUE(arg, value);
  17269. if (IS_TMP_VAR == IS_CONST) {
  17270. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  17271. Z_ADDREF_P(arg);
  17272. }
  17273. }
  17274. ZEND_VM_NEXT_OPCODE();
  17275. }
  17276. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17277. {
  17278. USE_OPLINE
  17279. zval *expr_ptr, new_expr;
  17280. SAVE_OPLINE();
  17281. if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
  17282. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  17283. expr_ptr = NULL;
  17284. if (Z_ISREF_P(expr_ptr)) {
  17285. Z_ADDREF_P(expr_ptr);
  17286. } else {
  17287. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  17288. }
  17289. } else {
  17290. expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17291. if (IS_TMP_VAR == IS_TMP_VAR) {
  17292. /* pass */
  17293. } else if (IS_TMP_VAR == IS_CONST) {
  17294. Z_TRY_ADDREF_P(expr_ptr);
  17295. } else if (IS_TMP_VAR == IS_CV) {
  17296. ZVAL_DEREF(expr_ptr);
  17297. Z_TRY_ADDREF_P(expr_ptr);
  17298. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  17299. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  17300. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  17301. expr_ptr = Z_REFVAL_P(expr_ptr);
  17302. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  17303. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  17304. expr_ptr = &new_expr;
  17305. efree_size(ref, sizeof(zend_reference));
  17306. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  17307. Z_ADDREF_P(expr_ptr);
  17308. }
  17309. }
  17310. }
  17311. }
  17312. if (IS_CONST != IS_UNUSED) {
  17313. zval *offset = RT_CONSTANT(opline, opline->op2);
  17314. zend_string *str;
  17315. zend_ulong hval;
  17316. add_again:
  17317. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  17318. str = Z_STR_P(offset);
  17319. if (IS_CONST != IS_CONST) {
  17320. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  17321. goto num_index;
  17322. }
  17323. }
  17324. str_index:
  17325. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  17326. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  17327. hval = Z_LVAL_P(offset);
  17328. num_index:
  17329. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  17330. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  17331. offset = Z_REFVAL_P(offset);
  17332. goto add_again;
  17333. } else if (Z_TYPE_P(offset) == IS_NULL) {
  17334. str = ZSTR_EMPTY_ALLOC();
  17335. goto str_index;
  17336. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  17337. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  17338. goto num_index;
  17339. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  17340. hval = 0;
  17341. goto num_index;
  17342. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  17343. hval = 1;
  17344. goto num_index;
  17345. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  17346. zend_use_resource_as_offset(offset);
  17347. hval = Z_RES_HANDLE_P(offset);
  17348. goto num_index;
  17349. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  17350. ZVAL_UNDEFINED_OP2();
  17351. str = ZSTR_EMPTY_ALLOC();
  17352. goto str_index;
  17353. } else {
  17354. zend_illegal_offset();
  17355. zval_ptr_dtor_nogc(expr_ptr);
  17356. }
  17357. } else {
  17358. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  17359. zend_cannot_add_element();
  17360. zval_ptr_dtor_nogc(expr_ptr);
  17361. }
  17362. }
  17363. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17364. }
  17365. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17366. {
  17367. zval *array;
  17368. uint32_t size;
  17369. USE_OPLINE
  17370. array = EX_VAR(opline->result.var);
  17371. if (IS_TMP_VAR != IS_UNUSED) {
  17372. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  17373. ZVAL_ARR(array, zend_new_array(size));
  17374. /* Explicitly initialize array as not-packed if flag is set */
  17375. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  17376. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  17377. }
  17378. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17379. } else {
  17380. ZVAL_ARR(array, zend_new_array(0));
  17381. ZEND_VM_NEXT_OPCODE();
  17382. }
  17383. }
  17384. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17385. {
  17386. USE_OPLINE
  17387. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  17388. SAVE_OPLINE();
  17389. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  17390. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17391. }
  17392. /* Destroy the previously yielded value */
  17393. zval_ptr_dtor(&generator->value);
  17394. /* Destroy the previously yielded key */
  17395. zval_ptr_dtor(&generator->key);
  17396. /* Set the new yielded value */
  17397. if (IS_TMP_VAR != IS_UNUSED) {
  17398. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  17399. /* Constants and temporary variables aren't yieldable by reference,
  17400. * but we still allow them with a notice. */
  17401. if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
  17402. zval *value;
  17403. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  17404. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17405. ZVAL_COPY_VALUE(&generator->value, value);
  17406. if (IS_TMP_VAR == IS_CONST) {
  17407. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  17408. Z_ADDREF(generator->value);
  17409. }
  17410. }
  17411. } else {
  17412. zval *value_ptr = NULL;
  17413. /* If a function call result is yielded and the function did
  17414. * not return by reference we throw a notice. */
  17415. do {
  17416. if (IS_TMP_VAR == IS_VAR) {
  17417. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  17418. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  17419. && !Z_ISREF_P(value_ptr)) {
  17420. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  17421. ZVAL_COPY(&generator->value, value_ptr);
  17422. break;
  17423. }
  17424. }
  17425. if (Z_ISREF_P(value_ptr)) {
  17426. Z_ADDREF_P(value_ptr);
  17427. } else {
  17428. ZVAL_MAKE_REF_EX(value_ptr, 2);
  17429. }
  17430. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  17431. } while (0);
  17432. }
  17433. } else {
  17434. zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17435. /* Consts, temporary variables and references need copying */
  17436. if (IS_TMP_VAR == IS_CONST) {
  17437. ZVAL_COPY_VALUE(&generator->value, value);
  17438. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  17439. Z_ADDREF(generator->value);
  17440. }
  17441. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  17442. ZVAL_COPY_VALUE(&generator->value, value);
  17443. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  17444. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  17445. } else {
  17446. ZVAL_COPY_VALUE(&generator->value, value);
  17447. if (IS_TMP_VAR == IS_CV) {
  17448. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  17449. }
  17450. }
  17451. }
  17452. } else {
  17453. /* If no value was specified yield null */
  17454. ZVAL_NULL(&generator->value);
  17455. }
  17456. /* Set the new yielded key */
  17457. if (IS_CONST != IS_UNUSED) {
  17458. zval *key = RT_CONSTANT(opline, opline->op2);
  17459. if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  17460. key = Z_REFVAL_P(key);
  17461. }
  17462. ZVAL_COPY(&generator->key, key);
  17463. if (Z_TYPE(generator->key) == IS_LONG
  17464. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  17465. ) {
  17466. generator->largest_used_integer_key = Z_LVAL(generator->key);
  17467. }
  17468. } else {
  17469. /* If no key was specified we use auto-increment keys */
  17470. generator->largest_used_integer_key++;
  17471. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  17472. }
  17473. if (RETURN_VALUE_USED(opline)) {
  17474. /* If the return value of yield is used set the send
  17475. * target and initialize it to NULL */
  17476. generator->send_target = EX_VAR(opline->result.var);
  17477. ZVAL_NULL(generator->send_target);
  17478. } else {
  17479. generator->send_target = NULL;
  17480. }
  17481. /* We increment to the next op, so we are at the correct position when the
  17482. * generator is resumed. */
  17483. ZEND_VM_INC_OPCODE();
  17484. /* The GOTO VM uses a local opline variable. We need to set the opline
  17485. * variable in execute_data so we don't resume at an old position. */
  17486. SAVE_OPLINE();
  17487. ZEND_VM_RETURN();
  17488. }
  17489. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17490. {
  17491. USE_OPLINE
  17492. zval *op1;
  17493. HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  17494. zval *result;
  17495. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17496. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  17497. result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_TMP_VAR == IS_CONST);
  17498. if (IS_TMP_VAR & (IS_TMP_VAR|IS_VAR)) {
  17499. zval_ptr_dtor_str(op1);
  17500. }
  17501. ZEND_VM_SMART_BRANCH(result, 0);
  17502. }
  17503. if (opline->extended_value) {
  17504. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  17505. result = zend_hash_index_find(ht, Z_LVAL_P(op1));
  17506. ZEND_VM_SMART_BRANCH(result, 0);
  17507. }
  17508. SAVE_OPLINE();
  17509. if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
  17510. op1 = Z_REFVAL_P(op1);
  17511. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  17512. result = zend_hash_find(ht, Z_STR_P(op1));
  17513. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17514. ZEND_VM_SMART_BRANCH(result, 0);
  17515. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  17516. result = zend_hash_index_find(ht, Z_LVAL_P(op1));
  17517. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17518. ZEND_VM_SMART_BRANCH(result, 0);
  17519. }
  17520. } else if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  17521. ZVAL_UNDEFINED_OP1();
  17522. }
  17523. } else if (Z_TYPE_P(op1) <= IS_FALSE) {
  17524. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  17525. SAVE_OPLINE();
  17526. ZVAL_UNDEFINED_OP1();
  17527. if (UNEXPECTED(EG(exception) != NULL)) {
  17528. HANDLE_EXCEPTION();
  17529. }
  17530. }
  17531. result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
  17532. ZEND_VM_SMART_BRANCH(result, 0);
  17533. } else {
  17534. zend_string *key;
  17535. zval key_tmp;
  17536. if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
  17537. op1 = Z_REFVAL_P(op1);
  17538. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  17539. result = zend_hash_find(ht, Z_STR_P(op1));
  17540. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17541. ZEND_VM_SMART_BRANCH(result, 0);
  17542. }
  17543. }
  17544. SAVE_OPLINE();
  17545. ZEND_HASH_FOREACH_STR_KEY(ht, key) {
  17546. ZVAL_STR(&key_tmp, key);
  17547. if (zend_compare(op1, &key_tmp) == 0) {
  17548. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17549. ZEND_VM_SMART_BRANCH(1, 1);
  17550. }
  17551. } ZEND_HASH_FOREACH_END();
  17552. }
  17553. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17554. ZEND_VM_SMART_BRANCH(0, 1);
  17555. }
  17556. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17557. {
  17558. #if 0
  17559. USE_OPLINE
  17560. #endif
  17561. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  17562. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  17563. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17564. }
  17565. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17566. } else {
  17567. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  17568. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17569. }
  17570. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17571. }
  17572. }
  17573. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17574. {
  17575. #if 0
  17576. USE_OPLINE
  17577. #endif
  17578. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  17579. /* Behave like FETCH_OBJ_W */
  17580. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  17581. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17582. }
  17583. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17584. } else {
  17585. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17586. }
  17587. }
  17588. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17589. {
  17590. USE_OPLINE
  17591. zend_string **rope;
  17592. zval *var;
  17593. /* op1 and result are the same */
  17594. rope = (zend_string**)EX_VAR(opline->op1.var);
  17595. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  17596. var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  17597. rope[opline->extended_value] = Z_STR_P(var);
  17598. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  17599. Z_ADDREF_P(var);
  17600. }
  17601. } else {
  17602. var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  17603. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  17604. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  17605. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  17606. } else {
  17607. rope[opline->extended_value] = Z_STR_P(var);
  17608. }
  17609. } else {
  17610. SAVE_OPLINE();
  17611. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  17612. ZVAL_UNDEFINED_OP2();
  17613. }
  17614. rope[opline->extended_value] = zval_get_string_func(var);
  17615. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  17616. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17617. }
  17618. }
  17619. ZEND_VM_NEXT_OPCODE();
  17620. }
  17621. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17622. {
  17623. USE_OPLINE
  17624. zend_string **rope;
  17625. zval *var, *ret;
  17626. uint32_t i;
  17627. size_t len = 0;
  17628. char *target;
  17629. rope = (zend_string**)EX_VAR(opline->op1.var);
  17630. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  17631. var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  17632. rope[opline->extended_value] = Z_STR_P(var);
  17633. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  17634. Z_ADDREF_P(var);
  17635. }
  17636. } else {
  17637. var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  17638. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  17639. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  17640. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  17641. } else {
  17642. rope[opline->extended_value] = Z_STR_P(var);
  17643. }
  17644. } else {
  17645. SAVE_OPLINE();
  17646. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  17647. ZVAL_UNDEFINED_OP2();
  17648. }
  17649. rope[opline->extended_value] = zval_get_string_func(var);
  17650. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  17651. if (UNEXPECTED(EG(exception))) {
  17652. for (i = 0; i <= opline->extended_value; i++) {
  17653. zend_string_release_ex(rope[i], 0);
  17654. }
  17655. ZVAL_UNDEF(EX_VAR(opline->result.var));
  17656. HANDLE_EXCEPTION();
  17657. }
  17658. }
  17659. }
  17660. for (i = 0; i <= opline->extended_value; i++) {
  17661. len += ZSTR_LEN(rope[i]);
  17662. }
  17663. ret = EX_VAR(opline->result.var);
  17664. ZVAL_STR(ret, zend_string_alloc(len, 0));
  17665. target = Z_STRVAL_P(ret);
  17666. for (i = 0; i <= opline->extended_value; i++) {
  17667. memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
  17668. target += ZSTR_LEN(rope[i]);
  17669. zend_string_release_ex(rope[i], 0);
  17670. }
  17671. *target = '\0';
  17672. ZEND_VM_NEXT_OPCODE();
  17673. }
  17674. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17675. {
  17676. USE_OPLINE
  17677. zval *expr_ptr, new_expr;
  17678. SAVE_OPLINE();
  17679. if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
  17680. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  17681. expr_ptr = NULL;
  17682. if (Z_ISREF_P(expr_ptr)) {
  17683. Z_ADDREF_P(expr_ptr);
  17684. } else {
  17685. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  17686. }
  17687. } else {
  17688. expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17689. if (IS_TMP_VAR == IS_TMP_VAR) {
  17690. /* pass */
  17691. } else if (IS_TMP_VAR == IS_CONST) {
  17692. Z_TRY_ADDREF_P(expr_ptr);
  17693. } else if (IS_TMP_VAR == IS_CV) {
  17694. ZVAL_DEREF(expr_ptr);
  17695. Z_TRY_ADDREF_P(expr_ptr);
  17696. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  17697. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  17698. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  17699. expr_ptr = Z_REFVAL_P(expr_ptr);
  17700. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  17701. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  17702. expr_ptr = &new_expr;
  17703. efree_size(ref, sizeof(zend_reference));
  17704. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  17705. Z_ADDREF_P(expr_ptr);
  17706. }
  17707. }
  17708. }
  17709. }
  17710. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  17711. zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  17712. zend_string *str;
  17713. zend_ulong hval;
  17714. add_again:
  17715. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  17716. str = Z_STR_P(offset);
  17717. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  17718. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  17719. goto num_index;
  17720. }
  17721. }
  17722. str_index:
  17723. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  17724. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  17725. hval = Z_LVAL_P(offset);
  17726. num_index:
  17727. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  17728. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  17729. offset = Z_REFVAL_P(offset);
  17730. goto add_again;
  17731. } else if (Z_TYPE_P(offset) == IS_NULL) {
  17732. str = ZSTR_EMPTY_ALLOC();
  17733. goto str_index;
  17734. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  17735. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  17736. goto num_index;
  17737. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  17738. hval = 0;
  17739. goto num_index;
  17740. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  17741. hval = 1;
  17742. goto num_index;
  17743. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  17744. zend_use_resource_as_offset(offset);
  17745. hval = Z_RES_HANDLE_P(offset);
  17746. goto num_index;
  17747. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  17748. ZVAL_UNDEFINED_OP2();
  17749. str = ZSTR_EMPTY_ALLOC();
  17750. goto str_index;
  17751. } else {
  17752. zend_illegal_offset();
  17753. zval_ptr_dtor_nogc(expr_ptr);
  17754. }
  17755. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  17756. } else {
  17757. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  17758. zend_cannot_add_element();
  17759. zval_ptr_dtor_nogc(expr_ptr);
  17760. }
  17761. }
  17762. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17763. }
  17764. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17765. {
  17766. zval *array;
  17767. uint32_t size;
  17768. USE_OPLINE
  17769. array = EX_VAR(opline->result.var);
  17770. if (IS_TMP_VAR != IS_UNUSED) {
  17771. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  17772. ZVAL_ARR(array, zend_new_array(size));
  17773. /* Explicitly initialize array as not-packed if flag is set */
  17774. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  17775. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  17776. }
  17777. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17778. } else {
  17779. ZVAL_ARR(array, zend_new_array(0));
  17780. ZEND_VM_NEXT_OPCODE();
  17781. }
  17782. }
  17783. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17784. {
  17785. USE_OPLINE
  17786. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  17787. SAVE_OPLINE();
  17788. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  17789. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17790. }
  17791. /* Destroy the previously yielded value */
  17792. zval_ptr_dtor(&generator->value);
  17793. /* Destroy the previously yielded key */
  17794. zval_ptr_dtor(&generator->key);
  17795. /* Set the new yielded value */
  17796. if (IS_TMP_VAR != IS_UNUSED) {
  17797. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  17798. /* Constants and temporary variables aren't yieldable by reference,
  17799. * but we still allow them with a notice. */
  17800. if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
  17801. zval *value;
  17802. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  17803. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17804. ZVAL_COPY_VALUE(&generator->value, value);
  17805. if (IS_TMP_VAR == IS_CONST) {
  17806. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  17807. Z_ADDREF(generator->value);
  17808. }
  17809. }
  17810. } else {
  17811. zval *value_ptr = NULL;
  17812. /* If a function call result is yielded and the function did
  17813. * not return by reference we throw a notice. */
  17814. do {
  17815. if (IS_TMP_VAR == IS_VAR) {
  17816. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  17817. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  17818. && !Z_ISREF_P(value_ptr)) {
  17819. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  17820. ZVAL_COPY(&generator->value, value_ptr);
  17821. break;
  17822. }
  17823. }
  17824. if (Z_ISREF_P(value_ptr)) {
  17825. Z_ADDREF_P(value_ptr);
  17826. } else {
  17827. ZVAL_MAKE_REF_EX(value_ptr, 2);
  17828. }
  17829. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  17830. } while (0);
  17831. }
  17832. } else {
  17833. zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17834. /* Consts, temporary variables and references need copying */
  17835. if (IS_TMP_VAR == IS_CONST) {
  17836. ZVAL_COPY_VALUE(&generator->value, value);
  17837. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  17838. Z_ADDREF(generator->value);
  17839. }
  17840. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  17841. ZVAL_COPY_VALUE(&generator->value, value);
  17842. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  17843. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  17844. } else {
  17845. ZVAL_COPY_VALUE(&generator->value, value);
  17846. if (IS_TMP_VAR == IS_CV) {
  17847. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  17848. }
  17849. }
  17850. }
  17851. } else {
  17852. /* If no value was specified yield null */
  17853. ZVAL_NULL(&generator->value);
  17854. }
  17855. /* Set the new yielded key */
  17856. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  17857. zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  17858. if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  17859. key = Z_REFVAL_P(key);
  17860. }
  17861. ZVAL_COPY(&generator->key, key);
  17862. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  17863. if (Z_TYPE(generator->key) == IS_LONG
  17864. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  17865. ) {
  17866. generator->largest_used_integer_key = Z_LVAL(generator->key);
  17867. }
  17868. } else {
  17869. /* If no key was specified we use auto-increment keys */
  17870. generator->largest_used_integer_key++;
  17871. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  17872. }
  17873. if (RETURN_VALUE_USED(opline)) {
  17874. /* If the return value of yield is used set the send
  17875. * target and initialize it to NULL */
  17876. generator->send_target = EX_VAR(opline->result.var);
  17877. ZVAL_NULL(generator->send_target);
  17878. } else {
  17879. generator->send_target = NULL;
  17880. }
  17881. /* We increment to the next op, so we are at the correct position when the
  17882. * generator is resumed. */
  17883. ZEND_VM_INC_OPCODE();
  17884. /* The GOTO VM uses a local opline variable. We need to set the opline
  17885. * variable in execute_data so we don't resume at an old position. */
  17886. SAVE_OPLINE();
  17887. ZEND_VM_RETURN();
  17888. }
  17889. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17890. {
  17891. USE_OPLINE
  17892. zval *op1, *op2;
  17893. bool result;
  17894. SAVE_OPLINE();
  17895. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17896. op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  17897. result = fast_is_identical_function(op1, op2);
  17898. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17899. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  17900. ZEND_VM_SMART_BRANCH(result, 1);
  17901. }
  17902. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17903. {
  17904. USE_OPLINE
  17905. zval *op1, *op2;
  17906. bool result;
  17907. SAVE_OPLINE();
  17908. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17909. op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  17910. result = fast_is_identical_function(op1, op2);
  17911. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  17912. ZEND_VM_SMART_BRANCH(result, 1);
  17913. }
  17914. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17915. {
  17916. USE_OPLINE
  17917. zval *op1, *op2;
  17918. bool result;
  17919. SAVE_OPLINE();
  17920. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17921. op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  17922. result = fast_is_not_identical_function(op1, op2);
  17923. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  17924. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  17925. ZEND_VM_SMART_BRANCH(result, 1);
  17926. }
  17927. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17928. {
  17929. USE_OPLINE
  17930. zval *op1, *op2;
  17931. bool result;
  17932. SAVE_OPLINE();
  17933. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17934. op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
  17935. result = fast_is_identical_function(op1, op2);
  17936. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  17937. ZEND_VM_SMART_BRANCH(result, 1);
  17938. }
  17939. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17940. {
  17941. #if 0
  17942. USE_OPLINE
  17943. #endif
  17944. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  17945. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  17946. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17947. }
  17948. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17949. } else {
  17950. if (IS_UNUSED == IS_UNUSED) {
  17951. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17952. }
  17953. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17954. }
  17955. }
  17956. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17957. {
  17958. if (IS_TMP_VAR == IS_UNUSED) {
  17959. SAVE_OPLINE();
  17960. zend_verify_missing_return_type(EX(func));
  17961. HANDLE_EXCEPTION();
  17962. } else {
  17963. /* prevents "undefined variable opline" errors */
  17964. #if 0 || (IS_TMP_VAR != IS_UNUSED)
  17965. USE_OPLINE
  17966. zval *retval_ref, *retval_ptr;
  17967. zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
  17968. retval_ref = retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  17969. if (IS_TMP_VAR == IS_CONST) {
  17970. ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
  17971. retval_ref = retval_ptr = EX_VAR(opline->result.var);
  17972. } else if (IS_TMP_VAR == IS_VAR) {
  17973. if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
  17974. retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
  17975. }
  17976. ZVAL_DEREF(retval_ptr);
  17977. } else if (IS_TMP_VAR == IS_CV) {
  17978. ZVAL_DEREF(retval_ptr);
  17979. }
  17980. if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
  17981. ZEND_VM_NEXT_OPCODE();
  17982. }
  17983. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
  17984. SAVE_OPLINE();
  17985. retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
  17986. if (UNEXPECTED(EG(exception))) {
  17987. HANDLE_EXCEPTION();
  17988. }
  17989. if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
  17990. ZEND_VM_NEXT_OPCODE();
  17991. }
  17992. }
  17993. zend_reference *ref = NULL;
  17994. void *cache_slot = CACHE_ADDR(opline->op2.num);
  17995. if (UNEXPECTED(retval_ref != retval_ptr)) {
  17996. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  17997. ref = Z_REF_P(retval_ref);
  17998. } else {
  17999. /* A cast might happen - unwrap the reference if this is a by-value return */
  18000. if (Z_REFCOUNT_P(retval_ref) == 1) {
  18001. ZVAL_UNREF(retval_ref);
  18002. } else {
  18003. Z_DELREF_P(retval_ref);
  18004. ZVAL_COPY(retval_ref, retval_ptr);
  18005. }
  18006. retval_ptr = retval_ref;
  18007. }
  18008. }
  18009. SAVE_OPLINE();
  18010. if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
  18011. zend_verify_return_error(EX(func), retval_ptr);
  18012. HANDLE_EXCEPTION();
  18013. }
  18014. ZEND_VM_NEXT_OPCODE();
  18015. #endif
  18016. }
  18017. }
  18018. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18019. {
  18020. USE_OPLINE
  18021. zval *value, *arg;
  18022. uint32_t arg_num;
  18023. if (IS_UNUSED == IS_CONST) {
  18024. SAVE_OPLINE();
  18025. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  18026. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  18027. if (UNEXPECTED(!arg)) {
  18028. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18029. HANDLE_EXCEPTION();
  18030. }
  18031. } else {
  18032. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  18033. arg_num = opline->op2.num;
  18034. }
  18035. if (EXPECTED(0)) {
  18036. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  18037. goto send_val_by_ref;
  18038. }
  18039. } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  18040. send_val_by_ref:
  18041. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  18042. }
  18043. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18044. ZVAL_COPY_VALUE(arg, value);
  18045. if (IS_TMP_VAR == IS_CONST) {
  18046. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  18047. Z_ADDREF_P(arg);
  18048. }
  18049. }
  18050. ZEND_VM_NEXT_OPCODE();
  18051. }
  18052. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18053. {
  18054. USE_OPLINE
  18055. zval *value, *arg;
  18056. uint32_t arg_num;
  18057. if (IS_UNUSED == IS_CONST) {
  18058. SAVE_OPLINE();
  18059. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  18060. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  18061. if (UNEXPECTED(!arg)) {
  18062. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18063. HANDLE_EXCEPTION();
  18064. }
  18065. } else {
  18066. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  18067. arg_num = opline->op2.num;
  18068. }
  18069. if (EXPECTED(1)) {
  18070. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  18071. goto send_val_by_ref;
  18072. }
  18073. } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  18074. send_val_by_ref:
  18075. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  18076. }
  18077. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18078. ZVAL_COPY_VALUE(arg, value);
  18079. if (IS_TMP_VAR == IS_CONST) {
  18080. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  18081. Z_ADDREF_P(arg);
  18082. }
  18083. }
  18084. ZEND_VM_NEXT_OPCODE();
  18085. }
  18086. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18087. {
  18088. USE_OPLINE
  18089. zval *expr_ptr, new_expr;
  18090. SAVE_OPLINE();
  18091. if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
  18092. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  18093. expr_ptr = NULL;
  18094. if (Z_ISREF_P(expr_ptr)) {
  18095. Z_ADDREF_P(expr_ptr);
  18096. } else {
  18097. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  18098. }
  18099. } else {
  18100. expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18101. if (IS_TMP_VAR == IS_TMP_VAR) {
  18102. /* pass */
  18103. } else if (IS_TMP_VAR == IS_CONST) {
  18104. Z_TRY_ADDREF_P(expr_ptr);
  18105. } else if (IS_TMP_VAR == IS_CV) {
  18106. ZVAL_DEREF(expr_ptr);
  18107. Z_TRY_ADDREF_P(expr_ptr);
  18108. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  18109. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  18110. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  18111. expr_ptr = Z_REFVAL_P(expr_ptr);
  18112. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  18113. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  18114. expr_ptr = &new_expr;
  18115. efree_size(ref, sizeof(zend_reference));
  18116. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  18117. Z_ADDREF_P(expr_ptr);
  18118. }
  18119. }
  18120. }
  18121. }
  18122. if (IS_UNUSED != IS_UNUSED) {
  18123. zval *offset = NULL;
  18124. zend_string *str;
  18125. zend_ulong hval;
  18126. add_again:
  18127. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  18128. str = Z_STR_P(offset);
  18129. if (IS_UNUSED != IS_CONST) {
  18130. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  18131. goto num_index;
  18132. }
  18133. }
  18134. str_index:
  18135. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  18136. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  18137. hval = Z_LVAL_P(offset);
  18138. num_index:
  18139. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  18140. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  18141. offset = Z_REFVAL_P(offset);
  18142. goto add_again;
  18143. } else if (Z_TYPE_P(offset) == IS_NULL) {
  18144. str = ZSTR_EMPTY_ALLOC();
  18145. goto str_index;
  18146. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  18147. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  18148. goto num_index;
  18149. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  18150. hval = 0;
  18151. goto num_index;
  18152. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  18153. hval = 1;
  18154. goto num_index;
  18155. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  18156. zend_use_resource_as_offset(offset);
  18157. hval = Z_RES_HANDLE_P(offset);
  18158. goto num_index;
  18159. } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  18160. ZVAL_UNDEFINED_OP2();
  18161. str = ZSTR_EMPTY_ALLOC();
  18162. goto str_index;
  18163. } else {
  18164. zend_illegal_offset();
  18165. zval_ptr_dtor_nogc(expr_ptr);
  18166. }
  18167. } else {
  18168. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  18169. zend_cannot_add_element();
  18170. zval_ptr_dtor_nogc(expr_ptr);
  18171. }
  18172. }
  18173. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18174. }
  18175. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18176. {
  18177. zval *array;
  18178. uint32_t size;
  18179. USE_OPLINE
  18180. array = EX_VAR(opline->result.var);
  18181. if (IS_TMP_VAR != IS_UNUSED) {
  18182. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  18183. ZVAL_ARR(array, zend_new_array(size));
  18184. /* Explicitly initialize array as not-packed if flag is set */
  18185. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  18186. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  18187. }
  18188. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18189. } else {
  18190. ZVAL_ARR(array, zend_new_array(0));
  18191. ZEND_VM_NEXT_OPCODE();
  18192. }
  18193. }
  18194. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18195. {
  18196. USE_OPLINE
  18197. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  18198. SAVE_OPLINE();
  18199. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  18200. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18201. }
  18202. /* Destroy the previously yielded value */
  18203. zval_ptr_dtor(&generator->value);
  18204. /* Destroy the previously yielded key */
  18205. zval_ptr_dtor(&generator->key);
  18206. /* Set the new yielded value */
  18207. if (IS_TMP_VAR != IS_UNUSED) {
  18208. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  18209. /* Constants and temporary variables aren't yieldable by reference,
  18210. * but we still allow them with a notice. */
  18211. if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
  18212. zval *value;
  18213. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  18214. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18215. ZVAL_COPY_VALUE(&generator->value, value);
  18216. if (IS_TMP_VAR == IS_CONST) {
  18217. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  18218. Z_ADDREF(generator->value);
  18219. }
  18220. }
  18221. } else {
  18222. zval *value_ptr = NULL;
  18223. /* If a function call result is yielded and the function did
  18224. * not return by reference we throw a notice. */
  18225. do {
  18226. if (IS_TMP_VAR == IS_VAR) {
  18227. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  18228. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  18229. && !Z_ISREF_P(value_ptr)) {
  18230. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  18231. ZVAL_COPY(&generator->value, value_ptr);
  18232. break;
  18233. }
  18234. }
  18235. if (Z_ISREF_P(value_ptr)) {
  18236. Z_ADDREF_P(value_ptr);
  18237. } else {
  18238. ZVAL_MAKE_REF_EX(value_ptr, 2);
  18239. }
  18240. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  18241. } while (0);
  18242. }
  18243. } else {
  18244. zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18245. /* Consts, temporary variables and references need copying */
  18246. if (IS_TMP_VAR == IS_CONST) {
  18247. ZVAL_COPY_VALUE(&generator->value, value);
  18248. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  18249. Z_ADDREF(generator->value);
  18250. }
  18251. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  18252. ZVAL_COPY_VALUE(&generator->value, value);
  18253. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  18254. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  18255. } else {
  18256. ZVAL_COPY_VALUE(&generator->value, value);
  18257. if (IS_TMP_VAR == IS_CV) {
  18258. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  18259. }
  18260. }
  18261. }
  18262. } else {
  18263. /* If no value was specified yield null */
  18264. ZVAL_NULL(&generator->value);
  18265. }
  18266. /* Set the new yielded key */
  18267. if (IS_UNUSED != IS_UNUSED) {
  18268. zval *key = NULL;
  18269. if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  18270. key = Z_REFVAL_P(key);
  18271. }
  18272. ZVAL_COPY(&generator->key, key);
  18273. if (Z_TYPE(generator->key) == IS_LONG
  18274. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  18275. ) {
  18276. generator->largest_used_integer_key = Z_LVAL(generator->key);
  18277. }
  18278. } else {
  18279. /* If no key was specified we use auto-increment keys */
  18280. generator->largest_used_integer_key++;
  18281. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  18282. }
  18283. if (RETURN_VALUE_USED(opline)) {
  18284. /* If the return value of yield is used set the send
  18285. * target and initialize it to NULL */
  18286. generator->send_target = EX_VAR(opline->result.var);
  18287. ZVAL_NULL(generator->send_target);
  18288. } else {
  18289. generator->send_target = NULL;
  18290. }
  18291. /* We increment to the next op, so we are at the correct position when the
  18292. * generator is resumed. */
  18293. ZEND_VM_INC_OPCODE();
  18294. /* The GOTO VM uses a local opline variable. We need to set the opline
  18295. * variable in execute_data so we don't resume at an old position. */
  18296. SAVE_OPLINE();
  18297. ZEND_VM_RETURN();
  18298. }
  18299. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18300. {
  18301. USE_OPLINE
  18302. zval *op1;
  18303. zend_string *type;
  18304. SAVE_OPLINE();
  18305. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18306. type = zend_zval_get_legacy_type(op1);
  18307. if (EXPECTED(type)) {
  18308. ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
  18309. } else {
  18310. ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
  18311. }
  18312. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18313. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18314. }
  18315. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18316. {
  18317. USE_OPLINE
  18318. zval *op1, *op2;
  18319. bool result;
  18320. SAVE_OPLINE();
  18321. op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18322. op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  18323. result = fast_is_identical_function(op1, op2);
  18324. ZEND_VM_SMART_BRANCH(result, 1);
  18325. }
  18326. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18327. {
  18328. #if 0
  18329. USE_OPLINE
  18330. #endif
  18331. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  18332. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  18333. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18334. }
  18335. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18336. } else {
  18337. if (IS_CV == IS_UNUSED) {
  18338. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18339. }
  18340. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18341. }
  18342. }
  18343. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18344. {
  18345. #if 0
  18346. USE_OPLINE
  18347. #endif
  18348. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  18349. /* Behave like FETCH_OBJ_W */
  18350. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  18351. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18352. }
  18353. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18354. } else {
  18355. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18356. }
  18357. }
  18358. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18359. {
  18360. USE_OPLINE
  18361. zend_string **rope;
  18362. zval *var;
  18363. /* op1 and result are the same */
  18364. rope = (zend_string**)EX_VAR(opline->op1.var);
  18365. if (IS_CV == IS_CONST) {
  18366. var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  18367. rope[opline->extended_value] = Z_STR_P(var);
  18368. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  18369. Z_ADDREF_P(var);
  18370. }
  18371. } else {
  18372. var = EX_VAR(opline->op2.var);
  18373. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  18374. if (IS_CV == IS_CV) {
  18375. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  18376. } else {
  18377. rope[opline->extended_value] = Z_STR_P(var);
  18378. }
  18379. } else {
  18380. SAVE_OPLINE();
  18381. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  18382. ZVAL_UNDEFINED_OP2();
  18383. }
  18384. rope[opline->extended_value] = zval_get_string_func(var);
  18385. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18386. }
  18387. }
  18388. ZEND_VM_NEXT_OPCODE();
  18389. }
  18390. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18391. {
  18392. USE_OPLINE
  18393. zend_string **rope;
  18394. zval *var, *ret;
  18395. uint32_t i;
  18396. size_t len = 0;
  18397. char *target;
  18398. rope = (zend_string**)EX_VAR(opline->op1.var);
  18399. if (IS_CV == IS_CONST) {
  18400. var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  18401. rope[opline->extended_value] = Z_STR_P(var);
  18402. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  18403. Z_ADDREF_P(var);
  18404. }
  18405. } else {
  18406. var = EX_VAR(opline->op2.var);
  18407. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  18408. if (IS_CV == IS_CV) {
  18409. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  18410. } else {
  18411. rope[opline->extended_value] = Z_STR_P(var);
  18412. }
  18413. } else {
  18414. SAVE_OPLINE();
  18415. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  18416. ZVAL_UNDEFINED_OP2();
  18417. }
  18418. rope[opline->extended_value] = zval_get_string_func(var);
  18419. if (UNEXPECTED(EG(exception))) {
  18420. for (i = 0; i <= opline->extended_value; i++) {
  18421. zend_string_release_ex(rope[i], 0);
  18422. }
  18423. ZVAL_UNDEF(EX_VAR(opline->result.var));
  18424. HANDLE_EXCEPTION();
  18425. }
  18426. }
  18427. }
  18428. for (i = 0; i <= opline->extended_value; i++) {
  18429. len += ZSTR_LEN(rope[i]);
  18430. }
  18431. ret = EX_VAR(opline->result.var);
  18432. ZVAL_STR(ret, zend_string_alloc(len, 0));
  18433. target = Z_STRVAL_P(ret);
  18434. for (i = 0; i <= opline->extended_value; i++) {
  18435. memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
  18436. target += ZSTR_LEN(rope[i]);
  18437. zend_string_release_ex(rope[i], 0);
  18438. }
  18439. *target = '\0';
  18440. ZEND_VM_NEXT_OPCODE();
  18441. }
  18442. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18443. {
  18444. USE_OPLINE
  18445. zval *expr_ptr, new_expr;
  18446. SAVE_OPLINE();
  18447. if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
  18448. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  18449. expr_ptr = NULL;
  18450. if (Z_ISREF_P(expr_ptr)) {
  18451. Z_ADDREF_P(expr_ptr);
  18452. } else {
  18453. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  18454. }
  18455. } else {
  18456. expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18457. if (IS_TMP_VAR == IS_TMP_VAR) {
  18458. /* pass */
  18459. } else if (IS_TMP_VAR == IS_CONST) {
  18460. Z_TRY_ADDREF_P(expr_ptr);
  18461. } else if (IS_TMP_VAR == IS_CV) {
  18462. ZVAL_DEREF(expr_ptr);
  18463. Z_TRY_ADDREF_P(expr_ptr);
  18464. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  18465. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  18466. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  18467. expr_ptr = Z_REFVAL_P(expr_ptr);
  18468. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  18469. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  18470. expr_ptr = &new_expr;
  18471. efree_size(ref, sizeof(zend_reference));
  18472. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  18473. Z_ADDREF_P(expr_ptr);
  18474. }
  18475. }
  18476. }
  18477. }
  18478. if (IS_CV != IS_UNUSED) {
  18479. zval *offset = EX_VAR(opline->op2.var);
  18480. zend_string *str;
  18481. zend_ulong hval;
  18482. add_again:
  18483. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  18484. str = Z_STR_P(offset);
  18485. if (IS_CV != IS_CONST) {
  18486. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  18487. goto num_index;
  18488. }
  18489. }
  18490. str_index:
  18491. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  18492. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  18493. hval = Z_LVAL_P(offset);
  18494. num_index:
  18495. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  18496. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  18497. offset = Z_REFVAL_P(offset);
  18498. goto add_again;
  18499. } else if (Z_TYPE_P(offset) == IS_NULL) {
  18500. str = ZSTR_EMPTY_ALLOC();
  18501. goto str_index;
  18502. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  18503. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  18504. goto num_index;
  18505. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  18506. hval = 0;
  18507. goto num_index;
  18508. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  18509. hval = 1;
  18510. goto num_index;
  18511. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  18512. zend_use_resource_as_offset(offset);
  18513. hval = Z_RES_HANDLE_P(offset);
  18514. goto num_index;
  18515. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  18516. ZVAL_UNDEFINED_OP2();
  18517. str = ZSTR_EMPTY_ALLOC();
  18518. goto str_index;
  18519. } else {
  18520. zend_illegal_offset();
  18521. zval_ptr_dtor_nogc(expr_ptr);
  18522. }
  18523. } else {
  18524. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  18525. zend_cannot_add_element();
  18526. zval_ptr_dtor_nogc(expr_ptr);
  18527. }
  18528. }
  18529. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18530. }
  18531. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18532. {
  18533. zval *array;
  18534. uint32_t size;
  18535. USE_OPLINE
  18536. array = EX_VAR(opline->result.var);
  18537. if (IS_TMP_VAR != IS_UNUSED) {
  18538. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  18539. ZVAL_ARR(array, zend_new_array(size));
  18540. /* Explicitly initialize array as not-packed if flag is set */
  18541. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  18542. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  18543. }
  18544. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18545. } else {
  18546. ZVAL_ARR(array, zend_new_array(0));
  18547. ZEND_VM_NEXT_OPCODE();
  18548. }
  18549. }
  18550. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18551. {
  18552. USE_OPLINE
  18553. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  18554. SAVE_OPLINE();
  18555. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  18556. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18557. }
  18558. /* Destroy the previously yielded value */
  18559. zval_ptr_dtor(&generator->value);
  18560. /* Destroy the previously yielded key */
  18561. zval_ptr_dtor(&generator->key);
  18562. /* Set the new yielded value */
  18563. if (IS_TMP_VAR != IS_UNUSED) {
  18564. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  18565. /* Constants and temporary variables aren't yieldable by reference,
  18566. * but we still allow them with a notice. */
  18567. if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
  18568. zval *value;
  18569. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  18570. value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18571. ZVAL_COPY_VALUE(&generator->value, value);
  18572. if (IS_TMP_VAR == IS_CONST) {
  18573. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  18574. Z_ADDREF(generator->value);
  18575. }
  18576. }
  18577. } else {
  18578. zval *value_ptr = NULL;
  18579. /* If a function call result is yielded and the function did
  18580. * not return by reference we throw a notice. */
  18581. do {
  18582. if (IS_TMP_VAR == IS_VAR) {
  18583. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  18584. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  18585. && !Z_ISREF_P(value_ptr)) {
  18586. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  18587. ZVAL_COPY(&generator->value, value_ptr);
  18588. break;
  18589. }
  18590. }
  18591. if (Z_ISREF_P(value_ptr)) {
  18592. Z_ADDREF_P(value_ptr);
  18593. } else {
  18594. ZVAL_MAKE_REF_EX(value_ptr, 2);
  18595. }
  18596. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  18597. } while (0);
  18598. }
  18599. } else {
  18600. zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18601. /* Consts, temporary variables and references need copying */
  18602. if (IS_TMP_VAR == IS_CONST) {
  18603. ZVAL_COPY_VALUE(&generator->value, value);
  18604. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  18605. Z_ADDREF(generator->value);
  18606. }
  18607. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  18608. ZVAL_COPY_VALUE(&generator->value, value);
  18609. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  18610. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  18611. } else {
  18612. ZVAL_COPY_VALUE(&generator->value, value);
  18613. if (IS_TMP_VAR == IS_CV) {
  18614. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  18615. }
  18616. }
  18617. }
  18618. } else {
  18619. /* If no value was specified yield null */
  18620. ZVAL_NULL(&generator->value);
  18621. }
  18622. /* Set the new yielded key */
  18623. if (IS_CV != IS_UNUSED) {
  18624. zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  18625. if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  18626. key = Z_REFVAL_P(key);
  18627. }
  18628. ZVAL_COPY(&generator->key, key);
  18629. if (Z_TYPE(generator->key) == IS_LONG
  18630. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  18631. ) {
  18632. generator->largest_used_integer_key = Z_LVAL(generator->key);
  18633. }
  18634. } else {
  18635. /* If no key was specified we use auto-increment keys */
  18636. generator->largest_used_integer_key++;
  18637. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  18638. }
  18639. if (RETURN_VALUE_USED(opline)) {
  18640. /* If the return value of yield is used set the send
  18641. * target and initialize it to NULL */
  18642. generator->send_target = EX_VAR(opline->result.var);
  18643. ZVAL_NULL(generator->send_target);
  18644. } else {
  18645. generator->send_target = NULL;
  18646. }
  18647. /* We increment to the next op, so we are at the correct position when the
  18648. * generator is resumed. */
  18649. ZEND_VM_INC_OPCODE();
  18650. /* The GOTO VM uses a local opline variable. We need to set the opline
  18651. * variable in execute_data so we don't resume at an old position. */
  18652. SAVE_OPLINE();
  18653. ZEND_VM_RETURN();
  18654. }
  18655. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18656. {
  18657. USE_OPLINE
  18658. zval *closure, *var;
  18659. closure = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  18660. if (opline->extended_value & ZEND_BIND_REF) {
  18661. /* By-ref binding */
  18662. var = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
  18663. if (Z_ISREF_P(var)) {
  18664. Z_ADDREF_P(var);
  18665. } else {
  18666. ZVAL_MAKE_REF_EX(var, 2);
  18667. }
  18668. } else {
  18669. var = EX_VAR(opline->op2.var);
  18670. if (UNEXPECTED(Z_ISUNDEF_P(var)) && !(opline->extended_value & ZEND_BIND_IMPLICIT)) {
  18671. SAVE_OPLINE();
  18672. var = ZVAL_UNDEFINED_OP2();
  18673. if (UNEXPECTED(EG(exception))) {
  18674. HANDLE_EXCEPTION();
  18675. }
  18676. }
  18677. ZVAL_DEREF(var);
  18678. Z_TRY_ADDREF_P(var);
  18679. }
  18680. zend_closure_bind_var_ex(closure,
  18681. (opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT)), var);
  18682. ZEND_VM_NEXT_OPCODE();
  18683. }
  18684. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
  18685. {
  18686. USE_OPLINE
  18687. zval *var_ptr;
  18688. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18689. SAVE_OPLINE();
  18690. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  18691. ZVAL_UNDEFINED_OP1();
  18692. ZVAL_NULL(var_ptr);
  18693. }
  18694. do {
  18695. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  18696. zend_reference *ref = Z_REF_P(var_ptr);
  18697. var_ptr = Z_REFVAL_P(var_ptr);
  18698. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  18699. zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
  18700. break;
  18701. }
  18702. }
  18703. increment_function(var_ptr);
  18704. } while (0);
  18705. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  18706. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  18707. }
  18708. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18709. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18710. }
  18711. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18712. {
  18713. USE_OPLINE
  18714. zval *var_ptr;
  18715. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18716. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  18717. fast_long_increment_function(var_ptr);
  18718. if (UNEXPECTED(0)) {
  18719. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  18720. }
  18721. ZEND_VM_NEXT_OPCODE();
  18722. }
  18723. ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18724. }
  18725. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18726. {
  18727. USE_OPLINE
  18728. zval *var_ptr;
  18729. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18730. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  18731. fast_long_increment_function(var_ptr);
  18732. if (UNEXPECTED(1)) {
  18733. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  18734. }
  18735. ZEND_VM_NEXT_OPCODE();
  18736. }
  18737. ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18738. }
  18739. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
  18740. {
  18741. USE_OPLINE
  18742. zval *var_ptr;
  18743. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18744. SAVE_OPLINE();
  18745. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  18746. ZVAL_UNDEFINED_OP1();
  18747. ZVAL_NULL(var_ptr);
  18748. }
  18749. do {
  18750. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  18751. zend_reference *ref = Z_REF_P(var_ptr);
  18752. var_ptr = Z_REFVAL_P(var_ptr);
  18753. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  18754. zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
  18755. break;
  18756. }
  18757. }
  18758. decrement_function(var_ptr);
  18759. } while (0);
  18760. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  18761. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  18762. }
  18763. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18764. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18765. }
  18766. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18767. {
  18768. USE_OPLINE
  18769. zval *var_ptr;
  18770. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18771. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  18772. fast_long_decrement_function(var_ptr);
  18773. if (UNEXPECTED(0)) {
  18774. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  18775. }
  18776. ZEND_VM_NEXT_OPCODE();
  18777. }
  18778. ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18779. }
  18780. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18781. {
  18782. USE_OPLINE
  18783. zval *var_ptr;
  18784. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18785. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  18786. fast_long_decrement_function(var_ptr);
  18787. if (UNEXPECTED(1)) {
  18788. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  18789. }
  18790. ZEND_VM_NEXT_OPCODE();
  18791. }
  18792. ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18793. }
  18794. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
  18795. {
  18796. USE_OPLINE
  18797. zval *var_ptr;
  18798. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18799. SAVE_OPLINE();
  18800. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  18801. ZVAL_UNDEFINED_OP1();
  18802. ZVAL_NULL(var_ptr);
  18803. }
  18804. do {
  18805. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  18806. zend_reference *ref = Z_REF_P(var_ptr);
  18807. var_ptr = Z_REFVAL_P(var_ptr);
  18808. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  18809. zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
  18810. break;
  18811. }
  18812. }
  18813. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  18814. increment_function(var_ptr);
  18815. } while (0);
  18816. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18817. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18818. }
  18819. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18820. {
  18821. USE_OPLINE
  18822. zval *var_ptr;
  18823. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18824. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  18825. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  18826. fast_long_increment_function(var_ptr);
  18827. ZEND_VM_NEXT_OPCODE();
  18828. }
  18829. ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18830. }
  18831. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
  18832. {
  18833. USE_OPLINE
  18834. zval *var_ptr;
  18835. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18836. SAVE_OPLINE();
  18837. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  18838. ZVAL_UNDEFINED_OP1();
  18839. ZVAL_NULL(var_ptr);
  18840. }
  18841. do {
  18842. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  18843. zend_reference *ref = Z_REF_P(var_ptr);
  18844. var_ptr = Z_REFVAL_P(var_ptr);
  18845. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  18846. zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
  18847. break;
  18848. }
  18849. }
  18850. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  18851. decrement_function(var_ptr);
  18852. } while (0);
  18853. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18854. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18855. }
  18856. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18857. {
  18858. USE_OPLINE
  18859. zval *var_ptr;
  18860. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18861. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  18862. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  18863. fast_long_decrement_function(var_ptr);
  18864. ZEND_VM_NEXT_OPCODE();
  18865. }
  18866. ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18867. }
  18868. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18869. {
  18870. USE_OPLINE
  18871. zval *retval_ptr;
  18872. zval *return_value;
  18873. retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18874. return_value = EX(return_value);
  18875. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  18876. SAVE_OPLINE();
  18877. retval_ptr = ZVAL_UNDEFINED_OP1();
  18878. if (return_value) {
  18879. ZVAL_NULL(return_value);
  18880. }
  18881. } else if (!return_value) {
  18882. if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
  18883. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  18884. SAVE_OPLINE();
  18885. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  18886. }
  18887. }
  18888. } else {
  18889. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  18890. ZVAL_COPY_VALUE(return_value, retval_ptr);
  18891. if (IS_VAR == IS_CONST) {
  18892. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  18893. Z_ADDREF_P(return_value);
  18894. }
  18895. }
  18896. } else if (IS_VAR == IS_CV) {
  18897. do {
  18898. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  18899. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  18900. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  18901. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  18902. ZVAL_COPY_VALUE(return_value, retval_ptr);
  18903. if (GC_MAY_LEAK(ref)) {
  18904. gc_possible_root(ref);
  18905. }
  18906. ZVAL_NULL(retval_ptr);
  18907. break;
  18908. } else {
  18909. Z_ADDREF_P(retval_ptr);
  18910. }
  18911. } else {
  18912. retval_ptr = Z_REFVAL_P(retval_ptr);
  18913. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  18914. Z_ADDREF_P(retval_ptr);
  18915. }
  18916. }
  18917. }
  18918. ZVAL_COPY_VALUE(return_value, retval_ptr);
  18919. } while (0);
  18920. } else /* if (IS_VAR == IS_VAR) */ {
  18921. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  18922. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  18923. retval_ptr = Z_REFVAL_P(retval_ptr);
  18924. ZVAL_COPY_VALUE(return_value, retval_ptr);
  18925. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  18926. efree_size(ref, sizeof(zend_reference));
  18927. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  18928. Z_ADDREF_P(retval_ptr);
  18929. }
  18930. } else {
  18931. ZVAL_COPY_VALUE(return_value, retval_ptr);
  18932. }
  18933. }
  18934. }
  18935. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18936. }
  18937. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18938. {
  18939. USE_OPLINE
  18940. zval *retval_ptr;
  18941. zval *return_value;
  18942. SAVE_OPLINE();
  18943. return_value = EX(return_value);
  18944. do {
  18945. if ((IS_VAR & (IS_CONST|IS_TMP_VAR)) ||
  18946. (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
  18947. /* Not supposed to happen, but we'll allow it */
  18948. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  18949. retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18950. if (!return_value) {
  18951. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18952. } else {
  18953. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  18954. ZVAL_COPY_VALUE(return_value, retval_ptr);
  18955. break;
  18956. }
  18957. ZVAL_NEW_REF(return_value, retval_ptr);
  18958. if (IS_VAR == IS_CONST) {
  18959. Z_TRY_ADDREF_P(retval_ptr);
  18960. }
  18961. }
  18962. break;
  18963. }
  18964. retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18965. if (IS_VAR == IS_VAR) {
  18966. ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
  18967. if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
  18968. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  18969. if (return_value) {
  18970. ZVAL_NEW_REF(return_value, retval_ptr);
  18971. } else {
  18972. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18973. }
  18974. break;
  18975. }
  18976. }
  18977. if (return_value) {
  18978. if (Z_ISREF_P(retval_ptr)) {
  18979. Z_ADDREF_P(retval_ptr);
  18980. } else {
  18981. ZVAL_MAKE_REF_EX(retval_ptr, 2);
  18982. }
  18983. ZVAL_REF(return_value, Z_REF_P(retval_ptr));
  18984. }
  18985. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  18986. } while (0);
  18987. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18988. }
  18989. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18990. {
  18991. USE_OPLINE
  18992. zval *retval;
  18993. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  18994. SAVE_OPLINE();
  18995. retval = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  18996. /* Copy return value into generator->retval */
  18997. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  18998. ZVAL_COPY_VALUE(&generator->retval, retval);
  18999. if (IS_VAR == IS_CONST) {
  19000. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
  19001. Z_ADDREF(generator->retval);
  19002. }
  19003. }
  19004. } else if (IS_VAR == IS_CV) {
  19005. ZVAL_COPY_DEREF(&generator->retval, retval);
  19006. } else /* if (IS_VAR == IS_VAR) */ {
  19007. if (UNEXPECTED(Z_ISREF_P(retval))) {
  19008. zend_refcounted *ref = Z_COUNTED_P(retval);
  19009. retval = Z_REFVAL_P(retval);
  19010. ZVAL_COPY_VALUE(&generator->retval, retval);
  19011. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  19012. efree_size(ref, sizeof(zend_reference));
  19013. } else if (Z_OPT_REFCOUNTED_P(retval)) {
  19014. Z_ADDREF_P(retval);
  19015. }
  19016. } else {
  19017. ZVAL_COPY_VALUE(&generator->retval, retval);
  19018. }
  19019. }
  19020. /* Close the generator to free up resources */
  19021. zend_generator_close(generator, 1);
  19022. /* Pass execution back to handling code */
  19023. ZEND_VM_RETURN();
  19024. }
  19025. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19026. {
  19027. USE_OPLINE
  19028. zval *arg, *param;
  19029. SAVE_OPLINE();
  19030. arg = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  19031. param = ZEND_CALL_VAR(EX(call), opline->result.var);
  19032. if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
  19033. zend_param_must_be_ref(EX(call)->func, opline->op2.num);
  19034. Z_TRY_ADDREF_P(arg);
  19035. ZVAL_NEW_REF(param, arg);
  19036. } else {
  19037. ZVAL_COPY(param, arg);
  19038. }
  19039. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19040. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19041. }
  19042. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19043. {
  19044. USE_OPLINE
  19045. zval *expr;
  19046. zval *result = EX_VAR(opline->result.var);
  19047. HashTable *ht;
  19048. SAVE_OPLINE();
  19049. expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19050. switch (opline->extended_value) {
  19051. case IS_LONG:
  19052. ZVAL_LONG(result, zval_get_long(expr));
  19053. break;
  19054. case IS_DOUBLE:
  19055. ZVAL_DOUBLE(result, zval_get_double(expr));
  19056. break;
  19057. case IS_STRING:
  19058. ZVAL_STR(result, zval_get_string(expr));
  19059. break;
  19060. default:
  19061. ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
  19062. if (IS_VAR & (IS_VAR|IS_CV)) {
  19063. ZVAL_DEREF(expr);
  19064. }
  19065. /* If value is already of correct type, return it directly */
  19066. if (Z_TYPE_P(expr) == opline->extended_value) {
  19067. ZVAL_COPY_VALUE(result, expr);
  19068. if (IS_VAR == IS_CONST) {
  19069. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  19070. } else if (IS_VAR != IS_TMP_VAR) {
  19071. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  19072. }
  19073. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19074. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19075. }
  19076. if (opline->extended_value == IS_ARRAY) {
  19077. if (IS_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
  19078. if (Z_TYPE_P(expr) != IS_NULL) {
  19079. ZVAL_ARR(result, zend_new_array(1));
  19080. expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
  19081. if (IS_VAR == IS_CONST) {
  19082. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  19083. } else {
  19084. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  19085. }
  19086. } else {
  19087. ZVAL_EMPTY_ARRAY(result);
  19088. }
  19089. } else if (Z_OBJ_P(expr)->properties == NULL
  19090. && Z_OBJ_HT_P(expr)->get_properties_for == NULL
  19091. && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
  19092. /* Optimized version without rebuilding properties HashTable */
  19093. ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
  19094. } else {
  19095. HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
  19096. if (obj_ht) {
  19097. /* fast copy */
  19098. ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
  19099. (Z_OBJCE_P(expr)->default_properties_count ||
  19100. Z_OBJ_P(expr)->handlers != &std_object_handlers ||
  19101. GC_IS_RECURSIVE(obj_ht))));
  19102. zend_release_properties(obj_ht);
  19103. } else {
  19104. ZVAL_EMPTY_ARRAY(result);
  19105. }
  19106. }
  19107. } else {
  19108. ZEND_ASSERT(opline->extended_value == IS_OBJECT);
  19109. ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
  19110. if (Z_TYPE_P(expr) == IS_ARRAY) {
  19111. ht = zend_symtable_to_proptable(Z_ARR_P(expr));
  19112. if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
  19113. /* TODO: try not to duplicate immutable arrays as well ??? */
  19114. ht = zend_array_dup(ht);
  19115. }
  19116. Z_OBJ_P(result)->properties = ht;
  19117. } else if (Z_TYPE_P(expr) != IS_NULL) {
  19118. Z_OBJ_P(result)->properties = ht = zend_new_array(1);
  19119. expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
  19120. if (IS_VAR == IS_CONST) {
  19121. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  19122. } else {
  19123. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  19124. }
  19125. }
  19126. }
  19127. }
  19128. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19129. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19130. }
  19131. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19132. {
  19133. USE_OPLINE
  19134. zval *array_ptr, *result;
  19135. SAVE_OPLINE();
  19136. array_ptr = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  19137. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  19138. result = EX_VAR(opline->result.var);
  19139. ZVAL_COPY_VALUE(result, array_ptr);
  19140. if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
  19141. Z_ADDREF_P(array_ptr);
  19142. }
  19143. Z_FE_POS_P(result) = 0;
  19144. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19145. ZEND_VM_NEXT_OPCODE();
  19146. } else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  19147. zend_object *zobj = Z_OBJ_P(array_ptr);
  19148. if (!zobj->ce->get_iterator) {
  19149. HashTable *properties = zobj->properties;
  19150. if (properties) {
  19151. if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
  19152. if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
  19153. GC_DELREF(properties);
  19154. }
  19155. properties = zobj->properties = zend_array_dup(properties);
  19156. }
  19157. } else {
  19158. properties = zobj->handlers->get_properties(zobj);
  19159. }
  19160. result = EX_VAR(opline->result.var);
  19161. ZVAL_COPY_VALUE(result, array_ptr);
  19162. if (IS_VAR != IS_TMP_VAR) {
  19163. Z_ADDREF_P(array_ptr);
  19164. }
  19165. if (zend_hash_num_elements(properties) == 0) {
  19166. Z_FE_ITER_P(result) = (uint32_t) -1;
  19167. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19168. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  19169. }
  19170. Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
  19171. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19172. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19173. } else {
  19174. bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
  19175. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19176. if (UNEXPECTED(EG(exception))) {
  19177. HANDLE_EXCEPTION();
  19178. } else if (is_empty) {
  19179. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  19180. } else {
  19181. ZEND_VM_NEXT_OPCODE();
  19182. }
  19183. }
  19184. } else {
  19185. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
  19186. ZVAL_UNDEF(EX_VAR(opline->result.var));
  19187. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  19188. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19189. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  19190. }
  19191. }
  19192. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19193. {
  19194. USE_OPLINE
  19195. zval *array_ptr, *array_ref;
  19196. SAVE_OPLINE();
  19197. if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
  19198. array_ref = array_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19199. if (Z_ISREF_P(array_ref)) {
  19200. array_ptr = Z_REFVAL_P(array_ref);
  19201. }
  19202. } else {
  19203. array_ref = array_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19204. }
  19205. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  19206. if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
  19207. if (array_ptr == array_ref) {
  19208. ZVAL_NEW_REF(array_ref, array_ref);
  19209. array_ptr = Z_REFVAL_P(array_ref);
  19210. }
  19211. Z_ADDREF_P(array_ref);
  19212. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  19213. } else {
  19214. array_ref = EX_VAR(opline->result.var);
  19215. ZVAL_NEW_REF(array_ref, array_ptr);
  19216. array_ptr = Z_REFVAL_P(array_ref);
  19217. }
  19218. if (IS_VAR == IS_CONST) {
  19219. ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
  19220. } else {
  19221. SEPARATE_ARRAY(array_ptr);
  19222. }
  19223. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
  19224. if (IS_VAR == IS_VAR) {
  19225. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19226. }
  19227. ZEND_VM_NEXT_OPCODE();
  19228. } else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  19229. if (!Z_OBJCE_P(array_ptr)->get_iterator) {
  19230. HashTable *properties;
  19231. if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
  19232. if (array_ptr == array_ref) {
  19233. ZVAL_NEW_REF(array_ref, array_ref);
  19234. array_ptr = Z_REFVAL_P(array_ref);
  19235. }
  19236. Z_ADDREF_P(array_ref);
  19237. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  19238. } else {
  19239. array_ptr = EX_VAR(opline->result.var);
  19240. ZVAL_COPY_VALUE(array_ptr, array_ref);
  19241. }
  19242. if (Z_OBJ_P(array_ptr)->properties
  19243. && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
  19244. if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
  19245. GC_DELREF(Z_OBJ_P(array_ptr)->properties);
  19246. }
  19247. Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
  19248. }
  19249. properties = Z_OBJPROP_P(array_ptr);
  19250. if (zend_hash_num_elements(properties) == 0) {
  19251. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
  19252. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19253. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  19254. }
  19255. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
  19256. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19257. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19258. } else {
  19259. bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
  19260. if (IS_VAR == IS_VAR) {
  19261. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19262. } else {
  19263. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19264. }
  19265. if (UNEXPECTED(EG(exception))) {
  19266. HANDLE_EXCEPTION();
  19267. } else if (is_empty) {
  19268. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  19269. } else {
  19270. ZEND_VM_NEXT_OPCODE();
  19271. }
  19272. }
  19273. } else {
  19274. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
  19275. ZVAL_UNDEF(EX_VAR(opline->result.var));
  19276. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  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. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  19283. }
  19284. }
  19285. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19286. {
  19287. USE_OPLINE
  19288. zval *array;
  19289. zval *value;
  19290. uint32_t value_type;
  19291. HashTable *fe_ht;
  19292. HashPosition pos;
  19293. Bucket *p;
  19294. array = EX_VAR(opline->op1.var);
  19295. if (UNEXPECTED(Z_TYPE_P(array) != IS_ARRAY)) {
  19296. ZEND_VM_TAIL_CALL(zend_fe_fetch_object_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19297. }
  19298. fe_ht = Z_ARRVAL_P(array);
  19299. pos = Z_FE_POS_P(array);
  19300. p = fe_ht->arData + pos;
  19301. while (1) {
  19302. if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
  19303. /* reached end of iteration */
  19304. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  19305. ZEND_VM_CONTINUE();
  19306. }
  19307. pos++;
  19308. value = &p->val;
  19309. value_type = Z_TYPE_INFO_P(value);
  19310. ZEND_ASSERT(value_type != IS_INDIRECT);
  19311. if (EXPECTED(value_type != IS_UNDEF)) {
  19312. break;
  19313. }
  19314. p++;
  19315. }
  19316. Z_FE_POS_P(array) = pos;
  19317. if (RETURN_VALUE_USED(opline)) {
  19318. if (!p->key) {
  19319. ZVAL_LONG(EX_VAR(opline->result.var), p->h);
  19320. } else {
  19321. ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
  19322. }
  19323. }
  19324. if (EXPECTED(opline->op2_type == IS_CV)) {
  19325. zval *variable_ptr = EX_VAR(opline->op2.var);
  19326. SAVE_OPLINE();
  19327. zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  19328. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19329. } else {
  19330. zval *res = EX_VAR(opline->op2.var);
  19331. zend_refcounted *gc = Z_COUNTED_P(value);
  19332. ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
  19333. if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
  19334. GC_ADDREF(gc);
  19335. }
  19336. ZEND_VM_NEXT_OPCODE();
  19337. }
  19338. }
  19339. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19340. {
  19341. USE_OPLINE
  19342. zval *array;
  19343. zval *value;
  19344. uint32_t value_type;
  19345. HashTable *fe_ht;
  19346. HashPosition pos;
  19347. Bucket *p;
  19348. array = EX_VAR(opline->op1.var);
  19349. SAVE_OPLINE();
  19350. ZVAL_DEREF(array);
  19351. if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
  19352. pos = zend_hash_iterator_pos_ex(Z_FE_ITER_P(EX_VAR(opline->op1.var)), array);
  19353. fe_ht = Z_ARRVAL_P(array);
  19354. p = fe_ht->arData + pos;
  19355. while (1) {
  19356. if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
  19357. /* reached end of iteration */
  19358. goto fe_fetch_w_exit;
  19359. }
  19360. pos++;
  19361. value = &p->val;
  19362. value_type = Z_TYPE_INFO_P(value);
  19363. ZEND_ASSERT(value_type != IS_INDIRECT);
  19364. if (EXPECTED(value_type != IS_UNDEF)) {
  19365. break;
  19366. }
  19367. p++;
  19368. }
  19369. EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
  19370. if (RETURN_VALUE_USED(opline)) {
  19371. if (!p->key) {
  19372. ZVAL_LONG(EX_VAR(opline->result.var), p->h);
  19373. } else {
  19374. ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
  19375. }
  19376. }
  19377. } else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
  19378. zend_object_iterator *iter;
  19379. if ((iter = zend_iterator_unwrap(array)) == NULL) {
  19380. /* plain object */
  19381. fe_ht = Z_OBJPROP_P(array);
  19382. pos = zend_hash_iterator_pos(Z_FE_ITER_P(EX_VAR(opline->op1.var)), fe_ht);
  19383. p = fe_ht->arData + pos;
  19384. while (1) {
  19385. if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
  19386. /* reached end of iteration */
  19387. goto fe_fetch_w_exit;
  19388. }
  19389. pos++;
  19390. value = &p->val;
  19391. value_type = Z_TYPE_INFO_P(value);
  19392. if (EXPECTED(value_type != IS_UNDEF)) {
  19393. if (UNEXPECTED(value_type == IS_INDIRECT)) {
  19394. value = Z_INDIRECT_P(value);
  19395. value_type = Z_TYPE_INFO_P(value);
  19396. if (EXPECTED(value_type != IS_UNDEF)
  19397. && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
  19398. if ((value_type & Z_TYPE_MASK) != IS_REFERENCE) {
  19399. zend_property_info *prop_info =
  19400. zend_get_property_info_for_slot(Z_OBJ_P(array), value);
  19401. if (UNEXPECTED(prop_info)) {
  19402. if (UNEXPECTED(prop_info->flags & ZEND_ACC_READONLY)) {
  19403. zend_throw_error(NULL,
  19404. "Cannot acquire reference to readonly property %s::$%s",
  19405. ZSTR_VAL(prop_info->ce->name), ZSTR_VAL(p->key));
  19406. UNDEF_RESULT();
  19407. HANDLE_EXCEPTION();
  19408. }
  19409. if (ZEND_TYPE_IS_SET(prop_info->type)) {
  19410. ZVAL_NEW_REF(value, value);
  19411. ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(value), prop_info);
  19412. value_type = IS_REFERENCE_EX;
  19413. }
  19414. }
  19415. }
  19416. break;
  19417. }
  19418. } else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
  19419. || !p->key
  19420. || zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
  19421. break;
  19422. }
  19423. }
  19424. p++;
  19425. }
  19426. EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
  19427. if (RETURN_VALUE_USED(opline)) {
  19428. if (UNEXPECTED(!p->key)) {
  19429. ZVAL_LONG(EX_VAR(opline->result.var), p->h);
  19430. } else if (ZSTR_VAL(p->key)[0]) {
  19431. ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
  19432. } else {
  19433. const char *class_name, *prop_name;
  19434. size_t prop_name_len;
  19435. zend_unmangle_property_name_ex(
  19436. p->key, &class_name, &prop_name, &prop_name_len);
  19437. ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
  19438. }
  19439. }
  19440. } else {
  19441. const zend_object_iterator_funcs *funcs = iter->funcs;
  19442. if (++iter->index > 0) {
  19443. /* This could cause an endless loop if index becomes zero again.
  19444. * In case that ever happens we need an additional flag. */
  19445. funcs->move_forward(iter);
  19446. if (UNEXPECTED(EG(exception) != NULL)) {
  19447. UNDEF_RESULT();
  19448. HANDLE_EXCEPTION();
  19449. }
  19450. if (UNEXPECTED(funcs->valid(iter) == FAILURE)) {
  19451. /* reached end of iteration */
  19452. if (UNEXPECTED(EG(exception) != NULL)) {
  19453. UNDEF_RESULT();
  19454. HANDLE_EXCEPTION();
  19455. }
  19456. goto fe_fetch_w_exit;
  19457. }
  19458. }
  19459. value = funcs->get_current_data(iter);
  19460. if (UNEXPECTED(EG(exception) != NULL)) {
  19461. UNDEF_RESULT();
  19462. HANDLE_EXCEPTION();
  19463. }
  19464. if (!value) {
  19465. /* failure in get_current_data */
  19466. goto fe_fetch_w_exit;
  19467. }
  19468. if (RETURN_VALUE_USED(opline)) {
  19469. if (funcs->get_current_key) {
  19470. funcs->get_current_key(iter, EX_VAR(opline->result.var));
  19471. if (UNEXPECTED(EG(exception) != NULL)) {
  19472. UNDEF_RESULT();
  19473. HANDLE_EXCEPTION();
  19474. }
  19475. } else {
  19476. ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
  19477. }
  19478. }
  19479. value_type = Z_TYPE_INFO_P(value);
  19480. }
  19481. } else {
  19482. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array));
  19483. if (UNEXPECTED(EG(exception))) {
  19484. UNDEF_RESULT();
  19485. HANDLE_EXCEPTION();
  19486. }
  19487. fe_fetch_w_exit:
  19488. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  19489. ZEND_VM_CONTINUE();
  19490. }
  19491. if (EXPECTED((value_type & Z_TYPE_MASK) != IS_REFERENCE)) {
  19492. zend_refcounted *gc = Z_COUNTED_P(value);
  19493. zval *ref;
  19494. ZVAL_NEW_EMPTY_REF(value);
  19495. ref = Z_REFVAL_P(value);
  19496. ZVAL_COPY_VALUE_EX(ref, value, gc, value_type);
  19497. }
  19498. if (EXPECTED(opline->op2_type == IS_CV)) {
  19499. zval *variable_ptr = EX_VAR(opline->op2.var);
  19500. if (EXPECTED(variable_ptr != value)) {
  19501. zend_reference *ref;
  19502. ref = Z_REF_P(value);
  19503. GC_ADDREF(ref);
  19504. i_zval_ptr_dtor(variable_ptr);
  19505. ZVAL_REF(variable_ptr, ref);
  19506. }
  19507. } else {
  19508. Z_ADDREF_P(value);
  19509. ZVAL_REF(EX_VAR(opline->op2.var), Z_REF_P(value));
  19510. }
  19511. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19512. }
  19513. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19514. {
  19515. USE_OPLINE
  19516. zval *value;
  19517. zend_reference *ref = NULL;
  19518. bool ret;
  19519. SAVE_OPLINE();
  19520. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19521. if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
  19522. if (IS_VAR == IS_VAR) {
  19523. ref = Z_REF_P(value);
  19524. }
  19525. value = Z_REFVAL_P(value);
  19526. }
  19527. ret = i_zend_is_true(value);
  19528. if (UNEXPECTED(EG(exception))) {
  19529. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19530. ZVAL_UNDEF(EX_VAR(opline->result.var));
  19531. HANDLE_EXCEPTION();
  19532. }
  19533. if (ret) {
  19534. zval *result = EX_VAR(opline->result.var);
  19535. ZVAL_COPY_VALUE(result, value);
  19536. if (IS_VAR == IS_CONST) {
  19537. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  19538. } else if (IS_VAR == IS_CV) {
  19539. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  19540. } else if (IS_VAR == IS_VAR && ref) {
  19541. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  19542. efree_size(ref, sizeof(zend_reference));
  19543. } else if (Z_OPT_REFCOUNTED_P(result)) {
  19544. Z_ADDREF_P(result);
  19545. }
  19546. }
  19547. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  19548. }
  19549. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19550. ZEND_VM_NEXT_OPCODE();
  19551. }
  19552. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19553. {
  19554. USE_OPLINE
  19555. zval *value;
  19556. zend_reference *ref = NULL;
  19557. SAVE_OPLINE();
  19558. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19559. if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  19560. if (IS_VAR & IS_VAR) {
  19561. ref = Z_REF_P(value);
  19562. }
  19563. value = Z_REFVAL_P(value);
  19564. }
  19565. if (Z_TYPE_P(value) > IS_NULL) {
  19566. zval *result = EX_VAR(opline->result.var);
  19567. ZVAL_COPY_VALUE(result, value);
  19568. if (IS_VAR == IS_CONST) {
  19569. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  19570. } else if (IS_VAR == IS_CV) {
  19571. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  19572. } else if ((IS_VAR & IS_VAR) && ref) {
  19573. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  19574. efree_size(ref, sizeof(zend_reference));
  19575. } else if (Z_OPT_REFCOUNTED_P(result)) {
  19576. Z_ADDREF_P(result);
  19577. }
  19578. }
  19579. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  19580. }
  19581. if ((IS_VAR & IS_VAR) && ref) {
  19582. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  19583. efree_size(ref, sizeof(zend_reference));
  19584. }
  19585. }
  19586. ZEND_VM_NEXT_OPCODE();
  19587. }
  19588. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19589. {
  19590. USE_OPLINE
  19591. zval *val, *result;
  19592. val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19593. if (Z_TYPE_P(val) > IS_NULL) {
  19594. do {
  19595. if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
  19596. val = Z_REFVAL_P(val);
  19597. if (Z_TYPE_P(val) <= IS_NULL) {
  19598. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19599. break;
  19600. }
  19601. }
  19602. ZEND_VM_NEXT_OPCODE();
  19603. } while (0);
  19604. }
  19605. result = EX_VAR(opline->result.var);
  19606. if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
  19607. ZVAL_NULL(result);
  19608. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
  19609. SAVE_OPLINE();
  19610. ZVAL_UNDEFINED_OP1();
  19611. if (UNEXPECTED(EG(exception) != NULL)) {
  19612. HANDLE_EXCEPTION();
  19613. }
  19614. }
  19615. } else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
  19616. ZVAL_FALSE(result);
  19617. } else {
  19618. ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
  19619. ZVAL_TRUE(result);
  19620. }
  19621. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  19622. }
  19623. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19624. {
  19625. USE_OPLINE
  19626. zval *value;
  19627. zval *result = EX_VAR(opline->result.var);
  19628. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19629. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  19630. SAVE_OPLINE();
  19631. ZVAL_UNDEFINED_OP1();
  19632. ZVAL_NULL(result);
  19633. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19634. }
  19635. if (IS_VAR == IS_CV) {
  19636. ZVAL_COPY_DEREF(result, value);
  19637. } else if (IS_VAR == IS_VAR) {
  19638. if (UNEXPECTED(Z_ISREF_P(value))) {
  19639. ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
  19640. if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
  19641. efree_size(Z_REF_P(value), sizeof(zend_reference));
  19642. } else if (Z_OPT_REFCOUNTED_P(result)) {
  19643. Z_ADDREF_P(result);
  19644. }
  19645. } else {
  19646. ZVAL_COPY_VALUE(result, value);
  19647. }
  19648. } else {
  19649. ZVAL_COPY_VALUE(result, value);
  19650. if (IS_VAR == IS_CONST) {
  19651. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
  19652. Z_ADDREF_P(result);
  19653. }
  19654. }
  19655. }
  19656. ZEND_VM_NEXT_OPCODE();
  19657. }
  19658. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19659. {
  19660. USE_OPLINE
  19661. zval *varptr, *arg;
  19662. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19663. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  19664. if (IS_VAR == IS_CV) {
  19665. ZVAL_COPY(arg, varptr);
  19666. } else /* if (IS_VAR == IS_VAR) */ {
  19667. ZVAL_COPY_VALUE(arg, varptr);
  19668. }
  19669. ZEND_VM_NEXT_OPCODE();
  19670. }
  19671. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19672. {
  19673. USE_OPLINE
  19674. zval *op1, *op2;
  19675. bool result;
  19676. SAVE_OPLINE();
  19677. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  19678. op2 = RT_CONSTANT(opline, opline->op2);
  19679. result = fast_is_identical_function(op1, op2);
  19680. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19681. ZEND_VM_SMART_BRANCH(result, 1);
  19682. }
  19683. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19684. {
  19685. USE_OPLINE
  19686. zval *op1, *op2;
  19687. bool result;
  19688. SAVE_OPLINE();
  19689. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  19690. op2 = RT_CONSTANT(opline, opline->op2);
  19691. result = fast_is_identical_function(op1, op2);
  19692. ZEND_VM_SMART_BRANCH(result, 1);
  19693. }
  19694. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19695. {
  19696. USE_OPLINE
  19697. zval *op1, *op2;
  19698. bool result;
  19699. SAVE_OPLINE();
  19700. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  19701. op2 = RT_CONSTANT(opline, opline->op2);
  19702. result = fast_is_not_identical_function(op1, op2);
  19703. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19704. ZEND_VM_SMART_BRANCH(result, 1);
  19705. }
  19706. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19707. {
  19708. USE_OPLINE
  19709. zval *object;
  19710. zval *property;
  19711. zval *value;
  19712. zval *zptr;
  19713. void **cache_slot;
  19714. zend_property_info *prop_info;
  19715. zend_object *zobj;
  19716. zend_string *name, *tmp_name;
  19717. SAVE_OPLINE();
  19718. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19719. property = RT_CONSTANT(opline, opline->op2);
  19720. do {
  19721. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  19722. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  19723. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  19724. object = Z_REFVAL_P(object);
  19725. goto assign_op_object;
  19726. }
  19727. if (IS_VAR == IS_CV
  19728. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  19729. ZVAL_UNDEFINED_OP1();
  19730. }
  19731. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  19732. break;
  19733. }
  19734. assign_op_object:
  19735. /* here we are sure we are dealing with an object */
  19736. zobj = Z_OBJ_P(object);
  19737. if (IS_CONST == IS_CONST) {
  19738. name = Z_STR_P(property);
  19739. } else {
  19740. name = zval_try_get_tmp_string(property, &tmp_name);
  19741. if (UNEXPECTED(!name)) {
  19742. UNDEF_RESULT();
  19743. break;
  19744. }
  19745. }
  19746. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  19747. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  19748. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  19749. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19750. ZVAL_NULL(EX_VAR(opline->result.var));
  19751. }
  19752. } else {
  19753. zval *orig_zptr = zptr;
  19754. zend_reference *ref;
  19755. do {
  19756. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  19757. ref = Z_REF_P(zptr);
  19758. zptr = Z_REFVAL_P(zptr);
  19759. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  19760. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  19761. break;
  19762. }
  19763. }
  19764. if (IS_CONST == IS_CONST) {
  19765. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  19766. } else {
  19767. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  19768. }
  19769. if (UNEXPECTED(prop_info)) {
  19770. /* special case for typed properties */
  19771. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  19772. } else {
  19773. zend_binary_op(zptr, zptr, value OPLINE_CC);
  19774. }
  19775. } while (0);
  19776. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19777. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  19778. }
  19779. }
  19780. } else {
  19781. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  19782. }
  19783. if (IS_CONST != IS_CONST) {
  19784. zend_tmp_string_release(tmp_name);
  19785. }
  19786. } while (0);
  19787. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  19788. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19789. /* assign_obj has two opcodes! */
  19790. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  19791. }
  19792. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  19793. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19794. {
  19795. USE_OPLINE
  19796. zval *var_ptr;
  19797. zval *value, *container, *dim;
  19798. HashTable *ht;
  19799. SAVE_OPLINE();
  19800. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19801. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  19802. assign_dim_op_array:
  19803. SEPARATE_ARRAY(container);
  19804. ht = Z_ARRVAL_P(container);
  19805. assign_dim_op_new_array:
  19806. dim = RT_CONSTANT(opline, opline->op2);
  19807. if (IS_CONST == IS_UNUSED) {
  19808. var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
  19809. if (UNEXPECTED(!var_ptr)) {
  19810. zend_cannot_add_element();
  19811. goto assign_dim_op_ret_null;
  19812. }
  19813. } else {
  19814. if (IS_CONST == IS_CONST) {
  19815. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
  19816. } else {
  19817. var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
  19818. }
  19819. if (UNEXPECTED(!var_ptr)) {
  19820. goto assign_dim_op_ret_null;
  19821. }
  19822. }
  19823. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  19824. do {
  19825. if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
  19826. zend_reference *ref = Z_REF_P(var_ptr);
  19827. var_ptr = Z_REFVAL_P(var_ptr);
  19828. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  19829. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  19830. break;
  19831. }
  19832. }
  19833. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  19834. } while (0);
  19835. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19836. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  19837. }
  19838. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  19839. } else {
  19840. if (EXPECTED(Z_ISREF_P(container))) {
  19841. container = Z_REFVAL_P(container);
  19842. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  19843. goto assign_dim_op_array;
  19844. }
  19845. }
  19846. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  19847. zend_object *obj = Z_OBJ_P(container);
  19848. dim = RT_CONSTANT(opline, opline->op2);
  19849. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  19850. dim++;
  19851. }
  19852. zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
  19853. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  19854. zend_uchar old_type;
  19855. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  19856. ZVAL_UNDEFINED_OP1();
  19857. }
  19858. ht = zend_new_array(8);
  19859. old_type = Z_TYPE_P(container);
  19860. ZVAL_ARR(container, ht);
  19861. if (UNEXPECTED(old_type == IS_FALSE)) {
  19862. GC_ADDREF(ht);
  19863. zend_false_to_array_deprecated();
  19864. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  19865. zend_array_destroy(ht);
  19866. goto assign_dim_op_ret_null;
  19867. }
  19868. }
  19869. goto assign_dim_op_new_array;
  19870. } else {
  19871. dim = RT_CONSTANT(opline, opline->op2);
  19872. zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  19873. assign_dim_op_ret_null:
  19874. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  19875. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19876. ZVAL_NULL(EX_VAR(opline->result.var));
  19877. }
  19878. }
  19879. }
  19880. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19881. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  19882. }
  19883. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19884. {
  19885. USE_OPLINE
  19886. zval *var_ptr;
  19887. zval *value;
  19888. SAVE_OPLINE();
  19889. value = RT_CONSTANT(opline, opline->op2);
  19890. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19891. do {
  19892. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  19893. zend_reference *ref = Z_REF_P(var_ptr);
  19894. var_ptr = Z_REFVAL_P(var_ptr);
  19895. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  19896. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  19897. break;
  19898. }
  19899. }
  19900. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  19901. } while (0);
  19902. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19903. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  19904. }
  19905. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19906. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19907. }
  19908. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19909. {
  19910. USE_OPLINE
  19911. zval *object;
  19912. zval *property;
  19913. zval *zptr;
  19914. void **cache_slot;
  19915. zend_property_info *prop_info;
  19916. zend_object *zobj;
  19917. zend_string *name, *tmp_name;
  19918. SAVE_OPLINE();
  19919. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19920. property = RT_CONSTANT(opline, opline->op2);
  19921. do {
  19922. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  19923. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  19924. object = Z_REFVAL_P(object);
  19925. goto pre_incdec_object;
  19926. }
  19927. if (IS_VAR == IS_CV
  19928. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  19929. ZVAL_UNDEFINED_OP1();
  19930. }
  19931. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  19932. break;
  19933. }
  19934. pre_incdec_object:
  19935. /* here we are sure we are dealing with an object */
  19936. zobj = Z_OBJ_P(object);
  19937. if (IS_CONST == IS_CONST) {
  19938. name = Z_STR_P(property);
  19939. } else {
  19940. name = zval_try_get_tmp_string(property, &tmp_name);
  19941. if (UNEXPECTED(!name)) {
  19942. UNDEF_RESULT();
  19943. break;
  19944. }
  19945. }
  19946. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  19947. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  19948. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  19949. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19950. ZVAL_NULL(EX_VAR(opline->result.var));
  19951. }
  19952. } else {
  19953. if (IS_CONST == IS_CONST) {
  19954. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  19955. } else {
  19956. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  19957. }
  19958. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  19959. }
  19960. } else {
  19961. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  19962. }
  19963. if (IS_CONST != IS_CONST) {
  19964. zend_tmp_string_release(tmp_name);
  19965. }
  19966. } while (0);
  19967. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  19968. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19969. }
  19970. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19971. {
  19972. USE_OPLINE
  19973. zval *object;
  19974. zval *property;
  19975. zval *zptr;
  19976. void **cache_slot;
  19977. zend_property_info *prop_info;
  19978. zend_object *zobj;
  19979. zend_string *name, *tmp_name;
  19980. SAVE_OPLINE();
  19981. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  19982. property = RT_CONSTANT(opline, opline->op2);
  19983. do {
  19984. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  19985. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  19986. object = Z_REFVAL_P(object);
  19987. goto post_incdec_object;
  19988. }
  19989. if (IS_VAR == IS_CV
  19990. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  19991. ZVAL_UNDEFINED_OP1();
  19992. }
  19993. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  19994. break;
  19995. }
  19996. post_incdec_object:
  19997. /* here we are sure we are dealing with an object */
  19998. zobj = Z_OBJ_P(object);
  19999. if (IS_CONST == IS_CONST) {
  20000. name = Z_STR_P(property);
  20001. } else {
  20002. name = zval_try_get_tmp_string(property, &tmp_name);
  20003. if (UNEXPECTED(!name)) {
  20004. ZVAL_UNDEF(EX_VAR(opline->result.var));
  20005. break;
  20006. }
  20007. }
  20008. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  20009. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  20010. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  20011. ZVAL_NULL(EX_VAR(opline->result.var));
  20012. } else {
  20013. if (IS_CONST == IS_CONST) {
  20014. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  20015. } else {
  20016. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  20017. }
  20018. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  20019. }
  20020. } else {
  20021. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  20022. }
  20023. if (IS_CONST != IS_CONST) {
  20024. zend_tmp_string_release(tmp_name);
  20025. }
  20026. } while (0);
  20027. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  20028. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20029. }
  20030. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20031. {
  20032. USE_OPLINE
  20033. zval *container;
  20034. SAVE_OPLINE();
  20035. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20036. zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  20037. if (IS_VAR == IS_VAR) {
  20038. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  20039. }
  20040. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20041. }
  20042. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20043. {
  20044. USE_OPLINE
  20045. zval *container;
  20046. SAVE_OPLINE();
  20047. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20048. zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  20049. if (IS_VAR == IS_VAR) {
  20050. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  20051. }
  20052. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20053. }
  20054. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20055. {
  20056. #if 0
  20057. USE_OPLINE
  20058. #endif
  20059. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  20060. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  20061. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20062. }
  20063. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20064. } else {
  20065. if (IS_CONST == IS_UNUSED) {
  20066. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20067. }
  20068. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20069. }
  20070. }
  20071. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20072. {
  20073. USE_OPLINE
  20074. zval *container;
  20075. SAVE_OPLINE();
  20076. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20077. zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  20078. if (IS_VAR == IS_VAR) {
  20079. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  20080. }
  20081. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20082. }
  20083. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20084. {
  20085. USE_OPLINE
  20086. zval *property, *container, *result;
  20087. SAVE_OPLINE();
  20088. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20089. property = RT_CONSTANT(opline, opline->op2);
  20090. result = EX_VAR(opline->result.var);
  20091. zend_fetch_property_address(
  20092. result, container, IS_VAR, property, IS_CONST,
  20093. ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  20094. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 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_RW_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(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);
  20109. if (IS_VAR == IS_VAR) {
  20110. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  20111. }
  20112. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20113. }
  20114. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20115. {
  20116. #if 0
  20117. USE_OPLINE
  20118. #endif
  20119. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  20120. /* Behave like FETCH_OBJ_W */
  20121. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  20122. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20123. }
  20124. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20125. } else {
  20126. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20127. }
  20128. }
  20129. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20130. {
  20131. USE_OPLINE
  20132. zval *container, *property, *result;
  20133. SAVE_OPLINE();
  20134. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20135. property = RT_CONSTANT(opline, opline->op2);
  20136. result = EX_VAR(opline->result.var);
  20137. 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);
  20138. if (IS_VAR == IS_VAR) {
  20139. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  20140. }
  20141. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20142. }
  20143. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20144. {
  20145. USE_OPLINE
  20146. zval *container, *dim;
  20147. SAVE_OPLINE();
  20148. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20149. dim = RT_CONSTANT(opline, opline->op2);
  20150. if (IS_VAR == IS_VAR
  20151. && Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
  20152. && UNEXPECTED(!Z_ISREF_P(container))
  20153. ) {
  20154. zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
  20155. zend_fetch_dimension_address_LIST_r(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  20156. } else {
  20157. zend_fetch_dimension_address_W(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  20158. }
  20159. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20160. }
  20161. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20162. {
  20163. USE_OPLINE
  20164. zval *object, *value, tmp;
  20165. zend_object *zobj;
  20166. zend_string *name, *tmp_name;
  20167. SAVE_OPLINE();
  20168. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20169. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  20170. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  20171. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  20172. object = Z_REFVAL_P(object);
  20173. goto assign_object;
  20174. }
  20175. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  20176. value = &EG(uninitialized_zval);
  20177. goto free_and_exit_assign_obj;
  20178. }
  20179. assign_object:
  20180. zobj = Z_OBJ_P(object);
  20181. if (IS_CONST == IS_CONST) {
  20182. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  20183. void **cache_slot = CACHE_ADDR(opline->extended_value);
  20184. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  20185. zend_object *zobj = Z_OBJ_P(object);
  20186. zval *property_val;
  20187. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  20188. property_val = OBJ_PROP(zobj, prop_offset);
  20189. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  20190. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  20191. if (UNEXPECTED(prop_info != NULL)) {
  20192. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  20193. goto free_and_exit_assign_obj;
  20194. } else {
  20195. fast_assign_obj:
  20196. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  20197. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20198. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20199. }
  20200. goto exit_assign_obj;
  20201. }
  20202. }
  20203. } else {
  20204. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  20205. if (EXPECTED(zobj->properties != NULL)) {
  20206. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  20207. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  20208. GC_DELREF(zobj->properties);
  20209. }
  20210. zobj->properties = zend_array_dup(zobj->properties);
  20211. }
  20212. property_val = zend_hash_find_known_hash(zobj->properties, name);
  20213. if (property_val) {
  20214. goto fast_assign_obj;
  20215. }
  20216. }
  20217. if (!zobj->ce->__set) {
  20218. if (EXPECTED(zobj->properties == NULL)) {
  20219. rebuild_object_properties(zobj);
  20220. }
  20221. if (IS_CONST == IS_CONST) {
  20222. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  20223. Z_ADDREF_P(value);
  20224. }
  20225. } else if (IS_CONST != IS_TMP_VAR) {
  20226. if (Z_ISREF_P(value)) {
  20227. if (IS_CONST == IS_VAR) {
  20228. zend_reference *ref = Z_REF_P(value);
  20229. if (GC_DELREF(ref) == 0) {
  20230. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  20231. efree_size(ref, sizeof(zend_reference));
  20232. value = &tmp;
  20233. } else {
  20234. value = Z_REFVAL_P(value);
  20235. Z_TRY_ADDREF_P(value);
  20236. }
  20237. } else {
  20238. value = Z_REFVAL_P(value);
  20239. Z_TRY_ADDREF_P(value);
  20240. }
  20241. } else if (IS_CONST == IS_CV) {
  20242. Z_TRY_ADDREF_P(value);
  20243. }
  20244. }
  20245. zend_hash_add_new(zobj->properties, name, value);
  20246. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20247. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20248. }
  20249. goto exit_assign_obj;
  20250. }
  20251. }
  20252. }
  20253. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  20254. } else {
  20255. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  20256. if (UNEXPECTED(!name)) {
  20257. UNDEF_RESULT();
  20258. goto exit_assign_obj;
  20259. }
  20260. }
  20261. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  20262. ZVAL_DEREF(value);
  20263. }
  20264. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  20265. if (IS_CONST != IS_CONST) {
  20266. zend_tmp_string_release(tmp_name);
  20267. }
  20268. free_and_exit_assign_obj:
  20269. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20270. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  20271. }
  20272. exit_assign_obj:
  20273. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  20274. /* assign_obj has two opcodes! */
  20275. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  20276. }
  20277. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  20278. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20279. {
  20280. USE_OPLINE
  20281. zval *object, *value, tmp;
  20282. zend_object *zobj;
  20283. zend_string *name, *tmp_name;
  20284. SAVE_OPLINE();
  20285. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20286. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  20287. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  20288. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  20289. object = Z_REFVAL_P(object);
  20290. goto assign_object;
  20291. }
  20292. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  20293. value = &EG(uninitialized_zval);
  20294. goto free_and_exit_assign_obj;
  20295. }
  20296. assign_object:
  20297. zobj = Z_OBJ_P(object);
  20298. if (IS_CONST == IS_CONST) {
  20299. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  20300. void **cache_slot = CACHE_ADDR(opline->extended_value);
  20301. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  20302. zend_object *zobj = Z_OBJ_P(object);
  20303. zval *property_val;
  20304. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  20305. property_val = OBJ_PROP(zobj, prop_offset);
  20306. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  20307. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  20308. if (UNEXPECTED(prop_info != NULL)) {
  20309. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  20310. goto free_and_exit_assign_obj;
  20311. } else {
  20312. fast_assign_obj:
  20313. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  20314. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20315. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20316. }
  20317. goto exit_assign_obj;
  20318. }
  20319. }
  20320. } else {
  20321. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  20322. if (EXPECTED(zobj->properties != NULL)) {
  20323. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  20324. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  20325. GC_DELREF(zobj->properties);
  20326. }
  20327. zobj->properties = zend_array_dup(zobj->properties);
  20328. }
  20329. property_val = zend_hash_find_known_hash(zobj->properties, name);
  20330. if (property_val) {
  20331. goto fast_assign_obj;
  20332. }
  20333. }
  20334. if (!zobj->ce->__set) {
  20335. if (EXPECTED(zobj->properties == NULL)) {
  20336. rebuild_object_properties(zobj);
  20337. }
  20338. if (IS_TMP_VAR == IS_CONST) {
  20339. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  20340. Z_ADDREF_P(value);
  20341. }
  20342. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  20343. if (Z_ISREF_P(value)) {
  20344. if (IS_TMP_VAR == IS_VAR) {
  20345. zend_reference *ref = Z_REF_P(value);
  20346. if (GC_DELREF(ref) == 0) {
  20347. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  20348. efree_size(ref, sizeof(zend_reference));
  20349. value = &tmp;
  20350. } else {
  20351. value = Z_REFVAL_P(value);
  20352. Z_TRY_ADDREF_P(value);
  20353. }
  20354. } else {
  20355. value = Z_REFVAL_P(value);
  20356. Z_TRY_ADDREF_P(value);
  20357. }
  20358. } else if (IS_TMP_VAR == IS_CV) {
  20359. Z_TRY_ADDREF_P(value);
  20360. }
  20361. }
  20362. zend_hash_add_new(zobj->properties, name, value);
  20363. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20364. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20365. }
  20366. goto exit_assign_obj;
  20367. }
  20368. }
  20369. }
  20370. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  20371. } else {
  20372. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  20373. if (UNEXPECTED(!name)) {
  20374. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20375. UNDEF_RESULT();
  20376. goto exit_assign_obj;
  20377. }
  20378. }
  20379. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  20380. ZVAL_DEREF(value);
  20381. }
  20382. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  20383. if (IS_CONST != IS_CONST) {
  20384. zend_tmp_string_release(tmp_name);
  20385. }
  20386. free_and_exit_assign_obj:
  20387. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20388. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  20389. }
  20390. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20391. exit_assign_obj:
  20392. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  20393. /* assign_obj has two opcodes! */
  20394. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  20395. }
  20396. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  20397. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20398. {
  20399. USE_OPLINE
  20400. zval *object, *value, tmp;
  20401. zend_object *zobj;
  20402. zend_string *name, *tmp_name;
  20403. SAVE_OPLINE();
  20404. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20405. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  20406. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  20407. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  20408. object = Z_REFVAL_P(object);
  20409. goto assign_object;
  20410. }
  20411. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  20412. value = &EG(uninitialized_zval);
  20413. goto free_and_exit_assign_obj;
  20414. }
  20415. assign_object:
  20416. zobj = Z_OBJ_P(object);
  20417. if (IS_CONST == IS_CONST) {
  20418. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  20419. void **cache_slot = CACHE_ADDR(opline->extended_value);
  20420. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  20421. zend_object *zobj = Z_OBJ_P(object);
  20422. zval *property_val;
  20423. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  20424. property_val = OBJ_PROP(zobj, prop_offset);
  20425. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  20426. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  20427. if (UNEXPECTED(prop_info != NULL)) {
  20428. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  20429. goto free_and_exit_assign_obj;
  20430. } else {
  20431. fast_assign_obj:
  20432. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  20433. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20434. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20435. }
  20436. goto exit_assign_obj;
  20437. }
  20438. }
  20439. } else {
  20440. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  20441. if (EXPECTED(zobj->properties != NULL)) {
  20442. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  20443. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  20444. GC_DELREF(zobj->properties);
  20445. }
  20446. zobj->properties = zend_array_dup(zobj->properties);
  20447. }
  20448. property_val = zend_hash_find_known_hash(zobj->properties, name);
  20449. if (property_val) {
  20450. goto fast_assign_obj;
  20451. }
  20452. }
  20453. if (!zobj->ce->__set) {
  20454. if (EXPECTED(zobj->properties == NULL)) {
  20455. rebuild_object_properties(zobj);
  20456. }
  20457. if (IS_VAR == IS_CONST) {
  20458. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  20459. Z_ADDREF_P(value);
  20460. }
  20461. } else if (IS_VAR != IS_TMP_VAR) {
  20462. if (Z_ISREF_P(value)) {
  20463. if (IS_VAR == IS_VAR) {
  20464. zend_reference *ref = Z_REF_P(value);
  20465. if (GC_DELREF(ref) == 0) {
  20466. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  20467. efree_size(ref, sizeof(zend_reference));
  20468. value = &tmp;
  20469. } else {
  20470. value = Z_REFVAL_P(value);
  20471. Z_TRY_ADDREF_P(value);
  20472. }
  20473. } else {
  20474. value = Z_REFVAL_P(value);
  20475. Z_TRY_ADDREF_P(value);
  20476. }
  20477. } else if (IS_VAR == IS_CV) {
  20478. Z_TRY_ADDREF_P(value);
  20479. }
  20480. }
  20481. zend_hash_add_new(zobj->properties, name, value);
  20482. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20483. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20484. }
  20485. goto exit_assign_obj;
  20486. }
  20487. }
  20488. }
  20489. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  20490. } else {
  20491. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  20492. if (UNEXPECTED(!name)) {
  20493. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20494. UNDEF_RESULT();
  20495. goto exit_assign_obj;
  20496. }
  20497. }
  20498. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  20499. ZVAL_DEREF(value);
  20500. }
  20501. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  20502. if (IS_CONST != IS_CONST) {
  20503. zend_tmp_string_release(tmp_name);
  20504. }
  20505. free_and_exit_assign_obj:
  20506. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20507. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  20508. }
  20509. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20510. exit_assign_obj:
  20511. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  20512. /* assign_obj has two opcodes! */
  20513. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  20514. }
  20515. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  20516. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20517. {
  20518. USE_OPLINE
  20519. zval *object, *value, tmp;
  20520. zend_object *zobj;
  20521. zend_string *name, *tmp_name;
  20522. SAVE_OPLINE();
  20523. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20524. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  20525. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  20526. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  20527. object = Z_REFVAL_P(object);
  20528. goto assign_object;
  20529. }
  20530. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  20531. value = &EG(uninitialized_zval);
  20532. goto free_and_exit_assign_obj;
  20533. }
  20534. assign_object:
  20535. zobj = Z_OBJ_P(object);
  20536. if (IS_CONST == IS_CONST) {
  20537. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  20538. void **cache_slot = CACHE_ADDR(opline->extended_value);
  20539. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  20540. zend_object *zobj = Z_OBJ_P(object);
  20541. zval *property_val;
  20542. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  20543. property_val = OBJ_PROP(zobj, prop_offset);
  20544. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  20545. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  20546. if (UNEXPECTED(prop_info != NULL)) {
  20547. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  20548. goto free_and_exit_assign_obj;
  20549. } else {
  20550. fast_assign_obj:
  20551. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  20552. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20553. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20554. }
  20555. goto exit_assign_obj;
  20556. }
  20557. }
  20558. } else {
  20559. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  20560. if (EXPECTED(zobj->properties != NULL)) {
  20561. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  20562. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  20563. GC_DELREF(zobj->properties);
  20564. }
  20565. zobj->properties = zend_array_dup(zobj->properties);
  20566. }
  20567. property_val = zend_hash_find_known_hash(zobj->properties, name);
  20568. if (property_val) {
  20569. goto fast_assign_obj;
  20570. }
  20571. }
  20572. if (!zobj->ce->__set) {
  20573. if (EXPECTED(zobj->properties == NULL)) {
  20574. rebuild_object_properties(zobj);
  20575. }
  20576. if (IS_CV == IS_CONST) {
  20577. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  20578. Z_ADDREF_P(value);
  20579. }
  20580. } else if (IS_CV != IS_TMP_VAR) {
  20581. if (Z_ISREF_P(value)) {
  20582. if (IS_CV == IS_VAR) {
  20583. zend_reference *ref = Z_REF_P(value);
  20584. if (GC_DELREF(ref) == 0) {
  20585. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  20586. efree_size(ref, sizeof(zend_reference));
  20587. value = &tmp;
  20588. } else {
  20589. value = Z_REFVAL_P(value);
  20590. Z_TRY_ADDREF_P(value);
  20591. }
  20592. } else {
  20593. value = Z_REFVAL_P(value);
  20594. Z_TRY_ADDREF_P(value);
  20595. }
  20596. } else if (IS_CV == IS_CV) {
  20597. Z_TRY_ADDREF_P(value);
  20598. }
  20599. }
  20600. zend_hash_add_new(zobj->properties, name, value);
  20601. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20602. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20603. }
  20604. goto exit_assign_obj;
  20605. }
  20606. }
  20607. }
  20608. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  20609. } else {
  20610. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  20611. if (UNEXPECTED(!name)) {
  20612. UNDEF_RESULT();
  20613. goto exit_assign_obj;
  20614. }
  20615. }
  20616. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  20617. ZVAL_DEREF(value);
  20618. }
  20619. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  20620. if (IS_CONST != IS_CONST) {
  20621. zend_tmp_string_release(tmp_name);
  20622. }
  20623. free_and_exit_assign_obj:
  20624. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20625. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  20626. }
  20627. exit_assign_obj:
  20628. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  20629. /* assign_obj has two opcodes! */
  20630. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  20631. }
  20632. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  20633. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20634. {
  20635. USE_OPLINE
  20636. zval *object_ptr, *orig_object_ptr;
  20637. zval *value;
  20638. zval *variable_ptr;
  20639. zval *dim;
  20640. SAVE_OPLINE();
  20641. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20642. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  20643. try_assign_dim_array:
  20644. SEPARATE_ARRAY(object_ptr);
  20645. if (IS_CONST == IS_UNUSED) {
  20646. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  20647. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  20648. HashTable *ht = Z_ARRVAL_P(object_ptr);
  20649. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  20650. GC_ADDREF(ht);
  20651. }
  20652. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  20653. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  20654. zend_array_destroy(ht);
  20655. goto assign_dim_error;
  20656. }
  20657. }
  20658. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  20659. ZVAL_DEREF(value);
  20660. }
  20661. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  20662. if (UNEXPECTED(value == NULL)) {
  20663. zend_cannot_add_element();
  20664. goto assign_dim_error;
  20665. } else if (IS_CONST == IS_CV) {
  20666. if (Z_REFCOUNTED_P(value)) {
  20667. Z_ADDREF_P(value);
  20668. }
  20669. } else if (IS_CONST == IS_VAR) {
  20670. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  20671. if (Z_ISREF_P(free_op_data)) {
  20672. if (Z_REFCOUNTED_P(value)) {
  20673. Z_ADDREF_P(value);
  20674. }
  20675. zval_ptr_dtor_nogc(free_op_data);
  20676. }
  20677. } else if (IS_CONST == IS_CONST) {
  20678. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  20679. Z_ADDREF_P(value);
  20680. }
  20681. }
  20682. } else {
  20683. dim = RT_CONSTANT(opline, opline->op2);
  20684. if (IS_CONST == IS_CONST) {
  20685. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20686. } else {
  20687. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20688. }
  20689. if (UNEXPECTED(variable_ptr == NULL)) {
  20690. goto assign_dim_error;
  20691. }
  20692. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  20693. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  20694. }
  20695. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20696. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20697. }
  20698. } else {
  20699. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  20700. object_ptr = Z_REFVAL_P(object_ptr);
  20701. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  20702. goto try_assign_dim_array;
  20703. }
  20704. }
  20705. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  20706. zend_object *obj = Z_OBJ_P(object_ptr);
  20707. GC_ADDREF(obj);
  20708. dim = RT_CONSTANT(opline, opline->op2);
  20709. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  20710. dim = ZVAL_UNDEFINED_OP2();
  20711. } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  20712. dim++;
  20713. }
  20714. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  20715. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  20716. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  20717. } else if (IS_CONST & (IS_CV|IS_VAR)) {
  20718. ZVAL_DEREF(value);
  20719. }
  20720. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  20721. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  20722. zend_objects_store_del(obj);
  20723. }
  20724. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  20725. if (IS_CONST == IS_UNUSED) {
  20726. zend_use_new_element_for_string();
  20727. UNDEF_RESULT();
  20728. } else {
  20729. dim = RT_CONSTANT(opline, opline->op2);
  20730. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  20731. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  20732. }
  20733. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  20734. if (Z_ISREF_P(orig_object_ptr)
  20735. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  20736. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  20737. dim = RT_CONSTANT(opline, opline->op2);
  20738. UNDEF_RESULT();
  20739. } else {
  20740. HashTable *ht = zend_new_array(8);
  20741. zend_uchar old_type = Z_TYPE_P(object_ptr);
  20742. ZVAL_ARR(object_ptr, ht);
  20743. if (UNEXPECTED(old_type == IS_FALSE)) {
  20744. GC_ADDREF(ht);
  20745. zend_false_to_array_deprecated();
  20746. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  20747. zend_array_destroy(ht);
  20748. goto assign_dim_error;
  20749. }
  20750. }
  20751. goto try_assign_dim_array;
  20752. }
  20753. } else {
  20754. zend_use_scalar_as_array();
  20755. dim = RT_CONSTANT(opline, opline->op2);
  20756. assign_dim_error:
  20757. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20758. ZVAL_NULL(EX_VAR(opline->result.var));
  20759. }
  20760. }
  20761. }
  20762. if (IS_CONST != IS_UNUSED) {
  20763. }
  20764. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  20765. /* assign_dim has two opcodes! */
  20766. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  20767. }
  20768. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20769. {
  20770. USE_OPLINE
  20771. zval *object_ptr, *orig_object_ptr;
  20772. zval *value;
  20773. zval *variable_ptr;
  20774. zval *dim;
  20775. SAVE_OPLINE();
  20776. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20777. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  20778. try_assign_dim_array:
  20779. SEPARATE_ARRAY(object_ptr);
  20780. if (IS_CONST == IS_UNUSED) {
  20781. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  20782. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  20783. HashTable *ht = Z_ARRVAL_P(object_ptr);
  20784. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  20785. GC_ADDREF(ht);
  20786. }
  20787. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  20788. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  20789. zend_array_destroy(ht);
  20790. goto assign_dim_error;
  20791. }
  20792. }
  20793. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  20794. ZVAL_DEREF(value);
  20795. }
  20796. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  20797. if (UNEXPECTED(value == NULL)) {
  20798. zend_cannot_add_element();
  20799. goto assign_dim_error;
  20800. } else if (IS_TMP_VAR == IS_CV) {
  20801. if (Z_REFCOUNTED_P(value)) {
  20802. Z_ADDREF_P(value);
  20803. }
  20804. } else if (IS_TMP_VAR == IS_VAR) {
  20805. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  20806. if (Z_ISREF_P(free_op_data)) {
  20807. if (Z_REFCOUNTED_P(value)) {
  20808. Z_ADDREF_P(value);
  20809. }
  20810. zval_ptr_dtor_nogc(free_op_data);
  20811. }
  20812. } else if (IS_TMP_VAR == IS_CONST) {
  20813. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  20814. Z_ADDREF_P(value);
  20815. }
  20816. }
  20817. } else {
  20818. dim = RT_CONSTANT(opline, opline->op2);
  20819. if (IS_CONST == IS_CONST) {
  20820. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20821. } else {
  20822. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20823. }
  20824. if (UNEXPECTED(variable_ptr == NULL)) {
  20825. goto assign_dim_error;
  20826. }
  20827. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  20828. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  20829. }
  20830. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20831. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20832. }
  20833. } else {
  20834. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  20835. object_ptr = Z_REFVAL_P(object_ptr);
  20836. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  20837. goto try_assign_dim_array;
  20838. }
  20839. }
  20840. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  20841. zend_object *obj = Z_OBJ_P(object_ptr);
  20842. GC_ADDREF(obj);
  20843. dim = RT_CONSTANT(opline, opline->op2);
  20844. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  20845. dim = ZVAL_UNDEFINED_OP2();
  20846. } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  20847. dim++;
  20848. }
  20849. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  20850. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  20851. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  20852. } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
  20853. ZVAL_DEREF(value);
  20854. }
  20855. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  20856. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20857. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  20858. zend_objects_store_del(obj);
  20859. }
  20860. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  20861. if (IS_CONST == IS_UNUSED) {
  20862. zend_use_new_element_for_string();
  20863. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20864. UNDEF_RESULT();
  20865. } else {
  20866. dim = RT_CONSTANT(opline, opline->op2);
  20867. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  20868. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  20869. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20870. }
  20871. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  20872. if (Z_ISREF_P(orig_object_ptr)
  20873. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  20874. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  20875. dim = RT_CONSTANT(opline, opline->op2);
  20876. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20877. UNDEF_RESULT();
  20878. } else {
  20879. HashTable *ht = zend_new_array(8);
  20880. zend_uchar old_type = Z_TYPE_P(object_ptr);
  20881. ZVAL_ARR(object_ptr, ht);
  20882. if (UNEXPECTED(old_type == IS_FALSE)) {
  20883. GC_ADDREF(ht);
  20884. zend_false_to_array_deprecated();
  20885. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  20886. zend_array_destroy(ht);
  20887. goto assign_dim_error;
  20888. }
  20889. }
  20890. goto try_assign_dim_array;
  20891. }
  20892. } else {
  20893. zend_use_scalar_as_array();
  20894. dim = RT_CONSTANT(opline, opline->op2);
  20895. assign_dim_error:
  20896. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20897. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20898. ZVAL_NULL(EX_VAR(opline->result.var));
  20899. }
  20900. }
  20901. }
  20902. if (IS_CONST != IS_UNUSED) {
  20903. }
  20904. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  20905. /* assign_dim has two opcodes! */
  20906. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  20907. }
  20908. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20909. {
  20910. USE_OPLINE
  20911. zval *object_ptr, *orig_object_ptr;
  20912. zval *value;
  20913. zval *variable_ptr;
  20914. zval *dim;
  20915. SAVE_OPLINE();
  20916. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  20917. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  20918. try_assign_dim_array:
  20919. SEPARATE_ARRAY(object_ptr);
  20920. if (IS_CONST == IS_UNUSED) {
  20921. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  20922. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  20923. HashTable *ht = Z_ARRVAL_P(object_ptr);
  20924. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  20925. GC_ADDREF(ht);
  20926. }
  20927. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  20928. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  20929. zend_array_destroy(ht);
  20930. goto assign_dim_error;
  20931. }
  20932. }
  20933. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  20934. ZVAL_DEREF(value);
  20935. }
  20936. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  20937. if (UNEXPECTED(value == NULL)) {
  20938. zend_cannot_add_element();
  20939. goto assign_dim_error;
  20940. } else if (IS_VAR == IS_CV) {
  20941. if (Z_REFCOUNTED_P(value)) {
  20942. Z_ADDREF_P(value);
  20943. }
  20944. } else if (IS_VAR == IS_VAR) {
  20945. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  20946. if (Z_ISREF_P(free_op_data)) {
  20947. if (Z_REFCOUNTED_P(value)) {
  20948. Z_ADDREF_P(value);
  20949. }
  20950. zval_ptr_dtor_nogc(free_op_data);
  20951. }
  20952. } else if (IS_VAR == IS_CONST) {
  20953. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  20954. Z_ADDREF_P(value);
  20955. }
  20956. }
  20957. } else {
  20958. dim = RT_CONSTANT(opline, opline->op2);
  20959. if (IS_CONST == IS_CONST) {
  20960. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20961. } else {
  20962. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20963. }
  20964. if (UNEXPECTED(variable_ptr == NULL)) {
  20965. goto assign_dim_error;
  20966. }
  20967. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  20968. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  20969. }
  20970. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20971. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20972. }
  20973. } else {
  20974. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  20975. object_ptr = Z_REFVAL_P(object_ptr);
  20976. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  20977. goto try_assign_dim_array;
  20978. }
  20979. }
  20980. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  20981. zend_object *obj = Z_OBJ_P(object_ptr);
  20982. GC_ADDREF(obj);
  20983. dim = RT_CONSTANT(opline, opline->op2);
  20984. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  20985. dim = ZVAL_UNDEFINED_OP2();
  20986. } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  20987. dim++;
  20988. }
  20989. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  20990. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  20991. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  20992. } else if (IS_VAR & (IS_CV|IS_VAR)) {
  20993. ZVAL_DEREF(value);
  20994. }
  20995. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  20996. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20997. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  20998. zend_objects_store_del(obj);
  20999. }
  21000. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  21001. if (IS_CONST == IS_UNUSED) {
  21002. zend_use_new_element_for_string();
  21003. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  21004. UNDEF_RESULT();
  21005. } else {
  21006. dim = RT_CONSTANT(opline, opline->op2);
  21007. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  21008. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  21009. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  21010. }
  21011. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  21012. if (Z_ISREF_P(orig_object_ptr)
  21013. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  21014. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  21015. dim = RT_CONSTANT(opline, opline->op2);
  21016. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  21017. UNDEF_RESULT();
  21018. } else {
  21019. HashTable *ht = zend_new_array(8);
  21020. zend_uchar old_type = Z_TYPE_P(object_ptr);
  21021. ZVAL_ARR(object_ptr, ht);
  21022. if (UNEXPECTED(old_type == IS_FALSE)) {
  21023. GC_ADDREF(ht);
  21024. zend_false_to_array_deprecated();
  21025. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  21026. zend_array_destroy(ht);
  21027. goto assign_dim_error;
  21028. }
  21029. }
  21030. goto try_assign_dim_array;
  21031. }
  21032. } else {
  21033. zend_use_scalar_as_array();
  21034. dim = RT_CONSTANT(opline, opline->op2);
  21035. assign_dim_error:
  21036. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  21037. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21038. ZVAL_NULL(EX_VAR(opline->result.var));
  21039. }
  21040. }
  21041. }
  21042. if (IS_CONST != IS_UNUSED) {
  21043. }
  21044. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21045. /* assign_dim has two opcodes! */
  21046. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  21047. }
  21048. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21049. {
  21050. USE_OPLINE
  21051. zval *object_ptr, *orig_object_ptr;
  21052. zval *value;
  21053. zval *variable_ptr;
  21054. zval *dim;
  21055. SAVE_OPLINE();
  21056. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21057. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  21058. try_assign_dim_array:
  21059. SEPARATE_ARRAY(object_ptr);
  21060. if (IS_CONST == IS_UNUSED) {
  21061. value = EX_VAR((opline+1)->op1.var);
  21062. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  21063. HashTable *ht = Z_ARRVAL_P(object_ptr);
  21064. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  21065. GC_ADDREF(ht);
  21066. }
  21067. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  21068. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  21069. zend_array_destroy(ht);
  21070. goto assign_dim_error;
  21071. }
  21072. }
  21073. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  21074. ZVAL_DEREF(value);
  21075. }
  21076. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  21077. if (UNEXPECTED(value == NULL)) {
  21078. zend_cannot_add_element();
  21079. goto assign_dim_error;
  21080. } else if (IS_CV == IS_CV) {
  21081. if (Z_REFCOUNTED_P(value)) {
  21082. Z_ADDREF_P(value);
  21083. }
  21084. } else if (IS_CV == IS_VAR) {
  21085. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  21086. if (Z_ISREF_P(free_op_data)) {
  21087. if (Z_REFCOUNTED_P(value)) {
  21088. Z_ADDREF_P(value);
  21089. }
  21090. zval_ptr_dtor_nogc(free_op_data);
  21091. }
  21092. } else if (IS_CV == IS_CONST) {
  21093. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  21094. Z_ADDREF_P(value);
  21095. }
  21096. }
  21097. } else {
  21098. dim = RT_CONSTANT(opline, opline->op2);
  21099. if (IS_CONST == IS_CONST) {
  21100. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  21101. } else {
  21102. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  21103. }
  21104. if (UNEXPECTED(variable_ptr == NULL)) {
  21105. goto assign_dim_error;
  21106. }
  21107. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  21108. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  21109. }
  21110. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21111. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21112. }
  21113. } else {
  21114. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  21115. object_ptr = Z_REFVAL_P(object_ptr);
  21116. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  21117. goto try_assign_dim_array;
  21118. }
  21119. }
  21120. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  21121. zend_object *obj = Z_OBJ_P(object_ptr);
  21122. GC_ADDREF(obj);
  21123. dim = RT_CONSTANT(opline, opline->op2);
  21124. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  21125. dim = ZVAL_UNDEFINED_OP2();
  21126. } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  21127. dim++;
  21128. }
  21129. value = EX_VAR((opline+1)->op1.var);
  21130. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  21131. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  21132. } else if (IS_CV & (IS_CV|IS_VAR)) {
  21133. ZVAL_DEREF(value);
  21134. }
  21135. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  21136. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  21137. zend_objects_store_del(obj);
  21138. }
  21139. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  21140. if (IS_CONST == IS_UNUSED) {
  21141. zend_use_new_element_for_string();
  21142. UNDEF_RESULT();
  21143. } else {
  21144. dim = RT_CONSTANT(opline, opline->op2);
  21145. value = EX_VAR((opline+1)->op1.var);
  21146. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  21147. }
  21148. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  21149. if (Z_ISREF_P(orig_object_ptr)
  21150. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  21151. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  21152. dim = RT_CONSTANT(opline, opline->op2);
  21153. UNDEF_RESULT();
  21154. } else {
  21155. HashTable *ht = zend_new_array(8);
  21156. zend_uchar old_type = Z_TYPE_P(object_ptr);
  21157. ZVAL_ARR(object_ptr, ht);
  21158. if (UNEXPECTED(old_type == IS_FALSE)) {
  21159. GC_ADDREF(ht);
  21160. zend_false_to_array_deprecated();
  21161. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  21162. zend_array_destroy(ht);
  21163. goto assign_dim_error;
  21164. }
  21165. }
  21166. goto try_assign_dim_array;
  21167. }
  21168. } else {
  21169. zend_use_scalar_as_array();
  21170. dim = RT_CONSTANT(opline, opline->op2);
  21171. assign_dim_error:
  21172. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21173. ZVAL_NULL(EX_VAR(opline->result.var));
  21174. }
  21175. }
  21176. }
  21177. if (IS_CONST != IS_UNUSED) {
  21178. }
  21179. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21180. /* assign_dim has two opcodes! */
  21181. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  21182. }
  21183. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21184. {
  21185. USE_OPLINE
  21186. zval *value;
  21187. zval *variable_ptr;
  21188. SAVE_OPLINE();
  21189. value = RT_CONSTANT(opline, opline->op2);
  21190. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21191. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  21192. if (UNEXPECTED(0)) {
  21193. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21194. }
  21195. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21196. /* zend_assign_to_variable() always takes care of op2, never free it! */
  21197. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21198. }
  21199. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21200. {
  21201. USE_OPLINE
  21202. zval *value;
  21203. zval *variable_ptr;
  21204. SAVE_OPLINE();
  21205. value = RT_CONSTANT(opline, opline->op2);
  21206. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21207. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  21208. if (UNEXPECTED(1)) {
  21209. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21210. }
  21211. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21212. /* zend_assign_to_variable() always takes care of op2, never free it! */
  21213. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21214. }
  21215. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21216. {
  21217. USE_OPLINE
  21218. zval *property, *container, *value_ptr;
  21219. SAVE_OPLINE();
  21220. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21221. property = RT_CONSTANT(opline, opline->op2);
  21222. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  21223. if (1) {
  21224. if (IS_VAR == IS_UNUSED) {
  21225. if (IS_CONST == IS_CONST) {
  21226. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21227. } else {
  21228. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21229. }
  21230. } else {
  21231. if (IS_CONST == IS_CONST) {
  21232. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21233. } else {
  21234. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21235. }
  21236. }
  21237. } else {
  21238. zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21239. }
  21240. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21241. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  21242. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  21243. }
  21244. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  21245. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21246. {
  21247. USE_OPLINE
  21248. zval *property, *container, *value_ptr;
  21249. SAVE_OPLINE();
  21250. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21251. property = RT_CONSTANT(opline, opline->op2);
  21252. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  21253. if (1) {
  21254. if (IS_VAR == IS_UNUSED) {
  21255. if (IS_CONST == IS_CONST) {
  21256. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21257. } else {
  21258. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21259. }
  21260. } else {
  21261. if (IS_CONST == IS_CONST) {
  21262. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21263. } else {
  21264. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21265. }
  21266. }
  21267. } else {
  21268. zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  21269. }
  21270. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21271. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  21272. }
  21273. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  21274. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21275. {
  21276. USE_OPLINE
  21277. zval *function_name;
  21278. zend_class_entry *ce;
  21279. uint32_t call_info;
  21280. zend_function *fbc;
  21281. zend_execute_data *call;
  21282. SAVE_OPLINE();
  21283. if (IS_VAR == IS_CONST) {
  21284. /* no function found. try a static method in class */
  21285. ce = CACHED_PTR(opline->result.num);
  21286. if (UNEXPECTED(ce == NULL)) {
  21287. 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);
  21288. if (UNEXPECTED(ce == NULL)) {
  21289. HANDLE_EXCEPTION();
  21290. }
  21291. if (IS_CONST != IS_CONST) {
  21292. CACHE_PTR(opline->result.num, ce);
  21293. }
  21294. }
  21295. } else if (IS_VAR == IS_UNUSED) {
  21296. ce = zend_fetch_class(NULL, opline->op1.num);
  21297. if (UNEXPECTED(ce == NULL)) {
  21298. HANDLE_EXCEPTION();
  21299. }
  21300. } else {
  21301. ce = Z_CE_P(EX_VAR(opline->op1.var));
  21302. }
  21303. if (IS_VAR == IS_CONST &&
  21304. IS_CONST == IS_CONST &&
  21305. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  21306. /* nothing to do */
  21307. } else if (IS_VAR != IS_CONST &&
  21308. IS_CONST == IS_CONST &&
  21309. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  21310. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  21311. } else if (IS_CONST != IS_UNUSED) {
  21312. function_name = RT_CONSTANT(opline, opline->op2);
  21313. if (IS_CONST != IS_CONST) {
  21314. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  21315. do {
  21316. if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  21317. function_name = Z_REFVAL_P(function_name);
  21318. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  21319. break;
  21320. }
  21321. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  21322. ZVAL_UNDEFINED_OP2();
  21323. if (UNEXPECTED(EG(exception) != NULL)) {
  21324. HANDLE_EXCEPTION();
  21325. }
  21326. }
  21327. zend_throw_error(NULL, "Method name must be a string");
  21328. HANDLE_EXCEPTION();
  21329. } while (0);
  21330. }
  21331. }
  21332. if (ce->get_static_method) {
  21333. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  21334. } else {
  21335. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  21336. }
  21337. if (UNEXPECTED(fbc == NULL)) {
  21338. if (EXPECTED(!EG(exception))) {
  21339. zend_undefined_method(ce, Z_STR_P(function_name));
  21340. }
  21341. HANDLE_EXCEPTION();
  21342. }
  21343. if (IS_CONST == IS_CONST &&
  21344. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  21345. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  21346. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  21347. }
  21348. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  21349. init_func_run_time_cache(&fbc->op_array);
  21350. }
  21351. if (IS_CONST != IS_CONST) {
  21352. }
  21353. } else {
  21354. if (UNEXPECTED(ce->constructor == NULL)) {
  21355. zend_throw_error(NULL, "Cannot call constructor");
  21356. HANDLE_EXCEPTION();
  21357. }
  21358. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  21359. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  21360. HANDLE_EXCEPTION();
  21361. }
  21362. fbc = ce->constructor;
  21363. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  21364. init_func_run_time_cache(&fbc->op_array);
  21365. }
  21366. }
  21367. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  21368. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  21369. ce = (zend_class_entry*)Z_OBJ(EX(This));
  21370. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  21371. } else {
  21372. zend_non_static_method_call(fbc);
  21373. HANDLE_EXCEPTION();
  21374. }
  21375. } else {
  21376. /* previous opcode is ZEND_FETCH_CLASS */
  21377. if (IS_VAR == IS_UNUSED
  21378. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  21379. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  21380. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  21381. ce = Z_OBJCE(EX(This));
  21382. } else {
  21383. ce = Z_CE(EX(This));
  21384. }
  21385. }
  21386. call_info = ZEND_CALL_NESTED_FUNCTION;
  21387. }
  21388. call = zend_vm_stack_push_call_frame(call_info,
  21389. fbc, opline->extended_value, ce);
  21390. call->prev_execute_data = EX(call);
  21391. EX(call) = call;
  21392. ZEND_VM_NEXT_OPCODE();
  21393. }
  21394. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21395. {
  21396. USE_OPLINE
  21397. zval *varptr, *arg;
  21398. if (IS_CONST == IS_CONST) {
  21399. SAVE_OPLINE();
  21400. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  21401. uint32_t arg_num;
  21402. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  21403. if (UNEXPECTED(!arg)) {
  21404. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21405. HANDLE_EXCEPTION();
  21406. }
  21407. } else {
  21408. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  21409. }
  21410. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21411. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  21412. SAVE_OPLINE();
  21413. ZVAL_UNDEFINED_OP1();
  21414. ZVAL_NULL(arg);
  21415. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21416. }
  21417. if (IS_VAR == IS_CV) {
  21418. ZVAL_COPY_DEREF(arg, varptr);
  21419. } else /* if (IS_VAR == IS_VAR) */ {
  21420. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  21421. zend_refcounted *ref = Z_COUNTED_P(varptr);
  21422. varptr = Z_REFVAL_P(varptr);
  21423. ZVAL_COPY_VALUE(arg, varptr);
  21424. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  21425. efree_size(ref, sizeof(zend_reference));
  21426. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  21427. Z_ADDREF_P(arg);
  21428. }
  21429. } else {
  21430. ZVAL_COPY_VALUE(arg, varptr);
  21431. }
  21432. }
  21433. ZEND_VM_NEXT_OPCODE();
  21434. }
  21435. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21436. {
  21437. USE_OPLINE
  21438. zval *varptr, *arg;
  21439. if (IS_CONST == IS_CONST) {
  21440. SAVE_OPLINE();
  21441. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  21442. uint32_t arg_num;
  21443. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  21444. if (UNEXPECTED(!arg)) {
  21445. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21446. HANDLE_EXCEPTION();
  21447. }
  21448. } else {
  21449. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  21450. }
  21451. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21452. ZVAL_COPY_VALUE(arg, varptr);
  21453. if (EXPECTED(Z_ISREF_P(varptr))) {
  21454. ZEND_VM_NEXT_OPCODE();
  21455. }
  21456. SAVE_OPLINE();
  21457. ZVAL_NEW_REF(arg, arg);
  21458. zend_error(E_NOTICE, "Only variables should be passed by reference");
  21459. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21460. }
  21461. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21462. {
  21463. USE_OPLINE
  21464. zval *varptr, *arg;
  21465. uint32_t arg_num;
  21466. if (IS_CONST == IS_CONST) {
  21467. SAVE_OPLINE();
  21468. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  21469. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  21470. if (UNEXPECTED(!arg)) {
  21471. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21472. HANDLE_EXCEPTION();
  21473. }
  21474. } else {
  21475. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  21476. arg_num = opline->op2.num;
  21477. }
  21478. if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
  21479. if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  21480. goto send_var;
  21481. }
  21482. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21483. ZVAL_COPY_VALUE(arg, varptr);
  21484. if (EXPECTED(Z_ISREF_P(varptr) ||
  21485. QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
  21486. ZEND_VM_NEXT_OPCODE();
  21487. }
  21488. } else {
  21489. if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  21490. goto send_var;
  21491. }
  21492. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21493. ZVAL_COPY_VALUE(arg, varptr);
  21494. if (EXPECTED(Z_ISREF_P(varptr) ||
  21495. ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
  21496. ZEND_VM_NEXT_OPCODE();
  21497. }
  21498. }
  21499. SAVE_OPLINE();
  21500. ZVAL_NEW_REF(arg, arg);
  21501. zend_error(E_NOTICE, "Only variables should be passed by reference");
  21502. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21503. send_var:
  21504. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21505. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  21506. zend_refcounted *ref = Z_COUNTED_P(varptr);
  21507. varptr = Z_REFVAL_P(varptr);
  21508. ZVAL_COPY_VALUE(arg, varptr);
  21509. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  21510. efree_size(ref, sizeof(zend_reference));
  21511. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  21512. Z_ADDREF_P(arg);
  21513. }
  21514. } else {
  21515. ZVAL_COPY_VALUE(arg, varptr);
  21516. }
  21517. ZEND_VM_NEXT_OPCODE();
  21518. }
  21519. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21520. {
  21521. USE_OPLINE
  21522. zval *varptr, *arg;
  21523. SAVE_OPLINE();
  21524. if (IS_CONST == IS_CONST) {
  21525. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  21526. uint32_t arg_num;
  21527. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  21528. if (UNEXPECTED(!arg)) {
  21529. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21530. HANDLE_EXCEPTION();
  21531. }
  21532. } else {
  21533. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  21534. }
  21535. varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21536. if (Z_ISREF_P(varptr)) {
  21537. Z_ADDREF_P(varptr);
  21538. } else {
  21539. ZVAL_MAKE_REF_EX(varptr, 2);
  21540. }
  21541. ZVAL_REF(arg, Z_REF_P(varptr));
  21542. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21543. ZEND_VM_NEXT_OPCODE();
  21544. }
  21545. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21546. {
  21547. USE_OPLINE
  21548. zval *varptr, *arg;
  21549. uint32_t arg_num;
  21550. if (IS_CONST == IS_CONST) {
  21551. SAVE_OPLINE();
  21552. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  21553. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  21554. if (UNEXPECTED(!arg)) {
  21555. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21556. HANDLE_EXCEPTION();
  21557. }
  21558. } else {
  21559. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  21560. arg_num = opline->op2.num;
  21561. }
  21562. if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
  21563. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  21564. goto send_var_by_ref;
  21565. }
  21566. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  21567. send_var_by_ref:
  21568. varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21569. if (Z_ISREF_P(varptr)) {
  21570. Z_ADDREF_P(varptr);
  21571. } else {
  21572. ZVAL_MAKE_REF_EX(varptr, 2);
  21573. }
  21574. ZVAL_REF(arg, Z_REF_P(varptr));
  21575. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21576. ZEND_VM_NEXT_OPCODE();
  21577. }
  21578. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21579. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  21580. SAVE_OPLINE();
  21581. ZVAL_UNDEFINED_OP1();
  21582. ZVAL_NULL(arg);
  21583. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21584. }
  21585. if (IS_VAR == IS_CV) {
  21586. ZVAL_COPY_DEREF(arg, varptr);
  21587. } else /* if (IS_VAR == IS_VAR) */ {
  21588. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  21589. zend_refcounted *ref = Z_COUNTED_P(varptr);
  21590. varptr = Z_REFVAL_P(varptr);
  21591. ZVAL_COPY_VALUE(arg, varptr);
  21592. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  21593. efree_size(ref, sizeof(zend_reference));
  21594. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  21595. Z_ADDREF_P(arg);
  21596. }
  21597. } else {
  21598. ZVAL_COPY_VALUE(arg, varptr);
  21599. }
  21600. }
  21601. ZEND_VM_NEXT_OPCODE();
  21602. }
  21603. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21604. {
  21605. USE_OPLINE
  21606. zval *varptr, *arg;
  21607. if (IS_CONST == IS_CONST) {
  21608. // TODO: Would it make sense to share the cache slot with CHECK_FUNC_ARG?
  21609. SAVE_OPLINE();
  21610. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  21611. uint32_t arg_num;
  21612. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  21613. if (UNEXPECTED(!arg)) {
  21614. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21615. HANDLE_EXCEPTION();
  21616. }
  21617. } else {
  21618. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  21619. }
  21620. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  21621. varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21622. if (Z_ISREF_P(varptr)) {
  21623. Z_ADDREF_P(varptr);
  21624. } else {
  21625. ZVAL_MAKE_REF_EX(varptr, 2);
  21626. }
  21627. ZVAL_REF(arg, Z_REF_P(varptr));
  21628. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21629. ZEND_VM_NEXT_OPCODE();
  21630. }
  21631. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21632. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  21633. zend_refcounted *ref = Z_COUNTED_P(varptr);
  21634. varptr = Z_REFVAL_P(varptr);
  21635. ZVAL_COPY_VALUE(arg, varptr);
  21636. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  21637. efree_size(ref, sizeof(zend_reference));
  21638. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  21639. Z_ADDREF_P(arg);
  21640. }
  21641. } else {
  21642. ZVAL_COPY_VALUE(arg, varptr);
  21643. }
  21644. ZEND_VM_NEXT_OPCODE();
  21645. }
  21646. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21647. {
  21648. zend_class_entry *ce, *scope;
  21649. zend_class_constant *c;
  21650. zval *value, *zv;
  21651. USE_OPLINE
  21652. SAVE_OPLINE();
  21653. do {
  21654. if (IS_VAR == IS_CONST) {
  21655. if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
  21656. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  21657. break;
  21658. } else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
  21659. ce = CACHED_PTR(opline->extended_value);
  21660. } else {
  21661. 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);
  21662. if (UNEXPECTED(ce == NULL)) {
  21663. ZVAL_UNDEF(EX_VAR(opline->result.var));
  21664. HANDLE_EXCEPTION();
  21665. }
  21666. }
  21667. } else {
  21668. if (IS_VAR == IS_UNUSED) {
  21669. ce = zend_fetch_class(NULL, opline->op1.num);
  21670. if (UNEXPECTED(ce == NULL)) {
  21671. ZVAL_UNDEF(EX_VAR(opline->result.var));
  21672. HANDLE_EXCEPTION();
  21673. }
  21674. } else {
  21675. ce = Z_CE_P(EX_VAR(opline->op1.var));
  21676. }
  21677. if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  21678. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  21679. break;
  21680. }
  21681. }
  21682. zv = zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), Z_STR_P(RT_CONSTANT(opline, opline->op2)));
  21683. if (EXPECTED(zv != NULL)) {
  21684. c = Z_PTR_P(zv);
  21685. scope = EX(func)->op_array.scope;
  21686. if (!zend_verify_const_access(c, scope)) {
  21687. 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)));
  21688. ZVAL_UNDEF(EX_VAR(opline->result.var));
  21689. HANDLE_EXCEPTION();
  21690. }
  21691. value = &c->value;
  21692. if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
  21693. zval_update_constant_ex(value, c->ce);
  21694. if (UNEXPECTED(EG(exception) != NULL)) {
  21695. ZVAL_UNDEF(EX_VAR(opline->result.var));
  21696. HANDLE_EXCEPTION();
  21697. }
  21698. }
  21699. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
  21700. } else {
  21701. zend_throw_error(NULL, "Undefined constant %s::%s",
  21702. ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
  21703. ZVAL_UNDEF(EX_VAR(opline->result.var));
  21704. HANDLE_EXCEPTION();
  21705. }
  21706. } while (0);
  21707. ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
  21708. ZEND_VM_NEXT_OPCODE();
  21709. }
  21710. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21711. {
  21712. USE_OPLINE
  21713. zval *expr_ptr, new_expr;
  21714. SAVE_OPLINE();
  21715. if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
  21716. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  21717. expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21718. if (Z_ISREF_P(expr_ptr)) {
  21719. Z_ADDREF_P(expr_ptr);
  21720. } else {
  21721. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  21722. }
  21723. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21724. } else {
  21725. expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21726. if (IS_VAR == IS_TMP_VAR) {
  21727. /* pass */
  21728. } else if (IS_VAR == IS_CONST) {
  21729. Z_TRY_ADDREF_P(expr_ptr);
  21730. } else if (IS_VAR == IS_CV) {
  21731. ZVAL_DEREF(expr_ptr);
  21732. Z_TRY_ADDREF_P(expr_ptr);
  21733. } else /* if (IS_VAR == IS_VAR) */ {
  21734. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  21735. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  21736. expr_ptr = Z_REFVAL_P(expr_ptr);
  21737. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  21738. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  21739. expr_ptr = &new_expr;
  21740. efree_size(ref, sizeof(zend_reference));
  21741. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  21742. Z_ADDREF_P(expr_ptr);
  21743. }
  21744. }
  21745. }
  21746. }
  21747. if (IS_CONST != IS_UNUSED) {
  21748. zval *offset = RT_CONSTANT(opline, opline->op2);
  21749. zend_string *str;
  21750. zend_ulong hval;
  21751. add_again:
  21752. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  21753. str = Z_STR_P(offset);
  21754. if (IS_CONST != IS_CONST) {
  21755. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  21756. goto num_index;
  21757. }
  21758. }
  21759. str_index:
  21760. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  21761. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  21762. hval = Z_LVAL_P(offset);
  21763. num_index:
  21764. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  21765. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  21766. offset = Z_REFVAL_P(offset);
  21767. goto add_again;
  21768. } else if (Z_TYPE_P(offset) == IS_NULL) {
  21769. str = ZSTR_EMPTY_ALLOC();
  21770. goto str_index;
  21771. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  21772. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  21773. goto num_index;
  21774. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  21775. hval = 0;
  21776. goto num_index;
  21777. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  21778. hval = 1;
  21779. goto num_index;
  21780. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  21781. zend_use_resource_as_offset(offset);
  21782. hval = Z_RES_HANDLE_P(offset);
  21783. goto num_index;
  21784. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  21785. ZVAL_UNDEFINED_OP2();
  21786. str = ZSTR_EMPTY_ALLOC();
  21787. goto str_index;
  21788. } else {
  21789. zend_illegal_offset();
  21790. zval_ptr_dtor_nogc(expr_ptr);
  21791. }
  21792. } else {
  21793. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  21794. zend_cannot_add_element();
  21795. zval_ptr_dtor_nogc(expr_ptr);
  21796. }
  21797. }
  21798. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21799. }
  21800. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21801. {
  21802. zval *array;
  21803. uint32_t size;
  21804. USE_OPLINE
  21805. array = EX_VAR(opline->result.var);
  21806. if (IS_VAR != IS_UNUSED) {
  21807. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  21808. ZVAL_ARR(array, zend_new_array(size));
  21809. /* Explicitly initialize array as not-packed if flag is set */
  21810. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  21811. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  21812. }
  21813. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21814. } else {
  21815. ZVAL_ARR(array, zend_new_array(0));
  21816. ZEND_VM_NEXT_OPCODE();
  21817. }
  21818. }
  21819. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21820. {
  21821. USE_OPLINE
  21822. zval *container;
  21823. zval *offset;
  21824. zend_ulong hval;
  21825. zend_string *key;
  21826. SAVE_OPLINE();
  21827. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21828. offset = RT_CONSTANT(opline, opline->op2);
  21829. do {
  21830. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  21831. HashTable *ht;
  21832. unset_dim_array:
  21833. SEPARATE_ARRAY(container);
  21834. ht = Z_ARRVAL_P(container);
  21835. offset_again:
  21836. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  21837. key = Z_STR_P(offset);
  21838. if (IS_CONST != IS_CONST) {
  21839. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  21840. goto num_index_dim;
  21841. }
  21842. }
  21843. str_index_dim:
  21844. ZEND_ASSERT(ht != &EG(symbol_table));
  21845. zend_hash_del(ht, key);
  21846. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  21847. hval = Z_LVAL_P(offset);
  21848. num_index_dim:
  21849. zend_hash_index_del(ht, hval);
  21850. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  21851. offset = Z_REFVAL_P(offset);
  21852. goto offset_again;
  21853. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  21854. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  21855. goto num_index_dim;
  21856. } else if (Z_TYPE_P(offset) == IS_NULL) {
  21857. key = ZSTR_EMPTY_ALLOC();
  21858. goto str_index_dim;
  21859. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  21860. hval = 0;
  21861. goto num_index_dim;
  21862. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  21863. hval = 1;
  21864. goto num_index_dim;
  21865. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  21866. zend_use_resource_as_offset(offset);
  21867. hval = Z_RES_HANDLE_P(offset);
  21868. goto num_index_dim;
  21869. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  21870. ZVAL_UNDEFINED_OP2();
  21871. key = ZSTR_EMPTY_ALLOC();
  21872. goto str_index_dim;
  21873. } else {
  21874. zend_type_error("Illegal offset type in unset");
  21875. }
  21876. break;
  21877. } else if (Z_ISREF_P(container)) {
  21878. container = Z_REFVAL_P(container);
  21879. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  21880. goto unset_dim_array;
  21881. }
  21882. }
  21883. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  21884. container = ZVAL_UNDEFINED_OP1();
  21885. }
  21886. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  21887. offset = ZVAL_UNDEFINED_OP2();
  21888. }
  21889. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  21890. if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  21891. offset++;
  21892. }
  21893. Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
  21894. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  21895. zend_throw_error(NULL, "Cannot unset string offsets");
  21896. } else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
  21897. zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
  21898. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
  21899. zend_false_to_array_deprecated();
  21900. }
  21901. } while (0);
  21902. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21903. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21904. }
  21905. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21906. {
  21907. USE_OPLINE
  21908. zval *container;
  21909. zval *offset;
  21910. zend_string *name, *tmp_name;
  21911. SAVE_OPLINE();
  21912. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21913. offset = RT_CONSTANT(opline, opline->op2);
  21914. do {
  21915. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  21916. if (Z_ISREF_P(container)) {
  21917. container = Z_REFVAL_P(container);
  21918. if (Z_TYPE_P(container) != IS_OBJECT) {
  21919. if (IS_VAR == IS_CV
  21920. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  21921. ZVAL_UNDEFINED_OP1();
  21922. }
  21923. break;
  21924. }
  21925. } else {
  21926. break;
  21927. }
  21928. }
  21929. if (IS_CONST == IS_CONST) {
  21930. name = Z_STR_P(offset);
  21931. } else {
  21932. name = zval_try_get_tmp_string(offset, &tmp_name);
  21933. if (UNEXPECTED(!name)) {
  21934. break;
  21935. }
  21936. }
  21937. Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  21938. if (IS_CONST != IS_CONST) {
  21939. zend_tmp_string_release(tmp_name);
  21940. }
  21941. } while (0);
  21942. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21943. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21944. }
  21945. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21946. {
  21947. USE_OPLINE
  21948. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  21949. SAVE_OPLINE();
  21950. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  21951. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21952. }
  21953. /* Destroy the previously yielded value */
  21954. zval_ptr_dtor(&generator->value);
  21955. /* Destroy the previously yielded key */
  21956. zval_ptr_dtor(&generator->key);
  21957. /* Set the new yielded value */
  21958. if (IS_VAR != IS_UNUSED) {
  21959. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  21960. /* Constants and temporary variables aren't yieldable by reference,
  21961. * but we still allow them with a notice. */
  21962. if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
  21963. zval *value;
  21964. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  21965. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21966. ZVAL_COPY_VALUE(&generator->value, value);
  21967. if (IS_VAR == IS_CONST) {
  21968. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  21969. Z_ADDREF(generator->value);
  21970. }
  21971. }
  21972. } else {
  21973. zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21974. /* If a function call result is yielded and the function did
  21975. * not return by reference we throw a notice. */
  21976. do {
  21977. if (IS_VAR == IS_VAR) {
  21978. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  21979. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  21980. && !Z_ISREF_P(value_ptr)) {
  21981. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  21982. ZVAL_COPY(&generator->value, value_ptr);
  21983. break;
  21984. }
  21985. }
  21986. if (Z_ISREF_P(value_ptr)) {
  21987. Z_ADDREF_P(value_ptr);
  21988. } else {
  21989. ZVAL_MAKE_REF_EX(value_ptr, 2);
  21990. }
  21991. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  21992. } while (0);
  21993. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  21994. }
  21995. } else {
  21996. zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  21997. /* Consts, temporary variables and references need copying */
  21998. if (IS_VAR == IS_CONST) {
  21999. ZVAL_COPY_VALUE(&generator->value, value);
  22000. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  22001. Z_ADDREF(generator->value);
  22002. }
  22003. } else if (IS_VAR == IS_TMP_VAR) {
  22004. ZVAL_COPY_VALUE(&generator->value, value);
  22005. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  22006. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  22007. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22008. } else {
  22009. ZVAL_COPY_VALUE(&generator->value, value);
  22010. if (IS_VAR == IS_CV) {
  22011. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  22012. }
  22013. }
  22014. }
  22015. } else {
  22016. /* If no value was specified yield null */
  22017. ZVAL_NULL(&generator->value);
  22018. }
  22019. /* Set the new yielded key */
  22020. if (IS_CONST != IS_UNUSED) {
  22021. zval *key = RT_CONSTANT(opline, opline->op2);
  22022. if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  22023. key = Z_REFVAL_P(key);
  22024. }
  22025. ZVAL_COPY(&generator->key, key);
  22026. if (Z_TYPE(generator->key) == IS_LONG
  22027. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  22028. ) {
  22029. generator->largest_used_integer_key = Z_LVAL(generator->key);
  22030. }
  22031. } else {
  22032. /* If no key was specified we use auto-increment keys */
  22033. generator->largest_used_integer_key++;
  22034. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  22035. }
  22036. if (RETURN_VALUE_USED(opline)) {
  22037. /* If the return value of yield is used set the send
  22038. * target and initialize it to NULL */
  22039. generator->send_target = EX_VAR(opline->result.var);
  22040. ZVAL_NULL(generator->send_target);
  22041. } else {
  22042. generator->send_target = NULL;
  22043. }
  22044. /* We increment to the next op, so we are at the correct position when the
  22045. * generator is resumed. */
  22046. ZEND_VM_INC_OPCODE();
  22047. /* The GOTO VM uses a local opline variable. We need to set the opline
  22048. * variable in execute_data so we don't resume at an old position. */
  22049. SAVE_OPLINE();
  22050. ZEND_VM_RETURN();
  22051. }
  22052. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22053. {
  22054. USE_OPLINE
  22055. zval *op1;
  22056. HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  22057. zval *result;
  22058. op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22059. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  22060. result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_VAR == IS_CONST);
  22061. if (IS_VAR & (IS_TMP_VAR|IS_VAR)) {
  22062. zval_ptr_dtor_str(op1);
  22063. }
  22064. ZEND_VM_SMART_BRANCH(result, 0);
  22065. }
  22066. if (opline->extended_value) {
  22067. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  22068. result = zend_hash_index_find(ht, Z_LVAL_P(op1));
  22069. ZEND_VM_SMART_BRANCH(result, 0);
  22070. }
  22071. SAVE_OPLINE();
  22072. if ((IS_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
  22073. op1 = Z_REFVAL_P(op1);
  22074. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  22075. result = zend_hash_find(ht, Z_STR_P(op1));
  22076. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22077. ZEND_VM_SMART_BRANCH(result, 0);
  22078. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  22079. result = zend_hash_index_find(ht, Z_LVAL_P(op1));
  22080. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22081. ZEND_VM_SMART_BRANCH(result, 0);
  22082. }
  22083. } else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  22084. ZVAL_UNDEFINED_OP1();
  22085. }
  22086. } else if (Z_TYPE_P(op1) <= IS_FALSE) {
  22087. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  22088. SAVE_OPLINE();
  22089. ZVAL_UNDEFINED_OP1();
  22090. if (UNEXPECTED(EG(exception) != NULL)) {
  22091. HANDLE_EXCEPTION();
  22092. }
  22093. }
  22094. result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
  22095. ZEND_VM_SMART_BRANCH(result, 0);
  22096. } else {
  22097. zend_string *key;
  22098. zval key_tmp;
  22099. if ((IS_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
  22100. op1 = Z_REFVAL_P(op1);
  22101. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  22102. result = zend_hash_find(ht, Z_STR_P(op1));
  22103. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22104. ZEND_VM_SMART_BRANCH(result, 0);
  22105. }
  22106. }
  22107. SAVE_OPLINE();
  22108. ZEND_HASH_FOREACH_STR_KEY(ht, key) {
  22109. ZVAL_STR(&key_tmp, key);
  22110. if (zend_compare(op1, &key_tmp) == 0) {
  22111. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22112. ZEND_VM_SMART_BRANCH(1, 1);
  22113. }
  22114. } ZEND_HASH_FOREACH_END();
  22115. }
  22116. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22117. ZEND_VM_SMART_BRANCH(0, 1);
  22118. }
  22119. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22120. {
  22121. USE_OPLINE
  22122. zval *object;
  22123. zval *property;
  22124. zval *value;
  22125. zval *zptr;
  22126. void **cache_slot;
  22127. zend_property_info *prop_info;
  22128. zend_object *zobj;
  22129. zend_string *name, *tmp_name;
  22130. SAVE_OPLINE();
  22131. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22132. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22133. do {
  22134. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  22135. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  22136. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  22137. object = Z_REFVAL_P(object);
  22138. goto assign_op_object;
  22139. }
  22140. if (IS_VAR == IS_CV
  22141. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  22142. ZVAL_UNDEFINED_OP1();
  22143. }
  22144. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  22145. break;
  22146. }
  22147. assign_op_object:
  22148. /* here we are sure we are dealing with an object */
  22149. zobj = Z_OBJ_P(object);
  22150. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22151. name = Z_STR_P(property);
  22152. } else {
  22153. name = zval_try_get_tmp_string(property, &tmp_name);
  22154. if (UNEXPECTED(!name)) {
  22155. UNDEF_RESULT();
  22156. break;
  22157. }
  22158. }
  22159. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  22160. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  22161. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  22162. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22163. ZVAL_NULL(EX_VAR(opline->result.var));
  22164. }
  22165. } else {
  22166. zval *orig_zptr = zptr;
  22167. zend_reference *ref;
  22168. do {
  22169. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  22170. ref = Z_REF_P(zptr);
  22171. zptr = Z_REFVAL_P(zptr);
  22172. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  22173. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  22174. break;
  22175. }
  22176. }
  22177. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22178. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  22179. } else {
  22180. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  22181. }
  22182. if (UNEXPECTED(prop_info)) {
  22183. /* special case for typed properties */
  22184. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  22185. } else {
  22186. zend_binary_op(zptr, zptr, value OPLINE_CC);
  22187. }
  22188. } while (0);
  22189. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22190. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  22191. }
  22192. }
  22193. } else {
  22194. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  22195. }
  22196. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  22197. zend_tmp_string_release(tmp_name);
  22198. }
  22199. } while (0);
  22200. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  22201. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22202. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22203. /* assign_obj has two opcodes! */
  22204. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  22205. }
  22206. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  22207. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22208. {
  22209. USE_OPLINE
  22210. zval *var_ptr;
  22211. zval *value, *container, *dim;
  22212. HashTable *ht;
  22213. SAVE_OPLINE();
  22214. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22215. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  22216. assign_dim_op_array:
  22217. SEPARATE_ARRAY(container);
  22218. ht = Z_ARRVAL_P(container);
  22219. assign_dim_op_new_array:
  22220. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22221. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  22222. var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
  22223. if (UNEXPECTED(!var_ptr)) {
  22224. zend_cannot_add_element();
  22225. goto assign_dim_op_ret_null;
  22226. }
  22227. } else {
  22228. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22229. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
  22230. } else {
  22231. var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
  22232. }
  22233. if (UNEXPECTED(!var_ptr)) {
  22234. goto assign_dim_op_ret_null;
  22235. }
  22236. }
  22237. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  22238. do {
  22239. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
  22240. zend_reference *ref = Z_REF_P(var_ptr);
  22241. var_ptr = Z_REFVAL_P(var_ptr);
  22242. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  22243. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  22244. break;
  22245. }
  22246. }
  22247. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  22248. } while (0);
  22249. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22250. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  22251. }
  22252. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  22253. } else {
  22254. if (EXPECTED(Z_ISREF_P(container))) {
  22255. container = Z_REFVAL_P(container);
  22256. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  22257. goto assign_dim_op_array;
  22258. }
  22259. }
  22260. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  22261. zend_object *obj = Z_OBJ_P(container);
  22262. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22263. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  22264. dim++;
  22265. }
  22266. zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
  22267. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  22268. zend_uchar old_type;
  22269. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  22270. ZVAL_UNDEFINED_OP1();
  22271. }
  22272. ht = zend_new_array(8);
  22273. old_type = Z_TYPE_P(container);
  22274. ZVAL_ARR(container, ht);
  22275. if (UNEXPECTED(old_type == IS_FALSE)) {
  22276. GC_ADDREF(ht);
  22277. zend_false_to_array_deprecated();
  22278. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  22279. zend_array_destroy(ht);
  22280. goto assign_dim_op_ret_null;
  22281. }
  22282. }
  22283. goto assign_dim_op_new_array;
  22284. } else {
  22285. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22286. zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  22287. assign_dim_op_ret_null:
  22288. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  22289. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22290. ZVAL_NULL(EX_VAR(opline->result.var));
  22291. }
  22292. }
  22293. }
  22294. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22295. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22296. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  22297. }
  22298. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22299. {
  22300. USE_OPLINE
  22301. zval *var_ptr;
  22302. zval *value;
  22303. SAVE_OPLINE();
  22304. value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22305. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22306. do {
  22307. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  22308. zend_reference *ref = Z_REF_P(var_ptr);
  22309. var_ptr = Z_REFVAL_P(var_ptr);
  22310. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  22311. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  22312. break;
  22313. }
  22314. }
  22315. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  22316. } while (0);
  22317. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22318. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  22319. }
  22320. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22321. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22322. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22323. }
  22324. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22325. {
  22326. USE_OPLINE
  22327. zval *object;
  22328. zval *property;
  22329. zval *zptr;
  22330. void **cache_slot;
  22331. zend_property_info *prop_info;
  22332. zend_object *zobj;
  22333. zend_string *name, *tmp_name;
  22334. SAVE_OPLINE();
  22335. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22336. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22337. do {
  22338. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  22339. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  22340. object = Z_REFVAL_P(object);
  22341. goto pre_incdec_object;
  22342. }
  22343. if (IS_VAR == IS_CV
  22344. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  22345. ZVAL_UNDEFINED_OP1();
  22346. }
  22347. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  22348. break;
  22349. }
  22350. pre_incdec_object:
  22351. /* here we are sure we are dealing with an object */
  22352. zobj = Z_OBJ_P(object);
  22353. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22354. name = Z_STR_P(property);
  22355. } else {
  22356. name = zval_try_get_tmp_string(property, &tmp_name);
  22357. if (UNEXPECTED(!name)) {
  22358. UNDEF_RESULT();
  22359. break;
  22360. }
  22361. }
  22362. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  22363. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  22364. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  22365. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22366. ZVAL_NULL(EX_VAR(opline->result.var));
  22367. }
  22368. } else {
  22369. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22370. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  22371. } else {
  22372. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  22373. }
  22374. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  22375. }
  22376. } else {
  22377. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  22378. }
  22379. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  22380. zend_tmp_string_release(tmp_name);
  22381. }
  22382. } while (0);
  22383. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22384. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22385. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22386. }
  22387. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22388. {
  22389. USE_OPLINE
  22390. zval *object;
  22391. zval *property;
  22392. zval *zptr;
  22393. void **cache_slot;
  22394. zend_property_info *prop_info;
  22395. zend_object *zobj;
  22396. zend_string *name, *tmp_name;
  22397. SAVE_OPLINE();
  22398. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22399. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22400. do {
  22401. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  22402. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  22403. object = Z_REFVAL_P(object);
  22404. goto post_incdec_object;
  22405. }
  22406. if (IS_VAR == IS_CV
  22407. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  22408. ZVAL_UNDEFINED_OP1();
  22409. }
  22410. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  22411. break;
  22412. }
  22413. post_incdec_object:
  22414. /* here we are sure we are dealing with an object */
  22415. zobj = Z_OBJ_P(object);
  22416. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22417. name = Z_STR_P(property);
  22418. } else {
  22419. name = zval_try_get_tmp_string(property, &tmp_name);
  22420. if (UNEXPECTED(!name)) {
  22421. ZVAL_UNDEF(EX_VAR(opline->result.var));
  22422. break;
  22423. }
  22424. }
  22425. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  22426. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  22427. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  22428. ZVAL_NULL(EX_VAR(opline->result.var));
  22429. } else {
  22430. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22431. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  22432. } else {
  22433. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  22434. }
  22435. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  22436. }
  22437. } else {
  22438. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  22439. }
  22440. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  22441. zend_tmp_string_release(tmp_name);
  22442. }
  22443. } while (0);
  22444. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22445. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22446. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22447. }
  22448. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22449. {
  22450. USE_OPLINE
  22451. zval *container;
  22452. SAVE_OPLINE();
  22453. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22454. 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);
  22455. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22456. if (IS_VAR == IS_VAR) {
  22457. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  22458. }
  22459. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22460. }
  22461. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22462. {
  22463. USE_OPLINE
  22464. zval *container;
  22465. SAVE_OPLINE();
  22466. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22467. 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);
  22468. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22469. if (IS_VAR == IS_VAR) {
  22470. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  22471. }
  22472. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22473. }
  22474. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22475. {
  22476. #if 0
  22477. USE_OPLINE
  22478. #endif
  22479. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  22480. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  22481. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  22482. }
  22483. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  22484. } else {
  22485. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  22486. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  22487. }
  22488. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  22489. }
  22490. }
  22491. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22492. {
  22493. USE_OPLINE
  22494. zval *container;
  22495. SAVE_OPLINE();
  22496. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22497. 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);
  22498. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22499. if (IS_VAR == IS_VAR) {
  22500. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  22501. }
  22502. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22503. }
  22504. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22505. {
  22506. USE_OPLINE
  22507. zval *property, *container, *result;
  22508. SAVE_OPLINE();
  22509. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22510. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22511. result = EX_VAR(opline->result.var);
  22512. zend_fetch_property_address(
  22513. result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR),
  22514. (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  22515. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
  22516. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22517. if (IS_VAR == IS_VAR) {
  22518. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  22519. }
  22520. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22521. }
  22522. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22523. {
  22524. USE_OPLINE
  22525. zval *property, *container, *result;
  22526. SAVE_OPLINE();
  22527. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22528. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22529. result = EX_VAR(opline->result.var);
  22530. 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);
  22531. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22532. if (IS_VAR == IS_VAR) {
  22533. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  22534. }
  22535. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22536. }
  22537. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22538. {
  22539. #if 0
  22540. USE_OPLINE
  22541. #endif
  22542. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  22543. /* Behave like FETCH_OBJ_W */
  22544. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  22545. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  22546. }
  22547. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  22548. } else {
  22549. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  22550. }
  22551. }
  22552. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22553. {
  22554. USE_OPLINE
  22555. zval *container, *property, *result;
  22556. SAVE_OPLINE();
  22557. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22558. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22559. result = EX_VAR(opline->result.var);
  22560. 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);
  22561. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22562. if (IS_VAR == IS_VAR) {
  22563. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  22564. }
  22565. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22566. }
  22567. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22568. {
  22569. USE_OPLINE
  22570. zval *container, *dim;
  22571. SAVE_OPLINE();
  22572. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22573. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  22574. if (IS_VAR == IS_VAR
  22575. && Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
  22576. && UNEXPECTED(!Z_ISREF_P(container))
  22577. ) {
  22578. zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
  22579. zend_fetch_dimension_address_LIST_r(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  22580. } else {
  22581. zend_fetch_dimension_address_W(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  22582. }
  22583. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22584. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22585. }
  22586. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22587. {
  22588. USE_OPLINE
  22589. zval *object, *value, tmp;
  22590. zend_object *zobj;
  22591. zend_string *name, *tmp_name;
  22592. SAVE_OPLINE();
  22593. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22594. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  22595. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  22596. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  22597. object = Z_REFVAL_P(object);
  22598. goto assign_object;
  22599. }
  22600. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  22601. value = &EG(uninitialized_zval);
  22602. goto free_and_exit_assign_obj;
  22603. }
  22604. assign_object:
  22605. zobj = Z_OBJ_P(object);
  22606. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22607. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  22608. void **cache_slot = CACHE_ADDR(opline->extended_value);
  22609. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  22610. zend_object *zobj = Z_OBJ_P(object);
  22611. zval *property_val;
  22612. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  22613. property_val = OBJ_PROP(zobj, prop_offset);
  22614. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  22615. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  22616. if (UNEXPECTED(prop_info != NULL)) {
  22617. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  22618. goto free_and_exit_assign_obj;
  22619. } else {
  22620. fast_assign_obj:
  22621. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  22622. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22623. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22624. }
  22625. goto exit_assign_obj;
  22626. }
  22627. }
  22628. } else {
  22629. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  22630. if (EXPECTED(zobj->properties != NULL)) {
  22631. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  22632. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  22633. GC_DELREF(zobj->properties);
  22634. }
  22635. zobj->properties = zend_array_dup(zobj->properties);
  22636. }
  22637. property_val = zend_hash_find_known_hash(zobj->properties, name);
  22638. if (property_val) {
  22639. goto fast_assign_obj;
  22640. }
  22641. }
  22642. if (!zobj->ce->__set) {
  22643. if (EXPECTED(zobj->properties == NULL)) {
  22644. rebuild_object_properties(zobj);
  22645. }
  22646. if (IS_CONST == IS_CONST) {
  22647. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  22648. Z_ADDREF_P(value);
  22649. }
  22650. } else if (IS_CONST != IS_TMP_VAR) {
  22651. if (Z_ISREF_P(value)) {
  22652. if (IS_CONST == IS_VAR) {
  22653. zend_reference *ref = Z_REF_P(value);
  22654. if (GC_DELREF(ref) == 0) {
  22655. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  22656. efree_size(ref, sizeof(zend_reference));
  22657. value = &tmp;
  22658. } else {
  22659. value = Z_REFVAL_P(value);
  22660. Z_TRY_ADDREF_P(value);
  22661. }
  22662. } else {
  22663. value = Z_REFVAL_P(value);
  22664. Z_TRY_ADDREF_P(value);
  22665. }
  22666. } else if (IS_CONST == IS_CV) {
  22667. Z_TRY_ADDREF_P(value);
  22668. }
  22669. }
  22670. zend_hash_add_new(zobj->properties, name, value);
  22671. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22672. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22673. }
  22674. goto exit_assign_obj;
  22675. }
  22676. }
  22677. }
  22678. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  22679. } else {
  22680. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  22681. if (UNEXPECTED(!name)) {
  22682. UNDEF_RESULT();
  22683. goto exit_assign_obj;
  22684. }
  22685. }
  22686. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  22687. ZVAL_DEREF(value);
  22688. }
  22689. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  22690. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  22691. zend_tmp_string_release(tmp_name);
  22692. }
  22693. free_and_exit_assign_obj:
  22694. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22695. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  22696. }
  22697. exit_assign_obj:
  22698. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22699. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22700. /* assign_obj has two opcodes! */
  22701. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  22702. }
  22703. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  22704. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22705. {
  22706. USE_OPLINE
  22707. zval *object, *value, tmp;
  22708. zend_object *zobj;
  22709. zend_string *name, *tmp_name;
  22710. SAVE_OPLINE();
  22711. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22712. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  22713. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  22714. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  22715. object = Z_REFVAL_P(object);
  22716. goto assign_object;
  22717. }
  22718. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  22719. value = &EG(uninitialized_zval);
  22720. goto free_and_exit_assign_obj;
  22721. }
  22722. assign_object:
  22723. zobj = Z_OBJ_P(object);
  22724. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22725. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  22726. void **cache_slot = CACHE_ADDR(opline->extended_value);
  22727. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  22728. zend_object *zobj = Z_OBJ_P(object);
  22729. zval *property_val;
  22730. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  22731. property_val = OBJ_PROP(zobj, prop_offset);
  22732. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  22733. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  22734. if (UNEXPECTED(prop_info != NULL)) {
  22735. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  22736. goto free_and_exit_assign_obj;
  22737. } else {
  22738. fast_assign_obj:
  22739. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  22740. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22741. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22742. }
  22743. goto exit_assign_obj;
  22744. }
  22745. }
  22746. } else {
  22747. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  22748. if (EXPECTED(zobj->properties != NULL)) {
  22749. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  22750. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  22751. GC_DELREF(zobj->properties);
  22752. }
  22753. zobj->properties = zend_array_dup(zobj->properties);
  22754. }
  22755. property_val = zend_hash_find_known_hash(zobj->properties, name);
  22756. if (property_val) {
  22757. goto fast_assign_obj;
  22758. }
  22759. }
  22760. if (!zobj->ce->__set) {
  22761. if (EXPECTED(zobj->properties == NULL)) {
  22762. rebuild_object_properties(zobj);
  22763. }
  22764. if (IS_TMP_VAR == IS_CONST) {
  22765. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  22766. Z_ADDREF_P(value);
  22767. }
  22768. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  22769. if (Z_ISREF_P(value)) {
  22770. if (IS_TMP_VAR == IS_VAR) {
  22771. zend_reference *ref = Z_REF_P(value);
  22772. if (GC_DELREF(ref) == 0) {
  22773. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  22774. efree_size(ref, sizeof(zend_reference));
  22775. value = &tmp;
  22776. } else {
  22777. value = Z_REFVAL_P(value);
  22778. Z_TRY_ADDREF_P(value);
  22779. }
  22780. } else {
  22781. value = Z_REFVAL_P(value);
  22782. Z_TRY_ADDREF_P(value);
  22783. }
  22784. } else if (IS_TMP_VAR == IS_CV) {
  22785. Z_TRY_ADDREF_P(value);
  22786. }
  22787. }
  22788. zend_hash_add_new(zobj->properties, name, value);
  22789. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22790. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22791. }
  22792. goto exit_assign_obj;
  22793. }
  22794. }
  22795. }
  22796. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  22797. } else {
  22798. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  22799. if (UNEXPECTED(!name)) {
  22800. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  22801. UNDEF_RESULT();
  22802. goto exit_assign_obj;
  22803. }
  22804. }
  22805. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  22806. ZVAL_DEREF(value);
  22807. }
  22808. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  22809. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  22810. zend_tmp_string_release(tmp_name);
  22811. }
  22812. free_and_exit_assign_obj:
  22813. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22814. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  22815. }
  22816. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  22817. exit_assign_obj:
  22818. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22819. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22820. /* assign_obj has two opcodes! */
  22821. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  22822. }
  22823. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  22824. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22825. {
  22826. USE_OPLINE
  22827. zval *object, *value, tmp;
  22828. zend_object *zobj;
  22829. zend_string *name, *tmp_name;
  22830. SAVE_OPLINE();
  22831. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22832. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  22833. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  22834. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  22835. object = Z_REFVAL_P(object);
  22836. goto assign_object;
  22837. }
  22838. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  22839. value = &EG(uninitialized_zval);
  22840. goto free_and_exit_assign_obj;
  22841. }
  22842. assign_object:
  22843. zobj = Z_OBJ_P(object);
  22844. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22845. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  22846. void **cache_slot = CACHE_ADDR(opline->extended_value);
  22847. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  22848. zend_object *zobj = Z_OBJ_P(object);
  22849. zval *property_val;
  22850. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  22851. property_val = OBJ_PROP(zobj, prop_offset);
  22852. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  22853. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  22854. if (UNEXPECTED(prop_info != NULL)) {
  22855. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  22856. goto free_and_exit_assign_obj;
  22857. } else {
  22858. fast_assign_obj:
  22859. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  22860. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22861. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22862. }
  22863. goto exit_assign_obj;
  22864. }
  22865. }
  22866. } else {
  22867. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  22868. if (EXPECTED(zobj->properties != NULL)) {
  22869. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  22870. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  22871. GC_DELREF(zobj->properties);
  22872. }
  22873. zobj->properties = zend_array_dup(zobj->properties);
  22874. }
  22875. property_val = zend_hash_find_known_hash(zobj->properties, name);
  22876. if (property_val) {
  22877. goto fast_assign_obj;
  22878. }
  22879. }
  22880. if (!zobj->ce->__set) {
  22881. if (EXPECTED(zobj->properties == NULL)) {
  22882. rebuild_object_properties(zobj);
  22883. }
  22884. if (IS_VAR == IS_CONST) {
  22885. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  22886. Z_ADDREF_P(value);
  22887. }
  22888. } else if (IS_VAR != IS_TMP_VAR) {
  22889. if (Z_ISREF_P(value)) {
  22890. if (IS_VAR == IS_VAR) {
  22891. zend_reference *ref = Z_REF_P(value);
  22892. if (GC_DELREF(ref) == 0) {
  22893. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  22894. efree_size(ref, sizeof(zend_reference));
  22895. value = &tmp;
  22896. } else {
  22897. value = Z_REFVAL_P(value);
  22898. Z_TRY_ADDREF_P(value);
  22899. }
  22900. } else {
  22901. value = Z_REFVAL_P(value);
  22902. Z_TRY_ADDREF_P(value);
  22903. }
  22904. } else if (IS_VAR == IS_CV) {
  22905. Z_TRY_ADDREF_P(value);
  22906. }
  22907. }
  22908. zend_hash_add_new(zobj->properties, name, value);
  22909. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22910. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22911. }
  22912. goto exit_assign_obj;
  22913. }
  22914. }
  22915. }
  22916. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  22917. } else {
  22918. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  22919. if (UNEXPECTED(!name)) {
  22920. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  22921. UNDEF_RESULT();
  22922. goto exit_assign_obj;
  22923. }
  22924. }
  22925. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  22926. ZVAL_DEREF(value);
  22927. }
  22928. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  22929. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  22930. zend_tmp_string_release(tmp_name);
  22931. }
  22932. free_and_exit_assign_obj:
  22933. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22934. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  22935. }
  22936. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  22937. exit_assign_obj:
  22938. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22939. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  22940. /* assign_obj has two opcodes! */
  22941. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  22942. }
  22943. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  22944. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22945. {
  22946. USE_OPLINE
  22947. zval *object, *value, tmp;
  22948. zend_object *zobj;
  22949. zend_string *name, *tmp_name;
  22950. SAVE_OPLINE();
  22951. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  22952. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  22953. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  22954. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  22955. object = Z_REFVAL_P(object);
  22956. goto assign_object;
  22957. }
  22958. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  22959. value = &EG(uninitialized_zval);
  22960. goto free_and_exit_assign_obj;
  22961. }
  22962. assign_object:
  22963. zobj = Z_OBJ_P(object);
  22964. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22965. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  22966. void **cache_slot = CACHE_ADDR(opline->extended_value);
  22967. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  22968. zend_object *zobj = Z_OBJ_P(object);
  22969. zval *property_val;
  22970. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  22971. property_val = OBJ_PROP(zobj, prop_offset);
  22972. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  22973. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  22974. if (UNEXPECTED(prop_info != NULL)) {
  22975. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  22976. goto free_and_exit_assign_obj;
  22977. } else {
  22978. fast_assign_obj:
  22979. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  22980. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22981. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22982. }
  22983. goto exit_assign_obj;
  22984. }
  22985. }
  22986. } else {
  22987. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  22988. if (EXPECTED(zobj->properties != NULL)) {
  22989. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  22990. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  22991. GC_DELREF(zobj->properties);
  22992. }
  22993. zobj->properties = zend_array_dup(zobj->properties);
  22994. }
  22995. property_val = zend_hash_find_known_hash(zobj->properties, name);
  22996. if (property_val) {
  22997. goto fast_assign_obj;
  22998. }
  22999. }
  23000. if (!zobj->ce->__set) {
  23001. if (EXPECTED(zobj->properties == NULL)) {
  23002. rebuild_object_properties(zobj);
  23003. }
  23004. if (IS_CV == IS_CONST) {
  23005. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  23006. Z_ADDREF_P(value);
  23007. }
  23008. } else if (IS_CV != IS_TMP_VAR) {
  23009. if (Z_ISREF_P(value)) {
  23010. if (IS_CV == IS_VAR) {
  23011. zend_reference *ref = Z_REF_P(value);
  23012. if (GC_DELREF(ref) == 0) {
  23013. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  23014. efree_size(ref, sizeof(zend_reference));
  23015. value = &tmp;
  23016. } else {
  23017. value = Z_REFVAL_P(value);
  23018. Z_TRY_ADDREF_P(value);
  23019. }
  23020. } else {
  23021. value = Z_REFVAL_P(value);
  23022. Z_TRY_ADDREF_P(value);
  23023. }
  23024. } else if (IS_CV == IS_CV) {
  23025. Z_TRY_ADDREF_P(value);
  23026. }
  23027. }
  23028. zend_hash_add_new(zobj->properties, name, value);
  23029. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23030. ZVAL_COPY(EX_VAR(opline->result.var), value);
  23031. }
  23032. goto exit_assign_obj;
  23033. }
  23034. }
  23035. }
  23036. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  23037. } else {
  23038. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  23039. if (UNEXPECTED(!name)) {
  23040. UNDEF_RESULT();
  23041. goto exit_assign_obj;
  23042. }
  23043. }
  23044. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  23045. ZVAL_DEREF(value);
  23046. }
  23047. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  23048. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  23049. zend_tmp_string_release(tmp_name);
  23050. }
  23051. free_and_exit_assign_obj:
  23052. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23053. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  23054. }
  23055. exit_assign_obj:
  23056. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23057. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  23058. /* assign_obj has two opcodes! */
  23059. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23060. }
  23061. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  23062. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23063. {
  23064. USE_OPLINE
  23065. zval *object_ptr, *orig_object_ptr;
  23066. zval *value;
  23067. zval *variable_ptr;
  23068. zval *dim;
  23069. SAVE_OPLINE();
  23070. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23071. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23072. try_assign_dim_array:
  23073. SEPARATE_ARRAY(object_ptr);
  23074. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  23075. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  23076. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  23077. HashTable *ht = Z_ARRVAL_P(object_ptr);
  23078. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  23079. GC_ADDREF(ht);
  23080. }
  23081. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  23082. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  23083. zend_array_destroy(ht);
  23084. goto assign_dim_error;
  23085. }
  23086. }
  23087. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  23088. ZVAL_DEREF(value);
  23089. }
  23090. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  23091. if (UNEXPECTED(value == NULL)) {
  23092. zend_cannot_add_element();
  23093. goto assign_dim_error;
  23094. } else if (IS_CONST == IS_CV) {
  23095. if (Z_REFCOUNTED_P(value)) {
  23096. Z_ADDREF_P(value);
  23097. }
  23098. } else if (IS_CONST == IS_VAR) {
  23099. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  23100. if (Z_ISREF_P(free_op_data)) {
  23101. if (Z_REFCOUNTED_P(value)) {
  23102. Z_ADDREF_P(value);
  23103. }
  23104. zval_ptr_dtor_nogc(free_op_data);
  23105. }
  23106. } else if (IS_CONST == IS_CONST) {
  23107. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  23108. Z_ADDREF_P(value);
  23109. }
  23110. }
  23111. } else {
  23112. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23113. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  23114. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23115. } else {
  23116. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23117. }
  23118. if (UNEXPECTED(variable_ptr == NULL)) {
  23119. goto assign_dim_error;
  23120. }
  23121. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  23122. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  23123. }
  23124. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23125. ZVAL_COPY(EX_VAR(opline->result.var), value);
  23126. }
  23127. } else {
  23128. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  23129. object_ptr = Z_REFVAL_P(object_ptr);
  23130. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23131. goto try_assign_dim_array;
  23132. }
  23133. }
  23134. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  23135. zend_object *obj = Z_OBJ_P(object_ptr);
  23136. GC_ADDREF(obj);
  23137. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23138. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  23139. dim = ZVAL_UNDEFINED_OP2();
  23140. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  23141. dim++;
  23142. }
  23143. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  23144. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  23145. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  23146. } else if (IS_CONST & (IS_CV|IS_VAR)) {
  23147. ZVAL_DEREF(value);
  23148. }
  23149. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23150. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  23151. zend_objects_store_del(obj);
  23152. }
  23153. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  23154. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  23155. zend_use_new_element_for_string();
  23156. UNDEF_RESULT();
  23157. } else {
  23158. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23159. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  23160. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23161. }
  23162. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  23163. if (Z_ISREF_P(orig_object_ptr)
  23164. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  23165. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  23166. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23167. UNDEF_RESULT();
  23168. } else {
  23169. HashTable *ht = zend_new_array(8);
  23170. zend_uchar old_type = Z_TYPE_P(object_ptr);
  23171. ZVAL_ARR(object_ptr, ht);
  23172. if (UNEXPECTED(old_type == IS_FALSE)) {
  23173. GC_ADDREF(ht);
  23174. zend_false_to_array_deprecated();
  23175. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  23176. zend_array_destroy(ht);
  23177. goto assign_dim_error;
  23178. }
  23179. }
  23180. goto try_assign_dim_array;
  23181. }
  23182. } else {
  23183. zend_use_scalar_as_array();
  23184. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23185. assign_dim_error:
  23186. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23187. ZVAL_NULL(EX_VAR(opline->result.var));
  23188. }
  23189. }
  23190. }
  23191. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  23192. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23193. }
  23194. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  23195. /* assign_dim has two opcodes! */
  23196. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23197. }
  23198. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23199. {
  23200. USE_OPLINE
  23201. zval *object_ptr, *orig_object_ptr;
  23202. zval *value;
  23203. zval *variable_ptr;
  23204. zval *dim;
  23205. SAVE_OPLINE();
  23206. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23207. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23208. try_assign_dim_array:
  23209. SEPARATE_ARRAY(object_ptr);
  23210. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  23211. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  23212. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  23213. HashTable *ht = Z_ARRVAL_P(object_ptr);
  23214. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  23215. GC_ADDREF(ht);
  23216. }
  23217. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  23218. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  23219. zend_array_destroy(ht);
  23220. goto assign_dim_error;
  23221. }
  23222. }
  23223. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  23224. ZVAL_DEREF(value);
  23225. }
  23226. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  23227. if (UNEXPECTED(value == NULL)) {
  23228. zend_cannot_add_element();
  23229. goto assign_dim_error;
  23230. } else if (IS_TMP_VAR == IS_CV) {
  23231. if (Z_REFCOUNTED_P(value)) {
  23232. Z_ADDREF_P(value);
  23233. }
  23234. } else if (IS_TMP_VAR == IS_VAR) {
  23235. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  23236. if (Z_ISREF_P(free_op_data)) {
  23237. if (Z_REFCOUNTED_P(value)) {
  23238. Z_ADDREF_P(value);
  23239. }
  23240. zval_ptr_dtor_nogc(free_op_data);
  23241. }
  23242. } else if (IS_TMP_VAR == IS_CONST) {
  23243. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  23244. Z_ADDREF_P(value);
  23245. }
  23246. }
  23247. } else {
  23248. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23249. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  23250. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23251. } else {
  23252. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23253. }
  23254. if (UNEXPECTED(variable_ptr == NULL)) {
  23255. goto assign_dim_error;
  23256. }
  23257. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  23258. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  23259. }
  23260. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23261. ZVAL_COPY(EX_VAR(opline->result.var), value);
  23262. }
  23263. } else {
  23264. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  23265. object_ptr = Z_REFVAL_P(object_ptr);
  23266. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23267. goto try_assign_dim_array;
  23268. }
  23269. }
  23270. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  23271. zend_object *obj = Z_OBJ_P(object_ptr);
  23272. GC_ADDREF(obj);
  23273. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23274. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  23275. dim = ZVAL_UNDEFINED_OP2();
  23276. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  23277. dim++;
  23278. }
  23279. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  23280. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  23281. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  23282. } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
  23283. ZVAL_DEREF(value);
  23284. }
  23285. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23286. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23287. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  23288. zend_objects_store_del(obj);
  23289. }
  23290. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  23291. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  23292. zend_use_new_element_for_string();
  23293. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23294. UNDEF_RESULT();
  23295. } else {
  23296. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23297. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  23298. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23299. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23300. }
  23301. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  23302. if (Z_ISREF_P(orig_object_ptr)
  23303. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  23304. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  23305. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23306. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23307. UNDEF_RESULT();
  23308. } else {
  23309. HashTable *ht = zend_new_array(8);
  23310. zend_uchar old_type = Z_TYPE_P(object_ptr);
  23311. ZVAL_ARR(object_ptr, ht);
  23312. if (UNEXPECTED(old_type == IS_FALSE)) {
  23313. GC_ADDREF(ht);
  23314. zend_false_to_array_deprecated();
  23315. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  23316. zend_array_destroy(ht);
  23317. goto assign_dim_error;
  23318. }
  23319. }
  23320. goto try_assign_dim_array;
  23321. }
  23322. } else {
  23323. zend_use_scalar_as_array();
  23324. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23325. assign_dim_error:
  23326. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23327. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23328. ZVAL_NULL(EX_VAR(opline->result.var));
  23329. }
  23330. }
  23331. }
  23332. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  23333. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23334. }
  23335. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  23336. /* assign_dim has two opcodes! */
  23337. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23338. }
  23339. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23340. {
  23341. USE_OPLINE
  23342. zval *object_ptr, *orig_object_ptr;
  23343. zval *value;
  23344. zval *variable_ptr;
  23345. zval *dim;
  23346. SAVE_OPLINE();
  23347. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23348. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23349. try_assign_dim_array:
  23350. SEPARATE_ARRAY(object_ptr);
  23351. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  23352. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  23353. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  23354. HashTable *ht = Z_ARRVAL_P(object_ptr);
  23355. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  23356. GC_ADDREF(ht);
  23357. }
  23358. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  23359. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  23360. zend_array_destroy(ht);
  23361. goto assign_dim_error;
  23362. }
  23363. }
  23364. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  23365. ZVAL_DEREF(value);
  23366. }
  23367. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  23368. if (UNEXPECTED(value == NULL)) {
  23369. zend_cannot_add_element();
  23370. goto assign_dim_error;
  23371. } else if (IS_VAR == IS_CV) {
  23372. if (Z_REFCOUNTED_P(value)) {
  23373. Z_ADDREF_P(value);
  23374. }
  23375. } else if (IS_VAR == IS_VAR) {
  23376. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  23377. if (Z_ISREF_P(free_op_data)) {
  23378. if (Z_REFCOUNTED_P(value)) {
  23379. Z_ADDREF_P(value);
  23380. }
  23381. zval_ptr_dtor_nogc(free_op_data);
  23382. }
  23383. } else if (IS_VAR == IS_CONST) {
  23384. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  23385. Z_ADDREF_P(value);
  23386. }
  23387. }
  23388. } else {
  23389. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23390. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  23391. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23392. } else {
  23393. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23394. }
  23395. if (UNEXPECTED(variable_ptr == NULL)) {
  23396. goto assign_dim_error;
  23397. }
  23398. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  23399. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  23400. }
  23401. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23402. ZVAL_COPY(EX_VAR(opline->result.var), value);
  23403. }
  23404. } else {
  23405. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  23406. object_ptr = Z_REFVAL_P(object_ptr);
  23407. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23408. goto try_assign_dim_array;
  23409. }
  23410. }
  23411. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  23412. zend_object *obj = Z_OBJ_P(object_ptr);
  23413. GC_ADDREF(obj);
  23414. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23415. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  23416. dim = ZVAL_UNDEFINED_OP2();
  23417. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  23418. dim++;
  23419. }
  23420. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  23421. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  23422. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  23423. } else if (IS_VAR & (IS_CV|IS_VAR)) {
  23424. ZVAL_DEREF(value);
  23425. }
  23426. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23427. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23428. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  23429. zend_objects_store_del(obj);
  23430. }
  23431. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  23432. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  23433. zend_use_new_element_for_string();
  23434. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23435. UNDEF_RESULT();
  23436. } else {
  23437. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23438. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  23439. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23440. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23441. }
  23442. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  23443. if (Z_ISREF_P(orig_object_ptr)
  23444. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  23445. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  23446. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23447. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23448. UNDEF_RESULT();
  23449. } else {
  23450. HashTable *ht = zend_new_array(8);
  23451. zend_uchar old_type = Z_TYPE_P(object_ptr);
  23452. ZVAL_ARR(object_ptr, ht);
  23453. if (UNEXPECTED(old_type == IS_FALSE)) {
  23454. GC_ADDREF(ht);
  23455. zend_false_to_array_deprecated();
  23456. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  23457. zend_array_destroy(ht);
  23458. goto assign_dim_error;
  23459. }
  23460. }
  23461. goto try_assign_dim_array;
  23462. }
  23463. } else {
  23464. zend_use_scalar_as_array();
  23465. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23466. assign_dim_error:
  23467. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23468. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23469. ZVAL_NULL(EX_VAR(opline->result.var));
  23470. }
  23471. }
  23472. }
  23473. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  23474. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23475. }
  23476. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  23477. /* assign_dim has two opcodes! */
  23478. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23479. }
  23480. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23481. {
  23482. USE_OPLINE
  23483. zval *object_ptr, *orig_object_ptr;
  23484. zval *value;
  23485. zval *variable_ptr;
  23486. zval *dim;
  23487. SAVE_OPLINE();
  23488. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23489. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23490. try_assign_dim_array:
  23491. SEPARATE_ARRAY(object_ptr);
  23492. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  23493. value = EX_VAR((opline+1)->op1.var);
  23494. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  23495. HashTable *ht = Z_ARRVAL_P(object_ptr);
  23496. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  23497. GC_ADDREF(ht);
  23498. }
  23499. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  23500. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  23501. zend_array_destroy(ht);
  23502. goto assign_dim_error;
  23503. }
  23504. }
  23505. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  23506. ZVAL_DEREF(value);
  23507. }
  23508. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  23509. if (UNEXPECTED(value == NULL)) {
  23510. zend_cannot_add_element();
  23511. goto assign_dim_error;
  23512. } else if (IS_CV == IS_CV) {
  23513. if (Z_REFCOUNTED_P(value)) {
  23514. Z_ADDREF_P(value);
  23515. }
  23516. } else if (IS_CV == IS_VAR) {
  23517. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  23518. if (Z_ISREF_P(free_op_data)) {
  23519. if (Z_REFCOUNTED_P(value)) {
  23520. Z_ADDREF_P(value);
  23521. }
  23522. zval_ptr_dtor_nogc(free_op_data);
  23523. }
  23524. } else if (IS_CV == IS_CONST) {
  23525. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  23526. Z_ADDREF_P(value);
  23527. }
  23528. }
  23529. } else {
  23530. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23531. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  23532. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23533. } else {
  23534. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23535. }
  23536. if (UNEXPECTED(variable_ptr == NULL)) {
  23537. goto assign_dim_error;
  23538. }
  23539. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  23540. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  23541. }
  23542. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23543. ZVAL_COPY(EX_VAR(opline->result.var), value);
  23544. }
  23545. } else {
  23546. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  23547. object_ptr = Z_REFVAL_P(object_ptr);
  23548. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23549. goto try_assign_dim_array;
  23550. }
  23551. }
  23552. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  23553. zend_object *obj = Z_OBJ_P(object_ptr);
  23554. GC_ADDREF(obj);
  23555. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23556. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  23557. dim = ZVAL_UNDEFINED_OP2();
  23558. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  23559. dim++;
  23560. }
  23561. value = EX_VAR((opline+1)->op1.var);
  23562. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  23563. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  23564. } else if (IS_CV & (IS_CV|IS_VAR)) {
  23565. ZVAL_DEREF(value);
  23566. }
  23567. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23568. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  23569. zend_objects_store_del(obj);
  23570. }
  23571. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  23572. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  23573. zend_use_new_element_for_string();
  23574. UNDEF_RESULT();
  23575. } else {
  23576. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23577. value = EX_VAR((opline+1)->op1.var);
  23578. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23579. }
  23580. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  23581. if (Z_ISREF_P(orig_object_ptr)
  23582. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  23583. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  23584. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23585. UNDEF_RESULT();
  23586. } else {
  23587. HashTable *ht = zend_new_array(8);
  23588. zend_uchar old_type = Z_TYPE_P(object_ptr);
  23589. ZVAL_ARR(object_ptr, ht);
  23590. if (UNEXPECTED(old_type == IS_FALSE)) {
  23591. GC_ADDREF(ht);
  23592. zend_false_to_array_deprecated();
  23593. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  23594. zend_array_destroy(ht);
  23595. goto assign_dim_error;
  23596. }
  23597. }
  23598. goto try_assign_dim_array;
  23599. }
  23600. } else {
  23601. zend_use_scalar_as_array();
  23602. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23603. assign_dim_error:
  23604. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23605. ZVAL_NULL(EX_VAR(opline->result.var));
  23606. }
  23607. }
  23608. }
  23609. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  23610. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23611. }
  23612. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  23613. /* assign_dim has two opcodes! */
  23614. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23615. }
  23616. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23617. {
  23618. USE_OPLINE
  23619. zval *property, *container, *value_ptr;
  23620. SAVE_OPLINE();
  23621. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23622. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23623. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  23624. if (1) {
  23625. if (IS_VAR == IS_UNUSED) {
  23626. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  23627. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23628. } else {
  23629. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23630. }
  23631. } else {
  23632. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  23633. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23634. } else {
  23635. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23636. }
  23637. }
  23638. } else {
  23639. zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23640. }
  23641. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  23642. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23643. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  23644. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23645. }
  23646. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  23647. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23648. {
  23649. USE_OPLINE
  23650. zval *property, *container, *value_ptr;
  23651. SAVE_OPLINE();
  23652. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23653. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23654. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  23655. if (1) {
  23656. if (IS_VAR == IS_UNUSED) {
  23657. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  23658. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23659. } else {
  23660. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23661. }
  23662. } else {
  23663. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  23664. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23665. } else {
  23666. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23667. }
  23668. }
  23669. } else {
  23670. zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
  23671. }
  23672. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  23673. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23674. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23675. }
  23676. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  23677. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23678. {
  23679. USE_OPLINE
  23680. zval *function_name;
  23681. zend_class_entry *ce;
  23682. uint32_t call_info;
  23683. zend_function *fbc;
  23684. zend_execute_data *call;
  23685. SAVE_OPLINE();
  23686. if (IS_VAR == IS_CONST) {
  23687. /* no function found. try a static method in class */
  23688. ce = CACHED_PTR(opline->result.num);
  23689. if (UNEXPECTED(ce == NULL)) {
  23690. 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);
  23691. if (UNEXPECTED(ce == NULL)) {
  23692. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23693. HANDLE_EXCEPTION();
  23694. }
  23695. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  23696. CACHE_PTR(opline->result.num, ce);
  23697. }
  23698. }
  23699. } else if (IS_VAR == IS_UNUSED) {
  23700. ce = zend_fetch_class(NULL, opline->op1.num);
  23701. if (UNEXPECTED(ce == NULL)) {
  23702. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23703. HANDLE_EXCEPTION();
  23704. }
  23705. } else {
  23706. ce = Z_CE_P(EX_VAR(opline->op1.var));
  23707. }
  23708. if (IS_VAR == IS_CONST &&
  23709. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  23710. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  23711. /* nothing to do */
  23712. } else if (IS_VAR != IS_CONST &&
  23713. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  23714. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  23715. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  23716. } else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  23717. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23718. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  23719. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  23720. do {
  23721. if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  23722. function_name = Z_REFVAL_P(function_name);
  23723. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  23724. break;
  23725. }
  23726. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  23727. ZVAL_UNDEFINED_OP2();
  23728. if (UNEXPECTED(EG(exception) != NULL)) {
  23729. HANDLE_EXCEPTION();
  23730. }
  23731. }
  23732. zend_throw_error(NULL, "Method name must be a string");
  23733. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23734. HANDLE_EXCEPTION();
  23735. } while (0);
  23736. }
  23737. }
  23738. if (ce->get_static_method) {
  23739. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  23740. } else {
  23741. 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));
  23742. }
  23743. if (UNEXPECTED(fbc == NULL)) {
  23744. if (EXPECTED(!EG(exception))) {
  23745. zend_undefined_method(ce, Z_STR_P(function_name));
  23746. }
  23747. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23748. HANDLE_EXCEPTION();
  23749. }
  23750. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  23751. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  23752. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  23753. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  23754. }
  23755. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  23756. init_func_run_time_cache(&fbc->op_array);
  23757. }
  23758. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  23759. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23760. }
  23761. } else {
  23762. if (UNEXPECTED(ce->constructor == NULL)) {
  23763. zend_throw_error(NULL, "Cannot call constructor");
  23764. HANDLE_EXCEPTION();
  23765. }
  23766. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  23767. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  23768. HANDLE_EXCEPTION();
  23769. }
  23770. fbc = ce->constructor;
  23771. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  23772. init_func_run_time_cache(&fbc->op_array);
  23773. }
  23774. }
  23775. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  23776. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  23777. ce = (zend_class_entry*)Z_OBJ(EX(This));
  23778. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  23779. } else {
  23780. zend_non_static_method_call(fbc);
  23781. HANDLE_EXCEPTION();
  23782. }
  23783. } else {
  23784. /* previous opcode is ZEND_FETCH_CLASS */
  23785. if (IS_VAR == IS_UNUSED
  23786. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  23787. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  23788. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  23789. ce = Z_OBJCE(EX(This));
  23790. } else {
  23791. ce = Z_CE(EX(This));
  23792. }
  23793. }
  23794. call_info = ZEND_CALL_NESTED_FUNCTION;
  23795. }
  23796. call = zend_vm_stack_push_call_frame(call_info,
  23797. fbc, opline->extended_value, ce);
  23798. call->prev_execute_data = EX(call);
  23799. EX(call) = call;
  23800. ZEND_VM_NEXT_OPCODE();
  23801. }
  23802. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23803. {
  23804. USE_OPLINE
  23805. zval *expr_ptr, new_expr;
  23806. SAVE_OPLINE();
  23807. if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
  23808. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  23809. expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23810. if (Z_ISREF_P(expr_ptr)) {
  23811. Z_ADDREF_P(expr_ptr);
  23812. } else {
  23813. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  23814. }
  23815. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  23816. } else {
  23817. expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23818. if (IS_VAR == IS_TMP_VAR) {
  23819. /* pass */
  23820. } else if (IS_VAR == IS_CONST) {
  23821. Z_TRY_ADDREF_P(expr_ptr);
  23822. } else if (IS_VAR == IS_CV) {
  23823. ZVAL_DEREF(expr_ptr);
  23824. Z_TRY_ADDREF_P(expr_ptr);
  23825. } else /* if (IS_VAR == IS_VAR) */ {
  23826. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  23827. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  23828. expr_ptr = Z_REFVAL_P(expr_ptr);
  23829. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  23830. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  23831. expr_ptr = &new_expr;
  23832. efree_size(ref, sizeof(zend_reference));
  23833. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  23834. Z_ADDREF_P(expr_ptr);
  23835. }
  23836. }
  23837. }
  23838. }
  23839. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  23840. zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23841. zend_string *str;
  23842. zend_ulong hval;
  23843. add_again:
  23844. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  23845. str = Z_STR_P(offset);
  23846. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  23847. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  23848. goto num_index;
  23849. }
  23850. }
  23851. str_index:
  23852. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  23853. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  23854. hval = Z_LVAL_P(offset);
  23855. num_index:
  23856. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  23857. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  23858. offset = Z_REFVAL_P(offset);
  23859. goto add_again;
  23860. } else if (Z_TYPE_P(offset) == IS_NULL) {
  23861. str = ZSTR_EMPTY_ALLOC();
  23862. goto str_index;
  23863. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  23864. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  23865. goto num_index;
  23866. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  23867. hval = 0;
  23868. goto num_index;
  23869. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  23870. hval = 1;
  23871. goto num_index;
  23872. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  23873. zend_use_resource_as_offset(offset);
  23874. hval = Z_RES_HANDLE_P(offset);
  23875. goto num_index;
  23876. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  23877. ZVAL_UNDEFINED_OP2();
  23878. str = ZSTR_EMPTY_ALLOC();
  23879. goto str_index;
  23880. } else {
  23881. zend_illegal_offset();
  23882. zval_ptr_dtor_nogc(expr_ptr);
  23883. }
  23884. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23885. } else {
  23886. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  23887. zend_cannot_add_element();
  23888. zval_ptr_dtor_nogc(expr_ptr);
  23889. }
  23890. }
  23891. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  23892. }
  23893. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23894. {
  23895. zval *array;
  23896. uint32_t size;
  23897. USE_OPLINE
  23898. array = EX_VAR(opline->result.var);
  23899. if (IS_VAR != IS_UNUSED) {
  23900. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  23901. ZVAL_ARR(array, zend_new_array(size));
  23902. /* Explicitly initialize array as not-packed if flag is set */
  23903. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  23904. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  23905. }
  23906. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  23907. } else {
  23908. ZVAL_ARR(array, zend_new_array(0));
  23909. ZEND_VM_NEXT_OPCODE();
  23910. }
  23911. }
  23912. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23913. {
  23914. USE_OPLINE
  23915. zval *container;
  23916. zval *offset;
  23917. zend_ulong hval;
  23918. zend_string *key;
  23919. SAVE_OPLINE();
  23920. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  23921. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  23922. do {
  23923. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  23924. HashTable *ht;
  23925. unset_dim_array:
  23926. SEPARATE_ARRAY(container);
  23927. ht = Z_ARRVAL_P(container);
  23928. offset_again:
  23929. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  23930. key = Z_STR_P(offset);
  23931. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  23932. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  23933. goto num_index_dim;
  23934. }
  23935. }
  23936. str_index_dim:
  23937. ZEND_ASSERT(ht != &EG(symbol_table));
  23938. zend_hash_del(ht, key);
  23939. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  23940. hval = Z_LVAL_P(offset);
  23941. num_index_dim:
  23942. zend_hash_index_del(ht, hval);
  23943. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  23944. offset = Z_REFVAL_P(offset);
  23945. goto offset_again;
  23946. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  23947. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  23948. goto num_index_dim;
  23949. } else if (Z_TYPE_P(offset) == IS_NULL) {
  23950. key = ZSTR_EMPTY_ALLOC();
  23951. goto str_index_dim;
  23952. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  23953. hval = 0;
  23954. goto num_index_dim;
  23955. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  23956. hval = 1;
  23957. goto num_index_dim;
  23958. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  23959. zend_use_resource_as_offset(offset);
  23960. hval = Z_RES_HANDLE_P(offset);
  23961. goto num_index_dim;
  23962. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  23963. ZVAL_UNDEFINED_OP2();
  23964. key = ZSTR_EMPTY_ALLOC();
  23965. goto str_index_dim;
  23966. } else {
  23967. zend_type_error("Illegal offset type in unset");
  23968. }
  23969. break;
  23970. } else if (Z_ISREF_P(container)) {
  23971. container = Z_REFVAL_P(container);
  23972. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  23973. goto unset_dim_array;
  23974. }
  23975. }
  23976. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  23977. container = ZVAL_UNDEFINED_OP1();
  23978. }
  23979. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  23980. offset = ZVAL_UNDEFINED_OP2();
  23981. }
  23982. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  23983. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  23984. offset++;
  23985. }
  23986. Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
  23987. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  23988. zend_throw_error(NULL, "Cannot unset string offsets");
  23989. } else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
  23990. zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
  23991. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
  23992. zend_false_to_array_deprecated();
  23993. }
  23994. } while (0);
  23995. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  23996. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  23997. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  23998. }
  23999. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24000. {
  24001. USE_OPLINE
  24002. zval *container;
  24003. zval *offset;
  24004. zend_string *name, *tmp_name;
  24005. SAVE_OPLINE();
  24006. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24007. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  24008. do {
  24009. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  24010. if (Z_ISREF_P(container)) {
  24011. container = Z_REFVAL_P(container);
  24012. if (Z_TYPE_P(container) != IS_OBJECT) {
  24013. if (IS_VAR == IS_CV
  24014. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  24015. ZVAL_UNDEFINED_OP1();
  24016. }
  24017. break;
  24018. }
  24019. } else {
  24020. break;
  24021. }
  24022. }
  24023. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  24024. name = Z_STR_P(offset);
  24025. } else {
  24026. name = zval_try_get_tmp_string(offset, &tmp_name);
  24027. if (UNEXPECTED(!name)) {
  24028. break;
  24029. }
  24030. }
  24031. 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));
  24032. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  24033. zend_tmp_string_release(tmp_name);
  24034. }
  24035. } while (0);
  24036. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24037. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24038. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24039. }
  24040. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24041. {
  24042. USE_OPLINE
  24043. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  24044. SAVE_OPLINE();
  24045. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  24046. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24047. }
  24048. /* Destroy the previously yielded value */
  24049. zval_ptr_dtor(&generator->value);
  24050. /* Destroy the previously yielded key */
  24051. zval_ptr_dtor(&generator->key);
  24052. /* Set the new yielded value */
  24053. if (IS_VAR != IS_UNUSED) {
  24054. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  24055. /* Constants and temporary variables aren't yieldable by reference,
  24056. * but we still allow them with a notice. */
  24057. if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
  24058. zval *value;
  24059. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  24060. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24061. ZVAL_COPY_VALUE(&generator->value, value);
  24062. if (IS_VAR == IS_CONST) {
  24063. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  24064. Z_ADDREF(generator->value);
  24065. }
  24066. }
  24067. } else {
  24068. zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24069. /* If a function call result is yielded and the function did
  24070. * not return by reference we throw a notice. */
  24071. do {
  24072. if (IS_VAR == IS_VAR) {
  24073. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  24074. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  24075. && !Z_ISREF_P(value_ptr)) {
  24076. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  24077. ZVAL_COPY(&generator->value, value_ptr);
  24078. break;
  24079. }
  24080. }
  24081. if (Z_ISREF_P(value_ptr)) {
  24082. Z_ADDREF_P(value_ptr);
  24083. } else {
  24084. ZVAL_MAKE_REF_EX(value_ptr, 2);
  24085. }
  24086. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  24087. } while (0);
  24088. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24089. }
  24090. } else {
  24091. zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24092. /* Consts, temporary variables and references need copying */
  24093. if (IS_VAR == IS_CONST) {
  24094. ZVAL_COPY_VALUE(&generator->value, value);
  24095. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  24096. Z_ADDREF(generator->value);
  24097. }
  24098. } else if (IS_VAR == IS_TMP_VAR) {
  24099. ZVAL_COPY_VALUE(&generator->value, value);
  24100. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  24101. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  24102. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24103. } else {
  24104. ZVAL_COPY_VALUE(&generator->value, value);
  24105. if (IS_VAR == IS_CV) {
  24106. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  24107. }
  24108. }
  24109. }
  24110. } else {
  24111. /* If no value was specified yield null */
  24112. ZVAL_NULL(&generator->value);
  24113. }
  24114. /* Set the new yielded key */
  24115. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  24116. zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  24117. if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  24118. key = Z_REFVAL_P(key);
  24119. }
  24120. ZVAL_COPY(&generator->key, key);
  24121. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24122. if (Z_TYPE(generator->key) == IS_LONG
  24123. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  24124. ) {
  24125. generator->largest_used_integer_key = Z_LVAL(generator->key);
  24126. }
  24127. } else {
  24128. /* If no key was specified we use auto-increment keys */
  24129. generator->largest_used_integer_key++;
  24130. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  24131. }
  24132. if (RETURN_VALUE_USED(opline)) {
  24133. /* If the return value of yield is used set the send
  24134. * target and initialize it to NULL */
  24135. generator->send_target = EX_VAR(opline->result.var);
  24136. ZVAL_NULL(generator->send_target);
  24137. } else {
  24138. generator->send_target = NULL;
  24139. }
  24140. /* We increment to the next op, so we are at the correct position when the
  24141. * generator is resumed. */
  24142. ZEND_VM_INC_OPCODE();
  24143. /* The GOTO VM uses a local opline variable. We need to set the opline
  24144. * variable in execute_data so we don't resume at an old position. */
  24145. SAVE_OPLINE();
  24146. ZEND_VM_RETURN();
  24147. }
  24148. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24149. {
  24150. USE_OPLINE
  24151. zval *op1, *op2;
  24152. bool result;
  24153. SAVE_OPLINE();
  24154. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  24155. op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  24156. result = fast_is_identical_function(op1, op2);
  24157. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24158. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24159. ZEND_VM_SMART_BRANCH(result, 1);
  24160. }
  24161. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24162. {
  24163. USE_OPLINE
  24164. zval *op1, *op2;
  24165. bool result;
  24166. SAVE_OPLINE();
  24167. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  24168. op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  24169. result = fast_is_identical_function(op1, op2);
  24170. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24171. ZEND_VM_SMART_BRANCH(result, 1);
  24172. }
  24173. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24174. {
  24175. USE_OPLINE
  24176. zval *op1, *op2;
  24177. bool result;
  24178. SAVE_OPLINE();
  24179. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  24180. op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  24181. result = fast_is_not_identical_function(op1, op2);
  24182. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24183. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24184. ZEND_VM_SMART_BRANCH(result, 1);
  24185. }
  24186. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24187. {
  24188. USE_OPLINE
  24189. zval *value;
  24190. zval *variable_ptr;
  24191. SAVE_OPLINE();
  24192. value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  24193. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24194. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  24195. if (UNEXPECTED(0)) {
  24196. ZVAL_COPY(EX_VAR(opline->result.var), value);
  24197. }
  24198. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24199. /* zend_assign_to_variable() always takes care of op2, never free it! */
  24200. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24201. }
  24202. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24203. {
  24204. USE_OPLINE
  24205. zval *value;
  24206. zval *variable_ptr;
  24207. SAVE_OPLINE();
  24208. value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  24209. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24210. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  24211. if (UNEXPECTED(1)) {
  24212. ZVAL_COPY(EX_VAR(opline->result.var), value);
  24213. }
  24214. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24215. /* zend_assign_to_variable() always takes care of op2, never free it! */
  24216. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24217. }
  24218. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24219. {
  24220. USE_OPLINE
  24221. zval *op1, *op2;
  24222. bool result;
  24223. SAVE_OPLINE();
  24224. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  24225. op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
  24226. result = fast_is_identical_function(op1, op2);
  24227. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24228. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24229. ZEND_VM_SMART_BRANCH(result, 1);
  24230. }
  24231. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24232. {
  24233. USE_OPLINE
  24234. zval *op1, *op2;
  24235. bool result;
  24236. SAVE_OPLINE();
  24237. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  24238. op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
  24239. result = fast_is_identical_function(op1, op2);
  24240. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24241. ZEND_VM_SMART_BRANCH(result, 1);
  24242. }
  24243. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24244. {
  24245. USE_OPLINE
  24246. zval *op1, *op2;
  24247. bool result;
  24248. SAVE_OPLINE();
  24249. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  24250. op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
  24251. result = fast_is_not_identical_function(op1, op2);
  24252. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24253. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24254. ZEND_VM_SMART_BRANCH(result, 1);
  24255. }
  24256. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24257. {
  24258. USE_OPLINE
  24259. zval *value;
  24260. zval *variable_ptr;
  24261. SAVE_OPLINE();
  24262. value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  24263. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24264. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  24265. if (UNEXPECTED(0)) {
  24266. ZVAL_COPY(EX_VAR(opline->result.var), value);
  24267. }
  24268. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24269. /* zend_assign_to_variable() always takes care of op2, never free it! */
  24270. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24271. }
  24272. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24273. {
  24274. USE_OPLINE
  24275. zval *value;
  24276. zval *variable_ptr;
  24277. SAVE_OPLINE();
  24278. value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  24279. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24280. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  24281. if (UNEXPECTED(1)) {
  24282. ZVAL_COPY(EX_VAR(opline->result.var), value);
  24283. }
  24284. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24285. /* zend_assign_to_variable() always takes care of op2, never free it! */
  24286. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24287. }
  24288. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24289. {
  24290. USE_OPLINE
  24291. zval *variable_ptr;
  24292. zval *value_ptr;
  24293. SAVE_OPLINE();
  24294. value_ptr = _get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  24295. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24296. if (IS_VAR == IS_VAR &&
  24297. UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
  24298. zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
  24299. variable_ptr = &EG(uninitialized_zval);
  24300. } else if (IS_VAR == IS_VAR &&
  24301. opline->extended_value == ZEND_RETURNS_FUNCTION &&
  24302. UNEXPECTED(!Z_ISREF_P(value_ptr))) {
  24303. variable_ptr = zend_wrong_assign_to_variable_reference(
  24304. variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  24305. } else {
  24306. zend_assign_to_variable_reference(variable_ptr, value_ptr);
  24307. }
  24308. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24309. ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
  24310. }
  24311. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  24312. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24313. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24314. }
  24315. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24316. {
  24317. USE_OPLINE
  24318. zval *var_ptr;
  24319. zval *value, *container, *dim;
  24320. HashTable *ht;
  24321. SAVE_OPLINE();
  24322. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24323. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  24324. assign_dim_op_array:
  24325. SEPARATE_ARRAY(container);
  24326. ht = Z_ARRVAL_P(container);
  24327. assign_dim_op_new_array:
  24328. dim = NULL;
  24329. if (IS_UNUSED == IS_UNUSED) {
  24330. var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
  24331. if (UNEXPECTED(!var_ptr)) {
  24332. zend_cannot_add_element();
  24333. goto assign_dim_op_ret_null;
  24334. }
  24335. } else {
  24336. if (IS_UNUSED == IS_CONST) {
  24337. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
  24338. } else {
  24339. var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
  24340. }
  24341. if (UNEXPECTED(!var_ptr)) {
  24342. goto assign_dim_op_ret_null;
  24343. }
  24344. }
  24345. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  24346. do {
  24347. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
  24348. zend_reference *ref = Z_REF_P(var_ptr);
  24349. var_ptr = Z_REFVAL_P(var_ptr);
  24350. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  24351. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  24352. break;
  24353. }
  24354. }
  24355. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  24356. } while (0);
  24357. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24358. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  24359. }
  24360. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  24361. } else {
  24362. if (EXPECTED(Z_ISREF_P(container))) {
  24363. container = Z_REFVAL_P(container);
  24364. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  24365. goto assign_dim_op_array;
  24366. }
  24367. }
  24368. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  24369. zend_object *obj = Z_OBJ_P(container);
  24370. dim = NULL;
  24371. if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  24372. dim++;
  24373. }
  24374. zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
  24375. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  24376. zend_uchar old_type;
  24377. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  24378. ZVAL_UNDEFINED_OP1();
  24379. }
  24380. ht = zend_new_array(8);
  24381. old_type = Z_TYPE_P(container);
  24382. ZVAL_ARR(container, ht);
  24383. if (UNEXPECTED(old_type == IS_FALSE)) {
  24384. GC_ADDREF(ht);
  24385. zend_false_to_array_deprecated();
  24386. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  24387. zend_array_destroy(ht);
  24388. goto assign_dim_op_ret_null;
  24389. }
  24390. }
  24391. goto assign_dim_op_new_array;
  24392. } else {
  24393. dim = NULL;
  24394. zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  24395. assign_dim_op_ret_null:
  24396. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  24397. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24398. ZVAL_NULL(EX_VAR(opline->result.var));
  24399. }
  24400. }
  24401. }
  24402. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24403. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  24404. }
  24405. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24406. {
  24407. USE_OPLINE
  24408. zval *container;
  24409. SAVE_OPLINE();
  24410. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24411. zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
  24412. if (IS_VAR == IS_VAR) {
  24413. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  24414. }
  24415. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24416. }
  24417. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24418. {
  24419. USE_OPLINE
  24420. zval *container;
  24421. SAVE_OPLINE();
  24422. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24423. zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
  24424. if (IS_VAR == IS_VAR) {
  24425. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  24426. }
  24427. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24428. }
  24429. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24430. {
  24431. #if 0
  24432. USE_OPLINE
  24433. #endif
  24434. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  24435. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  24436. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24437. }
  24438. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24439. } else {
  24440. if (IS_UNUSED == IS_UNUSED) {
  24441. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24442. }
  24443. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24444. }
  24445. }
  24446. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24447. {
  24448. USE_OPLINE
  24449. zval *object_ptr, *orig_object_ptr;
  24450. zval *value;
  24451. zval *variable_ptr;
  24452. zval *dim;
  24453. SAVE_OPLINE();
  24454. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24455. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  24456. try_assign_dim_array:
  24457. SEPARATE_ARRAY(object_ptr);
  24458. if (IS_UNUSED == IS_UNUSED) {
  24459. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  24460. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  24461. HashTable *ht = Z_ARRVAL_P(object_ptr);
  24462. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  24463. GC_ADDREF(ht);
  24464. }
  24465. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  24466. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  24467. zend_array_destroy(ht);
  24468. goto assign_dim_error;
  24469. }
  24470. }
  24471. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  24472. ZVAL_DEREF(value);
  24473. }
  24474. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  24475. if (UNEXPECTED(value == NULL)) {
  24476. zend_cannot_add_element();
  24477. goto assign_dim_error;
  24478. } else if (IS_CONST == IS_CV) {
  24479. if (Z_REFCOUNTED_P(value)) {
  24480. Z_ADDREF_P(value);
  24481. }
  24482. } else if (IS_CONST == IS_VAR) {
  24483. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  24484. if (Z_ISREF_P(free_op_data)) {
  24485. if (Z_REFCOUNTED_P(value)) {
  24486. Z_ADDREF_P(value);
  24487. }
  24488. zval_ptr_dtor_nogc(free_op_data);
  24489. }
  24490. } else if (IS_CONST == IS_CONST) {
  24491. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  24492. Z_ADDREF_P(value);
  24493. }
  24494. }
  24495. } else {
  24496. dim = NULL;
  24497. if (IS_UNUSED == IS_CONST) {
  24498. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  24499. } else {
  24500. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  24501. }
  24502. if (UNEXPECTED(variable_ptr == NULL)) {
  24503. goto assign_dim_error;
  24504. }
  24505. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  24506. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  24507. }
  24508. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24509. ZVAL_COPY(EX_VAR(opline->result.var), value);
  24510. }
  24511. } else {
  24512. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  24513. object_ptr = Z_REFVAL_P(object_ptr);
  24514. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  24515. goto try_assign_dim_array;
  24516. }
  24517. }
  24518. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  24519. zend_object *obj = Z_OBJ_P(object_ptr);
  24520. GC_ADDREF(obj);
  24521. dim = NULL;
  24522. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  24523. dim = ZVAL_UNDEFINED_OP2();
  24524. } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  24525. dim++;
  24526. }
  24527. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  24528. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  24529. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  24530. } else if (IS_CONST & (IS_CV|IS_VAR)) {
  24531. ZVAL_DEREF(value);
  24532. }
  24533. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  24534. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  24535. zend_objects_store_del(obj);
  24536. }
  24537. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  24538. if (IS_UNUSED == IS_UNUSED) {
  24539. zend_use_new_element_for_string();
  24540. UNDEF_RESULT();
  24541. } else {
  24542. dim = NULL;
  24543. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  24544. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  24545. }
  24546. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  24547. if (Z_ISREF_P(orig_object_ptr)
  24548. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  24549. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  24550. dim = NULL;
  24551. UNDEF_RESULT();
  24552. } else {
  24553. HashTable *ht = zend_new_array(8);
  24554. zend_uchar old_type = Z_TYPE_P(object_ptr);
  24555. ZVAL_ARR(object_ptr, ht);
  24556. if (UNEXPECTED(old_type == IS_FALSE)) {
  24557. GC_ADDREF(ht);
  24558. zend_false_to_array_deprecated();
  24559. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  24560. zend_array_destroy(ht);
  24561. goto assign_dim_error;
  24562. }
  24563. }
  24564. goto try_assign_dim_array;
  24565. }
  24566. } else {
  24567. zend_use_scalar_as_array();
  24568. dim = NULL;
  24569. assign_dim_error:
  24570. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24571. ZVAL_NULL(EX_VAR(opline->result.var));
  24572. }
  24573. }
  24574. }
  24575. if (IS_UNUSED != IS_UNUSED) {
  24576. }
  24577. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24578. /* assign_dim has two opcodes! */
  24579. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  24580. }
  24581. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24582. {
  24583. USE_OPLINE
  24584. zval *object_ptr, *orig_object_ptr;
  24585. zval *value;
  24586. zval *variable_ptr;
  24587. zval *dim;
  24588. SAVE_OPLINE();
  24589. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24590. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  24591. try_assign_dim_array:
  24592. SEPARATE_ARRAY(object_ptr);
  24593. if (IS_UNUSED == IS_UNUSED) {
  24594. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  24595. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  24596. HashTable *ht = Z_ARRVAL_P(object_ptr);
  24597. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  24598. GC_ADDREF(ht);
  24599. }
  24600. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  24601. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  24602. zend_array_destroy(ht);
  24603. goto assign_dim_error;
  24604. }
  24605. }
  24606. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  24607. ZVAL_DEREF(value);
  24608. }
  24609. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  24610. if (UNEXPECTED(value == NULL)) {
  24611. zend_cannot_add_element();
  24612. goto assign_dim_error;
  24613. } else if (IS_TMP_VAR == IS_CV) {
  24614. if (Z_REFCOUNTED_P(value)) {
  24615. Z_ADDREF_P(value);
  24616. }
  24617. } else if (IS_TMP_VAR == IS_VAR) {
  24618. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  24619. if (Z_ISREF_P(free_op_data)) {
  24620. if (Z_REFCOUNTED_P(value)) {
  24621. Z_ADDREF_P(value);
  24622. }
  24623. zval_ptr_dtor_nogc(free_op_data);
  24624. }
  24625. } else if (IS_TMP_VAR == IS_CONST) {
  24626. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  24627. Z_ADDREF_P(value);
  24628. }
  24629. }
  24630. } else {
  24631. dim = NULL;
  24632. if (IS_UNUSED == IS_CONST) {
  24633. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  24634. } else {
  24635. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  24636. }
  24637. if (UNEXPECTED(variable_ptr == NULL)) {
  24638. goto assign_dim_error;
  24639. }
  24640. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  24641. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  24642. }
  24643. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24644. ZVAL_COPY(EX_VAR(opline->result.var), value);
  24645. }
  24646. } else {
  24647. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  24648. object_ptr = Z_REFVAL_P(object_ptr);
  24649. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  24650. goto try_assign_dim_array;
  24651. }
  24652. }
  24653. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  24654. zend_object *obj = Z_OBJ_P(object_ptr);
  24655. GC_ADDREF(obj);
  24656. dim = NULL;
  24657. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  24658. dim = ZVAL_UNDEFINED_OP2();
  24659. } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  24660. dim++;
  24661. }
  24662. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  24663. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  24664. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  24665. } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
  24666. ZVAL_DEREF(value);
  24667. }
  24668. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  24669. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24670. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  24671. zend_objects_store_del(obj);
  24672. }
  24673. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  24674. if (IS_UNUSED == IS_UNUSED) {
  24675. zend_use_new_element_for_string();
  24676. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24677. UNDEF_RESULT();
  24678. } else {
  24679. dim = NULL;
  24680. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  24681. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  24682. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24683. }
  24684. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  24685. if (Z_ISREF_P(orig_object_ptr)
  24686. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  24687. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  24688. dim = NULL;
  24689. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24690. UNDEF_RESULT();
  24691. } else {
  24692. HashTable *ht = zend_new_array(8);
  24693. zend_uchar old_type = Z_TYPE_P(object_ptr);
  24694. ZVAL_ARR(object_ptr, ht);
  24695. if (UNEXPECTED(old_type == IS_FALSE)) {
  24696. GC_ADDREF(ht);
  24697. zend_false_to_array_deprecated();
  24698. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  24699. zend_array_destroy(ht);
  24700. goto assign_dim_error;
  24701. }
  24702. }
  24703. goto try_assign_dim_array;
  24704. }
  24705. } else {
  24706. zend_use_scalar_as_array();
  24707. dim = NULL;
  24708. assign_dim_error:
  24709. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24710. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24711. ZVAL_NULL(EX_VAR(opline->result.var));
  24712. }
  24713. }
  24714. }
  24715. if (IS_UNUSED != IS_UNUSED) {
  24716. }
  24717. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24718. /* assign_dim has two opcodes! */
  24719. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  24720. }
  24721. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24722. {
  24723. USE_OPLINE
  24724. zval *object_ptr, *orig_object_ptr;
  24725. zval *value;
  24726. zval *variable_ptr;
  24727. zval *dim;
  24728. SAVE_OPLINE();
  24729. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24730. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  24731. try_assign_dim_array:
  24732. SEPARATE_ARRAY(object_ptr);
  24733. if (IS_UNUSED == IS_UNUSED) {
  24734. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  24735. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  24736. HashTable *ht = Z_ARRVAL_P(object_ptr);
  24737. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  24738. GC_ADDREF(ht);
  24739. }
  24740. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  24741. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  24742. zend_array_destroy(ht);
  24743. goto assign_dim_error;
  24744. }
  24745. }
  24746. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  24747. ZVAL_DEREF(value);
  24748. }
  24749. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  24750. if (UNEXPECTED(value == NULL)) {
  24751. zend_cannot_add_element();
  24752. goto assign_dim_error;
  24753. } else if (IS_VAR == IS_CV) {
  24754. if (Z_REFCOUNTED_P(value)) {
  24755. Z_ADDREF_P(value);
  24756. }
  24757. } else if (IS_VAR == IS_VAR) {
  24758. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  24759. if (Z_ISREF_P(free_op_data)) {
  24760. if (Z_REFCOUNTED_P(value)) {
  24761. Z_ADDREF_P(value);
  24762. }
  24763. zval_ptr_dtor_nogc(free_op_data);
  24764. }
  24765. } else if (IS_VAR == IS_CONST) {
  24766. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  24767. Z_ADDREF_P(value);
  24768. }
  24769. }
  24770. } else {
  24771. dim = NULL;
  24772. if (IS_UNUSED == IS_CONST) {
  24773. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  24774. } else {
  24775. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  24776. }
  24777. if (UNEXPECTED(variable_ptr == NULL)) {
  24778. goto assign_dim_error;
  24779. }
  24780. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  24781. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  24782. }
  24783. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24784. ZVAL_COPY(EX_VAR(opline->result.var), value);
  24785. }
  24786. } else {
  24787. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  24788. object_ptr = Z_REFVAL_P(object_ptr);
  24789. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  24790. goto try_assign_dim_array;
  24791. }
  24792. }
  24793. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  24794. zend_object *obj = Z_OBJ_P(object_ptr);
  24795. GC_ADDREF(obj);
  24796. dim = NULL;
  24797. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  24798. dim = ZVAL_UNDEFINED_OP2();
  24799. } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  24800. dim++;
  24801. }
  24802. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  24803. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  24804. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  24805. } else if (IS_VAR & (IS_CV|IS_VAR)) {
  24806. ZVAL_DEREF(value);
  24807. }
  24808. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  24809. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24810. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  24811. zend_objects_store_del(obj);
  24812. }
  24813. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  24814. if (IS_UNUSED == IS_UNUSED) {
  24815. zend_use_new_element_for_string();
  24816. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24817. UNDEF_RESULT();
  24818. } else {
  24819. dim = NULL;
  24820. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  24821. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  24822. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24823. }
  24824. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  24825. if (Z_ISREF_P(orig_object_ptr)
  24826. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  24827. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  24828. dim = NULL;
  24829. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24830. UNDEF_RESULT();
  24831. } else {
  24832. HashTable *ht = zend_new_array(8);
  24833. zend_uchar old_type = Z_TYPE_P(object_ptr);
  24834. ZVAL_ARR(object_ptr, ht);
  24835. if (UNEXPECTED(old_type == IS_FALSE)) {
  24836. GC_ADDREF(ht);
  24837. zend_false_to_array_deprecated();
  24838. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  24839. zend_array_destroy(ht);
  24840. goto assign_dim_error;
  24841. }
  24842. }
  24843. goto try_assign_dim_array;
  24844. }
  24845. } else {
  24846. zend_use_scalar_as_array();
  24847. dim = NULL;
  24848. assign_dim_error:
  24849. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  24850. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24851. ZVAL_NULL(EX_VAR(opline->result.var));
  24852. }
  24853. }
  24854. }
  24855. if (IS_UNUSED != IS_UNUSED) {
  24856. }
  24857. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24858. /* assign_dim has two opcodes! */
  24859. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  24860. }
  24861. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24862. {
  24863. USE_OPLINE
  24864. zval *object_ptr, *orig_object_ptr;
  24865. zval *value;
  24866. zval *variable_ptr;
  24867. zval *dim;
  24868. SAVE_OPLINE();
  24869. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  24870. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  24871. try_assign_dim_array:
  24872. SEPARATE_ARRAY(object_ptr);
  24873. if (IS_UNUSED == IS_UNUSED) {
  24874. value = EX_VAR((opline+1)->op1.var);
  24875. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  24876. HashTable *ht = Z_ARRVAL_P(object_ptr);
  24877. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  24878. GC_ADDREF(ht);
  24879. }
  24880. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  24881. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  24882. zend_array_destroy(ht);
  24883. goto assign_dim_error;
  24884. }
  24885. }
  24886. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  24887. ZVAL_DEREF(value);
  24888. }
  24889. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  24890. if (UNEXPECTED(value == NULL)) {
  24891. zend_cannot_add_element();
  24892. goto assign_dim_error;
  24893. } else if (IS_CV == IS_CV) {
  24894. if (Z_REFCOUNTED_P(value)) {
  24895. Z_ADDREF_P(value);
  24896. }
  24897. } else if (IS_CV == IS_VAR) {
  24898. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  24899. if (Z_ISREF_P(free_op_data)) {
  24900. if (Z_REFCOUNTED_P(value)) {
  24901. Z_ADDREF_P(value);
  24902. }
  24903. zval_ptr_dtor_nogc(free_op_data);
  24904. }
  24905. } else if (IS_CV == IS_CONST) {
  24906. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  24907. Z_ADDREF_P(value);
  24908. }
  24909. }
  24910. } else {
  24911. dim = NULL;
  24912. if (IS_UNUSED == IS_CONST) {
  24913. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  24914. } else {
  24915. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  24916. }
  24917. if (UNEXPECTED(variable_ptr == NULL)) {
  24918. goto assign_dim_error;
  24919. }
  24920. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  24921. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  24922. }
  24923. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24924. ZVAL_COPY(EX_VAR(opline->result.var), value);
  24925. }
  24926. } else {
  24927. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  24928. object_ptr = Z_REFVAL_P(object_ptr);
  24929. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  24930. goto try_assign_dim_array;
  24931. }
  24932. }
  24933. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  24934. zend_object *obj = Z_OBJ_P(object_ptr);
  24935. GC_ADDREF(obj);
  24936. dim = NULL;
  24937. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  24938. dim = ZVAL_UNDEFINED_OP2();
  24939. } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  24940. dim++;
  24941. }
  24942. value = EX_VAR((opline+1)->op1.var);
  24943. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  24944. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  24945. } else if (IS_CV & (IS_CV|IS_VAR)) {
  24946. ZVAL_DEREF(value);
  24947. }
  24948. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  24949. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  24950. zend_objects_store_del(obj);
  24951. }
  24952. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  24953. if (IS_UNUSED == IS_UNUSED) {
  24954. zend_use_new_element_for_string();
  24955. UNDEF_RESULT();
  24956. } else {
  24957. dim = NULL;
  24958. value = EX_VAR((opline+1)->op1.var);
  24959. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  24960. }
  24961. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  24962. if (Z_ISREF_P(orig_object_ptr)
  24963. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  24964. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  24965. dim = NULL;
  24966. UNDEF_RESULT();
  24967. } else {
  24968. HashTable *ht = zend_new_array(8);
  24969. zend_uchar old_type = Z_TYPE_P(object_ptr);
  24970. ZVAL_ARR(object_ptr, ht);
  24971. if (UNEXPECTED(old_type == IS_FALSE)) {
  24972. GC_ADDREF(ht);
  24973. zend_false_to_array_deprecated();
  24974. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  24975. zend_array_destroy(ht);
  24976. goto assign_dim_error;
  24977. }
  24978. }
  24979. goto try_assign_dim_array;
  24980. }
  24981. } else {
  24982. zend_use_scalar_as_array();
  24983. dim = NULL;
  24984. assign_dim_error:
  24985. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24986. ZVAL_NULL(EX_VAR(opline->result.var));
  24987. }
  24988. }
  24989. }
  24990. if (IS_UNUSED != IS_UNUSED) {
  24991. }
  24992. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  24993. /* assign_dim has two opcodes! */
  24994. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  24995. }
  24996. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24997. {
  24998. USE_OPLINE
  24999. zval *function_name;
  25000. zend_class_entry *ce;
  25001. uint32_t call_info;
  25002. zend_function *fbc;
  25003. zend_execute_data *call;
  25004. SAVE_OPLINE();
  25005. if (IS_VAR == IS_CONST) {
  25006. /* no function found. try a static method in class */
  25007. ce = CACHED_PTR(opline->result.num);
  25008. if (UNEXPECTED(ce == NULL)) {
  25009. 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);
  25010. if (UNEXPECTED(ce == NULL)) {
  25011. HANDLE_EXCEPTION();
  25012. }
  25013. if (IS_UNUSED != IS_CONST) {
  25014. CACHE_PTR(opline->result.num, ce);
  25015. }
  25016. }
  25017. } else if (IS_VAR == IS_UNUSED) {
  25018. ce = zend_fetch_class(NULL, opline->op1.num);
  25019. if (UNEXPECTED(ce == NULL)) {
  25020. HANDLE_EXCEPTION();
  25021. }
  25022. } else {
  25023. ce = Z_CE_P(EX_VAR(opline->op1.var));
  25024. }
  25025. if (IS_VAR == IS_CONST &&
  25026. IS_UNUSED == IS_CONST &&
  25027. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  25028. /* nothing to do */
  25029. } else if (IS_VAR != IS_CONST &&
  25030. IS_UNUSED == IS_CONST &&
  25031. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  25032. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  25033. } else if (IS_UNUSED != IS_UNUSED) {
  25034. function_name = NULL;
  25035. if (IS_UNUSED != IS_CONST) {
  25036. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  25037. do {
  25038. if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  25039. function_name = Z_REFVAL_P(function_name);
  25040. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  25041. break;
  25042. }
  25043. } else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  25044. ZVAL_UNDEFINED_OP2();
  25045. if (UNEXPECTED(EG(exception) != NULL)) {
  25046. HANDLE_EXCEPTION();
  25047. }
  25048. }
  25049. zend_throw_error(NULL, "Method name must be a string");
  25050. HANDLE_EXCEPTION();
  25051. } while (0);
  25052. }
  25053. }
  25054. if (ce->get_static_method) {
  25055. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  25056. } else {
  25057. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  25058. }
  25059. if (UNEXPECTED(fbc == NULL)) {
  25060. if (EXPECTED(!EG(exception))) {
  25061. zend_undefined_method(ce, Z_STR_P(function_name));
  25062. }
  25063. HANDLE_EXCEPTION();
  25064. }
  25065. if (IS_UNUSED == IS_CONST &&
  25066. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  25067. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  25068. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  25069. }
  25070. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  25071. init_func_run_time_cache(&fbc->op_array);
  25072. }
  25073. if (IS_UNUSED != IS_CONST) {
  25074. }
  25075. } else {
  25076. if (UNEXPECTED(ce->constructor == NULL)) {
  25077. zend_throw_error(NULL, "Cannot call constructor");
  25078. HANDLE_EXCEPTION();
  25079. }
  25080. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  25081. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  25082. HANDLE_EXCEPTION();
  25083. }
  25084. fbc = ce->constructor;
  25085. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  25086. init_func_run_time_cache(&fbc->op_array);
  25087. }
  25088. }
  25089. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  25090. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  25091. ce = (zend_class_entry*)Z_OBJ(EX(This));
  25092. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  25093. } else {
  25094. zend_non_static_method_call(fbc);
  25095. HANDLE_EXCEPTION();
  25096. }
  25097. } else {
  25098. /* previous opcode is ZEND_FETCH_CLASS */
  25099. if (IS_VAR == IS_UNUSED
  25100. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  25101. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  25102. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  25103. ce = Z_OBJCE(EX(This));
  25104. } else {
  25105. ce = Z_CE(EX(This));
  25106. }
  25107. }
  25108. call_info = ZEND_CALL_NESTED_FUNCTION;
  25109. }
  25110. call = zend_vm_stack_push_call_frame(call_info,
  25111. fbc, opline->extended_value, ce);
  25112. call->prev_execute_data = EX(call);
  25113. EX(call) = call;
  25114. ZEND_VM_NEXT_OPCODE();
  25115. }
  25116. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25117. {
  25118. if (IS_VAR == IS_UNUSED) {
  25119. SAVE_OPLINE();
  25120. zend_verify_missing_return_type(EX(func));
  25121. HANDLE_EXCEPTION();
  25122. } else {
  25123. /* prevents "undefined variable opline" errors */
  25124. #if 0 || (IS_VAR != IS_UNUSED)
  25125. USE_OPLINE
  25126. zval *retval_ref, *retval_ptr;
  25127. zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
  25128. retval_ref = retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25129. if (IS_VAR == IS_CONST) {
  25130. ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
  25131. retval_ref = retval_ptr = EX_VAR(opline->result.var);
  25132. } else if (IS_VAR == IS_VAR) {
  25133. if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
  25134. retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
  25135. }
  25136. ZVAL_DEREF(retval_ptr);
  25137. } else if (IS_VAR == IS_CV) {
  25138. ZVAL_DEREF(retval_ptr);
  25139. }
  25140. if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
  25141. ZEND_VM_NEXT_OPCODE();
  25142. }
  25143. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
  25144. SAVE_OPLINE();
  25145. retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
  25146. if (UNEXPECTED(EG(exception))) {
  25147. HANDLE_EXCEPTION();
  25148. }
  25149. if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
  25150. ZEND_VM_NEXT_OPCODE();
  25151. }
  25152. }
  25153. zend_reference *ref = NULL;
  25154. void *cache_slot = CACHE_ADDR(opline->op2.num);
  25155. if (UNEXPECTED(retval_ref != retval_ptr)) {
  25156. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  25157. ref = Z_REF_P(retval_ref);
  25158. } else {
  25159. /* A cast might happen - unwrap the reference if this is a by-value return */
  25160. if (Z_REFCOUNT_P(retval_ref) == 1) {
  25161. ZVAL_UNREF(retval_ref);
  25162. } else {
  25163. Z_DELREF_P(retval_ref);
  25164. ZVAL_COPY(retval_ref, retval_ptr);
  25165. }
  25166. retval_ptr = retval_ref;
  25167. }
  25168. }
  25169. SAVE_OPLINE();
  25170. if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
  25171. zend_verify_return_error(EX(func), retval_ptr);
  25172. HANDLE_EXCEPTION();
  25173. }
  25174. ZEND_VM_NEXT_OPCODE();
  25175. #endif
  25176. }
  25177. }
  25178. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25179. {
  25180. USE_OPLINE
  25181. zval *varptr, *arg;
  25182. if (IS_UNUSED == IS_CONST) {
  25183. SAVE_OPLINE();
  25184. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  25185. uint32_t arg_num;
  25186. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  25187. if (UNEXPECTED(!arg)) {
  25188. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25189. HANDLE_EXCEPTION();
  25190. }
  25191. } else {
  25192. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25193. }
  25194. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25195. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  25196. SAVE_OPLINE();
  25197. ZVAL_UNDEFINED_OP1();
  25198. ZVAL_NULL(arg);
  25199. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25200. }
  25201. if (IS_VAR == IS_CV) {
  25202. ZVAL_COPY_DEREF(arg, varptr);
  25203. } else /* if (IS_VAR == IS_VAR) */ {
  25204. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  25205. zend_refcounted *ref = Z_COUNTED_P(varptr);
  25206. varptr = Z_REFVAL_P(varptr);
  25207. ZVAL_COPY_VALUE(arg, varptr);
  25208. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  25209. efree_size(ref, sizeof(zend_reference));
  25210. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  25211. Z_ADDREF_P(arg);
  25212. }
  25213. } else {
  25214. ZVAL_COPY_VALUE(arg, varptr);
  25215. }
  25216. }
  25217. ZEND_VM_NEXT_OPCODE();
  25218. }
  25219. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25220. {
  25221. USE_OPLINE
  25222. zval *varptr, *arg;
  25223. if (IS_UNUSED == IS_CONST) {
  25224. SAVE_OPLINE();
  25225. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  25226. uint32_t arg_num;
  25227. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  25228. if (UNEXPECTED(!arg)) {
  25229. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25230. HANDLE_EXCEPTION();
  25231. }
  25232. } else {
  25233. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25234. }
  25235. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25236. ZVAL_COPY_VALUE(arg, varptr);
  25237. if (EXPECTED(Z_ISREF_P(varptr))) {
  25238. ZEND_VM_NEXT_OPCODE();
  25239. }
  25240. SAVE_OPLINE();
  25241. ZVAL_NEW_REF(arg, arg);
  25242. zend_error(E_NOTICE, "Only variables should be passed by reference");
  25243. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25244. }
  25245. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25246. {
  25247. USE_OPLINE
  25248. zval *varptr, *arg;
  25249. uint32_t arg_num;
  25250. if (IS_UNUSED == IS_CONST) {
  25251. SAVE_OPLINE();
  25252. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  25253. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  25254. if (UNEXPECTED(!arg)) {
  25255. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25256. HANDLE_EXCEPTION();
  25257. }
  25258. } else {
  25259. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25260. arg_num = opline->op2.num;
  25261. }
  25262. if (EXPECTED(0)) {
  25263. if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25264. goto send_var;
  25265. }
  25266. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25267. ZVAL_COPY_VALUE(arg, varptr);
  25268. if (EXPECTED(Z_ISREF_P(varptr) ||
  25269. QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
  25270. ZEND_VM_NEXT_OPCODE();
  25271. }
  25272. } else {
  25273. if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25274. goto send_var;
  25275. }
  25276. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25277. ZVAL_COPY_VALUE(arg, varptr);
  25278. if (EXPECTED(Z_ISREF_P(varptr) ||
  25279. ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
  25280. ZEND_VM_NEXT_OPCODE();
  25281. }
  25282. }
  25283. SAVE_OPLINE();
  25284. ZVAL_NEW_REF(arg, arg);
  25285. zend_error(E_NOTICE, "Only variables should be passed by reference");
  25286. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25287. send_var:
  25288. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25289. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  25290. zend_refcounted *ref = Z_COUNTED_P(varptr);
  25291. varptr = Z_REFVAL_P(varptr);
  25292. ZVAL_COPY_VALUE(arg, varptr);
  25293. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  25294. efree_size(ref, sizeof(zend_reference));
  25295. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  25296. Z_ADDREF_P(arg);
  25297. }
  25298. } else {
  25299. ZVAL_COPY_VALUE(arg, varptr);
  25300. }
  25301. ZEND_VM_NEXT_OPCODE();
  25302. }
  25303. 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)
  25304. {
  25305. USE_OPLINE
  25306. zval *varptr, *arg;
  25307. uint32_t arg_num;
  25308. if (IS_UNUSED == IS_CONST) {
  25309. SAVE_OPLINE();
  25310. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  25311. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  25312. if (UNEXPECTED(!arg)) {
  25313. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25314. HANDLE_EXCEPTION();
  25315. }
  25316. } else {
  25317. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25318. arg_num = opline->op2.num;
  25319. }
  25320. if (EXPECTED(1)) {
  25321. if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25322. goto send_var;
  25323. }
  25324. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25325. ZVAL_COPY_VALUE(arg, varptr);
  25326. if (EXPECTED(Z_ISREF_P(varptr) ||
  25327. QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
  25328. ZEND_VM_NEXT_OPCODE();
  25329. }
  25330. } else {
  25331. if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25332. goto send_var;
  25333. }
  25334. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25335. ZVAL_COPY_VALUE(arg, varptr);
  25336. if (EXPECTED(Z_ISREF_P(varptr) ||
  25337. ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
  25338. ZEND_VM_NEXT_OPCODE();
  25339. }
  25340. }
  25341. SAVE_OPLINE();
  25342. ZVAL_NEW_REF(arg, arg);
  25343. zend_error(E_NOTICE, "Only variables should be passed by reference");
  25344. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25345. send_var:
  25346. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25347. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  25348. zend_refcounted *ref = Z_COUNTED_P(varptr);
  25349. varptr = Z_REFVAL_P(varptr);
  25350. ZVAL_COPY_VALUE(arg, varptr);
  25351. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  25352. efree_size(ref, sizeof(zend_reference));
  25353. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  25354. Z_ADDREF_P(arg);
  25355. }
  25356. } else {
  25357. ZVAL_COPY_VALUE(arg, varptr);
  25358. }
  25359. ZEND_VM_NEXT_OPCODE();
  25360. }
  25361. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25362. {
  25363. USE_OPLINE
  25364. zval *varptr, *arg;
  25365. SAVE_OPLINE();
  25366. if (IS_UNUSED == IS_CONST) {
  25367. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  25368. uint32_t arg_num;
  25369. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  25370. if (UNEXPECTED(!arg)) {
  25371. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25372. HANDLE_EXCEPTION();
  25373. }
  25374. } else {
  25375. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25376. }
  25377. varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25378. if (Z_ISREF_P(varptr)) {
  25379. Z_ADDREF_P(varptr);
  25380. } else {
  25381. ZVAL_MAKE_REF_EX(varptr, 2);
  25382. }
  25383. ZVAL_REF(arg, Z_REF_P(varptr));
  25384. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25385. ZEND_VM_NEXT_OPCODE();
  25386. }
  25387. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25388. {
  25389. USE_OPLINE
  25390. zval *varptr, *arg;
  25391. uint32_t arg_num;
  25392. if (IS_UNUSED == IS_CONST) {
  25393. SAVE_OPLINE();
  25394. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  25395. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  25396. if (UNEXPECTED(!arg)) {
  25397. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25398. HANDLE_EXCEPTION();
  25399. }
  25400. } else {
  25401. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25402. arg_num = opline->op2.num;
  25403. }
  25404. if (EXPECTED(0)) {
  25405. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25406. goto send_var_by_ref;
  25407. }
  25408. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25409. send_var_by_ref:
  25410. varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25411. if (Z_ISREF_P(varptr)) {
  25412. Z_ADDREF_P(varptr);
  25413. } else {
  25414. ZVAL_MAKE_REF_EX(varptr, 2);
  25415. }
  25416. ZVAL_REF(arg, Z_REF_P(varptr));
  25417. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25418. ZEND_VM_NEXT_OPCODE();
  25419. }
  25420. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25421. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  25422. SAVE_OPLINE();
  25423. ZVAL_UNDEFINED_OP1();
  25424. ZVAL_NULL(arg);
  25425. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25426. }
  25427. if (IS_VAR == IS_CV) {
  25428. ZVAL_COPY_DEREF(arg, varptr);
  25429. } else /* if (IS_VAR == IS_VAR) */ {
  25430. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  25431. zend_refcounted *ref = Z_COUNTED_P(varptr);
  25432. varptr = Z_REFVAL_P(varptr);
  25433. ZVAL_COPY_VALUE(arg, varptr);
  25434. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  25435. efree_size(ref, sizeof(zend_reference));
  25436. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  25437. Z_ADDREF_P(arg);
  25438. }
  25439. } else {
  25440. ZVAL_COPY_VALUE(arg, varptr);
  25441. }
  25442. }
  25443. ZEND_VM_NEXT_OPCODE();
  25444. }
  25445. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25446. {
  25447. USE_OPLINE
  25448. zval *varptr, *arg;
  25449. uint32_t arg_num;
  25450. if (IS_UNUSED == IS_CONST) {
  25451. SAVE_OPLINE();
  25452. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  25453. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  25454. if (UNEXPECTED(!arg)) {
  25455. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25456. HANDLE_EXCEPTION();
  25457. }
  25458. } else {
  25459. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25460. arg_num = opline->op2.num;
  25461. }
  25462. if (EXPECTED(1)) {
  25463. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25464. goto send_var_by_ref;
  25465. }
  25466. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25467. send_var_by_ref:
  25468. varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25469. if (Z_ISREF_P(varptr)) {
  25470. Z_ADDREF_P(varptr);
  25471. } else {
  25472. ZVAL_MAKE_REF_EX(varptr, 2);
  25473. }
  25474. ZVAL_REF(arg, Z_REF_P(varptr));
  25475. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25476. ZEND_VM_NEXT_OPCODE();
  25477. }
  25478. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25479. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  25480. SAVE_OPLINE();
  25481. ZVAL_UNDEFINED_OP1();
  25482. ZVAL_NULL(arg);
  25483. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25484. }
  25485. if (IS_VAR == IS_CV) {
  25486. ZVAL_COPY_DEREF(arg, varptr);
  25487. } else /* if (IS_VAR == IS_VAR) */ {
  25488. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  25489. zend_refcounted *ref = Z_COUNTED_P(varptr);
  25490. varptr = Z_REFVAL_P(varptr);
  25491. ZVAL_COPY_VALUE(arg, varptr);
  25492. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  25493. efree_size(ref, sizeof(zend_reference));
  25494. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  25495. Z_ADDREF_P(arg);
  25496. }
  25497. } else {
  25498. ZVAL_COPY_VALUE(arg, varptr);
  25499. }
  25500. }
  25501. ZEND_VM_NEXT_OPCODE();
  25502. }
  25503. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25504. {
  25505. USE_OPLINE
  25506. zval *varptr, *arg;
  25507. if (IS_UNUSED == IS_CONST) {
  25508. // TODO: Would it make sense to share the cache slot with CHECK_FUNC_ARG?
  25509. SAVE_OPLINE();
  25510. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  25511. uint32_t arg_num;
  25512. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  25513. if (UNEXPECTED(!arg)) {
  25514. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25515. HANDLE_EXCEPTION();
  25516. }
  25517. } else {
  25518. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25519. }
  25520. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  25521. varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25522. if (Z_ISREF_P(varptr)) {
  25523. Z_ADDREF_P(varptr);
  25524. } else {
  25525. ZVAL_MAKE_REF_EX(varptr, 2);
  25526. }
  25527. ZVAL_REF(arg, Z_REF_P(varptr));
  25528. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25529. ZEND_VM_NEXT_OPCODE();
  25530. }
  25531. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25532. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  25533. zend_refcounted *ref = Z_COUNTED_P(varptr);
  25534. varptr = Z_REFVAL_P(varptr);
  25535. ZVAL_COPY_VALUE(arg, varptr);
  25536. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  25537. efree_size(ref, sizeof(zend_reference));
  25538. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  25539. Z_ADDREF_P(arg);
  25540. }
  25541. } else {
  25542. ZVAL_COPY_VALUE(arg, varptr);
  25543. }
  25544. ZEND_VM_NEXT_OPCODE();
  25545. }
  25546. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25547. {
  25548. USE_OPLINE
  25549. zval *result;
  25550. zend_function *constructor;
  25551. zend_class_entry *ce;
  25552. zend_execute_data *call;
  25553. SAVE_OPLINE();
  25554. if (IS_VAR == IS_CONST) {
  25555. ce = CACHED_PTR(opline->op2.num);
  25556. if (UNEXPECTED(ce == NULL)) {
  25557. 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);
  25558. if (UNEXPECTED(ce == NULL)) {
  25559. ZVAL_UNDEF(EX_VAR(opline->result.var));
  25560. HANDLE_EXCEPTION();
  25561. }
  25562. CACHE_PTR(opline->op2.num, ce);
  25563. }
  25564. } else if (IS_VAR == IS_UNUSED) {
  25565. ce = zend_fetch_class(NULL, opline->op1.num);
  25566. if (UNEXPECTED(ce == NULL)) {
  25567. ZVAL_UNDEF(EX_VAR(opline->result.var));
  25568. HANDLE_EXCEPTION();
  25569. }
  25570. } else {
  25571. ce = Z_CE_P(EX_VAR(opline->op1.var));
  25572. }
  25573. result = EX_VAR(opline->result.var);
  25574. if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
  25575. ZVAL_UNDEF(result);
  25576. HANDLE_EXCEPTION();
  25577. }
  25578. constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
  25579. if (constructor == NULL) {
  25580. if (UNEXPECTED(EG(exception))) {
  25581. HANDLE_EXCEPTION();
  25582. }
  25583. /* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
  25584. * opcode is DO_FCALL in case EXT instructions are used. */
  25585. if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
  25586. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  25587. }
  25588. /* Perform a dummy function call */
  25589. call = zend_vm_stack_push_call_frame(
  25590. ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
  25591. opline->extended_value, NULL);
  25592. } else {
  25593. if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
  25594. init_func_run_time_cache(&constructor->op_array);
  25595. }
  25596. /* We are not handling overloaded classes right now */
  25597. call = zend_vm_stack_push_call_frame(
  25598. ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
  25599. constructor,
  25600. opline->extended_value,
  25601. Z_OBJ_P(result));
  25602. Z_ADDREF_P(result);
  25603. }
  25604. call->prev_execute_data = EX(call);
  25605. EX(call) = call;
  25606. ZEND_VM_NEXT_OPCODE();
  25607. }
  25608. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25609. {
  25610. USE_OPLINE
  25611. zval *expr_ptr, new_expr;
  25612. SAVE_OPLINE();
  25613. if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
  25614. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  25615. expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25616. if (Z_ISREF_P(expr_ptr)) {
  25617. Z_ADDREF_P(expr_ptr);
  25618. } else {
  25619. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  25620. }
  25621. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25622. } else {
  25623. expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25624. if (IS_VAR == IS_TMP_VAR) {
  25625. /* pass */
  25626. } else if (IS_VAR == IS_CONST) {
  25627. Z_TRY_ADDREF_P(expr_ptr);
  25628. } else if (IS_VAR == IS_CV) {
  25629. ZVAL_DEREF(expr_ptr);
  25630. Z_TRY_ADDREF_P(expr_ptr);
  25631. } else /* if (IS_VAR == IS_VAR) */ {
  25632. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  25633. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  25634. expr_ptr = Z_REFVAL_P(expr_ptr);
  25635. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  25636. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  25637. expr_ptr = &new_expr;
  25638. efree_size(ref, sizeof(zend_reference));
  25639. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  25640. Z_ADDREF_P(expr_ptr);
  25641. }
  25642. }
  25643. }
  25644. }
  25645. if (IS_UNUSED != IS_UNUSED) {
  25646. zval *offset = NULL;
  25647. zend_string *str;
  25648. zend_ulong hval;
  25649. add_again:
  25650. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  25651. str = Z_STR_P(offset);
  25652. if (IS_UNUSED != IS_CONST) {
  25653. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  25654. goto num_index;
  25655. }
  25656. }
  25657. str_index:
  25658. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  25659. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  25660. hval = Z_LVAL_P(offset);
  25661. num_index:
  25662. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  25663. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  25664. offset = Z_REFVAL_P(offset);
  25665. goto add_again;
  25666. } else if (Z_TYPE_P(offset) == IS_NULL) {
  25667. str = ZSTR_EMPTY_ALLOC();
  25668. goto str_index;
  25669. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  25670. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  25671. goto num_index;
  25672. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  25673. hval = 0;
  25674. goto num_index;
  25675. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  25676. hval = 1;
  25677. goto num_index;
  25678. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  25679. zend_use_resource_as_offset(offset);
  25680. hval = Z_RES_HANDLE_P(offset);
  25681. goto num_index;
  25682. } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  25683. ZVAL_UNDEFINED_OP2();
  25684. str = ZSTR_EMPTY_ALLOC();
  25685. goto str_index;
  25686. } else {
  25687. zend_illegal_offset();
  25688. zval_ptr_dtor_nogc(expr_ptr);
  25689. }
  25690. } else {
  25691. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  25692. zend_cannot_add_element();
  25693. zval_ptr_dtor_nogc(expr_ptr);
  25694. }
  25695. }
  25696. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25697. }
  25698. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25699. {
  25700. zval *array;
  25701. uint32_t size;
  25702. USE_OPLINE
  25703. array = EX_VAR(opline->result.var);
  25704. if (IS_VAR != IS_UNUSED) {
  25705. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  25706. ZVAL_ARR(array, zend_new_array(size));
  25707. /* Explicitly initialize array as not-packed if flag is set */
  25708. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  25709. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  25710. }
  25711. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  25712. } else {
  25713. ZVAL_ARR(array, zend_new_array(0));
  25714. ZEND_VM_NEXT_OPCODE();
  25715. }
  25716. }
  25717. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25718. {
  25719. USE_OPLINE
  25720. zval *var_ptr;
  25721. var_ptr = EX_VAR(opline->op1.var);
  25722. if (UNEXPECTED(Z_ISREF_P(var_ptr))) {
  25723. if (UNEXPECTED(Z_REFCOUNT_P(var_ptr) == 1)) {
  25724. ZVAL_UNREF(var_ptr);
  25725. }
  25726. }
  25727. ZEND_VM_NEXT_OPCODE();
  25728. }
  25729. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25730. {
  25731. USE_OPLINE
  25732. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  25733. SAVE_OPLINE();
  25734. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  25735. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  25736. }
  25737. /* Destroy the previously yielded value */
  25738. zval_ptr_dtor(&generator->value);
  25739. /* Destroy the previously yielded key */
  25740. zval_ptr_dtor(&generator->key);
  25741. /* Set the new yielded value */
  25742. if (IS_VAR != IS_UNUSED) {
  25743. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  25744. /* Constants and temporary variables aren't yieldable by reference,
  25745. * but we still allow them with a notice. */
  25746. if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
  25747. zval *value;
  25748. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  25749. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25750. ZVAL_COPY_VALUE(&generator->value, value);
  25751. if (IS_VAR == IS_CONST) {
  25752. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  25753. Z_ADDREF(generator->value);
  25754. }
  25755. }
  25756. } else {
  25757. zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25758. /* If a function call result is yielded and the function did
  25759. * not return by reference we throw a notice. */
  25760. do {
  25761. if (IS_VAR == IS_VAR) {
  25762. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  25763. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  25764. && !Z_ISREF_P(value_ptr)) {
  25765. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  25766. ZVAL_COPY(&generator->value, value_ptr);
  25767. break;
  25768. }
  25769. }
  25770. if (Z_ISREF_P(value_ptr)) {
  25771. Z_ADDREF_P(value_ptr);
  25772. } else {
  25773. ZVAL_MAKE_REF_EX(value_ptr, 2);
  25774. }
  25775. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  25776. } while (0);
  25777. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25778. }
  25779. } else {
  25780. zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25781. /* Consts, temporary variables and references need copying */
  25782. if (IS_VAR == IS_CONST) {
  25783. ZVAL_COPY_VALUE(&generator->value, value);
  25784. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  25785. Z_ADDREF(generator->value);
  25786. }
  25787. } else if (IS_VAR == IS_TMP_VAR) {
  25788. ZVAL_COPY_VALUE(&generator->value, value);
  25789. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  25790. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  25791. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25792. } else {
  25793. ZVAL_COPY_VALUE(&generator->value, value);
  25794. if (IS_VAR == IS_CV) {
  25795. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  25796. }
  25797. }
  25798. }
  25799. } else {
  25800. /* If no value was specified yield null */
  25801. ZVAL_NULL(&generator->value);
  25802. }
  25803. /* Set the new yielded key */
  25804. if (IS_UNUSED != IS_UNUSED) {
  25805. zval *key = NULL;
  25806. if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  25807. key = Z_REFVAL_P(key);
  25808. }
  25809. ZVAL_COPY(&generator->key, key);
  25810. if (Z_TYPE(generator->key) == IS_LONG
  25811. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  25812. ) {
  25813. generator->largest_used_integer_key = Z_LVAL(generator->key);
  25814. }
  25815. } else {
  25816. /* If no key was specified we use auto-increment keys */
  25817. generator->largest_used_integer_key++;
  25818. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  25819. }
  25820. if (RETURN_VALUE_USED(opline)) {
  25821. /* If the return value of yield is used set the send
  25822. * target and initialize it to NULL */
  25823. generator->send_target = EX_VAR(opline->result.var);
  25824. ZVAL_NULL(generator->send_target);
  25825. } else {
  25826. generator->send_target = NULL;
  25827. }
  25828. /* We increment to the next op, so we are at the correct position when the
  25829. * generator is resumed. */
  25830. ZEND_VM_INC_OPCODE();
  25831. /* The GOTO VM uses a local opline variable. We need to set the opline
  25832. * variable in execute_data so we don't resume at an old position. */
  25833. SAVE_OPLINE();
  25834. ZEND_VM_RETURN();
  25835. }
  25836. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25837. {
  25838. USE_OPLINE
  25839. zval *op1 = EX_VAR(opline->op1.var);
  25840. if (IS_VAR == IS_CV) {
  25841. if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  25842. ZVAL_NEW_EMPTY_REF(op1);
  25843. Z_SET_REFCOUNT_P(op1, 2);
  25844. ZVAL_NULL(Z_REFVAL_P(op1));
  25845. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  25846. } else {
  25847. if (Z_ISREF_P(op1)) {
  25848. Z_ADDREF_P(op1);
  25849. } else {
  25850. ZVAL_MAKE_REF_EX(op1, 2);
  25851. }
  25852. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  25853. }
  25854. } else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
  25855. op1 = Z_INDIRECT_P(op1);
  25856. if (EXPECTED(!Z_ISREF_P(op1))) {
  25857. ZVAL_MAKE_REF_EX(op1, 2);
  25858. } else {
  25859. GC_ADDREF(Z_REF_P(op1));
  25860. }
  25861. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  25862. } else {
  25863. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
  25864. }
  25865. ZEND_VM_NEXT_OPCODE();
  25866. }
  25867. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25868. {
  25869. USE_OPLINE
  25870. zval *op1;
  25871. zend_string *type;
  25872. SAVE_OPLINE();
  25873. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  25874. type = zend_zval_get_legacy_type(op1);
  25875. if (EXPECTED(type)) {
  25876. ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
  25877. } else {
  25878. ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
  25879. }
  25880. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25881. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25882. }
  25883. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25884. {
  25885. USE_OPLINE
  25886. zval *varptr, *arg;
  25887. uint32_t arg_num = opline->op2.num;
  25888. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  25889. ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  25890. }
  25891. varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25892. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  25893. if (IS_VAR == IS_CV) {
  25894. ZVAL_COPY(arg, varptr);
  25895. } else /* if (IS_VAR == IS_VAR) */ {
  25896. ZVAL_COPY_VALUE(arg, varptr);
  25897. }
  25898. ZEND_VM_NEXT_OPCODE();
  25899. }
  25900. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25901. {
  25902. USE_OPLINE
  25903. zval *op1, *op2;
  25904. bool result;
  25905. SAVE_OPLINE();
  25906. op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
  25907. op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25908. result = fast_is_identical_function(op1, op2);
  25909. ZEND_VM_SMART_BRANCH(result, 1);
  25910. }
  25911. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25912. {
  25913. USE_OPLINE
  25914. zval *object;
  25915. zval *property;
  25916. zval *value;
  25917. zval *zptr;
  25918. void **cache_slot;
  25919. zend_property_info *prop_info;
  25920. zend_object *zobj;
  25921. zend_string *name, *tmp_name;
  25922. SAVE_OPLINE();
  25923. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  25924. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25925. do {
  25926. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  25927. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  25928. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  25929. object = Z_REFVAL_P(object);
  25930. goto assign_op_object;
  25931. }
  25932. if (IS_VAR == IS_CV
  25933. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  25934. ZVAL_UNDEFINED_OP1();
  25935. }
  25936. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  25937. break;
  25938. }
  25939. assign_op_object:
  25940. /* here we are sure we are dealing with an object */
  25941. zobj = Z_OBJ_P(object);
  25942. if (IS_CV == IS_CONST) {
  25943. name = Z_STR_P(property);
  25944. } else {
  25945. name = zval_try_get_tmp_string(property, &tmp_name);
  25946. if (UNEXPECTED(!name)) {
  25947. UNDEF_RESULT();
  25948. break;
  25949. }
  25950. }
  25951. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  25952. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  25953. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  25954. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25955. ZVAL_NULL(EX_VAR(opline->result.var));
  25956. }
  25957. } else {
  25958. zval *orig_zptr = zptr;
  25959. zend_reference *ref;
  25960. do {
  25961. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  25962. ref = Z_REF_P(zptr);
  25963. zptr = Z_REFVAL_P(zptr);
  25964. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  25965. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  25966. break;
  25967. }
  25968. }
  25969. if (IS_CV == IS_CONST) {
  25970. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  25971. } else {
  25972. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  25973. }
  25974. if (UNEXPECTED(prop_info)) {
  25975. /* special case for typed properties */
  25976. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  25977. } else {
  25978. zend_binary_op(zptr, zptr, value OPLINE_CC);
  25979. }
  25980. } while (0);
  25981. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25982. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  25983. }
  25984. }
  25985. } else {
  25986. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  25987. }
  25988. if (IS_CV != IS_CONST) {
  25989. zend_tmp_string_release(tmp_name);
  25990. }
  25991. } while (0);
  25992. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  25993. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  25994. /* assign_obj has two opcodes! */
  25995. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  25996. }
  25997. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  25998. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25999. {
  26000. USE_OPLINE
  26001. zval *var_ptr;
  26002. zval *value, *container, *dim;
  26003. HashTable *ht;
  26004. SAVE_OPLINE();
  26005. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26006. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  26007. assign_dim_op_array:
  26008. SEPARATE_ARRAY(container);
  26009. ht = Z_ARRVAL_P(container);
  26010. assign_dim_op_new_array:
  26011. dim = EX_VAR(opline->op2.var);
  26012. if (IS_CV == IS_UNUSED) {
  26013. var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
  26014. if (UNEXPECTED(!var_ptr)) {
  26015. zend_cannot_add_element();
  26016. goto assign_dim_op_ret_null;
  26017. }
  26018. } else {
  26019. if (IS_CV == IS_CONST) {
  26020. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
  26021. } else {
  26022. var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
  26023. }
  26024. if (UNEXPECTED(!var_ptr)) {
  26025. goto assign_dim_op_ret_null;
  26026. }
  26027. }
  26028. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  26029. do {
  26030. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
  26031. zend_reference *ref = Z_REF_P(var_ptr);
  26032. var_ptr = Z_REFVAL_P(var_ptr);
  26033. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  26034. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  26035. break;
  26036. }
  26037. }
  26038. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  26039. } while (0);
  26040. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26041. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  26042. }
  26043. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  26044. } else {
  26045. if (EXPECTED(Z_ISREF_P(container))) {
  26046. container = Z_REFVAL_P(container);
  26047. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  26048. goto assign_dim_op_array;
  26049. }
  26050. }
  26051. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  26052. zend_object *obj = Z_OBJ_P(container);
  26053. dim = EX_VAR(opline->op2.var);
  26054. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  26055. dim++;
  26056. }
  26057. zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
  26058. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  26059. zend_uchar old_type;
  26060. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  26061. ZVAL_UNDEFINED_OP1();
  26062. }
  26063. ht = zend_new_array(8);
  26064. old_type = Z_TYPE_P(container);
  26065. ZVAL_ARR(container, ht);
  26066. if (UNEXPECTED(old_type == IS_FALSE)) {
  26067. GC_ADDREF(ht);
  26068. zend_false_to_array_deprecated();
  26069. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  26070. zend_array_destroy(ht);
  26071. goto assign_dim_op_ret_null;
  26072. }
  26073. }
  26074. goto assign_dim_op_new_array;
  26075. } else {
  26076. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26077. zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  26078. assign_dim_op_ret_null:
  26079. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  26080. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26081. ZVAL_NULL(EX_VAR(opline->result.var));
  26082. }
  26083. }
  26084. }
  26085. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26086. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  26087. }
  26088. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26089. {
  26090. USE_OPLINE
  26091. zval *var_ptr;
  26092. zval *value;
  26093. SAVE_OPLINE();
  26094. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26095. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26096. do {
  26097. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  26098. zend_reference *ref = Z_REF_P(var_ptr);
  26099. var_ptr = Z_REFVAL_P(var_ptr);
  26100. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  26101. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  26102. break;
  26103. }
  26104. }
  26105. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  26106. } while (0);
  26107. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26108. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  26109. }
  26110. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26111. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26112. }
  26113. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26114. {
  26115. USE_OPLINE
  26116. zval *object;
  26117. zval *property;
  26118. zval *zptr;
  26119. void **cache_slot;
  26120. zend_property_info *prop_info;
  26121. zend_object *zobj;
  26122. zend_string *name, *tmp_name;
  26123. SAVE_OPLINE();
  26124. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26125. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26126. do {
  26127. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  26128. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  26129. object = Z_REFVAL_P(object);
  26130. goto pre_incdec_object;
  26131. }
  26132. if (IS_VAR == IS_CV
  26133. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  26134. ZVAL_UNDEFINED_OP1();
  26135. }
  26136. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  26137. break;
  26138. }
  26139. pre_incdec_object:
  26140. /* here we are sure we are dealing with an object */
  26141. zobj = Z_OBJ_P(object);
  26142. if (IS_CV == IS_CONST) {
  26143. name = Z_STR_P(property);
  26144. } else {
  26145. name = zval_try_get_tmp_string(property, &tmp_name);
  26146. if (UNEXPECTED(!name)) {
  26147. UNDEF_RESULT();
  26148. break;
  26149. }
  26150. }
  26151. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  26152. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  26153. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  26154. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26155. ZVAL_NULL(EX_VAR(opline->result.var));
  26156. }
  26157. } else {
  26158. if (IS_CV == IS_CONST) {
  26159. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  26160. } else {
  26161. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  26162. }
  26163. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  26164. }
  26165. } else {
  26166. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  26167. }
  26168. if (IS_CV != IS_CONST) {
  26169. zend_tmp_string_release(tmp_name);
  26170. }
  26171. } while (0);
  26172. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26173. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26174. }
  26175. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26176. {
  26177. USE_OPLINE
  26178. zval *object;
  26179. zval *property;
  26180. zval *zptr;
  26181. void **cache_slot;
  26182. zend_property_info *prop_info;
  26183. zend_object *zobj;
  26184. zend_string *name, *tmp_name;
  26185. SAVE_OPLINE();
  26186. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26187. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26188. do {
  26189. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  26190. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  26191. object = Z_REFVAL_P(object);
  26192. goto post_incdec_object;
  26193. }
  26194. if (IS_VAR == IS_CV
  26195. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  26196. ZVAL_UNDEFINED_OP1();
  26197. }
  26198. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  26199. break;
  26200. }
  26201. post_incdec_object:
  26202. /* here we are sure we are dealing with an object */
  26203. zobj = Z_OBJ_P(object);
  26204. if (IS_CV == IS_CONST) {
  26205. name = Z_STR_P(property);
  26206. } else {
  26207. name = zval_try_get_tmp_string(property, &tmp_name);
  26208. if (UNEXPECTED(!name)) {
  26209. ZVAL_UNDEF(EX_VAR(opline->result.var));
  26210. break;
  26211. }
  26212. }
  26213. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  26214. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  26215. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  26216. ZVAL_NULL(EX_VAR(opline->result.var));
  26217. } else {
  26218. if (IS_CV == IS_CONST) {
  26219. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  26220. } else {
  26221. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  26222. }
  26223. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  26224. }
  26225. } else {
  26226. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  26227. }
  26228. if (IS_CV != IS_CONST) {
  26229. zend_tmp_string_release(tmp_name);
  26230. }
  26231. } while (0);
  26232. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26233. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26234. }
  26235. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26236. {
  26237. USE_OPLINE
  26238. zval *container;
  26239. SAVE_OPLINE();
  26240. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26241. zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  26242. if (IS_VAR == IS_VAR) {
  26243. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  26244. }
  26245. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26246. }
  26247. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26248. {
  26249. USE_OPLINE
  26250. zval *container;
  26251. SAVE_OPLINE();
  26252. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26253. zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  26254. if (IS_VAR == IS_VAR) {
  26255. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  26256. }
  26257. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26258. }
  26259. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26260. {
  26261. #if 0
  26262. USE_OPLINE
  26263. #endif
  26264. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  26265. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  26266. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26267. }
  26268. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26269. } else {
  26270. if (IS_CV == IS_UNUSED) {
  26271. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26272. }
  26273. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26274. }
  26275. }
  26276. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26277. {
  26278. USE_OPLINE
  26279. zval *container;
  26280. SAVE_OPLINE();
  26281. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26282. zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  26283. if (IS_VAR == IS_VAR) {
  26284. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  26285. }
  26286. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26287. }
  26288. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26289. {
  26290. USE_OPLINE
  26291. zval *property, *container, *result;
  26292. SAVE_OPLINE();
  26293. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26294. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26295. result = EX_VAR(opline->result.var);
  26296. zend_fetch_property_address(
  26297. result, container, IS_VAR, property, IS_CV,
  26298. ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  26299. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 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_RW_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(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);
  26314. if (IS_VAR == IS_VAR) {
  26315. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  26316. }
  26317. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26318. }
  26319. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26320. {
  26321. #if 0
  26322. USE_OPLINE
  26323. #endif
  26324. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  26325. /* Behave like FETCH_OBJ_W */
  26326. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  26327. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26328. }
  26329. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26330. } else {
  26331. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26332. }
  26333. }
  26334. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26335. {
  26336. USE_OPLINE
  26337. zval *container, *property, *result;
  26338. SAVE_OPLINE();
  26339. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26340. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26341. result = EX_VAR(opline->result.var);
  26342. 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);
  26343. if (IS_VAR == IS_VAR) {
  26344. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  26345. }
  26346. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26347. }
  26348. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26349. {
  26350. USE_OPLINE
  26351. zval *container, *dim;
  26352. SAVE_OPLINE();
  26353. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26354. dim = EX_VAR(opline->op2.var);
  26355. if (IS_VAR == IS_VAR
  26356. && Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
  26357. && UNEXPECTED(!Z_ISREF_P(container))
  26358. ) {
  26359. zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
  26360. zend_fetch_dimension_address_LIST_r(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
  26361. } else {
  26362. zend_fetch_dimension_address_W(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
  26363. }
  26364. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26365. }
  26366. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26367. {
  26368. USE_OPLINE
  26369. zval *object, *value, tmp;
  26370. zend_object *zobj;
  26371. zend_string *name, *tmp_name;
  26372. SAVE_OPLINE();
  26373. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26374. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  26375. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  26376. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  26377. object = Z_REFVAL_P(object);
  26378. goto assign_object;
  26379. }
  26380. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  26381. value = &EG(uninitialized_zval);
  26382. goto free_and_exit_assign_obj;
  26383. }
  26384. assign_object:
  26385. zobj = Z_OBJ_P(object);
  26386. if (IS_CV == IS_CONST) {
  26387. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  26388. void **cache_slot = CACHE_ADDR(opline->extended_value);
  26389. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  26390. zend_object *zobj = Z_OBJ_P(object);
  26391. zval *property_val;
  26392. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  26393. property_val = OBJ_PROP(zobj, prop_offset);
  26394. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  26395. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  26396. if (UNEXPECTED(prop_info != NULL)) {
  26397. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  26398. goto free_and_exit_assign_obj;
  26399. } else {
  26400. fast_assign_obj:
  26401. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  26402. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26403. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26404. }
  26405. goto exit_assign_obj;
  26406. }
  26407. }
  26408. } else {
  26409. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  26410. if (EXPECTED(zobj->properties != NULL)) {
  26411. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  26412. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  26413. GC_DELREF(zobj->properties);
  26414. }
  26415. zobj->properties = zend_array_dup(zobj->properties);
  26416. }
  26417. property_val = zend_hash_find_known_hash(zobj->properties, name);
  26418. if (property_val) {
  26419. goto fast_assign_obj;
  26420. }
  26421. }
  26422. if (!zobj->ce->__set) {
  26423. if (EXPECTED(zobj->properties == NULL)) {
  26424. rebuild_object_properties(zobj);
  26425. }
  26426. if (IS_CONST == IS_CONST) {
  26427. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  26428. Z_ADDREF_P(value);
  26429. }
  26430. } else if (IS_CONST != IS_TMP_VAR) {
  26431. if (Z_ISREF_P(value)) {
  26432. if (IS_CONST == IS_VAR) {
  26433. zend_reference *ref = Z_REF_P(value);
  26434. if (GC_DELREF(ref) == 0) {
  26435. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  26436. efree_size(ref, sizeof(zend_reference));
  26437. value = &tmp;
  26438. } else {
  26439. value = Z_REFVAL_P(value);
  26440. Z_TRY_ADDREF_P(value);
  26441. }
  26442. } else {
  26443. value = Z_REFVAL_P(value);
  26444. Z_TRY_ADDREF_P(value);
  26445. }
  26446. } else if (IS_CONST == IS_CV) {
  26447. Z_TRY_ADDREF_P(value);
  26448. }
  26449. }
  26450. zend_hash_add_new(zobj->properties, name, value);
  26451. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26452. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26453. }
  26454. goto exit_assign_obj;
  26455. }
  26456. }
  26457. }
  26458. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  26459. } else {
  26460. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  26461. if (UNEXPECTED(!name)) {
  26462. UNDEF_RESULT();
  26463. goto exit_assign_obj;
  26464. }
  26465. }
  26466. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  26467. ZVAL_DEREF(value);
  26468. }
  26469. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  26470. if (IS_CV != IS_CONST) {
  26471. zend_tmp_string_release(tmp_name);
  26472. }
  26473. free_and_exit_assign_obj:
  26474. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26475. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  26476. }
  26477. exit_assign_obj:
  26478. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26479. /* assign_obj has two opcodes! */
  26480. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  26481. }
  26482. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  26483. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26484. {
  26485. USE_OPLINE
  26486. zval *object, *value, tmp;
  26487. zend_object *zobj;
  26488. zend_string *name, *tmp_name;
  26489. SAVE_OPLINE();
  26490. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26491. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  26492. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  26493. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  26494. object = Z_REFVAL_P(object);
  26495. goto assign_object;
  26496. }
  26497. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  26498. value = &EG(uninitialized_zval);
  26499. goto free_and_exit_assign_obj;
  26500. }
  26501. assign_object:
  26502. zobj = Z_OBJ_P(object);
  26503. if (IS_CV == IS_CONST) {
  26504. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  26505. void **cache_slot = CACHE_ADDR(opline->extended_value);
  26506. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  26507. zend_object *zobj = Z_OBJ_P(object);
  26508. zval *property_val;
  26509. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  26510. property_val = OBJ_PROP(zobj, prop_offset);
  26511. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  26512. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  26513. if (UNEXPECTED(prop_info != NULL)) {
  26514. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  26515. goto free_and_exit_assign_obj;
  26516. } else {
  26517. fast_assign_obj:
  26518. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  26519. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26520. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26521. }
  26522. goto exit_assign_obj;
  26523. }
  26524. }
  26525. } else {
  26526. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  26527. if (EXPECTED(zobj->properties != NULL)) {
  26528. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  26529. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  26530. GC_DELREF(zobj->properties);
  26531. }
  26532. zobj->properties = zend_array_dup(zobj->properties);
  26533. }
  26534. property_val = zend_hash_find_known_hash(zobj->properties, name);
  26535. if (property_val) {
  26536. goto fast_assign_obj;
  26537. }
  26538. }
  26539. if (!zobj->ce->__set) {
  26540. if (EXPECTED(zobj->properties == NULL)) {
  26541. rebuild_object_properties(zobj);
  26542. }
  26543. if (IS_TMP_VAR == IS_CONST) {
  26544. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  26545. Z_ADDREF_P(value);
  26546. }
  26547. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  26548. if (Z_ISREF_P(value)) {
  26549. if (IS_TMP_VAR == IS_VAR) {
  26550. zend_reference *ref = Z_REF_P(value);
  26551. if (GC_DELREF(ref) == 0) {
  26552. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  26553. efree_size(ref, sizeof(zend_reference));
  26554. value = &tmp;
  26555. } else {
  26556. value = Z_REFVAL_P(value);
  26557. Z_TRY_ADDREF_P(value);
  26558. }
  26559. } else {
  26560. value = Z_REFVAL_P(value);
  26561. Z_TRY_ADDREF_P(value);
  26562. }
  26563. } else if (IS_TMP_VAR == IS_CV) {
  26564. Z_TRY_ADDREF_P(value);
  26565. }
  26566. }
  26567. zend_hash_add_new(zobj->properties, name, value);
  26568. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26569. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26570. }
  26571. goto exit_assign_obj;
  26572. }
  26573. }
  26574. }
  26575. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  26576. } else {
  26577. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  26578. if (UNEXPECTED(!name)) {
  26579. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  26580. UNDEF_RESULT();
  26581. goto exit_assign_obj;
  26582. }
  26583. }
  26584. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  26585. ZVAL_DEREF(value);
  26586. }
  26587. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  26588. if (IS_CV != IS_CONST) {
  26589. zend_tmp_string_release(tmp_name);
  26590. }
  26591. free_and_exit_assign_obj:
  26592. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26593. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  26594. }
  26595. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  26596. exit_assign_obj:
  26597. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26598. /* assign_obj has two opcodes! */
  26599. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  26600. }
  26601. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  26602. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26603. {
  26604. USE_OPLINE
  26605. zval *object, *value, tmp;
  26606. zend_object *zobj;
  26607. zend_string *name, *tmp_name;
  26608. SAVE_OPLINE();
  26609. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26610. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  26611. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  26612. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  26613. object = Z_REFVAL_P(object);
  26614. goto assign_object;
  26615. }
  26616. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  26617. value = &EG(uninitialized_zval);
  26618. goto free_and_exit_assign_obj;
  26619. }
  26620. assign_object:
  26621. zobj = Z_OBJ_P(object);
  26622. if (IS_CV == IS_CONST) {
  26623. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  26624. void **cache_slot = CACHE_ADDR(opline->extended_value);
  26625. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  26626. zend_object *zobj = Z_OBJ_P(object);
  26627. zval *property_val;
  26628. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  26629. property_val = OBJ_PROP(zobj, prop_offset);
  26630. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  26631. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  26632. if (UNEXPECTED(prop_info != NULL)) {
  26633. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  26634. goto free_and_exit_assign_obj;
  26635. } else {
  26636. fast_assign_obj:
  26637. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  26638. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26639. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26640. }
  26641. goto exit_assign_obj;
  26642. }
  26643. }
  26644. } else {
  26645. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  26646. if (EXPECTED(zobj->properties != NULL)) {
  26647. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  26648. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  26649. GC_DELREF(zobj->properties);
  26650. }
  26651. zobj->properties = zend_array_dup(zobj->properties);
  26652. }
  26653. property_val = zend_hash_find_known_hash(zobj->properties, name);
  26654. if (property_val) {
  26655. goto fast_assign_obj;
  26656. }
  26657. }
  26658. if (!zobj->ce->__set) {
  26659. if (EXPECTED(zobj->properties == NULL)) {
  26660. rebuild_object_properties(zobj);
  26661. }
  26662. if (IS_VAR == IS_CONST) {
  26663. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  26664. Z_ADDREF_P(value);
  26665. }
  26666. } else if (IS_VAR != IS_TMP_VAR) {
  26667. if (Z_ISREF_P(value)) {
  26668. if (IS_VAR == IS_VAR) {
  26669. zend_reference *ref = Z_REF_P(value);
  26670. if (GC_DELREF(ref) == 0) {
  26671. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  26672. efree_size(ref, sizeof(zend_reference));
  26673. value = &tmp;
  26674. } else {
  26675. value = Z_REFVAL_P(value);
  26676. Z_TRY_ADDREF_P(value);
  26677. }
  26678. } else {
  26679. value = Z_REFVAL_P(value);
  26680. Z_TRY_ADDREF_P(value);
  26681. }
  26682. } else if (IS_VAR == IS_CV) {
  26683. Z_TRY_ADDREF_P(value);
  26684. }
  26685. }
  26686. zend_hash_add_new(zobj->properties, name, value);
  26687. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26688. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26689. }
  26690. goto exit_assign_obj;
  26691. }
  26692. }
  26693. }
  26694. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  26695. } else {
  26696. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  26697. if (UNEXPECTED(!name)) {
  26698. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  26699. UNDEF_RESULT();
  26700. goto exit_assign_obj;
  26701. }
  26702. }
  26703. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  26704. ZVAL_DEREF(value);
  26705. }
  26706. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  26707. if (IS_CV != IS_CONST) {
  26708. zend_tmp_string_release(tmp_name);
  26709. }
  26710. free_and_exit_assign_obj:
  26711. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26712. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  26713. }
  26714. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  26715. exit_assign_obj:
  26716. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26717. /* assign_obj has two opcodes! */
  26718. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  26719. }
  26720. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  26721. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26722. {
  26723. USE_OPLINE
  26724. zval *object, *value, tmp;
  26725. zend_object *zobj;
  26726. zend_string *name, *tmp_name;
  26727. SAVE_OPLINE();
  26728. object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26729. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  26730. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  26731. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  26732. object = Z_REFVAL_P(object);
  26733. goto assign_object;
  26734. }
  26735. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  26736. value = &EG(uninitialized_zval);
  26737. goto free_and_exit_assign_obj;
  26738. }
  26739. assign_object:
  26740. zobj = Z_OBJ_P(object);
  26741. if (IS_CV == IS_CONST) {
  26742. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  26743. void **cache_slot = CACHE_ADDR(opline->extended_value);
  26744. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  26745. zend_object *zobj = Z_OBJ_P(object);
  26746. zval *property_val;
  26747. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  26748. property_val = OBJ_PROP(zobj, prop_offset);
  26749. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  26750. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  26751. if (UNEXPECTED(prop_info != NULL)) {
  26752. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  26753. goto free_and_exit_assign_obj;
  26754. } else {
  26755. fast_assign_obj:
  26756. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  26757. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26758. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26759. }
  26760. goto exit_assign_obj;
  26761. }
  26762. }
  26763. } else {
  26764. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  26765. if (EXPECTED(zobj->properties != NULL)) {
  26766. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  26767. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  26768. GC_DELREF(zobj->properties);
  26769. }
  26770. zobj->properties = zend_array_dup(zobj->properties);
  26771. }
  26772. property_val = zend_hash_find_known_hash(zobj->properties, name);
  26773. if (property_val) {
  26774. goto fast_assign_obj;
  26775. }
  26776. }
  26777. if (!zobj->ce->__set) {
  26778. if (EXPECTED(zobj->properties == NULL)) {
  26779. rebuild_object_properties(zobj);
  26780. }
  26781. if (IS_CV == IS_CONST) {
  26782. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  26783. Z_ADDREF_P(value);
  26784. }
  26785. } else if (IS_CV != IS_TMP_VAR) {
  26786. if (Z_ISREF_P(value)) {
  26787. if (IS_CV == IS_VAR) {
  26788. zend_reference *ref = Z_REF_P(value);
  26789. if (GC_DELREF(ref) == 0) {
  26790. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  26791. efree_size(ref, sizeof(zend_reference));
  26792. value = &tmp;
  26793. } else {
  26794. value = Z_REFVAL_P(value);
  26795. Z_TRY_ADDREF_P(value);
  26796. }
  26797. } else {
  26798. value = Z_REFVAL_P(value);
  26799. Z_TRY_ADDREF_P(value);
  26800. }
  26801. } else if (IS_CV == IS_CV) {
  26802. Z_TRY_ADDREF_P(value);
  26803. }
  26804. }
  26805. zend_hash_add_new(zobj->properties, name, value);
  26806. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26807. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26808. }
  26809. goto exit_assign_obj;
  26810. }
  26811. }
  26812. }
  26813. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  26814. } else {
  26815. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  26816. if (UNEXPECTED(!name)) {
  26817. UNDEF_RESULT();
  26818. goto exit_assign_obj;
  26819. }
  26820. }
  26821. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  26822. ZVAL_DEREF(value);
  26823. }
  26824. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  26825. if (IS_CV != IS_CONST) {
  26826. zend_tmp_string_release(tmp_name);
  26827. }
  26828. free_and_exit_assign_obj:
  26829. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26830. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  26831. }
  26832. exit_assign_obj:
  26833. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26834. /* assign_obj has two opcodes! */
  26835. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  26836. }
  26837. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  26838. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26839. {
  26840. USE_OPLINE
  26841. zval *object_ptr, *orig_object_ptr;
  26842. zval *value;
  26843. zval *variable_ptr;
  26844. zval *dim;
  26845. SAVE_OPLINE();
  26846. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26847. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  26848. try_assign_dim_array:
  26849. SEPARATE_ARRAY(object_ptr);
  26850. if (IS_CV == IS_UNUSED) {
  26851. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  26852. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  26853. HashTable *ht = Z_ARRVAL_P(object_ptr);
  26854. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  26855. GC_ADDREF(ht);
  26856. }
  26857. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  26858. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  26859. zend_array_destroy(ht);
  26860. goto assign_dim_error;
  26861. }
  26862. }
  26863. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  26864. ZVAL_DEREF(value);
  26865. }
  26866. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  26867. if (UNEXPECTED(value == NULL)) {
  26868. zend_cannot_add_element();
  26869. goto assign_dim_error;
  26870. } else if (IS_CONST == IS_CV) {
  26871. if (Z_REFCOUNTED_P(value)) {
  26872. Z_ADDREF_P(value);
  26873. }
  26874. } else if (IS_CONST == IS_VAR) {
  26875. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  26876. if (Z_ISREF_P(free_op_data)) {
  26877. if (Z_REFCOUNTED_P(value)) {
  26878. Z_ADDREF_P(value);
  26879. }
  26880. zval_ptr_dtor_nogc(free_op_data);
  26881. }
  26882. } else if (IS_CONST == IS_CONST) {
  26883. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  26884. Z_ADDREF_P(value);
  26885. }
  26886. }
  26887. } else {
  26888. dim = EX_VAR(opline->op2.var);
  26889. if (IS_CV == IS_CONST) {
  26890. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  26891. } else {
  26892. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  26893. }
  26894. if (UNEXPECTED(variable_ptr == NULL)) {
  26895. goto assign_dim_error;
  26896. }
  26897. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  26898. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  26899. }
  26900. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26901. ZVAL_COPY(EX_VAR(opline->result.var), value);
  26902. }
  26903. } else {
  26904. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  26905. object_ptr = Z_REFVAL_P(object_ptr);
  26906. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  26907. goto try_assign_dim_array;
  26908. }
  26909. }
  26910. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  26911. zend_object *obj = Z_OBJ_P(object_ptr);
  26912. GC_ADDREF(obj);
  26913. dim = EX_VAR(opline->op2.var);
  26914. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  26915. dim = ZVAL_UNDEFINED_OP2();
  26916. } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  26917. dim++;
  26918. }
  26919. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  26920. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  26921. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  26922. } else if (IS_CONST & (IS_CV|IS_VAR)) {
  26923. ZVAL_DEREF(value);
  26924. }
  26925. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  26926. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  26927. zend_objects_store_del(obj);
  26928. }
  26929. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  26930. if (IS_CV == IS_UNUSED) {
  26931. zend_use_new_element_for_string();
  26932. UNDEF_RESULT();
  26933. } else {
  26934. dim = EX_VAR(opline->op2.var);
  26935. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  26936. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  26937. }
  26938. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  26939. if (Z_ISREF_P(orig_object_ptr)
  26940. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  26941. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  26942. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26943. UNDEF_RESULT();
  26944. } else {
  26945. HashTable *ht = zend_new_array(8);
  26946. zend_uchar old_type = Z_TYPE_P(object_ptr);
  26947. ZVAL_ARR(object_ptr, ht);
  26948. if (UNEXPECTED(old_type == IS_FALSE)) {
  26949. GC_ADDREF(ht);
  26950. zend_false_to_array_deprecated();
  26951. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  26952. zend_array_destroy(ht);
  26953. goto assign_dim_error;
  26954. }
  26955. }
  26956. goto try_assign_dim_array;
  26957. }
  26958. } else {
  26959. zend_use_scalar_as_array();
  26960. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26961. assign_dim_error:
  26962. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26963. ZVAL_NULL(EX_VAR(opline->result.var));
  26964. }
  26965. }
  26966. }
  26967. if (IS_CV != IS_UNUSED) {
  26968. }
  26969. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  26970. /* assign_dim has two opcodes! */
  26971. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  26972. }
  26973. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26974. {
  26975. USE_OPLINE
  26976. zval *object_ptr, *orig_object_ptr;
  26977. zval *value;
  26978. zval *variable_ptr;
  26979. zval *dim;
  26980. SAVE_OPLINE();
  26981. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  26982. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  26983. try_assign_dim_array:
  26984. SEPARATE_ARRAY(object_ptr);
  26985. if (IS_CV == IS_UNUSED) {
  26986. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  26987. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  26988. HashTable *ht = Z_ARRVAL_P(object_ptr);
  26989. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  26990. GC_ADDREF(ht);
  26991. }
  26992. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  26993. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  26994. zend_array_destroy(ht);
  26995. goto assign_dim_error;
  26996. }
  26997. }
  26998. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  26999. ZVAL_DEREF(value);
  27000. }
  27001. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  27002. if (UNEXPECTED(value == NULL)) {
  27003. zend_cannot_add_element();
  27004. goto assign_dim_error;
  27005. } else if (IS_TMP_VAR == IS_CV) {
  27006. if (Z_REFCOUNTED_P(value)) {
  27007. Z_ADDREF_P(value);
  27008. }
  27009. } else if (IS_TMP_VAR == IS_VAR) {
  27010. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  27011. if (Z_ISREF_P(free_op_data)) {
  27012. if (Z_REFCOUNTED_P(value)) {
  27013. Z_ADDREF_P(value);
  27014. }
  27015. zval_ptr_dtor_nogc(free_op_data);
  27016. }
  27017. } else if (IS_TMP_VAR == IS_CONST) {
  27018. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  27019. Z_ADDREF_P(value);
  27020. }
  27021. }
  27022. } else {
  27023. dim = EX_VAR(opline->op2.var);
  27024. if (IS_CV == IS_CONST) {
  27025. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  27026. } else {
  27027. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  27028. }
  27029. if (UNEXPECTED(variable_ptr == NULL)) {
  27030. goto assign_dim_error;
  27031. }
  27032. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  27033. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  27034. }
  27035. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27036. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27037. }
  27038. } else {
  27039. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  27040. object_ptr = Z_REFVAL_P(object_ptr);
  27041. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  27042. goto try_assign_dim_array;
  27043. }
  27044. }
  27045. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  27046. zend_object *obj = Z_OBJ_P(object_ptr);
  27047. GC_ADDREF(obj);
  27048. dim = EX_VAR(opline->op2.var);
  27049. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  27050. dim = ZVAL_UNDEFINED_OP2();
  27051. } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  27052. dim++;
  27053. }
  27054. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  27055. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  27056. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  27057. } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
  27058. ZVAL_DEREF(value);
  27059. }
  27060. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  27061. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27062. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  27063. zend_objects_store_del(obj);
  27064. }
  27065. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  27066. if (IS_CV == IS_UNUSED) {
  27067. zend_use_new_element_for_string();
  27068. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27069. UNDEF_RESULT();
  27070. } else {
  27071. dim = EX_VAR(opline->op2.var);
  27072. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  27073. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  27074. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27075. }
  27076. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  27077. if (Z_ISREF_P(orig_object_ptr)
  27078. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  27079. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  27080. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27081. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27082. UNDEF_RESULT();
  27083. } else {
  27084. HashTable *ht = zend_new_array(8);
  27085. zend_uchar old_type = Z_TYPE_P(object_ptr);
  27086. ZVAL_ARR(object_ptr, ht);
  27087. if (UNEXPECTED(old_type == IS_FALSE)) {
  27088. GC_ADDREF(ht);
  27089. zend_false_to_array_deprecated();
  27090. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  27091. zend_array_destroy(ht);
  27092. goto assign_dim_error;
  27093. }
  27094. }
  27095. goto try_assign_dim_array;
  27096. }
  27097. } else {
  27098. zend_use_scalar_as_array();
  27099. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27100. assign_dim_error:
  27101. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27102. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27103. ZVAL_NULL(EX_VAR(opline->result.var));
  27104. }
  27105. }
  27106. }
  27107. if (IS_CV != IS_UNUSED) {
  27108. }
  27109. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27110. /* assign_dim has two opcodes! */
  27111. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  27112. }
  27113. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27114. {
  27115. USE_OPLINE
  27116. zval *object_ptr, *orig_object_ptr;
  27117. zval *value;
  27118. zval *variable_ptr;
  27119. zval *dim;
  27120. SAVE_OPLINE();
  27121. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27122. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  27123. try_assign_dim_array:
  27124. SEPARATE_ARRAY(object_ptr);
  27125. if (IS_CV == IS_UNUSED) {
  27126. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  27127. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  27128. HashTable *ht = Z_ARRVAL_P(object_ptr);
  27129. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  27130. GC_ADDREF(ht);
  27131. }
  27132. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  27133. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  27134. zend_array_destroy(ht);
  27135. goto assign_dim_error;
  27136. }
  27137. }
  27138. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  27139. ZVAL_DEREF(value);
  27140. }
  27141. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  27142. if (UNEXPECTED(value == NULL)) {
  27143. zend_cannot_add_element();
  27144. goto assign_dim_error;
  27145. } else if (IS_VAR == IS_CV) {
  27146. if (Z_REFCOUNTED_P(value)) {
  27147. Z_ADDREF_P(value);
  27148. }
  27149. } else if (IS_VAR == IS_VAR) {
  27150. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  27151. if (Z_ISREF_P(free_op_data)) {
  27152. if (Z_REFCOUNTED_P(value)) {
  27153. Z_ADDREF_P(value);
  27154. }
  27155. zval_ptr_dtor_nogc(free_op_data);
  27156. }
  27157. } else if (IS_VAR == IS_CONST) {
  27158. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  27159. Z_ADDREF_P(value);
  27160. }
  27161. }
  27162. } else {
  27163. dim = EX_VAR(opline->op2.var);
  27164. if (IS_CV == IS_CONST) {
  27165. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  27166. } else {
  27167. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  27168. }
  27169. if (UNEXPECTED(variable_ptr == NULL)) {
  27170. goto assign_dim_error;
  27171. }
  27172. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  27173. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  27174. }
  27175. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27176. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27177. }
  27178. } else {
  27179. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  27180. object_ptr = Z_REFVAL_P(object_ptr);
  27181. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  27182. goto try_assign_dim_array;
  27183. }
  27184. }
  27185. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  27186. zend_object *obj = Z_OBJ_P(object_ptr);
  27187. GC_ADDREF(obj);
  27188. dim = EX_VAR(opline->op2.var);
  27189. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  27190. dim = ZVAL_UNDEFINED_OP2();
  27191. } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  27192. dim++;
  27193. }
  27194. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  27195. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  27196. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  27197. } else if (IS_VAR & (IS_CV|IS_VAR)) {
  27198. ZVAL_DEREF(value);
  27199. }
  27200. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  27201. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27202. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  27203. zend_objects_store_del(obj);
  27204. }
  27205. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  27206. if (IS_CV == IS_UNUSED) {
  27207. zend_use_new_element_for_string();
  27208. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27209. UNDEF_RESULT();
  27210. } else {
  27211. dim = EX_VAR(opline->op2.var);
  27212. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  27213. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  27214. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27215. }
  27216. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  27217. if (Z_ISREF_P(orig_object_ptr)
  27218. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  27219. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  27220. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27221. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27222. UNDEF_RESULT();
  27223. } else {
  27224. HashTable *ht = zend_new_array(8);
  27225. zend_uchar old_type = Z_TYPE_P(object_ptr);
  27226. ZVAL_ARR(object_ptr, ht);
  27227. if (UNEXPECTED(old_type == IS_FALSE)) {
  27228. GC_ADDREF(ht);
  27229. zend_false_to_array_deprecated();
  27230. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  27231. zend_array_destroy(ht);
  27232. goto assign_dim_error;
  27233. }
  27234. }
  27235. goto try_assign_dim_array;
  27236. }
  27237. } else {
  27238. zend_use_scalar_as_array();
  27239. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27240. assign_dim_error:
  27241. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  27242. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27243. ZVAL_NULL(EX_VAR(opline->result.var));
  27244. }
  27245. }
  27246. }
  27247. if (IS_CV != IS_UNUSED) {
  27248. }
  27249. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27250. /* assign_dim has two opcodes! */
  27251. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  27252. }
  27253. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27254. {
  27255. USE_OPLINE
  27256. zval *object_ptr, *orig_object_ptr;
  27257. zval *value;
  27258. zval *variable_ptr;
  27259. zval *dim;
  27260. SAVE_OPLINE();
  27261. orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27262. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  27263. try_assign_dim_array:
  27264. SEPARATE_ARRAY(object_ptr);
  27265. if (IS_CV == IS_UNUSED) {
  27266. value = EX_VAR((opline+1)->op1.var);
  27267. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  27268. HashTable *ht = Z_ARRVAL_P(object_ptr);
  27269. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  27270. GC_ADDREF(ht);
  27271. }
  27272. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  27273. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  27274. zend_array_destroy(ht);
  27275. goto assign_dim_error;
  27276. }
  27277. }
  27278. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  27279. ZVAL_DEREF(value);
  27280. }
  27281. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  27282. if (UNEXPECTED(value == NULL)) {
  27283. zend_cannot_add_element();
  27284. goto assign_dim_error;
  27285. } else if (IS_CV == IS_CV) {
  27286. if (Z_REFCOUNTED_P(value)) {
  27287. Z_ADDREF_P(value);
  27288. }
  27289. } else if (IS_CV == IS_VAR) {
  27290. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  27291. if (Z_ISREF_P(free_op_data)) {
  27292. if (Z_REFCOUNTED_P(value)) {
  27293. Z_ADDREF_P(value);
  27294. }
  27295. zval_ptr_dtor_nogc(free_op_data);
  27296. }
  27297. } else if (IS_CV == IS_CONST) {
  27298. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  27299. Z_ADDREF_P(value);
  27300. }
  27301. }
  27302. } else {
  27303. dim = EX_VAR(opline->op2.var);
  27304. if (IS_CV == IS_CONST) {
  27305. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  27306. } else {
  27307. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  27308. }
  27309. if (UNEXPECTED(variable_ptr == NULL)) {
  27310. goto assign_dim_error;
  27311. }
  27312. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  27313. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  27314. }
  27315. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27316. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27317. }
  27318. } else {
  27319. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  27320. object_ptr = Z_REFVAL_P(object_ptr);
  27321. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  27322. goto try_assign_dim_array;
  27323. }
  27324. }
  27325. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  27326. zend_object *obj = Z_OBJ_P(object_ptr);
  27327. GC_ADDREF(obj);
  27328. dim = EX_VAR(opline->op2.var);
  27329. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  27330. dim = ZVAL_UNDEFINED_OP2();
  27331. } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  27332. dim++;
  27333. }
  27334. value = EX_VAR((opline+1)->op1.var);
  27335. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  27336. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  27337. } else if (IS_CV & (IS_CV|IS_VAR)) {
  27338. ZVAL_DEREF(value);
  27339. }
  27340. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  27341. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  27342. zend_objects_store_del(obj);
  27343. }
  27344. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  27345. if (IS_CV == IS_UNUSED) {
  27346. zend_use_new_element_for_string();
  27347. UNDEF_RESULT();
  27348. } else {
  27349. dim = EX_VAR(opline->op2.var);
  27350. value = EX_VAR((opline+1)->op1.var);
  27351. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  27352. }
  27353. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  27354. if (Z_ISREF_P(orig_object_ptr)
  27355. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  27356. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  27357. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27358. UNDEF_RESULT();
  27359. } else {
  27360. HashTable *ht = zend_new_array(8);
  27361. zend_uchar old_type = Z_TYPE_P(object_ptr);
  27362. ZVAL_ARR(object_ptr, ht);
  27363. if (UNEXPECTED(old_type == IS_FALSE)) {
  27364. GC_ADDREF(ht);
  27365. zend_false_to_array_deprecated();
  27366. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  27367. zend_array_destroy(ht);
  27368. goto assign_dim_error;
  27369. }
  27370. }
  27371. goto try_assign_dim_array;
  27372. }
  27373. } else {
  27374. zend_use_scalar_as_array();
  27375. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27376. assign_dim_error:
  27377. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27378. ZVAL_NULL(EX_VAR(opline->result.var));
  27379. }
  27380. }
  27381. }
  27382. if (IS_CV != IS_UNUSED) {
  27383. }
  27384. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27385. /* assign_dim has two opcodes! */
  27386. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  27387. }
  27388. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27389. {
  27390. USE_OPLINE
  27391. zval *value;
  27392. zval *variable_ptr;
  27393. SAVE_OPLINE();
  27394. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27395. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27396. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  27397. if (UNEXPECTED(0)) {
  27398. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27399. }
  27400. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27401. /* zend_assign_to_variable() always takes care of op2, never free it! */
  27402. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27403. }
  27404. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27405. {
  27406. USE_OPLINE
  27407. zval *value;
  27408. zval *variable_ptr;
  27409. SAVE_OPLINE();
  27410. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27411. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27412. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  27413. if (UNEXPECTED(1)) {
  27414. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27415. }
  27416. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27417. /* zend_assign_to_variable() always takes care of op2, never free it! */
  27418. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27419. }
  27420. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27421. {
  27422. USE_OPLINE
  27423. zval *variable_ptr;
  27424. zval *value_ptr;
  27425. SAVE_OPLINE();
  27426. value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
  27427. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27428. if (IS_VAR == IS_VAR &&
  27429. UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
  27430. zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
  27431. variable_ptr = &EG(uninitialized_zval);
  27432. } else if (IS_CV == IS_VAR &&
  27433. opline->extended_value == ZEND_RETURNS_FUNCTION &&
  27434. UNEXPECTED(!Z_ISREF_P(value_ptr))) {
  27435. variable_ptr = zend_wrong_assign_to_variable_reference(
  27436. variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27437. } else {
  27438. zend_assign_to_variable_reference(variable_ptr, value_ptr);
  27439. }
  27440. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27441. ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
  27442. }
  27443. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27444. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27445. }
  27446. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27447. {
  27448. USE_OPLINE
  27449. zval *property, *container, *value_ptr;
  27450. SAVE_OPLINE();
  27451. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27452. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27453. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  27454. if (1) {
  27455. if (IS_VAR == IS_UNUSED) {
  27456. if (IS_CV == IS_CONST) {
  27457. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27458. } else {
  27459. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27460. }
  27461. } else {
  27462. if (IS_CV == IS_CONST) {
  27463. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27464. } else {
  27465. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27466. }
  27467. }
  27468. } else {
  27469. zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27470. }
  27471. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27472. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  27473. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  27474. }
  27475. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  27476. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27477. {
  27478. USE_OPLINE
  27479. zval *property, *container, *value_ptr;
  27480. SAVE_OPLINE();
  27481. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27482. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27483. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  27484. if (1) {
  27485. if (IS_VAR == IS_UNUSED) {
  27486. if (IS_CV == IS_CONST) {
  27487. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27488. } else {
  27489. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27490. }
  27491. } else {
  27492. if (IS_CV == IS_CONST) {
  27493. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27494. } else {
  27495. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27496. }
  27497. }
  27498. } else {
  27499. zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  27500. }
  27501. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27502. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  27503. }
  27504. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  27505. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27506. {
  27507. USE_OPLINE
  27508. zval *function_name;
  27509. zend_class_entry *ce;
  27510. uint32_t call_info;
  27511. zend_function *fbc;
  27512. zend_execute_data *call;
  27513. SAVE_OPLINE();
  27514. if (IS_VAR == IS_CONST) {
  27515. /* no function found. try a static method in class */
  27516. ce = CACHED_PTR(opline->result.num);
  27517. if (UNEXPECTED(ce == NULL)) {
  27518. 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);
  27519. if (UNEXPECTED(ce == NULL)) {
  27520. HANDLE_EXCEPTION();
  27521. }
  27522. if (IS_CV != IS_CONST) {
  27523. CACHE_PTR(opline->result.num, ce);
  27524. }
  27525. }
  27526. } else if (IS_VAR == IS_UNUSED) {
  27527. ce = zend_fetch_class(NULL, opline->op1.num);
  27528. if (UNEXPECTED(ce == NULL)) {
  27529. HANDLE_EXCEPTION();
  27530. }
  27531. } else {
  27532. ce = Z_CE_P(EX_VAR(opline->op1.var));
  27533. }
  27534. if (IS_VAR == IS_CONST &&
  27535. IS_CV == IS_CONST &&
  27536. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  27537. /* nothing to do */
  27538. } else if (IS_VAR != IS_CONST &&
  27539. IS_CV == IS_CONST &&
  27540. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  27541. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  27542. } else if (IS_CV != IS_UNUSED) {
  27543. function_name = EX_VAR(opline->op2.var);
  27544. if (IS_CV != IS_CONST) {
  27545. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  27546. do {
  27547. if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  27548. function_name = Z_REFVAL_P(function_name);
  27549. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  27550. break;
  27551. }
  27552. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  27553. ZVAL_UNDEFINED_OP2();
  27554. if (UNEXPECTED(EG(exception) != NULL)) {
  27555. HANDLE_EXCEPTION();
  27556. }
  27557. }
  27558. zend_throw_error(NULL, "Method name must be a string");
  27559. HANDLE_EXCEPTION();
  27560. } while (0);
  27561. }
  27562. }
  27563. if (ce->get_static_method) {
  27564. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  27565. } else {
  27566. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  27567. }
  27568. if (UNEXPECTED(fbc == NULL)) {
  27569. if (EXPECTED(!EG(exception))) {
  27570. zend_undefined_method(ce, Z_STR_P(function_name));
  27571. }
  27572. HANDLE_EXCEPTION();
  27573. }
  27574. if (IS_CV == IS_CONST &&
  27575. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  27576. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  27577. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  27578. }
  27579. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  27580. init_func_run_time_cache(&fbc->op_array);
  27581. }
  27582. if (IS_CV != IS_CONST) {
  27583. }
  27584. } else {
  27585. if (UNEXPECTED(ce->constructor == NULL)) {
  27586. zend_throw_error(NULL, "Cannot call constructor");
  27587. HANDLE_EXCEPTION();
  27588. }
  27589. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  27590. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  27591. HANDLE_EXCEPTION();
  27592. }
  27593. fbc = ce->constructor;
  27594. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  27595. init_func_run_time_cache(&fbc->op_array);
  27596. }
  27597. }
  27598. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  27599. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  27600. ce = (zend_class_entry*)Z_OBJ(EX(This));
  27601. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  27602. } else {
  27603. zend_non_static_method_call(fbc);
  27604. HANDLE_EXCEPTION();
  27605. }
  27606. } else {
  27607. /* previous opcode is ZEND_FETCH_CLASS */
  27608. if (IS_VAR == IS_UNUSED
  27609. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  27610. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  27611. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  27612. ce = Z_OBJCE(EX(This));
  27613. } else {
  27614. ce = Z_CE(EX(This));
  27615. }
  27616. }
  27617. call_info = ZEND_CALL_NESTED_FUNCTION;
  27618. }
  27619. call = zend_vm_stack_push_call_frame(call_info,
  27620. fbc, opline->extended_value, ce);
  27621. call->prev_execute_data = EX(call);
  27622. EX(call) = call;
  27623. ZEND_VM_NEXT_OPCODE();
  27624. }
  27625. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27626. {
  27627. USE_OPLINE
  27628. zval *expr_ptr, new_expr;
  27629. SAVE_OPLINE();
  27630. if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
  27631. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  27632. expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27633. if (Z_ISREF_P(expr_ptr)) {
  27634. Z_ADDREF_P(expr_ptr);
  27635. } else {
  27636. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  27637. }
  27638. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27639. } else {
  27640. expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27641. if (IS_VAR == IS_TMP_VAR) {
  27642. /* pass */
  27643. } else if (IS_VAR == IS_CONST) {
  27644. Z_TRY_ADDREF_P(expr_ptr);
  27645. } else if (IS_VAR == IS_CV) {
  27646. ZVAL_DEREF(expr_ptr);
  27647. Z_TRY_ADDREF_P(expr_ptr);
  27648. } else /* if (IS_VAR == IS_VAR) */ {
  27649. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  27650. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  27651. expr_ptr = Z_REFVAL_P(expr_ptr);
  27652. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  27653. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  27654. expr_ptr = &new_expr;
  27655. efree_size(ref, sizeof(zend_reference));
  27656. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  27657. Z_ADDREF_P(expr_ptr);
  27658. }
  27659. }
  27660. }
  27661. }
  27662. if (IS_CV != IS_UNUSED) {
  27663. zval *offset = EX_VAR(opline->op2.var);
  27664. zend_string *str;
  27665. zend_ulong hval;
  27666. add_again:
  27667. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  27668. str = Z_STR_P(offset);
  27669. if (IS_CV != IS_CONST) {
  27670. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  27671. goto num_index;
  27672. }
  27673. }
  27674. str_index:
  27675. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  27676. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  27677. hval = Z_LVAL_P(offset);
  27678. num_index:
  27679. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  27680. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  27681. offset = Z_REFVAL_P(offset);
  27682. goto add_again;
  27683. } else if (Z_TYPE_P(offset) == IS_NULL) {
  27684. str = ZSTR_EMPTY_ALLOC();
  27685. goto str_index;
  27686. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  27687. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  27688. goto num_index;
  27689. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  27690. hval = 0;
  27691. goto num_index;
  27692. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  27693. hval = 1;
  27694. goto num_index;
  27695. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  27696. zend_use_resource_as_offset(offset);
  27697. hval = Z_RES_HANDLE_P(offset);
  27698. goto num_index;
  27699. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  27700. ZVAL_UNDEFINED_OP2();
  27701. str = ZSTR_EMPTY_ALLOC();
  27702. goto str_index;
  27703. } else {
  27704. zend_illegal_offset();
  27705. zval_ptr_dtor_nogc(expr_ptr);
  27706. }
  27707. } else {
  27708. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  27709. zend_cannot_add_element();
  27710. zval_ptr_dtor_nogc(expr_ptr);
  27711. }
  27712. }
  27713. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27714. }
  27715. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27716. {
  27717. zval *array;
  27718. uint32_t size;
  27719. USE_OPLINE
  27720. array = EX_VAR(opline->result.var);
  27721. if (IS_VAR != IS_UNUSED) {
  27722. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  27723. ZVAL_ARR(array, zend_new_array(size));
  27724. /* Explicitly initialize array as not-packed if flag is set */
  27725. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  27726. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  27727. }
  27728. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27729. } else {
  27730. ZVAL_ARR(array, zend_new_array(0));
  27731. ZEND_VM_NEXT_OPCODE();
  27732. }
  27733. }
  27734. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27735. {
  27736. USE_OPLINE
  27737. zval *container;
  27738. zval *offset;
  27739. zend_ulong hval;
  27740. zend_string *key;
  27741. SAVE_OPLINE();
  27742. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27743. offset = EX_VAR(opline->op2.var);
  27744. do {
  27745. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  27746. HashTable *ht;
  27747. unset_dim_array:
  27748. SEPARATE_ARRAY(container);
  27749. ht = Z_ARRVAL_P(container);
  27750. offset_again:
  27751. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  27752. key = Z_STR_P(offset);
  27753. if (IS_CV != IS_CONST) {
  27754. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  27755. goto num_index_dim;
  27756. }
  27757. }
  27758. str_index_dim:
  27759. ZEND_ASSERT(ht != &EG(symbol_table));
  27760. zend_hash_del(ht, key);
  27761. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  27762. hval = Z_LVAL_P(offset);
  27763. num_index_dim:
  27764. zend_hash_index_del(ht, hval);
  27765. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  27766. offset = Z_REFVAL_P(offset);
  27767. goto offset_again;
  27768. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  27769. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  27770. goto num_index_dim;
  27771. } else if (Z_TYPE_P(offset) == IS_NULL) {
  27772. key = ZSTR_EMPTY_ALLOC();
  27773. goto str_index_dim;
  27774. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  27775. hval = 0;
  27776. goto num_index_dim;
  27777. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  27778. hval = 1;
  27779. goto num_index_dim;
  27780. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  27781. zend_use_resource_as_offset(offset);
  27782. hval = Z_RES_HANDLE_P(offset);
  27783. goto num_index_dim;
  27784. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  27785. ZVAL_UNDEFINED_OP2();
  27786. key = ZSTR_EMPTY_ALLOC();
  27787. goto str_index_dim;
  27788. } else {
  27789. zend_type_error("Illegal offset type in unset");
  27790. }
  27791. break;
  27792. } else if (Z_ISREF_P(container)) {
  27793. container = Z_REFVAL_P(container);
  27794. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  27795. goto unset_dim_array;
  27796. }
  27797. }
  27798. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  27799. container = ZVAL_UNDEFINED_OP1();
  27800. }
  27801. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  27802. offset = ZVAL_UNDEFINED_OP2();
  27803. }
  27804. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  27805. if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  27806. offset++;
  27807. }
  27808. Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
  27809. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  27810. zend_throw_error(NULL, "Cannot unset string offsets");
  27811. } else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
  27812. zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
  27813. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
  27814. zend_false_to_array_deprecated();
  27815. }
  27816. } while (0);
  27817. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27818. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27819. }
  27820. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27821. {
  27822. USE_OPLINE
  27823. zval *container;
  27824. zval *offset;
  27825. zend_string *name, *tmp_name;
  27826. SAVE_OPLINE();
  27827. container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27828. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27829. do {
  27830. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  27831. if (Z_ISREF_P(container)) {
  27832. container = Z_REFVAL_P(container);
  27833. if (Z_TYPE_P(container) != IS_OBJECT) {
  27834. if (IS_VAR == IS_CV
  27835. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  27836. ZVAL_UNDEFINED_OP1();
  27837. }
  27838. break;
  27839. }
  27840. } else {
  27841. break;
  27842. }
  27843. }
  27844. if (IS_CV == IS_CONST) {
  27845. name = Z_STR_P(offset);
  27846. } else {
  27847. name = zval_try_get_tmp_string(offset, &tmp_name);
  27848. if (UNEXPECTED(!name)) {
  27849. break;
  27850. }
  27851. }
  27852. Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  27853. if (IS_CV != IS_CONST) {
  27854. zend_tmp_string_release(tmp_name);
  27855. }
  27856. } while (0);
  27857. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27858. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27859. }
  27860. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27861. {
  27862. USE_OPLINE
  27863. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  27864. SAVE_OPLINE();
  27865. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  27866. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27867. }
  27868. /* Destroy the previously yielded value */
  27869. zval_ptr_dtor(&generator->value);
  27870. /* Destroy the previously yielded key */
  27871. zval_ptr_dtor(&generator->key);
  27872. /* Set the new yielded value */
  27873. if (IS_VAR != IS_UNUSED) {
  27874. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  27875. /* Constants and temporary variables aren't yieldable by reference,
  27876. * but we still allow them with a notice. */
  27877. if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
  27878. zval *value;
  27879. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  27880. value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27881. ZVAL_COPY_VALUE(&generator->value, value);
  27882. if (IS_VAR == IS_CONST) {
  27883. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  27884. Z_ADDREF(generator->value);
  27885. }
  27886. }
  27887. } else {
  27888. zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27889. /* If a function call result is yielded and the function did
  27890. * not return by reference we throw a notice. */
  27891. do {
  27892. if (IS_VAR == IS_VAR) {
  27893. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  27894. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  27895. && !Z_ISREF_P(value_ptr)) {
  27896. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  27897. ZVAL_COPY(&generator->value, value_ptr);
  27898. break;
  27899. }
  27900. }
  27901. if (Z_ISREF_P(value_ptr)) {
  27902. Z_ADDREF_P(value_ptr);
  27903. } else {
  27904. ZVAL_MAKE_REF_EX(value_ptr, 2);
  27905. }
  27906. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  27907. } while (0);
  27908. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27909. }
  27910. } else {
  27911. zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  27912. /* Consts, temporary variables and references need copying */
  27913. if (IS_VAR == IS_CONST) {
  27914. ZVAL_COPY_VALUE(&generator->value, value);
  27915. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  27916. Z_ADDREF(generator->value);
  27917. }
  27918. } else if (IS_VAR == IS_TMP_VAR) {
  27919. ZVAL_COPY_VALUE(&generator->value, value);
  27920. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  27921. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  27922. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  27923. } else {
  27924. ZVAL_COPY_VALUE(&generator->value, value);
  27925. if (IS_VAR == IS_CV) {
  27926. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  27927. }
  27928. }
  27929. }
  27930. } else {
  27931. /* If no value was specified yield null */
  27932. ZVAL_NULL(&generator->value);
  27933. }
  27934. /* Set the new yielded key */
  27935. if (IS_CV != IS_UNUSED) {
  27936. zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  27937. if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  27938. key = Z_REFVAL_P(key);
  27939. }
  27940. ZVAL_COPY(&generator->key, key);
  27941. if (Z_TYPE(generator->key) == IS_LONG
  27942. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  27943. ) {
  27944. generator->largest_used_integer_key = Z_LVAL(generator->key);
  27945. }
  27946. } else {
  27947. /* If no key was specified we use auto-increment keys */
  27948. generator->largest_used_integer_key++;
  27949. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  27950. }
  27951. if (RETURN_VALUE_USED(opline)) {
  27952. /* If the return value of yield is used set the send
  27953. * target and initialize it to NULL */
  27954. generator->send_target = EX_VAR(opline->result.var);
  27955. ZVAL_NULL(generator->send_target);
  27956. } else {
  27957. generator->send_target = NULL;
  27958. }
  27959. /* We increment to the next op, so we are at the correct position when the
  27960. * generator is resumed. */
  27961. ZEND_VM_INC_OPCODE();
  27962. /* The GOTO VM uses a local opline variable. We need to set the opline
  27963. * variable in execute_data so we don't resume at an old position. */
  27964. SAVE_OPLINE();
  27965. ZEND_VM_RETURN();
  27966. }
  27967. 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)
  27968. {
  27969. USE_OPLINE
  27970. zval *array;
  27971. zval *value, *variable_ptr;
  27972. uint32_t value_type;
  27973. HashTable *fe_ht;
  27974. HashPosition pos;
  27975. Bucket *p;
  27976. array = EX_VAR(opline->op1.var);
  27977. SAVE_OPLINE();
  27978. fe_ht = Z_ARRVAL_P(array);
  27979. pos = Z_FE_POS_P(array);
  27980. p = fe_ht->arData + pos;
  27981. while (1) {
  27982. if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
  27983. /* reached end of iteration */
  27984. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  27985. ZEND_VM_CONTINUE();
  27986. }
  27987. pos++;
  27988. value = &p->val;
  27989. value_type = Z_TYPE_INFO_P(value);
  27990. ZEND_ASSERT(value_type != IS_INDIRECT);
  27991. if (EXPECTED(value_type != IS_UNDEF)) {
  27992. break;
  27993. }
  27994. p++;
  27995. }
  27996. Z_FE_POS_P(array) = pos;
  27997. if (0) {
  27998. if (!p->key) {
  27999. ZVAL_LONG(EX_VAR(opline->result.var), p->h);
  28000. } else {
  28001. ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
  28002. }
  28003. }
  28004. variable_ptr = EX_VAR(opline->op2.var);
  28005. zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  28006. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28007. }
  28008. 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)
  28009. {
  28010. USE_OPLINE
  28011. zval *array;
  28012. zval *value, *variable_ptr;
  28013. uint32_t value_type;
  28014. HashTable *fe_ht;
  28015. HashPosition pos;
  28016. Bucket *p;
  28017. array = EX_VAR(opline->op1.var);
  28018. SAVE_OPLINE();
  28019. fe_ht = Z_ARRVAL_P(array);
  28020. pos = Z_FE_POS_P(array);
  28021. p = fe_ht->arData + pos;
  28022. while (1) {
  28023. if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
  28024. /* reached end of iteration */
  28025. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  28026. ZEND_VM_CONTINUE();
  28027. }
  28028. pos++;
  28029. value = &p->val;
  28030. value_type = Z_TYPE_INFO_P(value);
  28031. ZEND_ASSERT(value_type != IS_INDIRECT);
  28032. if (EXPECTED(value_type != IS_UNDEF)) {
  28033. break;
  28034. }
  28035. p++;
  28036. }
  28037. Z_FE_POS_P(array) = pos;
  28038. if (1) {
  28039. if (!p->key) {
  28040. ZVAL_LONG(EX_VAR(opline->result.var), p->h);
  28041. } else {
  28042. ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
  28043. }
  28044. }
  28045. variable_ptr = EX_VAR(opline->op2.var);
  28046. zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  28047. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28048. }
  28049. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28050. {
  28051. USE_OPLINE
  28052. zval *obj;
  28053. zend_object *zobj;
  28054. zend_class_entry *ce, *scope;
  28055. zend_function *clone;
  28056. zend_object_clone_obj_t clone_call;
  28057. SAVE_OPLINE();
  28058. obj = &EX(This);
  28059. do {
  28060. if (IS_UNUSED == IS_CONST ||
  28061. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
  28062. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
  28063. obj = Z_REFVAL_P(obj);
  28064. if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
  28065. break;
  28066. }
  28067. }
  28068. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28069. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
  28070. ZVAL_UNDEFINED_OP1();
  28071. if (UNEXPECTED(EG(exception) != NULL)) {
  28072. HANDLE_EXCEPTION();
  28073. }
  28074. }
  28075. zend_throw_error(NULL, "__clone method called on non-object");
  28076. HANDLE_EXCEPTION();
  28077. }
  28078. } while (0);
  28079. zobj = Z_OBJ_P(obj);
  28080. ce = zobj->ce;
  28081. clone = ce->clone;
  28082. clone_call = zobj->handlers->clone_obj;
  28083. if (UNEXPECTED(clone_call == NULL)) {
  28084. zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
  28085. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28086. HANDLE_EXCEPTION();
  28087. }
  28088. if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
  28089. scope = EX(func)->op_array.scope;
  28090. if (clone->common.scope != scope) {
  28091. if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
  28092. || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
  28093. zend_wrong_clone_call(clone, scope);
  28094. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28095. HANDLE_EXCEPTION();
  28096. }
  28097. }
  28098. }
  28099. ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
  28100. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28101. }
  28102. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28103. {
  28104. uint32_t fetch_type;
  28105. zend_class_entry *called_scope, *scope;
  28106. USE_OPLINE
  28107. if (IS_UNUSED != IS_UNUSED) {
  28108. SAVE_OPLINE();
  28109. zval *op = NULL;
  28110. if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
  28111. ZVAL_DEREF(op);
  28112. if (Z_TYPE_P(op) != IS_OBJECT) {
  28113. zend_type_error("Cannot use \"::class\" on value of type %s", zend_zval_type_name(op));
  28114. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28115. HANDLE_EXCEPTION();
  28116. }
  28117. }
  28118. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
  28119. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28120. }
  28121. fetch_type = opline->op1.num;
  28122. scope = EX(func)->op_array.scope;
  28123. if (UNEXPECTED(scope == NULL)) {
  28124. SAVE_OPLINE();
  28125. zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
  28126. fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
  28127. fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
  28128. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28129. HANDLE_EXCEPTION();
  28130. }
  28131. switch (fetch_type) {
  28132. case ZEND_FETCH_CLASS_SELF:
  28133. ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
  28134. break;
  28135. case ZEND_FETCH_CLASS_PARENT:
  28136. if (UNEXPECTED(scope->parent == NULL)) {
  28137. SAVE_OPLINE();
  28138. zend_throw_error(NULL,
  28139. "Cannot use \"parent\" when current class scope has no parent");
  28140. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28141. HANDLE_EXCEPTION();
  28142. }
  28143. ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
  28144. break;
  28145. case ZEND_FETCH_CLASS_STATIC:
  28146. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  28147. called_scope = Z_OBJCE(EX(This));
  28148. } else {
  28149. called_scope = Z_CE(EX(This));
  28150. }
  28151. ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
  28152. break;
  28153. EMPTY_SWITCH_DEFAULT_CASE()
  28154. }
  28155. ZEND_VM_NEXT_OPCODE();
  28156. }
  28157. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28158. {
  28159. USE_OPLINE
  28160. zval *object;
  28161. zval *property;
  28162. zval *value;
  28163. zval *zptr;
  28164. void **cache_slot;
  28165. zend_property_info *prop_info;
  28166. zend_object *zobj;
  28167. zend_string *name, *tmp_name;
  28168. SAVE_OPLINE();
  28169. object = &EX(This);
  28170. property = RT_CONSTANT(opline, opline->op2);
  28171. do {
  28172. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  28173. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28174. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  28175. object = Z_REFVAL_P(object);
  28176. goto assign_op_object;
  28177. }
  28178. if (IS_UNUSED == IS_CV
  28179. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  28180. ZVAL_UNDEFINED_OP1();
  28181. }
  28182. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  28183. break;
  28184. }
  28185. assign_op_object:
  28186. /* here we are sure we are dealing with an object */
  28187. zobj = Z_OBJ_P(object);
  28188. if (IS_CONST == IS_CONST) {
  28189. name = Z_STR_P(property);
  28190. } else {
  28191. name = zval_try_get_tmp_string(property, &tmp_name);
  28192. if (UNEXPECTED(!name)) {
  28193. UNDEF_RESULT();
  28194. break;
  28195. }
  28196. }
  28197. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  28198. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  28199. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  28200. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28201. ZVAL_NULL(EX_VAR(opline->result.var));
  28202. }
  28203. } else {
  28204. zval *orig_zptr = zptr;
  28205. zend_reference *ref;
  28206. do {
  28207. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  28208. ref = Z_REF_P(zptr);
  28209. zptr = Z_REFVAL_P(zptr);
  28210. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  28211. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  28212. break;
  28213. }
  28214. }
  28215. if (IS_CONST == IS_CONST) {
  28216. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  28217. } else {
  28218. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  28219. }
  28220. if (UNEXPECTED(prop_info)) {
  28221. /* special case for typed properties */
  28222. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  28223. } else {
  28224. zend_binary_op(zptr, zptr, value OPLINE_CC);
  28225. }
  28226. } while (0);
  28227. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28228. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  28229. }
  28230. }
  28231. } else {
  28232. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  28233. }
  28234. if (IS_CONST != IS_CONST) {
  28235. zend_tmp_string_release(tmp_name);
  28236. }
  28237. } while (0);
  28238. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  28239. /* assign_obj has two opcodes! */
  28240. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  28241. }
  28242. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  28243. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28244. {
  28245. USE_OPLINE
  28246. zval *object;
  28247. zval *property;
  28248. zval *zptr;
  28249. void **cache_slot;
  28250. zend_property_info *prop_info;
  28251. zend_object *zobj;
  28252. zend_string *name, *tmp_name;
  28253. SAVE_OPLINE();
  28254. object = &EX(This);
  28255. property = RT_CONSTANT(opline, opline->op2);
  28256. do {
  28257. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28258. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  28259. object = Z_REFVAL_P(object);
  28260. goto pre_incdec_object;
  28261. }
  28262. if (IS_UNUSED == IS_CV
  28263. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  28264. ZVAL_UNDEFINED_OP1();
  28265. }
  28266. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  28267. break;
  28268. }
  28269. pre_incdec_object:
  28270. /* here we are sure we are dealing with an object */
  28271. zobj = Z_OBJ_P(object);
  28272. if (IS_CONST == IS_CONST) {
  28273. name = Z_STR_P(property);
  28274. } else {
  28275. name = zval_try_get_tmp_string(property, &tmp_name);
  28276. if (UNEXPECTED(!name)) {
  28277. UNDEF_RESULT();
  28278. break;
  28279. }
  28280. }
  28281. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  28282. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  28283. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  28284. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28285. ZVAL_NULL(EX_VAR(opline->result.var));
  28286. }
  28287. } else {
  28288. if (IS_CONST == IS_CONST) {
  28289. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  28290. } else {
  28291. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  28292. }
  28293. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  28294. }
  28295. } else {
  28296. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  28297. }
  28298. if (IS_CONST != IS_CONST) {
  28299. zend_tmp_string_release(tmp_name);
  28300. }
  28301. } while (0);
  28302. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28303. }
  28304. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28305. {
  28306. USE_OPLINE
  28307. zval *object;
  28308. zval *property;
  28309. zval *zptr;
  28310. void **cache_slot;
  28311. zend_property_info *prop_info;
  28312. zend_object *zobj;
  28313. zend_string *name, *tmp_name;
  28314. SAVE_OPLINE();
  28315. object = &EX(This);
  28316. property = RT_CONSTANT(opline, opline->op2);
  28317. do {
  28318. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28319. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  28320. object = Z_REFVAL_P(object);
  28321. goto post_incdec_object;
  28322. }
  28323. if (IS_UNUSED == IS_CV
  28324. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  28325. ZVAL_UNDEFINED_OP1();
  28326. }
  28327. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  28328. break;
  28329. }
  28330. post_incdec_object:
  28331. /* here we are sure we are dealing with an object */
  28332. zobj = Z_OBJ_P(object);
  28333. if (IS_CONST == IS_CONST) {
  28334. name = Z_STR_P(property);
  28335. } else {
  28336. name = zval_try_get_tmp_string(property, &tmp_name);
  28337. if (UNEXPECTED(!name)) {
  28338. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28339. break;
  28340. }
  28341. }
  28342. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  28343. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  28344. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  28345. ZVAL_NULL(EX_VAR(opline->result.var));
  28346. } else {
  28347. if (IS_CONST == IS_CONST) {
  28348. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  28349. } else {
  28350. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  28351. }
  28352. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  28353. }
  28354. } else {
  28355. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  28356. }
  28357. if (IS_CONST != IS_CONST) {
  28358. zend_tmp_string_release(tmp_name);
  28359. }
  28360. } while (0);
  28361. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28362. }
  28363. static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28364. {
  28365. USE_OPLINE
  28366. zval *container;
  28367. void **cache_slot = NULL;
  28368. SAVE_OPLINE();
  28369. container = &EX(This);
  28370. if (IS_UNUSED == IS_CONST ||
  28371. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  28372. do {
  28373. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  28374. container = Z_REFVAL_P(container);
  28375. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  28376. break;
  28377. }
  28378. }
  28379. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  28380. ZVAL_UNDEFINED_OP1();
  28381. }
  28382. zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
  28383. ZVAL_NULL(EX_VAR(opline->result.var));
  28384. goto fetch_obj_r_finish;
  28385. } while (0);
  28386. }
  28387. /* here we are sure we are dealing with an object */
  28388. do {
  28389. zend_object *zobj = Z_OBJ_P(container);
  28390. zend_string *name, *tmp_name;
  28391. zval *retval;
  28392. if (IS_CONST == IS_CONST) {
  28393. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  28394. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  28395. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  28396. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  28397. retval = OBJ_PROP(zobj, prop_offset);
  28398. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  28399. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  28400. goto fetch_obj_r_copy;
  28401. } else {
  28402. fetch_obj_r_fast_copy:
  28403. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  28404. ZEND_VM_NEXT_OPCODE();
  28405. }
  28406. }
  28407. } else if (EXPECTED(zobj->properties != NULL)) {
  28408. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28409. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  28410. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  28411. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  28412. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  28413. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  28414. (EXPECTED(p->key == name) ||
  28415. (EXPECTED(p->h == ZSTR_H(name)) &&
  28416. EXPECTED(p->key != NULL) &&
  28417. EXPECTED(zend_string_equal_content(p->key, name))))) {
  28418. retval = &p->val;
  28419. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  28420. goto fetch_obj_r_copy;
  28421. } else {
  28422. goto fetch_obj_r_fast_copy;
  28423. }
  28424. }
  28425. }
  28426. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  28427. }
  28428. retval = zend_hash_find_known_hash(zobj->properties, name);
  28429. if (EXPECTED(retval)) {
  28430. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  28431. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  28432. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  28433. goto fetch_obj_r_copy;
  28434. } else {
  28435. goto fetch_obj_r_fast_copy;
  28436. }
  28437. }
  28438. }
  28439. }
  28440. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28441. } else {
  28442. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  28443. if (UNEXPECTED(!name)) {
  28444. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28445. break;
  28446. }
  28447. }
  28448. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  28449. #if ZEND_DEBUG
  28450. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  28451. zend_verify_internal_read_property_type(zobj, name, retval);
  28452. }
  28453. #endif
  28454. if (IS_CONST != IS_CONST) {
  28455. zend_tmp_string_release(tmp_name);
  28456. }
  28457. if (retval != EX_VAR(opline->result.var)) {
  28458. fetch_obj_r_copy:
  28459. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  28460. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  28461. zend_unwrap_reference(retval);
  28462. }
  28463. } while (0);
  28464. fetch_obj_r_finish:
  28465. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28466. }
  28467. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28468. {
  28469. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28470. }
  28471. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28472. {
  28473. USE_OPLINE
  28474. zval *property, *container, *result;
  28475. SAVE_OPLINE();
  28476. container = &EX(This);
  28477. property = RT_CONSTANT(opline, opline->op2);
  28478. result = EX_VAR(opline->result.var);
  28479. zend_fetch_property_address(
  28480. result, container, IS_UNUSED, property, IS_CONST,
  28481. ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  28482. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
  28483. if (IS_UNUSED == IS_VAR) {
  28484. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  28485. }
  28486. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28487. }
  28488. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_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(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);
  28497. if (IS_UNUSED == IS_VAR) {
  28498. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  28499. }
  28500. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28501. }
  28502. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28503. {
  28504. USE_OPLINE
  28505. zval *container;
  28506. void **cache_slot = NULL;
  28507. SAVE_OPLINE();
  28508. container = &EX(This);
  28509. if (IS_UNUSED == IS_CONST ||
  28510. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  28511. do {
  28512. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  28513. container = Z_REFVAL_P(container);
  28514. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  28515. break;
  28516. }
  28517. }
  28518. if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  28519. ZVAL_UNDEFINED_OP2();
  28520. }
  28521. ZVAL_NULL(EX_VAR(opline->result.var));
  28522. goto fetch_obj_is_finish;
  28523. } while (0);
  28524. }
  28525. /* here we are sure we are dealing with an object */
  28526. do {
  28527. zend_object *zobj = Z_OBJ_P(container);
  28528. zend_string *name, *tmp_name;
  28529. zval *retval;
  28530. if (IS_CONST == IS_CONST) {
  28531. cache_slot = CACHE_ADDR(opline->extended_value);
  28532. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  28533. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  28534. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  28535. retval = OBJ_PROP(zobj, prop_offset);
  28536. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  28537. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  28538. goto fetch_obj_is_copy;
  28539. } else {
  28540. fetch_obj_is_fast_copy:
  28541. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  28542. ZEND_VM_NEXT_OPCODE();
  28543. }
  28544. }
  28545. } else if (EXPECTED(zobj->properties != NULL)) {
  28546. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28547. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  28548. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  28549. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  28550. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  28551. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  28552. (EXPECTED(p->key == name) ||
  28553. (EXPECTED(p->h == ZSTR_H(name)) &&
  28554. EXPECTED(p->key != NULL) &&
  28555. EXPECTED(zend_string_equal_content(p->key, name))))) {
  28556. retval = &p->val;
  28557. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  28558. goto fetch_obj_is_copy;
  28559. } else {
  28560. goto fetch_obj_is_fast_copy;
  28561. }
  28562. }
  28563. }
  28564. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  28565. }
  28566. retval = zend_hash_find_known_hash(zobj->properties, name);
  28567. if (EXPECTED(retval)) {
  28568. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  28569. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  28570. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  28571. goto fetch_obj_is_copy;
  28572. } else {
  28573. goto fetch_obj_is_fast_copy;
  28574. }
  28575. }
  28576. }
  28577. }
  28578. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28579. } else {
  28580. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  28581. if (UNEXPECTED(!name)) {
  28582. ZVAL_UNDEF(EX_VAR(opline->result.var));
  28583. break;
  28584. }
  28585. }
  28586. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  28587. if (IS_CONST != IS_CONST) {
  28588. zend_tmp_string_release(tmp_name);
  28589. }
  28590. if (retval != EX_VAR(opline->result.var)) {
  28591. fetch_obj_is_copy:
  28592. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  28593. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  28594. zend_unwrap_reference(retval);
  28595. }
  28596. } while (0);
  28597. fetch_obj_is_finish:
  28598. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28599. }
  28600. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28601. {
  28602. #if 0
  28603. USE_OPLINE
  28604. #endif
  28605. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  28606. /* Behave like FETCH_OBJ_W */
  28607. if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
  28608. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28609. }
  28610. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28611. } else {
  28612. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28613. }
  28614. }
  28615. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28616. {
  28617. USE_OPLINE
  28618. zval *container, *property, *result;
  28619. SAVE_OPLINE();
  28620. container = &EX(This);
  28621. property = RT_CONSTANT(opline, opline->op2);
  28622. result = EX_VAR(opline->result.var);
  28623. 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);
  28624. if (IS_UNUSED == IS_VAR) {
  28625. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  28626. }
  28627. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28628. }
  28629. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28630. {
  28631. USE_OPLINE
  28632. zval *object, *value, tmp;
  28633. zend_object *zobj;
  28634. zend_string *name, *tmp_name;
  28635. SAVE_OPLINE();
  28636. object = &EX(This);
  28637. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  28638. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28639. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  28640. object = Z_REFVAL_P(object);
  28641. goto assign_object;
  28642. }
  28643. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  28644. value = &EG(uninitialized_zval);
  28645. goto free_and_exit_assign_obj;
  28646. }
  28647. assign_object:
  28648. zobj = Z_OBJ_P(object);
  28649. if (IS_CONST == IS_CONST) {
  28650. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  28651. void **cache_slot = CACHE_ADDR(opline->extended_value);
  28652. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  28653. zend_object *zobj = Z_OBJ_P(object);
  28654. zval *property_val;
  28655. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  28656. property_val = OBJ_PROP(zobj, prop_offset);
  28657. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  28658. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  28659. if (UNEXPECTED(prop_info != NULL)) {
  28660. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  28661. goto free_and_exit_assign_obj;
  28662. } else {
  28663. fast_assign_obj:
  28664. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  28665. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28666. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28667. }
  28668. goto exit_assign_obj;
  28669. }
  28670. }
  28671. } else {
  28672. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28673. if (EXPECTED(zobj->properties != NULL)) {
  28674. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  28675. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  28676. GC_DELREF(zobj->properties);
  28677. }
  28678. zobj->properties = zend_array_dup(zobj->properties);
  28679. }
  28680. property_val = zend_hash_find_known_hash(zobj->properties, name);
  28681. if (property_val) {
  28682. goto fast_assign_obj;
  28683. }
  28684. }
  28685. if (!zobj->ce->__set) {
  28686. if (EXPECTED(zobj->properties == NULL)) {
  28687. rebuild_object_properties(zobj);
  28688. }
  28689. if (IS_CONST == IS_CONST) {
  28690. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  28691. Z_ADDREF_P(value);
  28692. }
  28693. } else if (IS_CONST != IS_TMP_VAR) {
  28694. if (Z_ISREF_P(value)) {
  28695. if (IS_CONST == IS_VAR) {
  28696. zend_reference *ref = Z_REF_P(value);
  28697. if (GC_DELREF(ref) == 0) {
  28698. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  28699. efree_size(ref, sizeof(zend_reference));
  28700. value = &tmp;
  28701. } else {
  28702. value = Z_REFVAL_P(value);
  28703. Z_TRY_ADDREF_P(value);
  28704. }
  28705. } else {
  28706. value = Z_REFVAL_P(value);
  28707. Z_TRY_ADDREF_P(value);
  28708. }
  28709. } else if (IS_CONST == IS_CV) {
  28710. Z_TRY_ADDREF_P(value);
  28711. }
  28712. }
  28713. zend_hash_add_new(zobj->properties, name, value);
  28714. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28715. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28716. }
  28717. goto exit_assign_obj;
  28718. }
  28719. }
  28720. }
  28721. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28722. } else {
  28723. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  28724. if (UNEXPECTED(!name)) {
  28725. UNDEF_RESULT();
  28726. goto exit_assign_obj;
  28727. }
  28728. }
  28729. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  28730. ZVAL_DEREF(value);
  28731. }
  28732. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  28733. if (IS_CONST != IS_CONST) {
  28734. zend_tmp_string_release(tmp_name);
  28735. }
  28736. free_and_exit_assign_obj:
  28737. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28738. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  28739. }
  28740. exit_assign_obj:
  28741. /* assign_obj has two opcodes! */
  28742. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  28743. }
  28744. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  28745. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28746. {
  28747. USE_OPLINE
  28748. zval *object, *value, tmp;
  28749. zend_object *zobj;
  28750. zend_string *name, *tmp_name;
  28751. SAVE_OPLINE();
  28752. object = &EX(This);
  28753. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  28754. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28755. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  28756. object = Z_REFVAL_P(object);
  28757. goto assign_object;
  28758. }
  28759. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  28760. value = &EG(uninitialized_zval);
  28761. goto free_and_exit_assign_obj;
  28762. }
  28763. assign_object:
  28764. zobj = Z_OBJ_P(object);
  28765. if (IS_CONST == IS_CONST) {
  28766. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  28767. void **cache_slot = CACHE_ADDR(opline->extended_value);
  28768. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  28769. zend_object *zobj = Z_OBJ_P(object);
  28770. zval *property_val;
  28771. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  28772. property_val = OBJ_PROP(zobj, prop_offset);
  28773. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  28774. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  28775. if (UNEXPECTED(prop_info != NULL)) {
  28776. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  28777. goto free_and_exit_assign_obj;
  28778. } else {
  28779. fast_assign_obj:
  28780. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  28781. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28782. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28783. }
  28784. goto exit_assign_obj;
  28785. }
  28786. }
  28787. } else {
  28788. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28789. if (EXPECTED(zobj->properties != NULL)) {
  28790. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  28791. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  28792. GC_DELREF(zobj->properties);
  28793. }
  28794. zobj->properties = zend_array_dup(zobj->properties);
  28795. }
  28796. property_val = zend_hash_find_known_hash(zobj->properties, name);
  28797. if (property_val) {
  28798. goto fast_assign_obj;
  28799. }
  28800. }
  28801. if (!zobj->ce->__set) {
  28802. if (EXPECTED(zobj->properties == NULL)) {
  28803. rebuild_object_properties(zobj);
  28804. }
  28805. if (IS_TMP_VAR == IS_CONST) {
  28806. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  28807. Z_ADDREF_P(value);
  28808. }
  28809. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  28810. if (Z_ISREF_P(value)) {
  28811. if (IS_TMP_VAR == IS_VAR) {
  28812. zend_reference *ref = Z_REF_P(value);
  28813. if (GC_DELREF(ref) == 0) {
  28814. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  28815. efree_size(ref, sizeof(zend_reference));
  28816. value = &tmp;
  28817. } else {
  28818. value = Z_REFVAL_P(value);
  28819. Z_TRY_ADDREF_P(value);
  28820. }
  28821. } else {
  28822. value = Z_REFVAL_P(value);
  28823. Z_TRY_ADDREF_P(value);
  28824. }
  28825. } else if (IS_TMP_VAR == IS_CV) {
  28826. Z_TRY_ADDREF_P(value);
  28827. }
  28828. }
  28829. zend_hash_add_new(zobj->properties, name, value);
  28830. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28831. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28832. }
  28833. goto exit_assign_obj;
  28834. }
  28835. }
  28836. }
  28837. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28838. } else {
  28839. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  28840. if (UNEXPECTED(!name)) {
  28841. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  28842. UNDEF_RESULT();
  28843. goto exit_assign_obj;
  28844. }
  28845. }
  28846. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  28847. ZVAL_DEREF(value);
  28848. }
  28849. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  28850. if (IS_CONST != IS_CONST) {
  28851. zend_tmp_string_release(tmp_name);
  28852. }
  28853. free_and_exit_assign_obj:
  28854. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28855. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  28856. }
  28857. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  28858. exit_assign_obj:
  28859. /* assign_obj has two opcodes! */
  28860. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  28861. }
  28862. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  28863. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28864. {
  28865. USE_OPLINE
  28866. zval *object, *value, tmp;
  28867. zend_object *zobj;
  28868. zend_string *name, *tmp_name;
  28869. SAVE_OPLINE();
  28870. object = &EX(This);
  28871. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  28872. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28873. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  28874. object = Z_REFVAL_P(object);
  28875. goto assign_object;
  28876. }
  28877. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  28878. value = &EG(uninitialized_zval);
  28879. goto free_and_exit_assign_obj;
  28880. }
  28881. assign_object:
  28882. zobj = Z_OBJ_P(object);
  28883. if (IS_CONST == IS_CONST) {
  28884. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  28885. void **cache_slot = CACHE_ADDR(opline->extended_value);
  28886. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  28887. zend_object *zobj = Z_OBJ_P(object);
  28888. zval *property_val;
  28889. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  28890. property_val = OBJ_PROP(zobj, prop_offset);
  28891. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  28892. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  28893. if (UNEXPECTED(prop_info != NULL)) {
  28894. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  28895. goto free_and_exit_assign_obj;
  28896. } else {
  28897. fast_assign_obj:
  28898. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  28899. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28900. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28901. }
  28902. goto exit_assign_obj;
  28903. }
  28904. }
  28905. } else {
  28906. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28907. if (EXPECTED(zobj->properties != NULL)) {
  28908. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  28909. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  28910. GC_DELREF(zobj->properties);
  28911. }
  28912. zobj->properties = zend_array_dup(zobj->properties);
  28913. }
  28914. property_val = zend_hash_find_known_hash(zobj->properties, name);
  28915. if (property_val) {
  28916. goto fast_assign_obj;
  28917. }
  28918. }
  28919. if (!zobj->ce->__set) {
  28920. if (EXPECTED(zobj->properties == NULL)) {
  28921. rebuild_object_properties(zobj);
  28922. }
  28923. if (IS_VAR == IS_CONST) {
  28924. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  28925. Z_ADDREF_P(value);
  28926. }
  28927. } else if (IS_VAR != IS_TMP_VAR) {
  28928. if (Z_ISREF_P(value)) {
  28929. if (IS_VAR == IS_VAR) {
  28930. zend_reference *ref = Z_REF_P(value);
  28931. if (GC_DELREF(ref) == 0) {
  28932. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  28933. efree_size(ref, sizeof(zend_reference));
  28934. value = &tmp;
  28935. } else {
  28936. value = Z_REFVAL_P(value);
  28937. Z_TRY_ADDREF_P(value);
  28938. }
  28939. } else {
  28940. value = Z_REFVAL_P(value);
  28941. Z_TRY_ADDREF_P(value);
  28942. }
  28943. } else if (IS_VAR == IS_CV) {
  28944. Z_TRY_ADDREF_P(value);
  28945. }
  28946. }
  28947. zend_hash_add_new(zobj->properties, name, value);
  28948. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28949. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28950. }
  28951. goto exit_assign_obj;
  28952. }
  28953. }
  28954. }
  28955. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  28956. } else {
  28957. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  28958. if (UNEXPECTED(!name)) {
  28959. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  28960. UNDEF_RESULT();
  28961. goto exit_assign_obj;
  28962. }
  28963. }
  28964. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  28965. ZVAL_DEREF(value);
  28966. }
  28967. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  28968. if (IS_CONST != IS_CONST) {
  28969. zend_tmp_string_release(tmp_name);
  28970. }
  28971. free_and_exit_assign_obj:
  28972. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28973. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  28974. }
  28975. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  28976. exit_assign_obj:
  28977. /* assign_obj has two opcodes! */
  28978. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  28979. }
  28980. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  28981. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28982. {
  28983. USE_OPLINE
  28984. zval *object, *value, tmp;
  28985. zend_object *zobj;
  28986. zend_string *name, *tmp_name;
  28987. SAVE_OPLINE();
  28988. object = &EX(This);
  28989. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  28990. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28991. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  28992. object = Z_REFVAL_P(object);
  28993. goto assign_object;
  28994. }
  28995. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  28996. value = &EG(uninitialized_zval);
  28997. goto free_and_exit_assign_obj;
  28998. }
  28999. assign_object:
  29000. zobj = Z_OBJ_P(object);
  29001. if (IS_CONST == IS_CONST) {
  29002. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  29003. void **cache_slot = CACHE_ADDR(opline->extended_value);
  29004. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  29005. zend_object *zobj = Z_OBJ_P(object);
  29006. zval *property_val;
  29007. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  29008. property_val = OBJ_PROP(zobj, prop_offset);
  29009. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  29010. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  29011. if (UNEXPECTED(prop_info != NULL)) {
  29012. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  29013. goto free_and_exit_assign_obj;
  29014. } else {
  29015. fast_assign_obj:
  29016. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  29017. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  29018. ZVAL_COPY(EX_VAR(opline->result.var), value);
  29019. }
  29020. goto exit_assign_obj;
  29021. }
  29022. }
  29023. } else {
  29024. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  29025. if (EXPECTED(zobj->properties != NULL)) {
  29026. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  29027. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  29028. GC_DELREF(zobj->properties);
  29029. }
  29030. zobj->properties = zend_array_dup(zobj->properties);
  29031. }
  29032. property_val = zend_hash_find_known_hash(zobj->properties, name);
  29033. if (property_val) {
  29034. goto fast_assign_obj;
  29035. }
  29036. }
  29037. if (!zobj->ce->__set) {
  29038. if (EXPECTED(zobj->properties == NULL)) {
  29039. rebuild_object_properties(zobj);
  29040. }
  29041. if (IS_CV == IS_CONST) {
  29042. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  29043. Z_ADDREF_P(value);
  29044. }
  29045. } else if (IS_CV != IS_TMP_VAR) {
  29046. if (Z_ISREF_P(value)) {
  29047. if (IS_CV == IS_VAR) {
  29048. zend_reference *ref = Z_REF_P(value);
  29049. if (GC_DELREF(ref) == 0) {
  29050. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  29051. efree_size(ref, sizeof(zend_reference));
  29052. value = &tmp;
  29053. } else {
  29054. value = Z_REFVAL_P(value);
  29055. Z_TRY_ADDREF_P(value);
  29056. }
  29057. } else {
  29058. value = Z_REFVAL_P(value);
  29059. Z_TRY_ADDREF_P(value);
  29060. }
  29061. } else if (IS_CV == IS_CV) {
  29062. Z_TRY_ADDREF_P(value);
  29063. }
  29064. }
  29065. zend_hash_add_new(zobj->properties, name, value);
  29066. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  29067. ZVAL_COPY(EX_VAR(opline->result.var), value);
  29068. }
  29069. goto exit_assign_obj;
  29070. }
  29071. }
  29072. }
  29073. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  29074. } else {
  29075. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  29076. if (UNEXPECTED(!name)) {
  29077. UNDEF_RESULT();
  29078. goto exit_assign_obj;
  29079. }
  29080. }
  29081. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  29082. ZVAL_DEREF(value);
  29083. }
  29084. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  29085. if (IS_CONST != IS_CONST) {
  29086. zend_tmp_string_release(tmp_name);
  29087. }
  29088. free_and_exit_assign_obj:
  29089. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  29090. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  29091. }
  29092. exit_assign_obj:
  29093. /* assign_obj has two opcodes! */
  29094. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  29095. }
  29096. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  29097. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29098. {
  29099. USE_OPLINE
  29100. zval *property, *container, *value_ptr;
  29101. SAVE_OPLINE();
  29102. container = &EX(This);
  29103. property = RT_CONSTANT(opline, opline->op2);
  29104. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  29105. if (1) {
  29106. if (IS_UNUSED == IS_UNUSED) {
  29107. if (IS_CONST == IS_CONST) {
  29108. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29109. } else {
  29110. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29111. }
  29112. } else {
  29113. if (IS_CONST == IS_CONST) {
  29114. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29115. } else {
  29116. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29117. }
  29118. }
  29119. } else {
  29120. zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29121. }
  29122. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  29123. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  29124. }
  29125. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  29126. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29127. {
  29128. USE_OPLINE
  29129. zval *property, *container, *value_ptr;
  29130. SAVE_OPLINE();
  29131. container = &EX(This);
  29132. property = RT_CONSTANT(opline, opline->op2);
  29133. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  29134. if (1) {
  29135. if (IS_UNUSED == IS_UNUSED) {
  29136. if (IS_CONST == IS_CONST) {
  29137. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29138. } else {
  29139. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29140. }
  29141. } else {
  29142. if (IS_CONST == IS_CONST) {
  29143. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29144. } else {
  29145. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29146. }
  29147. }
  29148. } else {
  29149. zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  29150. }
  29151. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  29152. }
  29153. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  29154. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29155. {
  29156. USE_OPLINE
  29157. zend_string **rope;
  29158. zval *var;
  29159. /* Compiler allocates the necessary number of zval slots to keep the rope */
  29160. rope = (zend_string**)EX_VAR(opline->result.var);
  29161. if (IS_CONST == IS_CONST) {
  29162. var = RT_CONSTANT(opline, opline->op2);
  29163. rope[0] = Z_STR_P(var);
  29164. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  29165. Z_ADDREF_P(var);
  29166. }
  29167. } else {
  29168. var = RT_CONSTANT(opline, opline->op2);
  29169. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  29170. if (IS_CONST == IS_CV) {
  29171. rope[0] = zend_string_copy(Z_STR_P(var));
  29172. } else {
  29173. rope[0] = Z_STR_P(var);
  29174. }
  29175. } else {
  29176. SAVE_OPLINE();
  29177. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  29178. ZVAL_UNDEFINED_OP2();
  29179. }
  29180. rope[0] = zval_get_string_func(var);
  29181. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29182. }
  29183. }
  29184. ZEND_VM_NEXT_OPCODE();
  29185. }
  29186. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29187. {
  29188. zval *class_name;
  29189. USE_OPLINE
  29190. SAVE_OPLINE();
  29191. if (IS_CONST == IS_UNUSED) {
  29192. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
  29193. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29194. } else if (IS_CONST == IS_CONST) {
  29195. zend_class_entry *ce = CACHED_PTR(opline->extended_value);
  29196. if (UNEXPECTED(ce == NULL)) {
  29197. class_name = RT_CONSTANT(opline, opline->op2);
  29198. ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
  29199. CACHE_PTR(opline->extended_value, ce);
  29200. }
  29201. Z_CE_P(EX_VAR(opline->result.var)) = ce;
  29202. } else {
  29203. class_name = RT_CONSTANT(opline, opline->op2);
  29204. try_class_name:
  29205. if (Z_TYPE_P(class_name) == IS_OBJECT) {
  29206. Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
  29207. } else if (Z_TYPE_P(class_name) == IS_STRING) {
  29208. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
  29209. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
  29210. class_name = Z_REFVAL_P(class_name);
  29211. goto try_class_name;
  29212. } else {
  29213. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
  29214. ZVAL_UNDEFINED_OP2();
  29215. if (UNEXPECTED(EG(exception) != NULL)) {
  29216. HANDLE_EXCEPTION();
  29217. }
  29218. }
  29219. zend_throw_error(NULL, "Class name must be a valid object or a string");
  29220. }
  29221. }
  29222. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29223. }
  29224. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29225. {
  29226. USE_OPLINE
  29227. zval *function_name;
  29228. zval *object;
  29229. zend_function *fbc;
  29230. zend_class_entry *called_scope;
  29231. zend_object *obj;
  29232. zend_execute_data *call;
  29233. uint32_t call_info;
  29234. SAVE_OPLINE();
  29235. object = &EX(This);
  29236. if (IS_CONST != IS_CONST) {
  29237. function_name = RT_CONSTANT(opline, opline->op2);
  29238. }
  29239. if (IS_CONST != IS_CONST &&
  29240. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  29241. do {
  29242. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  29243. function_name = Z_REFVAL_P(function_name);
  29244. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  29245. break;
  29246. }
  29247. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  29248. ZVAL_UNDEFINED_OP2();
  29249. if (UNEXPECTED(EG(exception) != NULL)) {
  29250. HANDLE_EXCEPTION();
  29251. }
  29252. }
  29253. zend_throw_error(NULL, "Method name must be a string");
  29254. HANDLE_EXCEPTION();
  29255. } while (0);
  29256. }
  29257. if (IS_UNUSED == IS_UNUSED) {
  29258. obj = Z_OBJ_P(object);
  29259. } else {
  29260. do {
  29261. if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  29262. obj = Z_OBJ_P(object);
  29263. } else {
  29264. if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  29265. zend_reference *ref = Z_REF_P(object);
  29266. object = &ref->val;
  29267. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  29268. obj = Z_OBJ_P(object);
  29269. if (IS_UNUSED & IS_VAR) {
  29270. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  29271. efree_size(ref, sizeof(zend_reference));
  29272. } else {
  29273. Z_ADDREF_P(object);
  29274. }
  29275. }
  29276. break;
  29277. }
  29278. }
  29279. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  29280. object = ZVAL_UNDEFINED_OP1();
  29281. if (UNEXPECTED(EG(exception) != NULL)) {
  29282. if (IS_CONST != IS_CONST) {
  29283. }
  29284. HANDLE_EXCEPTION();
  29285. }
  29286. }
  29287. if (IS_CONST == IS_CONST) {
  29288. function_name = RT_CONSTANT(opline, opline->op2);
  29289. }
  29290. zend_invalid_method_call(object, function_name);
  29291. HANDLE_EXCEPTION();
  29292. }
  29293. } while (0);
  29294. }
  29295. called_scope = obj->ce;
  29296. if (IS_CONST == IS_CONST &&
  29297. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  29298. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  29299. } else {
  29300. zend_object *orig_obj = obj;
  29301. if (IS_CONST == IS_CONST) {
  29302. function_name = RT_CONSTANT(opline, opline->op2);
  29303. }
  29304. /* First, locate the function. */
  29305. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  29306. if (UNEXPECTED(fbc == NULL)) {
  29307. if (EXPECTED(!EG(exception))) {
  29308. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  29309. }
  29310. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  29311. zend_objects_store_del(orig_obj);
  29312. }
  29313. HANDLE_EXCEPTION();
  29314. }
  29315. if (IS_CONST == IS_CONST &&
  29316. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  29317. EXPECTED(obj == orig_obj)) {
  29318. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  29319. }
  29320. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  29321. GC_ADDREF(obj); /* For $this pointer */
  29322. if (GC_DELREF(orig_obj) == 0) {
  29323. zend_objects_store_del(orig_obj);
  29324. }
  29325. }
  29326. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  29327. init_func_run_time_cache(&fbc->op_array);
  29328. }
  29329. }
  29330. if (IS_CONST != IS_CONST) {
  29331. }
  29332. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  29333. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  29334. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  29335. zend_objects_store_del(obj);
  29336. if (UNEXPECTED(EG(exception))) {
  29337. HANDLE_EXCEPTION();
  29338. }
  29339. }
  29340. /* call static method */
  29341. obj = (zend_object*)called_scope;
  29342. call_info = ZEND_CALL_NESTED_FUNCTION;
  29343. } else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  29344. if (IS_UNUSED == IS_CV) {
  29345. GC_ADDREF(obj); /* For $this pointer */
  29346. }
  29347. /* CV may be changed indirectly (e.g. when it's a reference) */
  29348. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  29349. }
  29350. call = zend_vm_stack_push_call_frame(call_info,
  29351. fbc, opline->extended_value, obj);
  29352. call->prev_execute_data = EX(call);
  29353. EX(call) = call;
  29354. ZEND_VM_NEXT_OPCODE();
  29355. }
  29356. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29357. {
  29358. USE_OPLINE
  29359. zval *function_name;
  29360. zend_class_entry *ce;
  29361. uint32_t call_info;
  29362. zend_function *fbc;
  29363. zend_execute_data *call;
  29364. SAVE_OPLINE();
  29365. if (IS_UNUSED == IS_CONST) {
  29366. /* no function found. try a static method in class */
  29367. ce = CACHED_PTR(opline->result.num);
  29368. if (UNEXPECTED(ce == NULL)) {
  29369. 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);
  29370. if (UNEXPECTED(ce == NULL)) {
  29371. HANDLE_EXCEPTION();
  29372. }
  29373. if (IS_CONST != IS_CONST) {
  29374. CACHE_PTR(opline->result.num, ce);
  29375. }
  29376. }
  29377. } else if (IS_UNUSED == IS_UNUSED) {
  29378. ce = zend_fetch_class(NULL, opline->op1.num);
  29379. if (UNEXPECTED(ce == NULL)) {
  29380. HANDLE_EXCEPTION();
  29381. }
  29382. } else {
  29383. ce = Z_CE_P(EX_VAR(opline->op1.var));
  29384. }
  29385. if (IS_UNUSED == IS_CONST &&
  29386. IS_CONST == IS_CONST &&
  29387. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  29388. /* nothing to do */
  29389. } else if (IS_UNUSED != IS_CONST &&
  29390. IS_CONST == IS_CONST &&
  29391. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  29392. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  29393. } else if (IS_CONST != IS_UNUSED) {
  29394. function_name = RT_CONSTANT(opline, opline->op2);
  29395. if (IS_CONST != IS_CONST) {
  29396. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  29397. do {
  29398. if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  29399. function_name = Z_REFVAL_P(function_name);
  29400. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  29401. break;
  29402. }
  29403. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  29404. ZVAL_UNDEFINED_OP2();
  29405. if (UNEXPECTED(EG(exception) != NULL)) {
  29406. HANDLE_EXCEPTION();
  29407. }
  29408. }
  29409. zend_throw_error(NULL, "Method name must be a string");
  29410. HANDLE_EXCEPTION();
  29411. } while (0);
  29412. }
  29413. }
  29414. if (ce->get_static_method) {
  29415. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  29416. } else {
  29417. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  29418. }
  29419. if (UNEXPECTED(fbc == NULL)) {
  29420. if (EXPECTED(!EG(exception))) {
  29421. zend_undefined_method(ce, Z_STR_P(function_name));
  29422. }
  29423. HANDLE_EXCEPTION();
  29424. }
  29425. if (IS_CONST == IS_CONST &&
  29426. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  29427. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  29428. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  29429. }
  29430. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  29431. init_func_run_time_cache(&fbc->op_array);
  29432. }
  29433. if (IS_CONST != IS_CONST) {
  29434. }
  29435. } else {
  29436. if (UNEXPECTED(ce->constructor == NULL)) {
  29437. zend_throw_error(NULL, "Cannot call constructor");
  29438. HANDLE_EXCEPTION();
  29439. }
  29440. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  29441. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  29442. HANDLE_EXCEPTION();
  29443. }
  29444. fbc = ce->constructor;
  29445. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  29446. init_func_run_time_cache(&fbc->op_array);
  29447. }
  29448. }
  29449. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  29450. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  29451. ce = (zend_class_entry*)Z_OBJ(EX(This));
  29452. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  29453. } else {
  29454. zend_non_static_method_call(fbc);
  29455. HANDLE_EXCEPTION();
  29456. }
  29457. } else {
  29458. /* previous opcode is ZEND_FETCH_CLASS */
  29459. if (IS_UNUSED == IS_UNUSED
  29460. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  29461. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  29462. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  29463. ce = Z_OBJCE(EX(This));
  29464. } else {
  29465. ce = Z_CE(EX(This));
  29466. }
  29467. }
  29468. call_info = ZEND_CALL_NESTED_FUNCTION;
  29469. }
  29470. call = zend_vm_stack_push_call_frame(call_info,
  29471. fbc, opline->extended_value, ce);
  29472. call->prev_execute_data = EX(call);
  29473. EX(call) = call;
  29474. ZEND_VM_NEXT_OPCODE();
  29475. }
  29476. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29477. {
  29478. USE_OPLINE
  29479. uint32_t arg_num;
  29480. if (IS_CONST == IS_CONST) {
  29481. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  29482. arg_num = zend_get_arg_offset_by_name(
  29483. EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
  29484. if (UNEXPECTED(arg_num == 0)) {
  29485. /* Treat this as a by-value argument, and throw an error during SEND. */
  29486. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  29487. ZEND_VM_NEXT_OPCODE();
  29488. }
  29489. } else {
  29490. arg_num = opline->op2.num;
  29491. }
  29492. if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
  29493. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  29494. ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  29495. } else {
  29496. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  29497. }
  29498. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  29499. ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  29500. } else {
  29501. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  29502. }
  29503. ZEND_VM_NEXT_OPCODE();
  29504. }
  29505. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29506. {
  29507. USE_OPLINE
  29508. zend_constant *c;
  29509. c = CACHED_PTR(opline->extended_value);
  29510. if (EXPECTED(c != NULL) && EXPECTED(!IS_SPECIAL_CACHE_VAL(c))) {
  29511. ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), &c->value);
  29512. ZEND_VM_NEXT_OPCODE();
  29513. }
  29514. SAVE_OPLINE();
  29515. zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->op1.num OPLINE_CC EXECUTE_DATA_CC);
  29516. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29517. }
  29518. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29519. {
  29520. zend_class_entry *ce, *scope;
  29521. zend_class_constant *c;
  29522. zval *value, *zv;
  29523. USE_OPLINE
  29524. SAVE_OPLINE();
  29525. do {
  29526. if (IS_UNUSED == IS_CONST) {
  29527. if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
  29528. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  29529. break;
  29530. } else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
  29531. ce = CACHED_PTR(opline->extended_value);
  29532. } else {
  29533. 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);
  29534. if (UNEXPECTED(ce == NULL)) {
  29535. ZVAL_UNDEF(EX_VAR(opline->result.var));
  29536. HANDLE_EXCEPTION();
  29537. }
  29538. }
  29539. } else {
  29540. if (IS_UNUSED == IS_UNUSED) {
  29541. ce = zend_fetch_class(NULL, opline->op1.num);
  29542. if (UNEXPECTED(ce == NULL)) {
  29543. ZVAL_UNDEF(EX_VAR(opline->result.var));
  29544. HANDLE_EXCEPTION();
  29545. }
  29546. } else {
  29547. ce = Z_CE_P(EX_VAR(opline->op1.var));
  29548. }
  29549. if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  29550. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  29551. break;
  29552. }
  29553. }
  29554. zv = zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), Z_STR_P(RT_CONSTANT(opline, opline->op2)));
  29555. if (EXPECTED(zv != NULL)) {
  29556. c = Z_PTR_P(zv);
  29557. scope = EX(func)->op_array.scope;
  29558. if (!zend_verify_const_access(c, scope)) {
  29559. 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)));
  29560. ZVAL_UNDEF(EX_VAR(opline->result.var));
  29561. HANDLE_EXCEPTION();
  29562. }
  29563. value = &c->value;
  29564. if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
  29565. zval_update_constant_ex(value, c->ce);
  29566. if (UNEXPECTED(EG(exception) != NULL)) {
  29567. ZVAL_UNDEF(EX_VAR(opline->result.var));
  29568. HANDLE_EXCEPTION();
  29569. }
  29570. }
  29571. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
  29572. } else {
  29573. zend_throw_error(NULL, "Undefined constant %s::%s",
  29574. ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
  29575. ZVAL_UNDEF(EX_VAR(opline->result.var));
  29576. HANDLE_EXCEPTION();
  29577. }
  29578. } while (0);
  29579. ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
  29580. ZEND_VM_NEXT_OPCODE();
  29581. }
  29582. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29583. {
  29584. zval *array;
  29585. uint32_t size;
  29586. USE_OPLINE
  29587. array = EX_VAR(opline->result.var);
  29588. if (IS_UNUSED != IS_UNUSED) {
  29589. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  29590. ZVAL_ARR(array, zend_new_array(size));
  29591. /* Explicitly initialize array as not-packed if flag is set */
  29592. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  29593. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  29594. }
  29595. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  29596. } else {
  29597. ZVAL_ARR(array, zend_new_array(0));
  29598. ZEND_VM_NEXT_OPCODE();
  29599. }
  29600. }
  29601. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29602. {
  29603. USE_OPLINE
  29604. zval *container;
  29605. zval *offset;
  29606. zend_string *name, *tmp_name;
  29607. SAVE_OPLINE();
  29608. container = &EX(This);
  29609. offset = RT_CONSTANT(opline, opline->op2);
  29610. do {
  29611. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  29612. if (Z_ISREF_P(container)) {
  29613. container = Z_REFVAL_P(container);
  29614. if (Z_TYPE_P(container) != IS_OBJECT) {
  29615. if (IS_UNUSED == IS_CV
  29616. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  29617. ZVAL_UNDEFINED_OP1();
  29618. }
  29619. break;
  29620. }
  29621. } else {
  29622. break;
  29623. }
  29624. }
  29625. if (IS_CONST == IS_CONST) {
  29626. name = Z_STR_P(offset);
  29627. } else {
  29628. name = zval_try_get_tmp_string(offset, &tmp_name);
  29629. if (UNEXPECTED(!name)) {
  29630. break;
  29631. }
  29632. }
  29633. Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  29634. if (IS_CONST != IS_CONST) {
  29635. zend_tmp_string_release(tmp_name);
  29636. }
  29637. } while (0);
  29638. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29639. }
  29640. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29641. {
  29642. USE_OPLINE
  29643. zval *container;
  29644. int result;
  29645. zval *offset;
  29646. zend_string *name, *tmp_name;
  29647. SAVE_OPLINE();
  29648. container = &EX(This);
  29649. offset = RT_CONSTANT(opline, opline->op2);
  29650. if (IS_UNUSED == IS_CONST ||
  29651. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  29652. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  29653. container = Z_REFVAL_P(container);
  29654. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  29655. result = (opline->extended_value & ZEND_ISEMPTY);
  29656. goto isset_object_finish;
  29657. }
  29658. } else {
  29659. result = (opline->extended_value & ZEND_ISEMPTY);
  29660. goto isset_object_finish;
  29661. }
  29662. }
  29663. if (IS_CONST == IS_CONST) {
  29664. name = Z_STR_P(offset);
  29665. } else {
  29666. name = zval_try_get_tmp_string(offset, &tmp_name);
  29667. if (UNEXPECTED(!name)) {
  29668. result = 0;
  29669. goto isset_object_finish;
  29670. }
  29671. }
  29672. result =
  29673. (opline->extended_value & ZEND_ISEMPTY) ^
  29674. 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));
  29675. if (IS_CONST != IS_CONST) {
  29676. zend_tmp_string_release(tmp_name);
  29677. }
  29678. isset_object_finish:
  29679. ZEND_VM_SMART_BRANCH(result, 1);
  29680. }
  29681. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29682. {
  29683. USE_OPLINE
  29684. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  29685. SAVE_OPLINE();
  29686. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  29687. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  29688. }
  29689. /* Destroy the previously yielded value */
  29690. zval_ptr_dtor(&generator->value);
  29691. /* Destroy the previously yielded key */
  29692. zval_ptr_dtor(&generator->key);
  29693. /* Set the new yielded value */
  29694. if (IS_UNUSED != IS_UNUSED) {
  29695. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  29696. /* Constants and temporary variables aren't yieldable by reference,
  29697. * but we still allow them with a notice. */
  29698. if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
  29699. zval *value;
  29700. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  29701. value = NULL;
  29702. ZVAL_COPY_VALUE(&generator->value, value);
  29703. if (IS_UNUSED == IS_CONST) {
  29704. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  29705. Z_ADDREF(generator->value);
  29706. }
  29707. }
  29708. } else {
  29709. zval *value_ptr = NULL;
  29710. /* If a function call result is yielded and the function did
  29711. * not return by reference we throw a notice. */
  29712. do {
  29713. if (IS_UNUSED == IS_VAR) {
  29714. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  29715. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  29716. && !Z_ISREF_P(value_ptr)) {
  29717. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  29718. ZVAL_COPY(&generator->value, value_ptr);
  29719. break;
  29720. }
  29721. }
  29722. if (Z_ISREF_P(value_ptr)) {
  29723. Z_ADDREF_P(value_ptr);
  29724. } else {
  29725. ZVAL_MAKE_REF_EX(value_ptr, 2);
  29726. }
  29727. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  29728. } while (0);
  29729. }
  29730. } else {
  29731. zval *value = NULL;
  29732. /* Consts, temporary variables and references need copying */
  29733. if (IS_UNUSED == IS_CONST) {
  29734. ZVAL_COPY_VALUE(&generator->value, value);
  29735. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  29736. Z_ADDREF(generator->value);
  29737. }
  29738. } else if (IS_UNUSED == IS_TMP_VAR) {
  29739. ZVAL_COPY_VALUE(&generator->value, value);
  29740. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  29741. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  29742. } else {
  29743. ZVAL_COPY_VALUE(&generator->value, value);
  29744. if (IS_UNUSED == IS_CV) {
  29745. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  29746. }
  29747. }
  29748. }
  29749. } else {
  29750. /* If no value was specified yield null */
  29751. ZVAL_NULL(&generator->value);
  29752. }
  29753. /* Set the new yielded key */
  29754. if (IS_CONST != IS_UNUSED) {
  29755. zval *key = RT_CONSTANT(opline, opline->op2);
  29756. if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  29757. key = Z_REFVAL_P(key);
  29758. }
  29759. ZVAL_COPY(&generator->key, key);
  29760. if (Z_TYPE(generator->key) == IS_LONG
  29761. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  29762. ) {
  29763. generator->largest_used_integer_key = Z_LVAL(generator->key);
  29764. }
  29765. } else {
  29766. /* If no key was specified we use auto-increment keys */
  29767. generator->largest_used_integer_key++;
  29768. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  29769. }
  29770. if (RETURN_VALUE_USED(opline)) {
  29771. /* If the return value of yield is used set the send
  29772. * target and initialize it to NULL */
  29773. generator->send_target = EX_VAR(opline->result.var);
  29774. ZVAL_NULL(generator->send_target);
  29775. } else {
  29776. generator->send_target = NULL;
  29777. }
  29778. /* We increment to the next op, so we are at the correct position when the
  29779. * generator is resumed. */
  29780. ZEND_VM_INC_OPCODE();
  29781. /* The GOTO VM uses a local opline variable. We need to set the opline
  29782. * variable in execute_data so we don't resume at an old position. */
  29783. SAVE_OPLINE();
  29784. ZEND_VM_RETURN();
  29785. }
  29786. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29787. {
  29788. USE_OPLINE
  29789. zval *object;
  29790. zval *property;
  29791. zval *value;
  29792. zval *zptr;
  29793. void **cache_slot;
  29794. zend_property_info *prop_info;
  29795. zend_object *zobj;
  29796. zend_string *name, *tmp_name;
  29797. SAVE_OPLINE();
  29798. object = &EX(This);
  29799. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  29800. do {
  29801. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  29802. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  29803. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  29804. object = Z_REFVAL_P(object);
  29805. goto assign_op_object;
  29806. }
  29807. if (IS_UNUSED == IS_CV
  29808. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  29809. ZVAL_UNDEFINED_OP1();
  29810. }
  29811. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  29812. break;
  29813. }
  29814. assign_op_object:
  29815. /* here we are sure we are dealing with an object */
  29816. zobj = Z_OBJ_P(object);
  29817. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  29818. name = Z_STR_P(property);
  29819. } else {
  29820. name = zval_try_get_tmp_string(property, &tmp_name);
  29821. if (UNEXPECTED(!name)) {
  29822. UNDEF_RESULT();
  29823. break;
  29824. }
  29825. }
  29826. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  29827. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  29828. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  29829. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  29830. ZVAL_NULL(EX_VAR(opline->result.var));
  29831. }
  29832. } else {
  29833. zval *orig_zptr = zptr;
  29834. zend_reference *ref;
  29835. do {
  29836. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  29837. ref = Z_REF_P(zptr);
  29838. zptr = Z_REFVAL_P(zptr);
  29839. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  29840. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  29841. break;
  29842. }
  29843. }
  29844. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  29845. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  29846. } else {
  29847. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  29848. }
  29849. if (UNEXPECTED(prop_info)) {
  29850. /* special case for typed properties */
  29851. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  29852. } else {
  29853. zend_binary_op(zptr, zptr, value OPLINE_CC);
  29854. }
  29855. } while (0);
  29856. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  29857. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  29858. }
  29859. }
  29860. } else {
  29861. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  29862. }
  29863. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  29864. zend_tmp_string_release(tmp_name);
  29865. }
  29866. } while (0);
  29867. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  29868. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  29869. /* assign_obj has two opcodes! */
  29870. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  29871. }
  29872. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  29873. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29874. {
  29875. USE_OPLINE
  29876. zval *object;
  29877. zval *property;
  29878. zval *zptr;
  29879. void **cache_slot;
  29880. zend_property_info *prop_info;
  29881. zend_object *zobj;
  29882. zend_string *name, *tmp_name;
  29883. SAVE_OPLINE();
  29884. object = &EX(This);
  29885. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  29886. do {
  29887. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  29888. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  29889. object = Z_REFVAL_P(object);
  29890. goto pre_incdec_object;
  29891. }
  29892. if (IS_UNUSED == IS_CV
  29893. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  29894. ZVAL_UNDEFINED_OP1();
  29895. }
  29896. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  29897. break;
  29898. }
  29899. pre_incdec_object:
  29900. /* here we are sure we are dealing with an object */
  29901. zobj = Z_OBJ_P(object);
  29902. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  29903. name = Z_STR_P(property);
  29904. } else {
  29905. name = zval_try_get_tmp_string(property, &tmp_name);
  29906. if (UNEXPECTED(!name)) {
  29907. UNDEF_RESULT();
  29908. break;
  29909. }
  29910. }
  29911. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  29912. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  29913. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  29914. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  29915. ZVAL_NULL(EX_VAR(opline->result.var));
  29916. }
  29917. } else {
  29918. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  29919. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  29920. } else {
  29921. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  29922. }
  29923. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  29924. }
  29925. } else {
  29926. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  29927. }
  29928. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  29929. zend_tmp_string_release(tmp_name);
  29930. }
  29931. } while (0);
  29932. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  29933. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29934. }
  29935. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29936. {
  29937. USE_OPLINE
  29938. zval *object;
  29939. zval *property;
  29940. zval *zptr;
  29941. void **cache_slot;
  29942. zend_property_info *prop_info;
  29943. zend_object *zobj;
  29944. zend_string *name, *tmp_name;
  29945. SAVE_OPLINE();
  29946. object = &EX(This);
  29947. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  29948. do {
  29949. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  29950. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  29951. object = Z_REFVAL_P(object);
  29952. goto post_incdec_object;
  29953. }
  29954. if (IS_UNUSED == IS_CV
  29955. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  29956. ZVAL_UNDEFINED_OP1();
  29957. }
  29958. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  29959. break;
  29960. }
  29961. post_incdec_object:
  29962. /* here we are sure we are dealing with an object */
  29963. zobj = Z_OBJ_P(object);
  29964. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  29965. name = Z_STR_P(property);
  29966. } else {
  29967. name = zval_try_get_tmp_string(property, &tmp_name);
  29968. if (UNEXPECTED(!name)) {
  29969. ZVAL_UNDEF(EX_VAR(opline->result.var));
  29970. break;
  29971. }
  29972. }
  29973. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  29974. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  29975. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  29976. ZVAL_NULL(EX_VAR(opline->result.var));
  29977. } else {
  29978. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  29979. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  29980. } else {
  29981. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  29982. }
  29983. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  29984. }
  29985. } else {
  29986. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  29987. }
  29988. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  29989. zend_tmp_string_release(tmp_name);
  29990. }
  29991. } while (0);
  29992. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  29993. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29994. }
  29995. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29996. {
  29997. USE_OPLINE
  29998. zval *container;
  29999. void **cache_slot = NULL;
  30000. SAVE_OPLINE();
  30001. container = &EX(This);
  30002. if (IS_UNUSED == IS_CONST ||
  30003. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  30004. do {
  30005. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  30006. container = Z_REFVAL_P(container);
  30007. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  30008. break;
  30009. }
  30010. }
  30011. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  30012. ZVAL_UNDEFINED_OP1();
  30013. }
  30014. zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30015. ZVAL_NULL(EX_VAR(opline->result.var));
  30016. goto fetch_obj_r_finish;
  30017. } while (0);
  30018. }
  30019. /* here we are sure we are dealing with an object */
  30020. do {
  30021. zend_object *zobj = Z_OBJ_P(container);
  30022. zend_string *name, *tmp_name;
  30023. zval *retval;
  30024. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30025. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  30026. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  30027. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  30028. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30029. retval = OBJ_PROP(zobj, prop_offset);
  30030. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  30031. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  30032. goto fetch_obj_r_copy;
  30033. } else {
  30034. fetch_obj_r_fast_copy:
  30035. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  30036. ZEND_VM_NEXT_OPCODE();
  30037. }
  30038. }
  30039. } else if (EXPECTED(zobj->properties != NULL)) {
  30040. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30041. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  30042. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  30043. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  30044. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  30045. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  30046. (EXPECTED(p->key == name) ||
  30047. (EXPECTED(p->h == ZSTR_H(name)) &&
  30048. EXPECTED(p->key != NULL) &&
  30049. EXPECTED(zend_string_equal_content(p->key, name))))) {
  30050. retval = &p->val;
  30051. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  30052. goto fetch_obj_r_copy;
  30053. } else {
  30054. goto fetch_obj_r_fast_copy;
  30055. }
  30056. }
  30057. }
  30058. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  30059. }
  30060. retval = zend_hash_find_known_hash(zobj->properties, name);
  30061. if (EXPECTED(retval)) {
  30062. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  30063. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  30064. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  30065. goto fetch_obj_r_copy;
  30066. } else {
  30067. goto fetch_obj_r_fast_copy;
  30068. }
  30069. }
  30070. }
  30071. }
  30072. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30073. } else {
  30074. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  30075. if (UNEXPECTED(!name)) {
  30076. ZVAL_UNDEF(EX_VAR(opline->result.var));
  30077. break;
  30078. }
  30079. }
  30080. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  30081. #if ZEND_DEBUG
  30082. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  30083. zend_verify_internal_read_property_type(zobj, name, retval);
  30084. }
  30085. #endif
  30086. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30087. zend_tmp_string_release(tmp_name);
  30088. }
  30089. if (retval != EX_VAR(opline->result.var)) {
  30090. fetch_obj_r_copy:
  30091. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  30092. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  30093. zend_unwrap_reference(retval);
  30094. }
  30095. } while (0);
  30096. fetch_obj_r_finish:
  30097. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30098. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30099. }
  30100. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30101. {
  30102. USE_OPLINE
  30103. zval *property, *container, *result;
  30104. SAVE_OPLINE();
  30105. container = &EX(This);
  30106. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30107. result = EX_VAR(opline->result.var);
  30108. zend_fetch_property_address(
  30109. result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR),
  30110. (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  30111. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
  30112. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30113. if (IS_UNUSED == IS_VAR) {
  30114. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  30115. }
  30116. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30117. }
  30118. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30119. {
  30120. USE_OPLINE
  30121. zval *property, *container, *result;
  30122. SAVE_OPLINE();
  30123. container = &EX(This);
  30124. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30125. result = EX_VAR(opline->result.var);
  30126. 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);
  30127. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30128. if (IS_UNUSED == IS_VAR) {
  30129. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  30130. }
  30131. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30132. }
  30133. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30134. {
  30135. USE_OPLINE
  30136. zval *container;
  30137. void **cache_slot = NULL;
  30138. SAVE_OPLINE();
  30139. container = &EX(This);
  30140. if (IS_UNUSED == IS_CONST ||
  30141. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  30142. do {
  30143. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  30144. container = Z_REFVAL_P(container);
  30145. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  30146. break;
  30147. }
  30148. }
  30149. if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  30150. ZVAL_UNDEFINED_OP2();
  30151. }
  30152. ZVAL_NULL(EX_VAR(opline->result.var));
  30153. goto fetch_obj_is_finish;
  30154. } while (0);
  30155. }
  30156. /* here we are sure we are dealing with an object */
  30157. do {
  30158. zend_object *zobj = Z_OBJ_P(container);
  30159. zend_string *name, *tmp_name;
  30160. zval *retval;
  30161. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30162. cache_slot = CACHE_ADDR(opline->extended_value);
  30163. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  30164. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  30165. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30166. retval = OBJ_PROP(zobj, prop_offset);
  30167. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  30168. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  30169. goto fetch_obj_is_copy;
  30170. } else {
  30171. fetch_obj_is_fast_copy:
  30172. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  30173. ZEND_VM_NEXT_OPCODE();
  30174. }
  30175. }
  30176. } else if (EXPECTED(zobj->properties != NULL)) {
  30177. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30178. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  30179. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  30180. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  30181. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  30182. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  30183. (EXPECTED(p->key == name) ||
  30184. (EXPECTED(p->h == ZSTR_H(name)) &&
  30185. EXPECTED(p->key != NULL) &&
  30186. EXPECTED(zend_string_equal_content(p->key, name))))) {
  30187. retval = &p->val;
  30188. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  30189. goto fetch_obj_is_copy;
  30190. } else {
  30191. goto fetch_obj_is_fast_copy;
  30192. }
  30193. }
  30194. }
  30195. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  30196. }
  30197. retval = zend_hash_find_known_hash(zobj->properties, name);
  30198. if (EXPECTED(retval)) {
  30199. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  30200. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  30201. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  30202. goto fetch_obj_is_copy;
  30203. } else {
  30204. goto fetch_obj_is_fast_copy;
  30205. }
  30206. }
  30207. }
  30208. }
  30209. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30210. } else {
  30211. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  30212. if (UNEXPECTED(!name)) {
  30213. ZVAL_UNDEF(EX_VAR(opline->result.var));
  30214. break;
  30215. }
  30216. }
  30217. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  30218. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30219. zend_tmp_string_release(tmp_name);
  30220. }
  30221. if (retval != EX_VAR(opline->result.var)) {
  30222. fetch_obj_is_copy:
  30223. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  30224. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  30225. zend_unwrap_reference(retval);
  30226. }
  30227. } while (0);
  30228. fetch_obj_is_finish:
  30229. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30230. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30231. }
  30232. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30233. {
  30234. #if 0
  30235. USE_OPLINE
  30236. #endif
  30237. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  30238. /* Behave like FETCH_OBJ_W */
  30239. if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
  30240. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30241. }
  30242. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30243. } else {
  30244. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30245. }
  30246. }
  30247. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30248. {
  30249. USE_OPLINE
  30250. zval *container, *property, *result;
  30251. SAVE_OPLINE();
  30252. container = &EX(This);
  30253. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30254. result = EX_VAR(opline->result.var);
  30255. 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);
  30256. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30257. if (IS_UNUSED == IS_VAR) {
  30258. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  30259. }
  30260. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30261. }
  30262. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30263. {
  30264. USE_OPLINE
  30265. zval *object, *value, tmp;
  30266. zend_object *zobj;
  30267. zend_string *name, *tmp_name;
  30268. SAVE_OPLINE();
  30269. object = &EX(This);
  30270. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  30271. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  30272. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  30273. object = Z_REFVAL_P(object);
  30274. goto assign_object;
  30275. }
  30276. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  30277. value = &EG(uninitialized_zval);
  30278. goto free_and_exit_assign_obj;
  30279. }
  30280. assign_object:
  30281. zobj = Z_OBJ_P(object);
  30282. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30283. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  30284. void **cache_slot = CACHE_ADDR(opline->extended_value);
  30285. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  30286. zend_object *zobj = Z_OBJ_P(object);
  30287. zval *property_val;
  30288. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30289. property_val = OBJ_PROP(zobj, prop_offset);
  30290. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  30291. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  30292. if (UNEXPECTED(prop_info != NULL)) {
  30293. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  30294. goto free_and_exit_assign_obj;
  30295. } else {
  30296. fast_assign_obj:
  30297. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  30298. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30299. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30300. }
  30301. goto exit_assign_obj;
  30302. }
  30303. }
  30304. } else {
  30305. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30306. if (EXPECTED(zobj->properties != NULL)) {
  30307. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  30308. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  30309. GC_DELREF(zobj->properties);
  30310. }
  30311. zobj->properties = zend_array_dup(zobj->properties);
  30312. }
  30313. property_val = zend_hash_find_known_hash(zobj->properties, name);
  30314. if (property_val) {
  30315. goto fast_assign_obj;
  30316. }
  30317. }
  30318. if (!zobj->ce->__set) {
  30319. if (EXPECTED(zobj->properties == NULL)) {
  30320. rebuild_object_properties(zobj);
  30321. }
  30322. if (IS_CONST == IS_CONST) {
  30323. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  30324. Z_ADDREF_P(value);
  30325. }
  30326. } else if (IS_CONST != IS_TMP_VAR) {
  30327. if (Z_ISREF_P(value)) {
  30328. if (IS_CONST == IS_VAR) {
  30329. zend_reference *ref = Z_REF_P(value);
  30330. if (GC_DELREF(ref) == 0) {
  30331. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  30332. efree_size(ref, sizeof(zend_reference));
  30333. value = &tmp;
  30334. } else {
  30335. value = Z_REFVAL_P(value);
  30336. Z_TRY_ADDREF_P(value);
  30337. }
  30338. } else {
  30339. value = Z_REFVAL_P(value);
  30340. Z_TRY_ADDREF_P(value);
  30341. }
  30342. } else if (IS_CONST == IS_CV) {
  30343. Z_TRY_ADDREF_P(value);
  30344. }
  30345. }
  30346. zend_hash_add_new(zobj->properties, name, value);
  30347. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30348. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30349. }
  30350. goto exit_assign_obj;
  30351. }
  30352. }
  30353. }
  30354. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30355. } else {
  30356. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  30357. if (UNEXPECTED(!name)) {
  30358. UNDEF_RESULT();
  30359. goto exit_assign_obj;
  30360. }
  30361. }
  30362. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  30363. ZVAL_DEREF(value);
  30364. }
  30365. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  30366. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30367. zend_tmp_string_release(tmp_name);
  30368. }
  30369. free_and_exit_assign_obj:
  30370. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30371. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  30372. }
  30373. exit_assign_obj:
  30374. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30375. /* assign_obj has two opcodes! */
  30376. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  30377. }
  30378. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  30379. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30380. {
  30381. USE_OPLINE
  30382. zval *object, *value, tmp;
  30383. zend_object *zobj;
  30384. zend_string *name, *tmp_name;
  30385. SAVE_OPLINE();
  30386. object = &EX(This);
  30387. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  30388. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  30389. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  30390. object = Z_REFVAL_P(object);
  30391. goto assign_object;
  30392. }
  30393. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  30394. value = &EG(uninitialized_zval);
  30395. goto free_and_exit_assign_obj;
  30396. }
  30397. assign_object:
  30398. zobj = Z_OBJ_P(object);
  30399. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30400. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  30401. void **cache_slot = CACHE_ADDR(opline->extended_value);
  30402. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  30403. zend_object *zobj = Z_OBJ_P(object);
  30404. zval *property_val;
  30405. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30406. property_val = OBJ_PROP(zobj, prop_offset);
  30407. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  30408. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  30409. if (UNEXPECTED(prop_info != NULL)) {
  30410. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  30411. goto free_and_exit_assign_obj;
  30412. } else {
  30413. fast_assign_obj:
  30414. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  30415. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30416. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30417. }
  30418. goto exit_assign_obj;
  30419. }
  30420. }
  30421. } else {
  30422. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30423. if (EXPECTED(zobj->properties != NULL)) {
  30424. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  30425. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  30426. GC_DELREF(zobj->properties);
  30427. }
  30428. zobj->properties = zend_array_dup(zobj->properties);
  30429. }
  30430. property_val = zend_hash_find_known_hash(zobj->properties, name);
  30431. if (property_val) {
  30432. goto fast_assign_obj;
  30433. }
  30434. }
  30435. if (!zobj->ce->__set) {
  30436. if (EXPECTED(zobj->properties == NULL)) {
  30437. rebuild_object_properties(zobj);
  30438. }
  30439. if (IS_TMP_VAR == IS_CONST) {
  30440. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  30441. Z_ADDREF_P(value);
  30442. }
  30443. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  30444. if (Z_ISREF_P(value)) {
  30445. if (IS_TMP_VAR == IS_VAR) {
  30446. zend_reference *ref = Z_REF_P(value);
  30447. if (GC_DELREF(ref) == 0) {
  30448. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  30449. efree_size(ref, sizeof(zend_reference));
  30450. value = &tmp;
  30451. } else {
  30452. value = Z_REFVAL_P(value);
  30453. Z_TRY_ADDREF_P(value);
  30454. }
  30455. } else {
  30456. value = Z_REFVAL_P(value);
  30457. Z_TRY_ADDREF_P(value);
  30458. }
  30459. } else if (IS_TMP_VAR == IS_CV) {
  30460. Z_TRY_ADDREF_P(value);
  30461. }
  30462. }
  30463. zend_hash_add_new(zobj->properties, name, value);
  30464. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30465. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30466. }
  30467. goto exit_assign_obj;
  30468. }
  30469. }
  30470. }
  30471. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30472. } else {
  30473. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  30474. if (UNEXPECTED(!name)) {
  30475. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  30476. UNDEF_RESULT();
  30477. goto exit_assign_obj;
  30478. }
  30479. }
  30480. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  30481. ZVAL_DEREF(value);
  30482. }
  30483. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  30484. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30485. zend_tmp_string_release(tmp_name);
  30486. }
  30487. free_and_exit_assign_obj:
  30488. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30489. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  30490. }
  30491. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  30492. exit_assign_obj:
  30493. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30494. /* assign_obj has two opcodes! */
  30495. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  30496. }
  30497. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  30498. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30499. {
  30500. USE_OPLINE
  30501. zval *object, *value, tmp;
  30502. zend_object *zobj;
  30503. zend_string *name, *tmp_name;
  30504. SAVE_OPLINE();
  30505. object = &EX(This);
  30506. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  30507. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  30508. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  30509. object = Z_REFVAL_P(object);
  30510. goto assign_object;
  30511. }
  30512. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  30513. value = &EG(uninitialized_zval);
  30514. goto free_and_exit_assign_obj;
  30515. }
  30516. assign_object:
  30517. zobj = Z_OBJ_P(object);
  30518. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30519. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  30520. void **cache_slot = CACHE_ADDR(opline->extended_value);
  30521. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  30522. zend_object *zobj = Z_OBJ_P(object);
  30523. zval *property_val;
  30524. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30525. property_val = OBJ_PROP(zobj, prop_offset);
  30526. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  30527. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  30528. if (UNEXPECTED(prop_info != NULL)) {
  30529. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  30530. goto free_and_exit_assign_obj;
  30531. } else {
  30532. fast_assign_obj:
  30533. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  30534. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30535. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30536. }
  30537. goto exit_assign_obj;
  30538. }
  30539. }
  30540. } else {
  30541. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30542. if (EXPECTED(zobj->properties != NULL)) {
  30543. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  30544. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  30545. GC_DELREF(zobj->properties);
  30546. }
  30547. zobj->properties = zend_array_dup(zobj->properties);
  30548. }
  30549. property_val = zend_hash_find_known_hash(zobj->properties, name);
  30550. if (property_val) {
  30551. goto fast_assign_obj;
  30552. }
  30553. }
  30554. if (!zobj->ce->__set) {
  30555. if (EXPECTED(zobj->properties == NULL)) {
  30556. rebuild_object_properties(zobj);
  30557. }
  30558. if (IS_VAR == IS_CONST) {
  30559. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  30560. Z_ADDREF_P(value);
  30561. }
  30562. } else if (IS_VAR != IS_TMP_VAR) {
  30563. if (Z_ISREF_P(value)) {
  30564. if (IS_VAR == IS_VAR) {
  30565. zend_reference *ref = Z_REF_P(value);
  30566. if (GC_DELREF(ref) == 0) {
  30567. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  30568. efree_size(ref, sizeof(zend_reference));
  30569. value = &tmp;
  30570. } else {
  30571. value = Z_REFVAL_P(value);
  30572. Z_TRY_ADDREF_P(value);
  30573. }
  30574. } else {
  30575. value = Z_REFVAL_P(value);
  30576. Z_TRY_ADDREF_P(value);
  30577. }
  30578. } else if (IS_VAR == IS_CV) {
  30579. Z_TRY_ADDREF_P(value);
  30580. }
  30581. }
  30582. zend_hash_add_new(zobj->properties, name, value);
  30583. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30584. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30585. }
  30586. goto exit_assign_obj;
  30587. }
  30588. }
  30589. }
  30590. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30591. } else {
  30592. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  30593. if (UNEXPECTED(!name)) {
  30594. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  30595. UNDEF_RESULT();
  30596. goto exit_assign_obj;
  30597. }
  30598. }
  30599. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  30600. ZVAL_DEREF(value);
  30601. }
  30602. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  30603. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30604. zend_tmp_string_release(tmp_name);
  30605. }
  30606. free_and_exit_assign_obj:
  30607. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30608. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  30609. }
  30610. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  30611. exit_assign_obj:
  30612. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30613. /* assign_obj has two opcodes! */
  30614. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  30615. }
  30616. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  30617. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30618. {
  30619. USE_OPLINE
  30620. zval *object, *value, tmp;
  30621. zend_object *zobj;
  30622. zend_string *name, *tmp_name;
  30623. SAVE_OPLINE();
  30624. object = &EX(This);
  30625. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  30626. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  30627. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  30628. object = Z_REFVAL_P(object);
  30629. goto assign_object;
  30630. }
  30631. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  30632. value = &EG(uninitialized_zval);
  30633. goto free_and_exit_assign_obj;
  30634. }
  30635. assign_object:
  30636. zobj = Z_OBJ_P(object);
  30637. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30638. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  30639. void **cache_slot = CACHE_ADDR(opline->extended_value);
  30640. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  30641. zend_object *zobj = Z_OBJ_P(object);
  30642. zval *property_val;
  30643. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30644. property_val = OBJ_PROP(zobj, prop_offset);
  30645. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  30646. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  30647. if (UNEXPECTED(prop_info != NULL)) {
  30648. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  30649. goto free_and_exit_assign_obj;
  30650. } else {
  30651. fast_assign_obj:
  30652. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  30653. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30654. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30655. }
  30656. goto exit_assign_obj;
  30657. }
  30658. }
  30659. } else {
  30660. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30661. if (EXPECTED(zobj->properties != NULL)) {
  30662. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  30663. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  30664. GC_DELREF(zobj->properties);
  30665. }
  30666. zobj->properties = zend_array_dup(zobj->properties);
  30667. }
  30668. property_val = zend_hash_find_known_hash(zobj->properties, name);
  30669. if (property_val) {
  30670. goto fast_assign_obj;
  30671. }
  30672. }
  30673. if (!zobj->ce->__set) {
  30674. if (EXPECTED(zobj->properties == NULL)) {
  30675. rebuild_object_properties(zobj);
  30676. }
  30677. if (IS_CV == IS_CONST) {
  30678. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  30679. Z_ADDREF_P(value);
  30680. }
  30681. } else if (IS_CV != IS_TMP_VAR) {
  30682. if (Z_ISREF_P(value)) {
  30683. if (IS_CV == IS_VAR) {
  30684. zend_reference *ref = Z_REF_P(value);
  30685. if (GC_DELREF(ref) == 0) {
  30686. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  30687. efree_size(ref, sizeof(zend_reference));
  30688. value = &tmp;
  30689. } else {
  30690. value = Z_REFVAL_P(value);
  30691. Z_TRY_ADDREF_P(value);
  30692. }
  30693. } else {
  30694. value = Z_REFVAL_P(value);
  30695. Z_TRY_ADDREF_P(value);
  30696. }
  30697. } else if (IS_CV == IS_CV) {
  30698. Z_TRY_ADDREF_P(value);
  30699. }
  30700. }
  30701. zend_hash_add_new(zobj->properties, name, value);
  30702. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30703. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30704. }
  30705. goto exit_assign_obj;
  30706. }
  30707. }
  30708. }
  30709. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  30710. } else {
  30711. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  30712. if (UNEXPECTED(!name)) {
  30713. UNDEF_RESULT();
  30714. goto exit_assign_obj;
  30715. }
  30716. }
  30717. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  30718. ZVAL_DEREF(value);
  30719. }
  30720. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  30721. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30722. zend_tmp_string_release(tmp_name);
  30723. }
  30724. free_and_exit_assign_obj:
  30725. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30726. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  30727. }
  30728. exit_assign_obj:
  30729. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30730. /* assign_obj has two opcodes! */
  30731. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  30732. }
  30733. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  30734. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30735. {
  30736. USE_OPLINE
  30737. zval *property, *container, *value_ptr;
  30738. SAVE_OPLINE();
  30739. container = &EX(This);
  30740. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30741. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  30742. if (1) {
  30743. if (IS_UNUSED == IS_UNUSED) {
  30744. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30745. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30746. } else {
  30747. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30748. }
  30749. } else {
  30750. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30751. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30752. } else {
  30753. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30754. }
  30755. }
  30756. } else {
  30757. zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30758. }
  30759. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30760. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  30761. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  30762. }
  30763. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  30764. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30765. {
  30766. USE_OPLINE
  30767. zval *property, *container, *value_ptr;
  30768. SAVE_OPLINE();
  30769. container = &EX(This);
  30770. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30771. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  30772. if (1) {
  30773. if (IS_UNUSED == IS_UNUSED) {
  30774. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30775. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30776. } else {
  30777. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30778. }
  30779. } else {
  30780. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30781. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30782. } else {
  30783. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30784. }
  30785. }
  30786. } else {
  30787. zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
  30788. }
  30789. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30790. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  30791. }
  30792. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  30793. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30794. {
  30795. USE_OPLINE
  30796. zend_string **rope;
  30797. zval *var;
  30798. /* Compiler allocates the necessary number of zval slots to keep the rope */
  30799. rope = (zend_string**)EX_VAR(opline->result.var);
  30800. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30801. var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30802. rope[0] = Z_STR_P(var);
  30803. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  30804. Z_ADDREF_P(var);
  30805. }
  30806. } else {
  30807. var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30808. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  30809. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  30810. rope[0] = zend_string_copy(Z_STR_P(var));
  30811. } else {
  30812. rope[0] = Z_STR_P(var);
  30813. }
  30814. } else {
  30815. SAVE_OPLINE();
  30816. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  30817. ZVAL_UNDEFINED_OP2();
  30818. }
  30819. rope[0] = zval_get_string_func(var);
  30820. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30821. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30822. }
  30823. }
  30824. ZEND_VM_NEXT_OPCODE();
  30825. }
  30826. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30827. {
  30828. zval *class_name;
  30829. USE_OPLINE
  30830. SAVE_OPLINE();
  30831. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  30832. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
  30833. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30834. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30835. zend_class_entry *ce = CACHED_PTR(opline->extended_value);
  30836. if (UNEXPECTED(ce == NULL)) {
  30837. class_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30838. ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
  30839. CACHE_PTR(opline->extended_value, ce);
  30840. }
  30841. Z_CE_P(EX_VAR(opline->result.var)) = ce;
  30842. } else {
  30843. class_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30844. try_class_name:
  30845. if (Z_TYPE_P(class_name) == IS_OBJECT) {
  30846. Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
  30847. } else if (Z_TYPE_P(class_name) == IS_STRING) {
  30848. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
  30849. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
  30850. class_name = Z_REFVAL_P(class_name);
  30851. goto try_class_name;
  30852. } else {
  30853. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
  30854. ZVAL_UNDEFINED_OP2();
  30855. if (UNEXPECTED(EG(exception) != NULL)) {
  30856. HANDLE_EXCEPTION();
  30857. }
  30858. }
  30859. zend_throw_error(NULL, "Class name must be a valid object or a string");
  30860. }
  30861. }
  30862. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30863. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30864. }
  30865. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30866. {
  30867. USE_OPLINE
  30868. zval *function_name;
  30869. zval *object;
  30870. zend_function *fbc;
  30871. zend_class_entry *called_scope;
  30872. zend_object *obj;
  30873. zend_execute_data *call;
  30874. uint32_t call_info;
  30875. SAVE_OPLINE();
  30876. object = &EX(This);
  30877. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30878. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30879. }
  30880. if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
  30881. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  30882. do {
  30883. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  30884. function_name = Z_REFVAL_P(function_name);
  30885. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  30886. break;
  30887. }
  30888. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  30889. ZVAL_UNDEFINED_OP2();
  30890. if (UNEXPECTED(EG(exception) != NULL)) {
  30891. HANDLE_EXCEPTION();
  30892. }
  30893. }
  30894. zend_throw_error(NULL, "Method name must be a string");
  30895. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30896. HANDLE_EXCEPTION();
  30897. } while (0);
  30898. }
  30899. if (IS_UNUSED == IS_UNUSED) {
  30900. obj = Z_OBJ_P(object);
  30901. } else {
  30902. do {
  30903. if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  30904. obj = Z_OBJ_P(object);
  30905. } else {
  30906. if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  30907. zend_reference *ref = Z_REF_P(object);
  30908. object = &ref->val;
  30909. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  30910. obj = Z_OBJ_P(object);
  30911. if (IS_UNUSED & IS_VAR) {
  30912. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  30913. efree_size(ref, sizeof(zend_reference));
  30914. } else {
  30915. Z_ADDREF_P(object);
  30916. }
  30917. }
  30918. break;
  30919. }
  30920. }
  30921. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  30922. object = ZVAL_UNDEFINED_OP1();
  30923. if (UNEXPECTED(EG(exception) != NULL)) {
  30924. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30925. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30926. }
  30927. HANDLE_EXCEPTION();
  30928. }
  30929. }
  30930. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30931. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30932. }
  30933. zend_invalid_method_call(object, function_name);
  30934. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30935. HANDLE_EXCEPTION();
  30936. }
  30937. } while (0);
  30938. }
  30939. called_scope = obj->ce;
  30940. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  30941. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  30942. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  30943. } else {
  30944. zend_object *orig_obj = obj;
  30945. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  30946. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  30947. }
  30948. /* First, locate the function. */
  30949. 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));
  30950. if (UNEXPECTED(fbc == NULL)) {
  30951. if (EXPECTED(!EG(exception))) {
  30952. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  30953. }
  30954. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30955. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  30956. zend_objects_store_del(orig_obj);
  30957. }
  30958. HANDLE_EXCEPTION();
  30959. }
  30960. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  30961. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  30962. EXPECTED(obj == orig_obj)) {
  30963. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  30964. }
  30965. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  30966. GC_ADDREF(obj); /* For $this pointer */
  30967. if (GC_DELREF(orig_obj) == 0) {
  30968. zend_objects_store_del(orig_obj);
  30969. }
  30970. }
  30971. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  30972. init_func_run_time_cache(&fbc->op_array);
  30973. }
  30974. }
  30975. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  30976. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  30977. }
  30978. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  30979. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  30980. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  30981. zend_objects_store_del(obj);
  30982. if (UNEXPECTED(EG(exception))) {
  30983. HANDLE_EXCEPTION();
  30984. }
  30985. }
  30986. /* call static method */
  30987. obj = (zend_object*)called_scope;
  30988. call_info = ZEND_CALL_NESTED_FUNCTION;
  30989. } else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  30990. if (IS_UNUSED == IS_CV) {
  30991. GC_ADDREF(obj); /* For $this pointer */
  30992. }
  30993. /* CV may be changed indirectly (e.g. when it's a reference) */
  30994. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  30995. }
  30996. call = zend_vm_stack_push_call_frame(call_info,
  30997. fbc, opline->extended_value, obj);
  30998. call->prev_execute_data = EX(call);
  30999. EX(call) = call;
  31000. ZEND_VM_NEXT_OPCODE();
  31001. }
  31002. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31003. {
  31004. USE_OPLINE
  31005. zval *function_name;
  31006. zend_class_entry *ce;
  31007. uint32_t call_info;
  31008. zend_function *fbc;
  31009. zend_execute_data *call;
  31010. SAVE_OPLINE();
  31011. if (IS_UNUSED == IS_CONST) {
  31012. /* no function found. try a static method in class */
  31013. ce = CACHED_PTR(opline->result.num);
  31014. if (UNEXPECTED(ce == NULL)) {
  31015. 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);
  31016. if (UNEXPECTED(ce == NULL)) {
  31017. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  31018. HANDLE_EXCEPTION();
  31019. }
  31020. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  31021. CACHE_PTR(opline->result.num, ce);
  31022. }
  31023. }
  31024. } else if (IS_UNUSED == IS_UNUSED) {
  31025. ce = zend_fetch_class(NULL, opline->op1.num);
  31026. if (UNEXPECTED(ce == NULL)) {
  31027. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  31028. HANDLE_EXCEPTION();
  31029. }
  31030. } else {
  31031. ce = Z_CE_P(EX_VAR(opline->op1.var));
  31032. }
  31033. if (IS_UNUSED == IS_CONST &&
  31034. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  31035. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  31036. /* nothing to do */
  31037. } else if (IS_UNUSED != IS_CONST &&
  31038. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  31039. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  31040. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  31041. } else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  31042. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  31043. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  31044. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  31045. do {
  31046. if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  31047. function_name = Z_REFVAL_P(function_name);
  31048. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  31049. break;
  31050. }
  31051. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  31052. ZVAL_UNDEFINED_OP2();
  31053. if (UNEXPECTED(EG(exception) != NULL)) {
  31054. HANDLE_EXCEPTION();
  31055. }
  31056. }
  31057. zend_throw_error(NULL, "Method name must be a string");
  31058. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  31059. HANDLE_EXCEPTION();
  31060. } while (0);
  31061. }
  31062. }
  31063. if (ce->get_static_method) {
  31064. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  31065. } else {
  31066. 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));
  31067. }
  31068. if (UNEXPECTED(fbc == NULL)) {
  31069. if (EXPECTED(!EG(exception))) {
  31070. zend_undefined_method(ce, Z_STR_P(function_name));
  31071. }
  31072. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  31073. HANDLE_EXCEPTION();
  31074. }
  31075. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  31076. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  31077. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  31078. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  31079. }
  31080. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  31081. init_func_run_time_cache(&fbc->op_array);
  31082. }
  31083. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  31084. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  31085. }
  31086. } else {
  31087. if (UNEXPECTED(ce->constructor == NULL)) {
  31088. zend_throw_error(NULL, "Cannot call constructor");
  31089. HANDLE_EXCEPTION();
  31090. }
  31091. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  31092. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  31093. HANDLE_EXCEPTION();
  31094. }
  31095. fbc = ce->constructor;
  31096. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  31097. init_func_run_time_cache(&fbc->op_array);
  31098. }
  31099. }
  31100. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  31101. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  31102. ce = (zend_class_entry*)Z_OBJ(EX(This));
  31103. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  31104. } else {
  31105. zend_non_static_method_call(fbc);
  31106. HANDLE_EXCEPTION();
  31107. }
  31108. } else {
  31109. /* previous opcode is ZEND_FETCH_CLASS */
  31110. if (IS_UNUSED == IS_UNUSED
  31111. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  31112. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  31113. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  31114. ce = Z_OBJCE(EX(This));
  31115. } else {
  31116. ce = Z_CE(EX(This));
  31117. }
  31118. }
  31119. call_info = ZEND_CALL_NESTED_FUNCTION;
  31120. }
  31121. call = zend_vm_stack_push_call_frame(call_info,
  31122. fbc, opline->extended_value, ce);
  31123. call->prev_execute_data = EX(call);
  31124. EX(call) = call;
  31125. ZEND_VM_NEXT_OPCODE();
  31126. }
  31127. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31128. {
  31129. zval *array;
  31130. uint32_t size;
  31131. USE_OPLINE
  31132. array = EX_VAR(opline->result.var);
  31133. if (IS_UNUSED != IS_UNUSED) {
  31134. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  31135. ZVAL_ARR(array, zend_new_array(size));
  31136. /* Explicitly initialize array as not-packed if flag is set */
  31137. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  31138. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  31139. }
  31140. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  31141. } else {
  31142. ZVAL_ARR(array, zend_new_array(0));
  31143. ZEND_VM_NEXT_OPCODE();
  31144. }
  31145. }
  31146. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31147. {
  31148. USE_OPLINE
  31149. zval *container;
  31150. zval *offset;
  31151. zend_string *name, *tmp_name;
  31152. SAVE_OPLINE();
  31153. container = &EX(This);
  31154. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  31155. do {
  31156. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  31157. if (Z_ISREF_P(container)) {
  31158. container = Z_REFVAL_P(container);
  31159. if (Z_TYPE_P(container) != IS_OBJECT) {
  31160. if (IS_UNUSED == IS_CV
  31161. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  31162. ZVAL_UNDEFINED_OP1();
  31163. }
  31164. break;
  31165. }
  31166. } else {
  31167. break;
  31168. }
  31169. }
  31170. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  31171. name = Z_STR_P(offset);
  31172. } else {
  31173. name = zval_try_get_tmp_string(offset, &tmp_name);
  31174. if (UNEXPECTED(!name)) {
  31175. break;
  31176. }
  31177. }
  31178. 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));
  31179. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  31180. zend_tmp_string_release(tmp_name);
  31181. }
  31182. } while (0);
  31183. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  31184. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31185. }
  31186. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31187. {
  31188. USE_OPLINE
  31189. zval *container;
  31190. int result;
  31191. zval *offset;
  31192. zend_string *name, *tmp_name;
  31193. SAVE_OPLINE();
  31194. container = &EX(This);
  31195. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  31196. if (IS_UNUSED == IS_CONST ||
  31197. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  31198. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  31199. container = Z_REFVAL_P(container);
  31200. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  31201. result = (opline->extended_value & ZEND_ISEMPTY);
  31202. goto isset_object_finish;
  31203. }
  31204. } else {
  31205. result = (opline->extended_value & ZEND_ISEMPTY);
  31206. goto isset_object_finish;
  31207. }
  31208. }
  31209. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  31210. name = Z_STR_P(offset);
  31211. } else {
  31212. name = zval_try_get_tmp_string(offset, &tmp_name);
  31213. if (UNEXPECTED(!name)) {
  31214. result = 0;
  31215. goto isset_object_finish;
  31216. }
  31217. }
  31218. result =
  31219. (opline->extended_value & ZEND_ISEMPTY) ^
  31220. 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));
  31221. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  31222. zend_tmp_string_release(tmp_name);
  31223. }
  31224. isset_object_finish:
  31225. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  31226. ZEND_VM_SMART_BRANCH(result, 1);
  31227. }
  31228. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31229. {
  31230. USE_OPLINE
  31231. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  31232. SAVE_OPLINE();
  31233. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  31234. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  31235. }
  31236. /* Destroy the previously yielded value */
  31237. zval_ptr_dtor(&generator->value);
  31238. /* Destroy the previously yielded key */
  31239. zval_ptr_dtor(&generator->key);
  31240. /* Set the new yielded value */
  31241. if (IS_UNUSED != IS_UNUSED) {
  31242. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  31243. /* Constants and temporary variables aren't yieldable by reference,
  31244. * but we still allow them with a notice. */
  31245. if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
  31246. zval *value;
  31247. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  31248. value = NULL;
  31249. ZVAL_COPY_VALUE(&generator->value, value);
  31250. if (IS_UNUSED == IS_CONST) {
  31251. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  31252. Z_ADDREF(generator->value);
  31253. }
  31254. }
  31255. } else {
  31256. zval *value_ptr = NULL;
  31257. /* If a function call result is yielded and the function did
  31258. * not return by reference we throw a notice. */
  31259. do {
  31260. if (IS_UNUSED == IS_VAR) {
  31261. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  31262. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  31263. && !Z_ISREF_P(value_ptr)) {
  31264. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  31265. ZVAL_COPY(&generator->value, value_ptr);
  31266. break;
  31267. }
  31268. }
  31269. if (Z_ISREF_P(value_ptr)) {
  31270. Z_ADDREF_P(value_ptr);
  31271. } else {
  31272. ZVAL_MAKE_REF_EX(value_ptr, 2);
  31273. }
  31274. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  31275. } while (0);
  31276. }
  31277. } else {
  31278. zval *value = NULL;
  31279. /* Consts, temporary variables and references need copying */
  31280. if (IS_UNUSED == IS_CONST) {
  31281. ZVAL_COPY_VALUE(&generator->value, value);
  31282. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  31283. Z_ADDREF(generator->value);
  31284. }
  31285. } else if (IS_UNUSED == IS_TMP_VAR) {
  31286. ZVAL_COPY_VALUE(&generator->value, value);
  31287. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  31288. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  31289. } else {
  31290. ZVAL_COPY_VALUE(&generator->value, value);
  31291. if (IS_UNUSED == IS_CV) {
  31292. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  31293. }
  31294. }
  31295. }
  31296. } else {
  31297. /* If no value was specified yield null */
  31298. ZVAL_NULL(&generator->value);
  31299. }
  31300. /* Set the new yielded key */
  31301. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  31302. zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  31303. if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  31304. key = Z_REFVAL_P(key);
  31305. }
  31306. ZVAL_COPY(&generator->key, key);
  31307. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  31308. if (Z_TYPE(generator->key) == IS_LONG
  31309. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  31310. ) {
  31311. generator->largest_used_integer_key = Z_LVAL(generator->key);
  31312. }
  31313. } else {
  31314. /* If no key was specified we use auto-increment keys */
  31315. generator->largest_used_integer_key++;
  31316. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  31317. }
  31318. if (RETURN_VALUE_USED(opline)) {
  31319. /* If the return value of yield is used set the send
  31320. * target and initialize it to NULL */
  31321. generator->send_target = EX_VAR(opline->result.var);
  31322. ZVAL_NULL(generator->send_target);
  31323. } else {
  31324. generator->send_target = NULL;
  31325. }
  31326. /* We increment to the next op, so we are at the correct position when the
  31327. * generator is resumed. */
  31328. ZEND_VM_INC_OPCODE();
  31329. /* The GOTO VM uses a local opline variable. We need to set the opline
  31330. * variable in execute_data so we don't resume at an old position. */
  31331. SAVE_OPLINE();
  31332. ZEND_VM_RETURN();
  31333. }
  31334. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31335. {
  31336. zval *class_name;
  31337. USE_OPLINE
  31338. SAVE_OPLINE();
  31339. if (IS_UNUSED == IS_UNUSED) {
  31340. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
  31341. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31342. } else if (IS_UNUSED == IS_CONST) {
  31343. zend_class_entry *ce = CACHED_PTR(opline->extended_value);
  31344. if (UNEXPECTED(ce == NULL)) {
  31345. class_name = NULL;
  31346. ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
  31347. CACHE_PTR(opline->extended_value, ce);
  31348. }
  31349. Z_CE_P(EX_VAR(opline->result.var)) = ce;
  31350. } else {
  31351. class_name = NULL;
  31352. try_class_name:
  31353. if (Z_TYPE_P(class_name) == IS_OBJECT) {
  31354. Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
  31355. } else if (Z_TYPE_P(class_name) == IS_STRING) {
  31356. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
  31357. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
  31358. class_name = Z_REFVAL_P(class_name);
  31359. goto try_class_name;
  31360. } else {
  31361. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
  31362. ZVAL_UNDEFINED_OP2();
  31363. if (UNEXPECTED(EG(exception) != NULL)) {
  31364. HANDLE_EXCEPTION();
  31365. }
  31366. }
  31367. zend_throw_error(NULL, "Class name must be a valid object or a string");
  31368. }
  31369. }
  31370. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31371. }
  31372. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31373. {
  31374. USE_OPLINE
  31375. zval *function_name;
  31376. zend_class_entry *ce;
  31377. uint32_t call_info;
  31378. zend_function *fbc;
  31379. zend_execute_data *call;
  31380. SAVE_OPLINE();
  31381. if (IS_UNUSED == IS_CONST) {
  31382. /* no function found. try a static method in class */
  31383. ce = CACHED_PTR(opline->result.num);
  31384. if (UNEXPECTED(ce == NULL)) {
  31385. 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);
  31386. if (UNEXPECTED(ce == NULL)) {
  31387. HANDLE_EXCEPTION();
  31388. }
  31389. if (IS_UNUSED != IS_CONST) {
  31390. CACHE_PTR(opline->result.num, ce);
  31391. }
  31392. }
  31393. } else if (IS_UNUSED == IS_UNUSED) {
  31394. ce = zend_fetch_class(NULL, opline->op1.num);
  31395. if (UNEXPECTED(ce == NULL)) {
  31396. HANDLE_EXCEPTION();
  31397. }
  31398. } else {
  31399. ce = Z_CE_P(EX_VAR(opline->op1.var));
  31400. }
  31401. if (IS_UNUSED == IS_CONST &&
  31402. IS_UNUSED == IS_CONST &&
  31403. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  31404. /* nothing to do */
  31405. } else if (IS_UNUSED != IS_CONST &&
  31406. IS_UNUSED == IS_CONST &&
  31407. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  31408. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  31409. } else if (IS_UNUSED != IS_UNUSED) {
  31410. function_name = NULL;
  31411. if (IS_UNUSED != IS_CONST) {
  31412. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  31413. do {
  31414. if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  31415. function_name = Z_REFVAL_P(function_name);
  31416. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  31417. break;
  31418. }
  31419. } else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  31420. ZVAL_UNDEFINED_OP2();
  31421. if (UNEXPECTED(EG(exception) != NULL)) {
  31422. HANDLE_EXCEPTION();
  31423. }
  31424. }
  31425. zend_throw_error(NULL, "Method name must be a string");
  31426. HANDLE_EXCEPTION();
  31427. } while (0);
  31428. }
  31429. }
  31430. if (ce->get_static_method) {
  31431. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  31432. } else {
  31433. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  31434. }
  31435. if (UNEXPECTED(fbc == NULL)) {
  31436. if (EXPECTED(!EG(exception))) {
  31437. zend_undefined_method(ce, Z_STR_P(function_name));
  31438. }
  31439. HANDLE_EXCEPTION();
  31440. }
  31441. if (IS_UNUSED == IS_CONST &&
  31442. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  31443. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  31444. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  31445. }
  31446. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  31447. init_func_run_time_cache(&fbc->op_array);
  31448. }
  31449. if (IS_UNUSED != IS_CONST) {
  31450. }
  31451. } else {
  31452. if (UNEXPECTED(ce->constructor == NULL)) {
  31453. zend_throw_error(NULL, "Cannot call constructor");
  31454. HANDLE_EXCEPTION();
  31455. }
  31456. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  31457. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  31458. HANDLE_EXCEPTION();
  31459. }
  31460. fbc = ce->constructor;
  31461. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  31462. init_func_run_time_cache(&fbc->op_array);
  31463. }
  31464. }
  31465. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  31466. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  31467. ce = (zend_class_entry*)Z_OBJ(EX(This));
  31468. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  31469. } else {
  31470. zend_non_static_method_call(fbc);
  31471. HANDLE_EXCEPTION();
  31472. }
  31473. } else {
  31474. /* previous opcode is ZEND_FETCH_CLASS */
  31475. if (IS_UNUSED == IS_UNUSED
  31476. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  31477. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  31478. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  31479. ce = Z_OBJCE(EX(This));
  31480. } else {
  31481. ce = Z_CE(EX(This));
  31482. }
  31483. }
  31484. call_info = ZEND_CALL_NESTED_FUNCTION;
  31485. }
  31486. call = zend_vm_stack_push_call_frame(call_info,
  31487. fbc, opline->extended_value, ce);
  31488. call->prev_execute_data = EX(call);
  31489. EX(call) = call;
  31490. ZEND_VM_NEXT_OPCODE();
  31491. }
  31492. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31493. {
  31494. if (IS_UNUSED == IS_UNUSED) {
  31495. SAVE_OPLINE();
  31496. zend_verify_missing_return_type(EX(func));
  31497. HANDLE_EXCEPTION();
  31498. } else {
  31499. /* prevents "undefined variable opline" errors */
  31500. #if 0 || (IS_UNUSED != IS_UNUSED)
  31501. USE_OPLINE
  31502. zval *retval_ref, *retval_ptr;
  31503. zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
  31504. retval_ref = retval_ptr = NULL;
  31505. if (IS_UNUSED == IS_CONST) {
  31506. ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
  31507. retval_ref = retval_ptr = EX_VAR(opline->result.var);
  31508. } else if (IS_UNUSED == IS_VAR) {
  31509. if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
  31510. retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
  31511. }
  31512. ZVAL_DEREF(retval_ptr);
  31513. } else if (IS_UNUSED == IS_CV) {
  31514. ZVAL_DEREF(retval_ptr);
  31515. }
  31516. if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
  31517. ZEND_VM_NEXT_OPCODE();
  31518. }
  31519. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
  31520. SAVE_OPLINE();
  31521. retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
  31522. if (UNEXPECTED(EG(exception))) {
  31523. HANDLE_EXCEPTION();
  31524. }
  31525. if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
  31526. ZEND_VM_NEXT_OPCODE();
  31527. }
  31528. }
  31529. zend_reference *ref = NULL;
  31530. void *cache_slot = CACHE_ADDR(opline->op2.num);
  31531. if (UNEXPECTED(retval_ref != retval_ptr)) {
  31532. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  31533. ref = Z_REF_P(retval_ref);
  31534. } else {
  31535. /* A cast might happen - unwrap the reference if this is a by-value return */
  31536. if (Z_REFCOUNT_P(retval_ref) == 1) {
  31537. ZVAL_UNREF(retval_ref);
  31538. } else {
  31539. Z_DELREF_P(retval_ref);
  31540. ZVAL_COPY(retval_ref, retval_ptr);
  31541. }
  31542. retval_ptr = retval_ref;
  31543. }
  31544. }
  31545. SAVE_OPLINE();
  31546. if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
  31547. zend_verify_return_error(EX(func), retval_ptr);
  31548. HANDLE_EXCEPTION();
  31549. }
  31550. ZEND_VM_NEXT_OPCODE();
  31551. #endif
  31552. }
  31553. }
  31554. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31555. {
  31556. SAVE_OPLINE();
  31557. zend_verify_never_error(EX(func));
  31558. HANDLE_EXCEPTION();
  31559. }
  31560. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31561. {
  31562. USE_OPLINE
  31563. uint32_t arg_num;
  31564. if (IS_UNUSED == IS_CONST) {
  31565. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  31566. arg_num = zend_get_arg_offset_by_name(
  31567. EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
  31568. if (UNEXPECTED(arg_num == 0)) {
  31569. /* Treat this as a by-value argument, and throw an error during SEND. */
  31570. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31571. ZEND_VM_NEXT_OPCODE();
  31572. }
  31573. } else {
  31574. arg_num = opline->op2.num;
  31575. }
  31576. if (EXPECTED(0)) {
  31577. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  31578. ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31579. } else {
  31580. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31581. }
  31582. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  31583. ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31584. } else {
  31585. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31586. }
  31587. ZEND_VM_NEXT_OPCODE();
  31588. }
  31589. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31590. {
  31591. USE_OPLINE
  31592. uint32_t arg_num;
  31593. if (IS_UNUSED == IS_CONST) {
  31594. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  31595. arg_num = zend_get_arg_offset_by_name(
  31596. EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
  31597. if (UNEXPECTED(arg_num == 0)) {
  31598. /* Treat this as a by-value argument, and throw an error during SEND. */
  31599. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31600. ZEND_VM_NEXT_OPCODE();
  31601. }
  31602. } else {
  31603. arg_num = opline->op2.num;
  31604. }
  31605. if (EXPECTED(1)) {
  31606. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  31607. ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31608. } else {
  31609. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31610. }
  31611. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  31612. ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31613. } else {
  31614. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  31615. }
  31616. ZEND_VM_NEXT_OPCODE();
  31617. }
  31618. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31619. {
  31620. USE_OPLINE
  31621. zend_execute_data *call = execute_data->call;
  31622. if (EXPECTED(!(ZEND_CALL_INFO(call) & ZEND_CALL_MAY_HAVE_UNDEF))) {
  31623. ZEND_VM_NEXT_OPCODE();
  31624. }
  31625. SAVE_OPLINE();
  31626. zend_handle_undef_args(call);
  31627. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31628. }
  31629. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31630. {
  31631. USE_OPLINE
  31632. zval *result;
  31633. zend_function *constructor;
  31634. zend_class_entry *ce;
  31635. zend_execute_data *call;
  31636. SAVE_OPLINE();
  31637. if (IS_UNUSED == IS_CONST) {
  31638. ce = CACHED_PTR(opline->op2.num);
  31639. if (UNEXPECTED(ce == NULL)) {
  31640. 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);
  31641. if (UNEXPECTED(ce == NULL)) {
  31642. ZVAL_UNDEF(EX_VAR(opline->result.var));
  31643. HANDLE_EXCEPTION();
  31644. }
  31645. CACHE_PTR(opline->op2.num, ce);
  31646. }
  31647. } else if (IS_UNUSED == IS_UNUSED) {
  31648. ce = zend_fetch_class(NULL, opline->op1.num);
  31649. if (UNEXPECTED(ce == NULL)) {
  31650. ZVAL_UNDEF(EX_VAR(opline->result.var));
  31651. HANDLE_EXCEPTION();
  31652. }
  31653. } else {
  31654. ce = Z_CE_P(EX_VAR(opline->op1.var));
  31655. }
  31656. result = EX_VAR(opline->result.var);
  31657. if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
  31658. ZVAL_UNDEF(result);
  31659. HANDLE_EXCEPTION();
  31660. }
  31661. constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
  31662. if (constructor == NULL) {
  31663. if (UNEXPECTED(EG(exception))) {
  31664. HANDLE_EXCEPTION();
  31665. }
  31666. /* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
  31667. * opcode is DO_FCALL in case EXT instructions are used. */
  31668. if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
  31669. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  31670. }
  31671. /* Perform a dummy function call */
  31672. call = zend_vm_stack_push_call_frame(
  31673. ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
  31674. opline->extended_value, NULL);
  31675. } else {
  31676. if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
  31677. init_func_run_time_cache(&constructor->op_array);
  31678. }
  31679. /* We are not handling overloaded classes right now */
  31680. call = zend_vm_stack_push_call_frame(
  31681. ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
  31682. constructor,
  31683. opline->extended_value,
  31684. Z_OBJ_P(result));
  31685. Z_ADDREF_P(result);
  31686. }
  31687. call->prev_execute_data = EX(call);
  31688. EX(call) = call;
  31689. ZEND_VM_NEXT_OPCODE();
  31690. }
  31691. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31692. {
  31693. zval *array;
  31694. uint32_t size;
  31695. USE_OPLINE
  31696. array = EX_VAR(opline->result.var);
  31697. if (IS_UNUSED != IS_UNUSED) {
  31698. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  31699. ZVAL_ARR(array, zend_new_array(size));
  31700. /* Explicitly initialize array as not-packed if flag is set */
  31701. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  31702. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  31703. }
  31704. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  31705. } else {
  31706. ZVAL_ARR(array, zend_new_array(0));
  31707. ZEND_VM_NEXT_OPCODE();
  31708. }
  31709. }
  31710. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31711. {
  31712. USE_OPLINE
  31713. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  31714. SAVE_OPLINE();
  31715. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  31716. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  31717. }
  31718. /* Destroy the previously yielded value */
  31719. zval_ptr_dtor(&generator->value);
  31720. /* Destroy the previously yielded key */
  31721. zval_ptr_dtor(&generator->key);
  31722. /* Set the new yielded value */
  31723. if (IS_UNUSED != IS_UNUSED) {
  31724. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  31725. /* Constants and temporary variables aren't yieldable by reference,
  31726. * but we still allow them with a notice. */
  31727. if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
  31728. zval *value;
  31729. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  31730. value = NULL;
  31731. ZVAL_COPY_VALUE(&generator->value, value);
  31732. if (IS_UNUSED == IS_CONST) {
  31733. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  31734. Z_ADDREF(generator->value);
  31735. }
  31736. }
  31737. } else {
  31738. zval *value_ptr = NULL;
  31739. /* If a function call result is yielded and the function did
  31740. * not return by reference we throw a notice. */
  31741. do {
  31742. if (IS_UNUSED == IS_VAR) {
  31743. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  31744. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  31745. && !Z_ISREF_P(value_ptr)) {
  31746. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  31747. ZVAL_COPY(&generator->value, value_ptr);
  31748. break;
  31749. }
  31750. }
  31751. if (Z_ISREF_P(value_ptr)) {
  31752. Z_ADDREF_P(value_ptr);
  31753. } else {
  31754. ZVAL_MAKE_REF_EX(value_ptr, 2);
  31755. }
  31756. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  31757. } while (0);
  31758. }
  31759. } else {
  31760. zval *value = NULL;
  31761. /* Consts, temporary variables and references need copying */
  31762. if (IS_UNUSED == IS_CONST) {
  31763. ZVAL_COPY_VALUE(&generator->value, value);
  31764. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  31765. Z_ADDREF(generator->value);
  31766. }
  31767. } else if (IS_UNUSED == IS_TMP_VAR) {
  31768. ZVAL_COPY_VALUE(&generator->value, value);
  31769. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  31770. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  31771. } else {
  31772. ZVAL_COPY_VALUE(&generator->value, value);
  31773. if (IS_UNUSED == IS_CV) {
  31774. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  31775. }
  31776. }
  31777. }
  31778. } else {
  31779. /* If no value was specified yield null */
  31780. ZVAL_NULL(&generator->value);
  31781. }
  31782. /* Set the new yielded key */
  31783. if (IS_UNUSED != IS_UNUSED) {
  31784. zval *key = NULL;
  31785. if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  31786. key = Z_REFVAL_P(key);
  31787. }
  31788. ZVAL_COPY(&generator->key, key);
  31789. if (Z_TYPE(generator->key) == IS_LONG
  31790. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  31791. ) {
  31792. generator->largest_used_integer_key = Z_LVAL(generator->key);
  31793. }
  31794. } else {
  31795. /* If no key was specified we use auto-increment keys */
  31796. generator->largest_used_integer_key++;
  31797. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  31798. }
  31799. if (RETURN_VALUE_USED(opline)) {
  31800. /* If the return value of yield is used set the send
  31801. * target and initialize it to NULL */
  31802. generator->send_target = EX_VAR(opline->result.var);
  31803. ZVAL_NULL(generator->send_target);
  31804. } else {
  31805. generator->send_target = NULL;
  31806. }
  31807. /* We increment to the next op, so we are at the correct position when the
  31808. * generator is resumed. */
  31809. ZEND_VM_INC_OPCODE();
  31810. /* The GOTO VM uses a local opline variable. We need to set the opline
  31811. * variable in execute_data so we don't resume at an old position. */
  31812. SAVE_OPLINE();
  31813. ZEND_VM_RETURN();
  31814. }
  31815. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31816. {
  31817. USE_OPLINE
  31818. if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
  31819. zval *result = EX_VAR(opline->result.var);
  31820. ZVAL_OBJ(result, Z_OBJ(EX(This)));
  31821. Z_ADDREF_P(result);
  31822. ZEND_VM_NEXT_OPCODE();
  31823. } else {
  31824. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  31825. }
  31826. }
  31827. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31828. {
  31829. USE_OPLINE
  31830. /* For symbol tables we need to deal with exactly the same problems as for property tables. */
  31831. ZVAL_ARR(EX_VAR(opline->result.var),
  31832. zend_proptable_to_symtable(&EG(symbol_table), /* always_duplicate */ 1));
  31833. ZEND_VM_NEXT_OPCODE();
  31834. }
  31835. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31836. {
  31837. USE_OPLINE
  31838. ZVAL_BOOL(EX_VAR(opline->result.var),
  31839. (opline->extended_value & ZEND_ISEMPTY) ^
  31840. (Z_TYPE(EX(This)) == IS_OBJECT));
  31841. ZEND_VM_NEXT_OPCODE();
  31842. }
  31843. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31844. {
  31845. USE_OPLINE
  31846. if (IS_UNUSED == IS_UNUSED) {
  31847. if (UNEXPECTED(!EX(func)->common.scope)) {
  31848. SAVE_OPLINE();
  31849. zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
  31850. ZVAL_UNDEF(EX_VAR(opline->result.var));
  31851. HANDLE_EXCEPTION();
  31852. } else {
  31853. ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
  31854. ZEND_VM_NEXT_OPCODE();
  31855. }
  31856. } else {
  31857. zval *op1;
  31858. SAVE_OPLINE();
  31859. op1 = NULL;
  31860. while (1) {
  31861. if (Z_TYPE_P(op1) == IS_OBJECT) {
  31862. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
  31863. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
  31864. op1 = Z_REFVAL_P(op1);
  31865. continue;
  31866. } else {
  31867. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  31868. ZVAL_UNDEFINED_OP1();
  31869. }
  31870. zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_type_name(op1));
  31871. ZVAL_UNDEF(EX_VAR(opline->result.var));
  31872. }
  31873. break;
  31874. }
  31875. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31876. }
  31877. }
  31878. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31879. {
  31880. USE_OPLINE
  31881. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  31882. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE(EX(This))->name);
  31883. } else if (Z_CE(EX(This))) {
  31884. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_CE(EX(This))->name);
  31885. } else {
  31886. ZEND_ASSERT(!EX(func)->common.scope);
  31887. SAVE_OPLINE();
  31888. zend_throw_error(NULL, "get_called_class() must be called from within a class");
  31889. ZVAL_UNDEF(EX_VAR(opline->result.var));
  31890. HANDLE_EXCEPTION();
  31891. }
  31892. ZEND_VM_NEXT_OPCODE();
  31893. }
  31894. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31895. {
  31896. USE_OPLINE
  31897. ZVAL_LONG(EX_VAR(opline->result.var), EX_NUM_ARGS());
  31898. ZEND_VM_NEXT_OPCODE();
  31899. }
  31900. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31901. {
  31902. USE_OPLINE
  31903. zend_array *ht;
  31904. uint32_t arg_count, result_size, skip;
  31905. arg_count = EX_NUM_ARGS();
  31906. if (IS_UNUSED == IS_CONST) {
  31907. skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
  31908. if (arg_count < skip) {
  31909. result_size = 0;
  31910. } else {
  31911. result_size = arg_count - skip;
  31912. }
  31913. } else {
  31914. skip = 0;
  31915. result_size = arg_count;
  31916. }
  31917. if (result_size) {
  31918. uint32_t first_extra_arg = EX(func)->op_array.num_args;
  31919. ht = zend_new_array(result_size);
  31920. ZVAL_ARR(EX_VAR(opline->result.var), ht);
  31921. zend_hash_real_init_packed(ht);
  31922. ZEND_HASH_FILL_PACKED(ht) {
  31923. zval *p, *q;
  31924. uint32_t i = skip;
  31925. p = EX_VAR_NUM(i);
  31926. if (arg_count > first_extra_arg) {
  31927. while (i < first_extra_arg) {
  31928. q = p;
  31929. if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
  31930. ZVAL_DEREF(q);
  31931. if (Z_OPT_REFCOUNTED_P(q)) {
  31932. Z_ADDREF_P(q);
  31933. }
  31934. ZEND_HASH_FILL_SET(q);
  31935. } else {
  31936. ZEND_HASH_FILL_SET_NULL();
  31937. }
  31938. ZEND_HASH_FILL_NEXT();
  31939. p++;
  31940. i++;
  31941. }
  31942. if (skip < first_extra_arg) {
  31943. skip = 0;
  31944. } else {
  31945. skip -= first_extra_arg;
  31946. }
  31947. p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
  31948. }
  31949. while (i < arg_count) {
  31950. q = p;
  31951. if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
  31952. ZVAL_DEREF(q);
  31953. if (Z_OPT_REFCOUNTED_P(q)) {
  31954. Z_ADDREF_P(q);
  31955. }
  31956. ZEND_HASH_FILL_SET(q);
  31957. } else {
  31958. ZEND_HASH_FILL_SET_NULL();
  31959. }
  31960. ZEND_HASH_FILL_NEXT();
  31961. p++;
  31962. i++;
  31963. }
  31964. } ZEND_HASH_FILL_END();
  31965. ht->nNumOfElements = result_size;
  31966. } else {
  31967. ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
  31968. }
  31969. ZEND_VM_NEXT_OPCODE();
  31970. }
  31971. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31972. {
  31973. USE_OPLINE
  31974. zend_execute_data *call = EX(call);
  31975. zend_closure_from_frame(EX_VAR(opline->result.var), call);
  31976. if (ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS) {
  31977. OBJ_RELEASE(Z_OBJ(call->This));
  31978. }
  31979. EX(call) = call->prev_execute_data;
  31980. zend_vm_stack_free_call_frame(call);
  31981. ZEND_VM_NEXT_OPCODE();
  31982. }
  31983. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31984. {
  31985. USE_OPLINE
  31986. zval *object;
  31987. zval *property;
  31988. zval *value;
  31989. zval *zptr;
  31990. void **cache_slot;
  31991. zend_property_info *prop_info;
  31992. zend_object *zobj;
  31993. zend_string *name, *tmp_name;
  31994. SAVE_OPLINE();
  31995. object = &EX(This);
  31996. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  31997. do {
  31998. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  31999. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  32000. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  32001. object = Z_REFVAL_P(object);
  32002. goto assign_op_object;
  32003. }
  32004. if (IS_UNUSED == IS_CV
  32005. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  32006. ZVAL_UNDEFINED_OP1();
  32007. }
  32008. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  32009. break;
  32010. }
  32011. assign_op_object:
  32012. /* here we are sure we are dealing with an object */
  32013. zobj = Z_OBJ_P(object);
  32014. if (IS_CV == IS_CONST) {
  32015. name = Z_STR_P(property);
  32016. } else {
  32017. name = zval_try_get_tmp_string(property, &tmp_name);
  32018. if (UNEXPECTED(!name)) {
  32019. UNDEF_RESULT();
  32020. break;
  32021. }
  32022. }
  32023. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  32024. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  32025. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  32026. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32027. ZVAL_NULL(EX_VAR(opline->result.var));
  32028. }
  32029. } else {
  32030. zval *orig_zptr = zptr;
  32031. zend_reference *ref;
  32032. do {
  32033. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  32034. ref = Z_REF_P(zptr);
  32035. zptr = Z_REFVAL_P(zptr);
  32036. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  32037. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  32038. break;
  32039. }
  32040. }
  32041. if (IS_CV == IS_CONST) {
  32042. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  32043. } else {
  32044. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  32045. }
  32046. if (UNEXPECTED(prop_info)) {
  32047. /* special case for typed properties */
  32048. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  32049. } else {
  32050. zend_binary_op(zptr, zptr, value OPLINE_CC);
  32051. }
  32052. } while (0);
  32053. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32054. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  32055. }
  32056. }
  32057. } else {
  32058. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  32059. }
  32060. if (IS_CV != IS_CONST) {
  32061. zend_tmp_string_release(tmp_name);
  32062. }
  32063. } while (0);
  32064. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  32065. /* assign_obj has two opcodes! */
  32066. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  32067. }
  32068. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  32069. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32070. {
  32071. USE_OPLINE
  32072. zval *object;
  32073. zval *property;
  32074. zval *zptr;
  32075. void **cache_slot;
  32076. zend_property_info *prop_info;
  32077. zend_object *zobj;
  32078. zend_string *name, *tmp_name;
  32079. SAVE_OPLINE();
  32080. object = &EX(This);
  32081. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  32082. do {
  32083. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  32084. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  32085. object = Z_REFVAL_P(object);
  32086. goto pre_incdec_object;
  32087. }
  32088. if (IS_UNUSED == IS_CV
  32089. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  32090. ZVAL_UNDEFINED_OP1();
  32091. }
  32092. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  32093. break;
  32094. }
  32095. pre_incdec_object:
  32096. /* here we are sure we are dealing with an object */
  32097. zobj = Z_OBJ_P(object);
  32098. if (IS_CV == IS_CONST) {
  32099. name = Z_STR_P(property);
  32100. } else {
  32101. name = zval_try_get_tmp_string(property, &tmp_name);
  32102. if (UNEXPECTED(!name)) {
  32103. UNDEF_RESULT();
  32104. break;
  32105. }
  32106. }
  32107. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  32108. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  32109. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  32110. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32111. ZVAL_NULL(EX_VAR(opline->result.var));
  32112. }
  32113. } else {
  32114. if (IS_CV == IS_CONST) {
  32115. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  32116. } else {
  32117. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  32118. }
  32119. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  32120. }
  32121. } else {
  32122. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  32123. }
  32124. if (IS_CV != IS_CONST) {
  32125. zend_tmp_string_release(tmp_name);
  32126. }
  32127. } while (0);
  32128. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32129. }
  32130. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32131. {
  32132. USE_OPLINE
  32133. zval *object;
  32134. zval *property;
  32135. zval *zptr;
  32136. void **cache_slot;
  32137. zend_property_info *prop_info;
  32138. zend_object *zobj;
  32139. zend_string *name, *tmp_name;
  32140. SAVE_OPLINE();
  32141. object = &EX(This);
  32142. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  32143. do {
  32144. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  32145. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  32146. object = Z_REFVAL_P(object);
  32147. goto post_incdec_object;
  32148. }
  32149. if (IS_UNUSED == IS_CV
  32150. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  32151. ZVAL_UNDEFINED_OP1();
  32152. }
  32153. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  32154. break;
  32155. }
  32156. post_incdec_object:
  32157. /* here we are sure we are dealing with an object */
  32158. zobj = Z_OBJ_P(object);
  32159. if (IS_CV == IS_CONST) {
  32160. name = Z_STR_P(property);
  32161. } else {
  32162. name = zval_try_get_tmp_string(property, &tmp_name);
  32163. if (UNEXPECTED(!name)) {
  32164. ZVAL_UNDEF(EX_VAR(opline->result.var));
  32165. break;
  32166. }
  32167. }
  32168. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  32169. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  32170. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  32171. ZVAL_NULL(EX_VAR(opline->result.var));
  32172. } else {
  32173. if (IS_CV == IS_CONST) {
  32174. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  32175. } else {
  32176. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  32177. }
  32178. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  32179. }
  32180. } else {
  32181. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  32182. }
  32183. if (IS_CV != IS_CONST) {
  32184. zend_tmp_string_release(tmp_name);
  32185. }
  32186. } while (0);
  32187. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32188. }
  32189. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32190. {
  32191. USE_OPLINE
  32192. zval *container;
  32193. void **cache_slot = NULL;
  32194. SAVE_OPLINE();
  32195. container = &EX(This);
  32196. if (IS_UNUSED == IS_CONST ||
  32197. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  32198. do {
  32199. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  32200. container = Z_REFVAL_P(container);
  32201. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  32202. break;
  32203. }
  32204. }
  32205. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  32206. ZVAL_UNDEFINED_OP1();
  32207. }
  32208. zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32209. ZVAL_NULL(EX_VAR(opline->result.var));
  32210. goto fetch_obj_r_finish;
  32211. } while (0);
  32212. }
  32213. /* here we are sure we are dealing with an object */
  32214. do {
  32215. zend_object *zobj = Z_OBJ_P(container);
  32216. zend_string *name, *tmp_name;
  32217. zval *retval;
  32218. if (IS_CV == IS_CONST) {
  32219. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  32220. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  32221. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  32222. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  32223. retval = OBJ_PROP(zobj, prop_offset);
  32224. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  32225. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  32226. goto fetch_obj_r_copy;
  32227. } else {
  32228. fetch_obj_r_fast_copy:
  32229. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  32230. ZEND_VM_NEXT_OPCODE();
  32231. }
  32232. }
  32233. } else if (EXPECTED(zobj->properties != NULL)) {
  32234. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32235. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  32236. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  32237. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  32238. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  32239. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  32240. (EXPECTED(p->key == name) ||
  32241. (EXPECTED(p->h == ZSTR_H(name)) &&
  32242. EXPECTED(p->key != NULL) &&
  32243. EXPECTED(zend_string_equal_content(p->key, name))))) {
  32244. retval = &p->val;
  32245. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  32246. goto fetch_obj_r_copy;
  32247. } else {
  32248. goto fetch_obj_r_fast_copy;
  32249. }
  32250. }
  32251. }
  32252. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  32253. }
  32254. retval = zend_hash_find_known_hash(zobj->properties, name);
  32255. if (EXPECTED(retval)) {
  32256. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  32257. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  32258. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  32259. goto fetch_obj_r_copy;
  32260. } else {
  32261. goto fetch_obj_r_fast_copy;
  32262. }
  32263. }
  32264. }
  32265. }
  32266. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32267. } else {
  32268. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  32269. if (UNEXPECTED(!name)) {
  32270. ZVAL_UNDEF(EX_VAR(opline->result.var));
  32271. break;
  32272. }
  32273. }
  32274. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  32275. #if ZEND_DEBUG
  32276. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  32277. zend_verify_internal_read_property_type(zobj, name, retval);
  32278. }
  32279. #endif
  32280. if (IS_CV != IS_CONST) {
  32281. zend_tmp_string_release(tmp_name);
  32282. }
  32283. if (retval != EX_VAR(opline->result.var)) {
  32284. fetch_obj_r_copy:
  32285. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  32286. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  32287. zend_unwrap_reference(retval);
  32288. }
  32289. } while (0);
  32290. fetch_obj_r_finish:
  32291. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32292. }
  32293. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32294. {
  32295. USE_OPLINE
  32296. zval *property, *container, *result;
  32297. SAVE_OPLINE();
  32298. container = &EX(This);
  32299. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  32300. result = EX_VAR(opline->result.var);
  32301. zend_fetch_property_address(
  32302. result, container, IS_UNUSED, property, IS_CV,
  32303. ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  32304. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
  32305. if (IS_UNUSED == IS_VAR) {
  32306. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  32307. }
  32308. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32309. }
  32310. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_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(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);
  32319. if (IS_UNUSED == IS_VAR) {
  32320. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  32321. }
  32322. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32323. }
  32324. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32325. {
  32326. USE_OPLINE
  32327. zval *container;
  32328. void **cache_slot = NULL;
  32329. SAVE_OPLINE();
  32330. container = &EX(This);
  32331. if (IS_UNUSED == IS_CONST ||
  32332. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  32333. do {
  32334. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  32335. container = Z_REFVAL_P(container);
  32336. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  32337. break;
  32338. }
  32339. }
  32340. if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  32341. ZVAL_UNDEFINED_OP2();
  32342. }
  32343. ZVAL_NULL(EX_VAR(opline->result.var));
  32344. goto fetch_obj_is_finish;
  32345. } while (0);
  32346. }
  32347. /* here we are sure we are dealing with an object */
  32348. do {
  32349. zend_object *zobj = Z_OBJ_P(container);
  32350. zend_string *name, *tmp_name;
  32351. zval *retval;
  32352. if (IS_CV == IS_CONST) {
  32353. cache_slot = CACHE_ADDR(opline->extended_value);
  32354. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  32355. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  32356. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  32357. retval = OBJ_PROP(zobj, prop_offset);
  32358. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  32359. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  32360. goto fetch_obj_is_copy;
  32361. } else {
  32362. fetch_obj_is_fast_copy:
  32363. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  32364. ZEND_VM_NEXT_OPCODE();
  32365. }
  32366. }
  32367. } else if (EXPECTED(zobj->properties != NULL)) {
  32368. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32369. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  32370. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  32371. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  32372. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  32373. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  32374. (EXPECTED(p->key == name) ||
  32375. (EXPECTED(p->h == ZSTR_H(name)) &&
  32376. EXPECTED(p->key != NULL) &&
  32377. EXPECTED(zend_string_equal_content(p->key, name))))) {
  32378. retval = &p->val;
  32379. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  32380. goto fetch_obj_is_copy;
  32381. } else {
  32382. goto fetch_obj_is_fast_copy;
  32383. }
  32384. }
  32385. }
  32386. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  32387. }
  32388. retval = zend_hash_find_known_hash(zobj->properties, name);
  32389. if (EXPECTED(retval)) {
  32390. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  32391. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  32392. if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
  32393. goto fetch_obj_is_copy;
  32394. } else {
  32395. goto fetch_obj_is_fast_copy;
  32396. }
  32397. }
  32398. }
  32399. }
  32400. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32401. } else {
  32402. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  32403. if (UNEXPECTED(!name)) {
  32404. ZVAL_UNDEF(EX_VAR(opline->result.var));
  32405. break;
  32406. }
  32407. }
  32408. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  32409. if (IS_CV != IS_CONST) {
  32410. zend_tmp_string_release(tmp_name);
  32411. }
  32412. if (retval != EX_VAR(opline->result.var)) {
  32413. fetch_obj_is_copy:
  32414. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  32415. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  32416. zend_unwrap_reference(retval);
  32417. }
  32418. } while (0);
  32419. fetch_obj_is_finish:
  32420. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32421. }
  32422. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32423. {
  32424. #if 0
  32425. USE_OPLINE
  32426. #endif
  32427. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  32428. /* Behave like FETCH_OBJ_W */
  32429. if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
  32430. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  32431. }
  32432. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  32433. } else {
  32434. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  32435. }
  32436. }
  32437. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32438. {
  32439. USE_OPLINE
  32440. zval *container, *property, *result;
  32441. SAVE_OPLINE();
  32442. container = &EX(This);
  32443. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  32444. result = EX_VAR(opline->result.var);
  32445. 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);
  32446. if (IS_UNUSED == IS_VAR) {
  32447. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  32448. }
  32449. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32450. }
  32451. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32452. {
  32453. USE_OPLINE
  32454. zval *object, *value, tmp;
  32455. zend_object *zobj;
  32456. zend_string *name, *tmp_name;
  32457. SAVE_OPLINE();
  32458. object = &EX(This);
  32459. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  32460. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  32461. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  32462. object = Z_REFVAL_P(object);
  32463. goto assign_object;
  32464. }
  32465. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  32466. value = &EG(uninitialized_zval);
  32467. goto free_and_exit_assign_obj;
  32468. }
  32469. assign_object:
  32470. zobj = Z_OBJ_P(object);
  32471. if (IS_CV == IS_CONST) {
  32472. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  32473. void **cache_slot = CACHE_ADDR(opline->extended_value);
  32474. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  32475. zend_object *zobj = Z_OBJ_P(object);
  32476. zval *property_val;
  32477. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  32478. property_val = OBJ_PROP(zobj, prop_offset);
  32479. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  32480. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  32481. if (UNEXPECTED(prop_info != NULL)) {
  32482. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  32483. goto free_and_exit_assign_obj;
  32484. } else {
  32485. fast_assign_obj:
  32486. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  32487. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32488. ZVAL_COPY(EX_VAR(opline->result.var), value);
  32489. }
  32490. goto exit_assign_obj;
  32491. }
  32492. }
  32493. } else {
  32494. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32495. if (EXPECTED(zobj->properties != NULL)) {
  32496. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  32497. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  32498. GC_DELREF(zobj->properties);
  32499. }
  32500. zobj->properties = zend_array_dup(zobj->properties);
  32501. }
  32502. property_val = zend_hash_find_known_hash(zobj->properties, name);
  32503. if (property_val) {
  32504. goto fast_assign_obj;
  32505. }
  32506. }
  32507. if (!zobj->ce->__set) {
  32508. if (EXPECTED(zobj->properties == NULL)) {
  32509. rebuild_object_properties(zobj);
  32510. }
  32511. if (IS_CONST == IS_CONST) {
  32512. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  32513. Z_ADDREF_P(value);
  32514. }
  32515. } else if (IS_CONST != IS_TMP_VAR) {
  32516. if (Z_ISREF_P(value)) {
  32517. if (IS_CONST == IS_VAR) {
  32518. zend_reference *ref = Z_REF_P(value);
  32519. if (GC_DELREF(ref) == 0) {
  32520. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  32521. efree_size(ref, sizeof(zend_reference));
  32522. value = &tmp;
  32523. } else {
  32524. value = Z_REFVAL_P(value);
  32525. Z_TRY_ADDREF_P(value);
  32526. }
  32527. } else {
  32528. value = Z_REFVAL_P(value);
  32529. Z_TRY_ADDREF_P(value);
  32530. }
  32531. } else if (IS_CONST == IS_CV) {
  32532. Z_TRY_ADDREF_P(value);
  32533. }
  32534. }
  32535. zend_hash_add_new(zobj->properties, name, value);
  32536. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32537. ZVAL_COPY(EX_VAR(opline->result.var), value);
  32538. }
  32539. goto exit_assign_obj;
  32540. }
  32541. }
  32542. }
  32543. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32544. } else {
  32545. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  32546. if (UNEXPECTED(!name)) {
  32547. UNDEF_RESULT();
  32548. goto exit_assign_obj;
  32549. }
  32550. }
  32551. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  32552. ZVAL_DEREF(value);
  32553. }
  32554. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  32555. if (IS_CV != IS_CONST) {
  32556. zend_tmp_string_release(tmp_name);
  32557. }
  32558. free_and_exit_assign_obj:
  32559. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32560. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  32561. }
  32562. exit_assign_obj:
  32563. /* assign_obj has two opcodes! */
  32564. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  32565. }
  32566. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  32567. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32568. {
  32569. USE_OPLINE
  32570. zval *object, *value, tmp;
  32571. zend_object *zobj;
  32572. zend_string *name, *tmp_name;
  32573. SAVE_OPLINE();
  32574. object = &EX(This);
  32575. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  32576. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  32577. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  32578. object = Z_REFVAL_P(object);
  32579. goto assign_object;
  32580. }
  32581. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  32582. value = &EG(uninitialized_zval);
  32583. goto free_and_exit_assign_obj;
  32584. }
  32585. assign_object:
  32586. zobj = Z_OBJ_P(object);
  32587. if (IS_CV == IS_CONST) {
  32588. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  32589. void **cache_slot = CACHE_ADDR(opline->extended_value);
  32590. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  32591. zend_object *zobj = Z_OBJ_P(object);
  32592. zval *property_val;
  32593. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  32594. property_val = OBJ_PROP(zobj, prop_offset);
  32595. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  32596. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  32597. if (UNEXPECTED(prop_info != NULL)) {
  32598. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  32599. goto free_and_exit_assign_obj;
  32600. } else {
  32601. fast_assign_obj:
  32602. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  32603. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32604. ZVAL_COPY(EX_VAR(opline->result.var), value);
  32605. }
  32606. goto exit_assign_obj;
  32607. }
  32608. }
  32609. } else {
  32610. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32611. if (EXPECTED(zobj->properties != NULL)) {
  32612. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  32613. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  32614. GC_DELREF(zobj->properties);
  32615. }
  32616. zobj->properties = zend_array_dup(zobj->properties);
  32617. }
  32618. property_val = zend_hash_find_known_hash(zobj->properties, name);
  32619. if (property_val) {
  32620. goto fast_assign_obj;
  32621. }
  32622. }
  32623. if (!zobj->ce->__set) {
  32624. if (EXPECTED(zobj->properties == NULL)) {
  32625. rebuild_object_properties(zobj);
  32626. }
  32627. if (IS_TMP_VAR == IS_CONST) {
  32628. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  32629. Z_ADDREF_P(value);
  32630. }
  32631. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  32632. if (Z_ISREF_P(value)) {
  32633. if (IS_TMP_VAR == IS_VAR) {
  32634. zend_reference *ref = Z_REF_P(value);
  32635. if (GC_DELREF(ref) == 0) {
  32636. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  32637. efree_size(ref, sizeof(zend_reference));
  32638. value = &tmp;
  32639. } else {
  32640. value = Z_REFVAL_P(value);
  32641. Z_TRY_ADDREF_P(value);
  32642. }
  32643. } else {
  32644. value = Z_REFVAL_P(value);
  32645. Z_TRY_ADDREF_P(value);
  32646. }
  32647. } else if (IS_TMP_VAR == IS_CV) {
  32648. Z_TRY_ADDREF_P(value);
  32649. }
  32650. }
  32651. zend_hash_add_new(zobj->properties, name, value);
  32652. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32653. ZVAL_COPY(EX_VAR(opline->result.var), value);
  32654. }
  32655. goto exit_assign_obj;
  32656. }
  32657. }
  32658. }
  32659. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32660. } else {
  32661. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  32662. if (UNEXPECTED(!name)) {
  32663. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  32664. UNDEF_RESULT();
  32665. goto exit_assign_obj;
  32666. }
  32667. }
  32668. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  32669. ZVAL_DEREF(value);
  32670. }
  32671. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  32672. if (IS_CV != IS_CONST) {
  32673. zend_tmp_string_release(tmp_name);
  32674. }
  32675. free_and_exit_assign_obj:
  32676. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32677. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  32678. }
  32679. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  32680. exit_assign_obj:
  32681. /* assign_obj has two opcodes! */
  32682. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  32683. }
  32684. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  32685. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32686. {
  32687. USE_OPLINE
  32688. zval *object, *value, tmp;
  32689. zend_object *zobj;
  32690. zend_string *name, *tmp_name;
  32691. SAVE_OPLINE();
  32692. object = &EX(This);
  32693. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  32694. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  32695. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  32696. object = Z_REFVAL_P(object);
  32697. goto assign_object;
  32698. }
  32699. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  32700. value = &EG(uninitialized_zval);
  32701. goto free_and_exit_assign_obj;
  32702. }
  32703. assign_object:
  32704. zobj = Z_OBJ_P(object);
  32705. if (IS_CV == IS_CONST) {
  32706. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  32707. void **cache_slot = CACHE_ADDR(opline->extended_value);
  32708. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  32709. zend_object *zobj = Z_OBJ_P(object);
  32710. zval *property_val;
  32711. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  32712. property_val = OBJ_PROP(zobj, prop_offset);
  32713. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  32714. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  32715. if (UNEXPECTED(prop_info != NULL)) {
  32716. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  32717. goto free_and_exit_assign_obj;
  32718. } else {
  32719. fast_assign_obj:
  32720. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  32721. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32722. ZVAL_COPY(EX_VAR(opline->result.var), value);
  32723. }
  32724. goto exit_assign_obj;
  32725. }
  32726. }
  32727. } else {
  32728. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32729. if (EXPECTED(zobj->properties != NULL)) {
  32730. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  32731. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  32732. GC_DELREF(zobj->properties);
  32733. }
  32734. zobj->properties = zend_array_dup(zobj->properties);
  32735. }
  32736. property_val = zend_hash_find_known_hash(zobj->properties, name);
  32737. if (property_val) {
  32738. goto fast_assign_obj;
  32739. }
  32740. }
  32741. if (!zobj->ce->__set) {
  32742. if (EXPECTED(zobj->properties == NULL)) {
  32743. rebuild_object_properties(zobj);
  32744. }
  32745. if (IS_VAR == IS_CONST) {
  32746. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  32747. Z_ADDREF_P(value);
  32748. }
  32749. } else if (IS_VAR != IS_TMP_VAR) {
  32750. if (Z_ISREF_P(value)) {
  32751. if (IS_VAR == IS_VAR) {
  32752. zend_reference *ref = Z_REF_P(value);
  32753. if (GC_DELREF(ref) == 0) {
  32754. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  32755. efree_size(ref, sizeof(zend_reference));
  32756. value = &tmp;
  32757. } else {
  32758. value = Z_REFVAL_P(value);
  32759. Z_TRY_ADDREF_P(value);
  32760. }
  32761. } else {
  32762. value = Z_REFVAL_P(value);
  32763. Z_TRY_ADDREF_P(value);
  32764. }
  32765. } else if (IS_VAR == IS_CV) {
  32766. Z_TRY_ADDREF_P(value);
  32767. }
  32768. }
  32769. zend_hash_add_new(zobj->properties, name, value);
  32770. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32771. ZVAL_COPY(EX_VAR(opline->result.var), value);
  32772. }
  32773. goto exit_assign_obj;
  32774. }
  32775. }
  32776. }
  32777. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32778. } else {
  32779. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  32780. if (UNEXPECTED(!name)) {
  32781. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  32782. UNDEF_RESULT();
  32783. goto exit_assign_obj;
  32784. }
  32785. }
  32786. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  32787. ZVAL_DEREF(value);
  32788. }
  32789. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  32790. if (IS_CV != IS_CONST) {
  32791. zend_tmp_string_release(tmp_name);
  32792. }
  32793. free_and_exit_assign_obj:
  32794. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32795. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  32796. }
  32797. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  32798. exit_assign_obj:
  32799. /* assign_obj has two opcodes! */
  32800. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  32801. }
  32802. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  32803. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32804. {
  32805. USE_OPLINE
  32806. zval *object, *value, tmp;
  32807. zend_object *zobj;
  32808. zend_string *name, *tmp_name;
  32809. SAVE_OPLINE();
  32810. object = &EX(This);
  32811. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  32812. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  32813. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  32814. object = Z_REFVAL_P(object);
  32815. goto assign_object;
  32816. }
  32817. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  32818. value = &EG(uninitialized_zval);
  32819. goto free_and_exit_assign_obj;
  32820. }
  32821. assign_object:
  32822. zobj = Z_OBJ_P(object);
  32823. if (IS_CV == IS_CONST) {
  32824. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  32825. void **cache_slot = CACHE_ADDR(opline->extended_value);
  32826. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  32827. zend_object *zobj = Z_OBJ_P(object);
  32828. zval *property_val;
  32829. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  32830. property_val = OBJ_PROP(zobj, prop_offset);
  32831. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  32832. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  32833. if (UNEXPECTED(prop_info != NULL)) {
  32834. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  32835. goto free_and_exit_assign_obj;
  32836. } else {
  32837. fast_assign_obj:
  32838. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  32839. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32840. ZVAL_COPY(EX_VAR(opline->result.var), value);
  32841. }
  32842. goto exit_assign_obj;
  32843. }
  32844. }
  32845. } else {
  32846. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32847. if (EXPECTED(zobj->properties != NULL)) {
  32848. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  32849. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  32850. GC_DELREF(zobj->properties);
  32851. }
  32852. zobj->properties = zend_array_dup(zobj->properties);
  32853. }
  32854. property_val = zend_hash_find_known_hash(zobj->properties, name);
  32855. if (property_val) {
  32856. goto fast_assign_obj;
  32857. }
  32858. }
  32859. if (!zobj->ce->__set) {
  32860. if (EXPECTED(zobj->properties == NULL)) {
  32861. rebuild_object_properties(zobj);
  32862. }
  32863. if (IS_CV == IS_CONST) {
  32864. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  32865. Z_ADDREF_P(value);
  32866. }
  32867. } else if (IS_CV != IS_TMP_VAR) {
  32868. if (Z_ISREF_P(value)) {
  32869. if (IS_CV == IS_VAR) {
  32870. zend_reference *ref = Z_REF_P(value);
  32871. if (GC_DELREF(ref) == 0) {
  32872. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  32873. efree_size(ref, sizeof(zend_reference));
  32874. value = &tmp;
  32875. } else {
  32876. value = Z_REFVAL_P(value);
  32877. Z_TRY_ADDREF_P(value);
  32878. }
  32879. } else {
  32880. value = Z_REFVAL_P(value);
  32881. Z_TRY_ADDREF_P(value);
  32882. }
  32883. } else if (IS_CV == IS_CV) {
  32884. Z_TRY_ADDREF_P(value);
  32885. }
  32886. }
  32887. zend_hash_add_new(zobj->properties, name, value);
  32888. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32889. ZVAL_COPY(EX_VAR(opline->result.var), value);
  32890. }
  32891. goto exit_assign_obj;
  32892. }
  32893. }
  32894. }
  32895. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  32896. } else {
  32897. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  32898. if (UNEXPECTED(!name)) {
  32899. UNDEF_RESULT();
  32900. goto exit_assign_obj;
  32901. }
  32902. }
  32903. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  32904. ZVAL_DEREF(value);
  32905. }
  32906. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  32907. if (IS_CV != IS_CONST) {
  32908. zend_tmp_string_release(tmp_name);
  32909. }
  32910. free_and_exit_assign_obj:
  32911. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  32912. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  32913. }
  32914. exit_assign_obj:
  32915. /* assign_obj has two opcodes! */
  32916. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  32917. }
  32918. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  32919. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32920. {
  32921. USE_OPLINE
  32922. zval *property, *container, *value_ptr;
  32923. SAVE_OPLINE();
  32924. container = &EX(This);
  32925. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  32926. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  32927. if (1) {
  32928. if (IS_UNUSED == IS_UNUSED) {
  32929. if (IS_CV == IS_CONST) {
  32930. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32931. } else {
  32932. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32933. }
  32934. } else {
  32935. if (IS_CV == IS_CONST) {
  32936. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32937. } else {
  32938. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32939. }
  32940. }
  32941. } else {
  32942. zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32943. }
  32944. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  32945. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  32946. }
  32947. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  32948. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32949. {
  32950. USE_OPLINE
  32951. zval *property, *container, *value_ptr;
  32952. SAVE_OPLINE();
  32953. container = &EX(This);
  32954. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  32955. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  32956. if (1) {
  32957. if (IS_UNUSED == IS_UNUSED) {
  32958. if (IS_CV == IS_CONST) {
  32959. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32960. } else {
  32961. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32962. }
  32963. } else {
  32964. if (IS_CV == IS_CONST) {
  32965. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32966. } else {
  32967. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32968. }
  32969. }
  32970. } else {
  32971. zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  32972. }
  32973. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  32974. }
  32975. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  32976. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32977. {
  32978. USE_OPLINE
  32979. zend_string **rope;
  32980. zval *var;
  32981. /* Compiler allocates the necessary number of zval slots to keep the rope */
  32982. rope = (zend_string**)EX_VAR(opline->result.var);
  32983. if (IS_CV == IS_CONST) {
  32984. var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  32985. rope[0] = Z_STR_P(var);
  32986. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  32987. Z_ADDREF_P(var);
  32988. }
  32989. } else {
  32990. var = EX_VAR(opline->op2.var);
  32991. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  32992. if (IS_CV == IS_CV) {
  32993. rope[0] = zend_string_copy(Z_STR_P(var));
  32994. } else {
  32995. rope[0] = Z_STR_P(var);
  32996. }
  32997. } else {
  32998. SAVE_OPLINE();
  32999. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  33000. ZVAL_UNDEFINED_OP2();
  33001. }
  33002. rope[0] = zval_get_string_func(var);
  33003. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33004. }
  33005. }
  33006. ZEND_VM_NEXT_OPCODE();
  33007. }
  33008. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33009. {
  33010. zval *class_name;
  33011. USE_OPLINE
  33012. SAVE_OPLINE();
  33013. if (IS_CV == IS_UNUSED) {
  33014. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
  33015. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33016. } else if (IS_CV == IS_CONST) {
  33017. zend_class_entry *ce = CACHED_PTR(opline->extended_value);
  33018. if (UNEXPECTED(ce == NULL)) {
  33019. class_name = EX_VAR(opline->op2.var);
  33020. ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
  33021. CACHE_PTR(opline->extended_value, ce);
  33022. }
  33023. Z_CE_P(EX_VAR(opline->result.var)) = ce;
  33024. } else {
  33025. class_name = EX_VAR(opline->op2.var);
  33026. try_class_name:
  33027. if (Z_TYPE_P(class_name) == IS_OBJECT) {
  33028. Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
  33029. } else if (Z_TYPE_P(class_name) == IS_STRING) {
  33030. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
  33031. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
  33032. class_name = Z_REFVAL_P(class_name);
  33033. goto try_class_name;
  33034. } else {
  33035. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
  33036. ZVAL_UNDEFINED_OP2();
  33037. if (UNEXPECTED(EG(exception) != NULL)) {
  33038. HANDLE_EXCEPTION();
  33039. }
  33040. }
  33041. zend_throw_error(NULL, "Class name must be a valid object or a string");
  33042. }
  33043. }
  33044. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33045. }
  33046. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33047. {
  33048. USE_OPLINE
  33049. zval *function_name;
  33050. zval *object;
  33051. zend_function *fbc;
  33052. zend_class_entry *called_scope;
  33053. zend_object *obj;
  33054. zend_execute_data *call;
  33055. uint32_t call_info;
  33056. SAVE_OPLINE();
  33057. object = &EX(This);
  33058. if (IS_CV != IS_CONST) {
  33059. function_name = EX_VAR(opline->op2.var);
  33060. }
  33061. if (IS_CV != IS_CONST &&
  33062. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  33063. do {
  33064. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  33065. function_name = Z_REFVAL_P(function_name);
  33066. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  33067. break;
  33068. }
  33069. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  33070. ZVAL_UNDEFINED_OP2();
  33071. if (UNEXPECTED(EG(exception) != NULL)) {
  33072. HANDLE_EXCEPTION();
  33073. }
  33074. }
  33075. zend_throw_error(NULL, "Method name must be a string");
  33076. HANDLE_EXCEPTION();
  33077. } while (0);
  33078. }
  33079. if (IS_UNUSED == IS_UNUSED) {
  33080. obj = Z_OBJ_P(object);
  33081. } else {
  33082. do {
  33083. if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  33084. obj = Z_OBJ_P(object);
  33085. } else {
  33086. if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  33087. zend_reference *ref = Z_REF_P(object);
  33088. object = &ref->val;
  33089. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  33090. obj = Z_OBJ_P(object);
  33091. if (IS_UNUSED & IS_VAR) {
  33092. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  33093. efree_size(ref, sizeof(zend_reference));
  33094. } else {
  33095. Z_ADDREF_P(object);
  33096. }
  33097. }
  33098. break;
  33099. }
  33100. }
  33101. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  33102. object = ZVAL_UNDEFINED_OP1();
  33103. if (UNEXPECTED(EG(exception) != NULL)) {
  33104. if (IS_CV != IS_CONST) {
  33105. }
  33106. HANDLE_EXCEPTION();
  33107. }
  33108. }
  33109. if (IS_CV == IS_CONST) {
  33110. function_name = EX_VAR(opline->op2.var);
  33111. }
  33112. zend_invalid_method_call(object, function_name);
  33113. HANDLE_EXCEPTION();
  33114. }
  33115. } while (0);
  33116. }
  33117. called_scope = obj->ce;
  33118. if (IS_CV == IS_CONST &&
  33119. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  33120. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  33121. } else {
  33122. zend_object *orig_obj = obj;
  33123. if (IS_CV == IS_CONST) {
  33124. function_name = EX_VAR(opline->op2.var);
  33125. }
  33126. /* First, locate the function. */
  33127. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  33128. if (UNEXPECTED(fbc == NULL)) {
  33129. if (EXPECTED(!EG(exception))) {
  33130. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  33131. }
  33132. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  33133. zend_objects_store_del(orig_obj);
  33134. }
  33135. HANDLE_EXCEPTION();
  33136. }
  33137. if (IS_CV == IS_CONST &&
  33138. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  33139. EXPECTED(obj == orig_obj)) {
  33140. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  33141. }
  33142. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  33143. GC_ADDREF(obj); /* For $this pointer */
  33144. if (GC_DELREF(orig_obj) == 0) {
  33145. zend_objects_store_del(orig_obj);
  33146. }
  33147. }
  33148. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  33149. init_func_run_time_cache(&fbc->op_array);
  33150. }
  33151. }
  33152. if (IS_CV != IS_CONST) {
  33153. }
  33154. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  33155. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  33156. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  33157. zend_objects_store_del(obj);
  33158. if (UNEXPECTED(EG(exception))) {
  33159. HANDLE_EXCEPTION();
  33160. }
  33161. }
  33162. /* call static method */
  33163. obj = (zend_object*)called_scope;
  33164. call_info = ZEND_CALL_NESTED_FUNCTION;
  33165. } else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  33166. if (IS_UNUSED == IS_CV) {
  33167. GC_ADDREF(obj); /* For $this pointer */
  33168. }
  33169. /* CV may be changed indirectly (e.g. when it's a reference) */
  33170. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  33171. }
  33172. call = zend_vm_stack_push_call_frame(call_info,
  33173. fbc, opline->extended_value, obj);
  33174. call->prev_execute_data = EX(call);
  33175. EX(call) = call;
  33176. ZEND_VM_NEXT_OPCODE();
  33177. }
  33178. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33179. {
  33180. USE_OPLINE
  33181. zval *function_name;
  33182. zend_class_entry *ce;
  33183. uint32_t call_info;
  33184. zend_function *fbc;
  33185. zend_execute_data *call;
  33186. SAVE_OPLINE();
  33187. if (IS_UNUSED == IS_CONST) {
  33188. /* no function found. try a static method in class */
  33189. ce = CACHED_PTR(opline->result.num);
  33190. if (UNEXPECTED(ce == NULL)) {
  33191. 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);
  33192. if (UNEXPECTED(ce == NULL)) {
  33193. HANDLE_EXCEPTION();
  33194. }
  33195. if (IS_CV != IS_CONST) {
  33196. CACHE_PTR(opline->result.num, ce);
  33197. }
  33198. }
  33199. } else if (IS_UNUSED == IS_UNUSED) {
  33200. ce = zend_fetch_class(NULL, opline->op1.num);
  33201. if (UNEXPECTED(ce == NULL)) {
  33202. HANDLE_EXCEPTION();
  33203. }
  33204. } else {
  33205. ce = Z_CE_P(EX_VAR(opline->op1.var));
  33206. }
  33207. if (IS_UNUSED == IS_CONST &&
  33208. IS_CV == IS_CONST &&
  33209. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  33210. /* nothing to do */
  33211. } else if (IS_UNUSED != IS_CONST &&
  33212. IS_CV == IS_CONST &&
  33213. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  33214. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  33215. } else if (IS_CV != IS_UNUSED) {
  33216. function_name = EX_VAR(opline->op2.var);
  33217. if (IS_CV != IS_CONST) {
  33218. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  33219. do {
  33220. if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  33221. function_name = Z_REFVAL_P(function_name);
  33222. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  33223. break;
  33224. }
  33225. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  33226. ZVAL_UNDEFINED_OP2();
  33227. if (UNEXPECTED(EG(exception) != NULL)) {
  33228. HANDLE_EXCEPTION();
  33229. }
  33230. }
  33231. zend_throw_error(NULL, "Method name must be a string");
  33232. HANDLE_EXCEPTION();
  33233. } while (0);
  33234. }
  33235. }
  33236. if (ce->get_static_method) {
  33237. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  33238. } else {
  33239. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  33240. }
  33241. if (UNEXPECTED(fbc == NULL)) {
  33242. if (EXPECTED(!EG(exception))) {
  33243. zend_undefined_method(ce, Z_STR_P(function_name));
  33244. }
  33245. HANDLE_EXCEPTION();
  33246. }
  33247. if (IS_CV == IS_CONST &&
  33248. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  33249. EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
  33250. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  33251. }
  33252. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  33253. init_func_run_time_cache(&fbc->op_array);
  33254. }
  33255. if (IS_CV != IS_CONST) {
  33256. }
  33257. } else {
  33258. if (UNEXPECTED(ce->constructor == NULL)) {
  33259. zend_throw_error(NULL, "Cannot call constructor");
  33260. HANDLE_EXCEPTION();
  33261. }
  33262. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  33263. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  33264. HANDLE_EXCEPTION();
  33265. }
  33266. fbc = ce->constructor;
  33267. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  33268. init_func_run_time_cache(&fbc->op_array);
  33269. }
  33270. }
  33271. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  33272. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  33273. ce = (zend_class_entry*)Z_OBJ(EX(This));
  33274. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  33275. } else {
  33276. zend_non_static_method_call(fbc);
  33277. HANDLE_EXCEPTION();
  33278. }
  33279. } else {
  33280. /* previous opcode is ZEND_FETCH_CLASS */
  33281. if (IS_UNUSED == IS_UNUSED
  33282. && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  33283. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
  33284. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  33285. ce = Z_OBJCE(EX(This));
  33286. } else {
  33287. ce = Z_CE(EX(This));
  33288. }
  33289. }
  33290. call_info = ZEND_CALL_NESTED_FUNCTION;
  33291. }
  33292. call = zend_vm_stack_push_call_frame(call_info,
  33293. fbc, opline->extended_value, ce);
  33294. call->prev_execute_data = EX(call);
  33295. EX(call) = call;
  33296. ZEND_VM_NEXT_OPCODE();
  33297. }
  33298. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33299. {
  33300. zval *array;
  33301. uint32_t size;
  33302. USE_OPLINE
  33303. array = EX_VAR(opline->result.var);
  33304. if (IS_UNUSED != IS_UNUSED) {
  33305. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  33306. ZVAL_ARR(array, zend_new_array(size));
  33307. /* Explicitly initialize array as not-packed if flag is set */
  33308. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  33309. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  33310. }
  33311. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33312. } else {
  33313. ZVAL_ARR(array, zend_new_array(0));
  33314. ZEND_VM_NEXT_OPCODE();
  33315. }
  33316. }
  33317. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33318. {
  33319. USE_OPLINE
  33320. zval *container;
  33321. zval *offset;
  33322. zend_string *name, *tmp_name;
  33323. SAVE_OPLINE();
  33324. container = &EX(This);
  33325. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  33326. do {
  33327. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  33328. if (Z_ISREF_P(container)) {
  33329. container = Z_REFVAL_P(container);
  33330. if (Z_TYPE_P(container) != IS_OBJECT) {
  33331. if (IS_UNUSED == IS_CV
  33332. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  33333. ZVAL_UNDEFINED_OP1();
  33334. }
  33335. break;
  33336. }
  33337. } else {
  33338. break;
  33339. }
  33340. }
  33341. if (IS_CV == IS_CONST) {
  33342. name = Z_STR_P(offset);
  33343. } else {
  33344. name = zval_try_get_tmp_string(offset, &tmp_name);
  33345. if (UNEXPECTED(!name)) {
  33346. break;
  33347. }
  33348. }
  33349. Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  33350. if (IS_CV != IS_CONST) {
  33351. zend_tmp_string_release(tmp_name);
  33352. }
  33353. } while (0);
  33354. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33355. }
  33356. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33357. {
  33358. USE_OPLINE
  33359. zval *container;
  33360. int result;
  33361. zval *offset;
  33362. zend_string *name, *tmp_name;
  33363. SAVE_OPLINE();
  33364. container = &EX(This);
  33365. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  33366. if (IS_UNUSED == IS_CONST ||
  33367. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  33368. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  33369. container = Z_REFVAL_P(container);
  33370. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  33371. result = (opline->extended_value & ZEND_ISEMPTY);
  33372. goto isset_object_finish;
  33373. }
  33374. } else {
  33375. result = (opline->extended_value & ZEND_ISEMPTY);
  33376. goto isset_object_finish;
  33377. }
  33378. }
  33379. if (IS_CV == IS_CONST) {
  33380. name = Z_STR_P(offset);
  33381. } else {
  33382. name = zval_try_get_tmp_string(offset, &tmp_name);
  33383. if (UNEXPECTED(!name)) {
  33384. result = 0;
  33385. goto isset_object_finish;
  33386. }
  33387. }
  33388. result =
  33389. (opline->extended_value & ZEND_ISEMPTY) ^
  33390. 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));
  33391. if (IS_CV != IS_CONST) {
  33392. zend_tmp_string_release(tmp_name);
  33393. }
  33394. isset_object_finish:
  33395. ZEND_VM_SMART_BRANCH(result, 1);
  33396. }
  33397. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33398. {
  33399. USE_OPLINE
  33400. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  33401. SAVE_OPLINE();
  33402. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  33403. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33404. }
  33405. /* Destroy the previously yielded value */
  33406. zval_ptr_dtor(&generator->value);
  33407. /* Destroy the previously yielded key */
  33408. zval_ptr_dtor(&generator->key);
  33409. /* Set the new yielded value */
  33410. if (IS_UNUSED != IS_UNUSED) {
  33411. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  33412. /* Constants and temporary variables aren't yieldable by reference,
  33413. * but we still allow them with a notice. */
  33414. if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
  33415. zval *value;
  33416. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  33417. value = NULL;
  33418. ZVAL_COPY_VALUE(&generator->value, value);
  33419. if (IS_UNUSED == IS_CONST) {
  33420. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  33421. Z_ADDREF(generator->value);
  33422. }
  33423. }
  33424. } else {
  33425. zval *value_ptr = NULL;
  33426. /* If a function call result is yielded and the function did
  33427. * not return by reference we throw a notice. */
  33428. do {
  33429. if (IS_UNUSED == IS_VAR) {
  33430. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  33431. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  33432. && !Z_ISREF_P(value_ptr)) {
  33433. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  33434. ZVAL_COPY(&generator->value, value_ptr);
  33435. break;
  33436. }
  33437. }
  33438. if (Z_ISREF_P(value_ptr)) {
  33439. Z_ADDREF_P(value_ptr);
  33440. } else {
  33441. ZVAL_MAKE_REF_EX(value_ptr, 2);
  33442. }
  33443. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  33444. } while (0);
  33445. }
  33446. } else {
  33447. zval *value = NULL;
  33448. /* Consts, temporary variables and references need copying */
  33449. if (IS_UNUSED == IS_CONST) {
  33450. ZVAL_COPY_VALUE(&generator->value, value);
  33451. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  33452. Z_ADDREF(generator->value);
  33453. }
  33454. } else if (IS_UNUSED == IS_TMP_VAR) {
  33455. ZVAL_COPY_VALUE(&generator->value, value);
  33456. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  33457. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  33458. } else {
  33459. ZVAL_COPY_VALUE(&generator->value, value);
  33460. if (IS_UNUSED == IS_CV) {
  33461. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  33462. }
  33463. }
  33464. }
  33465. } else {
  33466. /* If no value was specified yield null */
  33467. ZVAL_NULL(&generator->value);
  33468. }
  33469. /* Set the new yielded key */
  33470. if (IS_CV != IS_UNUSED) {
  33471. zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  33472. if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  33473. key = Z_REFVAL_P(key);
  33474. }
  33475. ZVAL_COPY(&generator->key, key);
  33476. if (Z_TYPE(generator->key) == IS_LONG
  33477. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  33478. ) {
  33479. generator->largest_used_integer_key = Z_LVAL(generator->key);
  33480. }
  33481. } else {
  33482. /* If no key was specified we use auto-increment keys */
  33483. generator->largest_used_integer_key++;
  33484. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  33485. }
  33486. if (RETURN_VALUE_USED(opline)) {
  33487. /* If the return value of yield is used set the send
  33488. * target and initialize it to NULL */
  33489. generator->send_target = EX_VAR(opline->result.var);
  33490. ZVAL_NULL(generator->send_target);
  33491. } else {
  33492. generator->send_target = NULL;
  33493. }
  33494. /* We increment to the next op, so we are at the correct position when the
  33495. * generator is resumed. */
  33496. ZEND_VM_INC_OPCODE();
  33497. /* The GOTO VM uses a local opline variable. We need to set the opline
  33498. * variable in execute_data so we don't resume at an old position. */
  33499. SAVE_OPLINE();
  33500. ZEND_VM_RETURN();
  33501. }
  33502. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33503. {
  33504. USE_OPLINE
  33505. zval *val;
  33506. val = EX_VAR(opline->op1.var);
  33507. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  33508. ZVAL_FALSE(EX_VAR(opline->result.var));
  33509. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  33510. /* The result and op1 can be the same cv zval */
  33511. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  33512. ZVAL_TRUE(EX_VAR(opline->result.var));
  33513. if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  33514. SAVE_OPLINE();
  33515. ZVAL_UNDEFINED_OP1();
  33516. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33517. }
  33518. } else {
  33519. SAVE_OPLINE();
  33520. ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
  33521. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33522. }
  33523. ZEND_VM_NEXT_OPCODE();
  33524. }
  33525. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
  33526. {
  33527. USE_OPLINE
  33528. zval *var_ptr;
  33529. var_ptr = EX_VAR(opline->op1.var);
  33530. SAVE_OPLINE();
  33531. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  33532. ZVAL_UNDEFINED_OP1();
  33533. ZVAL_NULL(var_ptr);
  33534. }
  33535. do {
  33536. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  33537. zend_reference *ref = Z_REF_P(var_ptr);
  33538. var_ptr = Z_REFVAL_P(var_ptr);
  33539. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  33540. zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
  33541. break;
  33542. }
  33543. }
  33544. increment_function(var_ptr);
  33545. } while (0);
  33546. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  33547. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  33548. }
  33549. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33550. }
  33551. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33552. {
  33553. USE_OPLINE
  33554. zval *var_ptr;
  33555. var_ptr = EX_VAR(opline->op1.var);
  33556. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  33557. fast_long_increment_function(var_ptr);
  33558. if (UNEXPECTED(0)) {
  33559. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  33560. }
  33561. ZEND_VM_NEXT_OPCODE();
  33562. }
  33563. ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33564. }
  33565. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33566. {
  33567. USE_OPLINE
  33568. zval *var_ptr;
  33569. var_ptr = EX_VAR(opline->op1.var);
  33570. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  33571. fast_long_increment_function(var_ptr);
  33572. if (UNEXPECTED(1)) {
  33573. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  33574. }
  33575. ZEND_VM_NEXT_OPCODE();
  33576. }
  33577. ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33578. }
  33579. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
  33580. {
  33581. USE_OPLINE
  33582. zval *var_ptr;
  33583. var_ptr = EX_VAR(opline->op1.var);
  33584. SAVE_OPLINE();
  33585. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  33586. ZVAL_UNDEFINED_OP1();
  33587. ZVAL_NULL(var_ptr);
  33588. }
  33589. do {
  33590. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  33591. zend_reference *ref = Z_REF_P(var_ptr);
  33592. var_ptr = Z_REFVAL_P(var_ptr);
  33593. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  33594. zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
  33595. break;
  33596. }
  33597. }
  33598. decrement_function(var_ptr);
  33599. } while (0);
  33600. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  33601. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  33602. }
  33603. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33604. }
  33605. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33606. {
  33607. USE_OPLINE
  33608. zval *var_ptr;
  33609. var_ptr = EX_VAR(opline->op1.var);
  33610. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  33611. fast_long_decrement_function(var_ptr);
  33612. if (UNEXPECTED(0)) {
  33613. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  33614. }
  33615. ZEND_VM_NEXT_OPCODE();
  33616. }
  33617. ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33618. }
  33619. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33620. {
  33621. USE_OPLINE
  33622. zval *var_ptr;
  33623. var_ptr = EX_VAR(opline->op1.var);
  33624. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  33625. fast_long_decrement_function(var_ptr);
  33626. if (UNEXPECTED(1)) {
  33627. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  33628. }
  33629. ZEND_VM_NEXT_OPCODE();
  33630. }
  33631. ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33632. }
  33633. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
  33634. {
  33635. USE_OPLINE
  33636. zval *var_ptr;
  33637. var_ptr = EX_VAR(opline->op1.var);
  33638. SAVE_OPLINE();
  33639. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  33640. ZVAL_UNDEFINED_OP1();
  33641. ZVAL_NULL(var_ptr);
  33642. }
  33643. do {
  33644. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  33645. zend_reference *ref = Z_REF_P(var_ptr);
  33646. var_ptr = Z_REFVAL_P(var_ptr);
  33647. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  33648. zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
  33649. break;
  33650. }
  33651. }
  33652. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  33653. increment_function(var_ptr);
  33654. } while (0);
  33655. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33656. }
  33657. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33658. {
  33659. USE_OPLINE
  33660. zval *var_ptr;
  33661. var_ptr = EX_VAR(opline->op1.var);
  33662. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  33663. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  33664. fast_long_increment_function(var_ptr);
  33665. ZEND_VM_NEXT_OPCODE();
  33666. }
  33667. ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33668. }
  33669. static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
  33670. {
  33671. USE_OPLINE
  33672. zval *var_ptr;
  33673. var_ptr = EX_VAR(opline->op1.var);
  33674. SAVE_OPLINE();
  33675. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  33676. ZVAL_UNDEFINED_OP1();
  33677. ZVAL_NULL(var_ptr);
  33678. }
  33679. do {
  33680. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  33681. zend_reference *ref = Z_REF_P(var_ptr);
  33682. var_ptr = Z_REFVAL_P(var_ptr);
  33683. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  33684. zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
  33685. break;
  33686. }
  33687. }
  33688. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  33689. decrement_function(var_ptr);
  33690. } while (0);
  33691. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33692. }
  33693. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33694. {
  33695. USE_OPLINE
  33696. zval *var_ptr;
  33697. var_ptr = EX_VAR(opline->op1.var);
  33698. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  33699. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  33700. fast_long_decrement_function(var_ptr);
  33701. ZEND_VM_NEXT_OPCODE();
  33702. }
  33703. ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33704. }
  33705. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33706. {
  33707. USE_OPLINE
  33708. zval *z;
  33709. SAVE_OPLINE();
  33710. z = EX_VAR(opline->op1.var);
  33711. if (Z_TYPE_P(z) == IS_STRING) {
  33712. zend_string *str = Z_STR_P(z);
  33713. if (ZSTR_LEN(str) != 0) {
  33714. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  33715. }
  33716. } else {
  33717. zend_string *str = zval_get_string_func(z);
  33718. if (ZSTR_LEN(str) != 0) {
  33719. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  33720. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
  33721. ZVAL_UNDEFINED_OP1();
  33722. }
  33723. zend_string_release_ex(str, 0);
  33724. }
  33725. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33726. }
  33727. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33728. {
  33729. USE_OPLINE
  33730. zval *val;
  33731. zend_uchar op1_type;
  33732. val = EX_VAR(opline->op1.var);
  33733. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  33734. ZEND_VM_NEXT_OPCODE();
  33735. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  33736. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  33737. SAVE_OPLINE();
  33738. ZVAL_UNDEFINED_OP1();
  33739. if (UNEXPECTED(EG(exception))) {
  33740. HANDLE_EXCEPTION();
  33741. }
  33742. }
  33743. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  33744. }
  33745. SAVE_OPLINE();
  33746. op1_type = IS_CV;
  33747. if (i_zend_is_true(val)) {
  33748. opline++;
  33749. } else {
  33750. opline = OP_JMP_ADDR(opline, opline->op2);
  33751. }
  33752. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  33753. zval_ptr_dtor_nogc(val);
  33754. }
  33755. ZEND_VM_JMP(opline);
  33756. }
  33757. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33758. {
  33759. USE_OPLINE
  33760. zval *val;
  33761. zend_uchar op1_type;
  33762. val = EX_VAR(opline->op1.var);
  33763. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  33764. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  33765. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  33766. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  33767. SAVE_OPLINE();
  33768. ZVAL_UNDEFINED_OP1();
  33769. if (UNEXPECTED(EG(exception))) {
  33770. HANDLE_EXCEPTION();
  33771. }
  33772. }
  33773. ZEND_VM_NEXT_OPCODE();
  33774. }
  33775. SAVE_OPLINE();
  33776. op1_type = IS_CV;
  33777. if (i_zend_is_true(val)) {
  33778. opline = OP_JMP_ADDR(opline, opline->op2);
  33779. } else {
  33780. opline++;
  33781. }
  33782. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  33783. zval_ptr_dtor_nogc(val);
  33784. }
  33785. ZEND_VM_JMP(opline);
  33786. }
  33787. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33788. {
  33789. USE_OPLINE
  33790. zval *val;
  33791. zend_uchar op1_type;
  33792. val = EX_VAR(opline->op1.var);
  33793. if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
  33794. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  33795. ZEND_VM_CONTINUE();
  33796. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  33797. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  33798. SAVE_OPLINE();
  33799. ZVAL_UNDEFINED_OP1();
  33800. if (UNEXPECTED(EG(exception))) {
  33801. HANDLE_EXCEPTION();
  33802. }
  33803. }
  33804. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  33805. }
  33806. SAVE_OPLINE();
  33807. op1_type = IS_CV;
  33808. if (i_zend_is_true(val)) {
  33809. opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
  33810. } else {
  33811. opline = OP_JMP_ADDR(opline, opline->op2);
  33812. }
  33813. if (op1_type & (IS_TMP_VAR|IS_VAR)) {
  33814. zval_ptr_dtor_nogc(val);
  33815. }
  33816. ZEND_VM_JMP(opline);
  33817. }
  33818. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33819. {
  33820. USE_OPLINE
  33821. zval *val;
  33822. bool ret;
  33823. val = EX_VAR(opline->op1.var);
  33824. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  33825. ZVAL_TRUE(EX_VAR(opline->result.var));
  33826. ZEND_VM_NEXT_OPCODE();
  33827. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  33828. ZVAL_FALSE(EX_VAR(opline->result.var));
  33829. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  33830. SAVE_OPLINE();
  33831. ZVAL_UNDEFINED_OP1();
  33832. if (UNEXPECTED(EG(exception))) {
  33833. HANDLE_EXCEPTION();
  33834. }
  33835. }
  33836. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  33837. }
  33838. SAVE_OPLINE();
  33839. ret = i_zend_is_true(val);
  33840. if (ret) {
  33841. ZVAL_TRUE(EX_VAR(opline->result.var));
  33842. opline++;
  33843. } else {
  33844. ZVAL_FALSE(EX_VAR(opline->result.var));
  33845. opline = OP_JMP_ADDR(opline, opline->op2);
  33846. }
  33847. ZEND_VM_JMP(opline);
  33848. }
  33849. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33850. {
  33851. USE_OPLINE
  33852. zval *val;
  33853. bool ret;
  33854. val = EX_VAR(opline->op1.var);
  33855. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  33856. ZVAL_TRUE(EX_VAR(opline->result.var));
  33857. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  33858. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  33859. ZVAL_FALSE(EX_VAR(opline->result.var));
  33860. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  33861. SAVE_OPLINE();
  33862. ZVAL_UNDEFINED_OP1();
  33863. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33864. } else {
  33865. ZEND_VM_NEXT_OPCODE();
  33866. }
  33867. }
  33868. SAVE_OPLINE();
  33869. ret = i_zend_is_true(val);
  33870. if (ret) {
  33871. ZVAL_TRUE(EX_VAR(opline->result.var));
  33872. opline = OP_JMP_ADDR(opline, opline->op2);
  33873. } else {
  33874. ZVAL_FALSE(EX_VAR(opline->result.var));
  33875. opline++;
  33876. }
  33877. ZEND_VM_JMP(opline);
  33878. }
  33879. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33880. {
  33881. USE_OPLINE
  33882. zval *retval_ptr;
  33883. zval *return_value;
  33884. retval_ptr = EX_VAR(opline->op1.var);
  33885. return_value = EX(return_value);
  33886. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  33887. SAVE_OPLINE();
  33888. retval_ptr = ZVAL_UNDEFINED_OP1();
  33889. if (return_value) {
  33890. ZVAL_NULL(return_value);
  33891. }
  33892. } else if (!return_value) {
  33893. if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
  33894. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  33895. SAVE_OPLINE();
  33896. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  33897. }
  33898. }
  33899. } else {
  33900. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  33901. ZVAL_COPY_VALUE(return_value, retval_ptr);
  33902. if (IS_CV == IS_CONST) {
  33903. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  33904. Z_ADDREF_P(return_value);
  33905. }
  33906. }
  33907. } else if (IS_CV == IS_CV) {
  33908. do {
  33909. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  33910. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  33911. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  33912. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  33913. ZVAL_COPY_VALUE(return_value, retval_ptr);
  33914. if (GC_MAY_LEAK(ref)) {
  33915. gc_possible_root(ref);
  33916. }
  33917. ZVAL_NULL(retval_ptr);
  33918. break;
  33919. } else {
  33920. Z_ADDREF_P(retval_ptr);
  33921. }
  33922. } else {
  33923. retval_ptr = Z_REFVAL_P(retval_ptr);
  33924. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  33925. Z_ADDREF_P(retval_ptr);
  33926. }
  33927. }
  33928. }
  33929. ZVAL_COPY_VALUE(return_value, retval_ptr);
  33930. } while (0);
  33931. } else /* if (IS_CV == IS_VAR) */ {
  33932. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  33933. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  33934. retval_ptr = Z_REFVAL_P(retval_ptr);
  33935. ZVAL_COPY_VALUE(return_value, retval_ptr);
  33936. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  33937. efree_size(ref, sizeof(zend_reference));
  33938. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  33939. Z_ADDREF_P(retval_ptr);
  33940. }
  33941. } else {
  33942. ZVAL_COPY_VALUE(return_value, retval_ptr);
  33943. }
  33944. }
  33945. }
  33946. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33947. }
  33948. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33949. {
  33950. USE_OPLINE
  33951. zval *retval_ptr;
  33952. zval *return_value;
  33953. SAVE_OPLINE();
  33954. return_value = EX(return_value);
  33955. do {
  33956. if ((IS_CV & (IS_CONST|IS_TMP_VAR)) ||
  33957. (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
  33958. /* Not supposed to happen, but we'll allow it */
  33959. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  33960. retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  33961. if (!return_value) {
  33962. } else {
  33963. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  33964. ZVAL_COPY_VALUE(return_value, retval_ptr);
  33965. break;
  33966. }
  33967. ZVAL_NEW_REF(return_value, retval_ptr);
  33968. if (IS_CV == IS_CONST) {
  33969. Z_TRY_ADDREF_P(retval_ptr);
  33970. }
  33971. }
  33972. break;
  33973. }
  33974. retval_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  33975. if (IS_CV == IS_VAR) {
  33976. ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
  33977. if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
  33978. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  33979. if (return_value) {
  33980. ZVAL_NEW_REF(return_value, retval_ptr);
  33981. } else {
  33982. }
  33983. break;
  33984. }
  33985. }
  33986. if (return_value) {
  33987. if (Z_ISREF_P(retval_ptr)) {
  33988. Z_ADDREF_P(retval_ptr);
  33989. } else {
  33990. ZVAL_MAKE_REF_EX(retval_ptr, 2);
  33991. }
  33992. ZVAL_REF(return_value, Z_REF_P(retval_ptr));
  33993. }
  33994. } while (0);
  33995. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33996. }
  33997. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33998. {
  33999. USE_OPLINE
  34000. zval *retval;
  34001. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  34002. SAVE_OPLINE();
  34003. retval = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34004. /* Copy return value into generator->retval */
  34005. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  34006. ZVAL_COPY_VALUE(&generator->retval, retval);
  34007. if (IS_CV == IS_CONST) {
  34008. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
  34009. Z_ADDREF(generator->retval);
  34010. }
  34011. }
  34012. } else if (IS_CV == IS_CV) {
  34013. ZVAL_COPY_DEREF(&generator->retval, retval);
  34014. } else /* if (IS_CV == IS_VAR) */ {
  34015. if (UNEXPECTED(Z_ISREF_P(retval))) {
  34016. zend_refcounted *ref = Z_COUNTED_P(retval);
  34017. retval = Z_REFVAL_P(retval);
  34018. ZVAL_COPY_VALUE(&generator->retval, retval);
  34019. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  34020. efree_size(ref, sizeof(zend_reference));
  34021. } else if (Z_OPT_REFCOUNTED_P(retval)) {
  34022. Z_ADDREF_P(retval);
  34023. }
  34024. } else {
  34025. ZVAL_COPY_VALUE(&generator->retval, retval);
  34026. }
  34027. }
  34028. /* Close the generator to free up resources */
  34029. zend_generator_close(generator, 1);
  34030. /* Pass execution back to handling code */
  34031. ZEND_VM_RETURN();
  34032. }
  34033. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34034. {
  34035. USE_OPLINE
  34036. zval *value;
  34037. SAVE_OPLINE();
  34038. value = EX_VAR(opline->op1.var);
  34039. do {
  34040. if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
  34041. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  34042. value = Z_REFVAL_P(value);
  34043. if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
  34044. break;
  34045. }
  34046. }
  34047. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  34048. ZVAL_UNDEFINED_OP1();
  34049. if (UNEXPECTED(EG(exception) != NULL)) {
  34050. HANDLE_EXCEPTION();
  34051. }
  34052. }
  34053. zend_throw_error(NULL, "Can only throw objects");
  34054. HANDLE_EXCEPTION();
  34055. }
  34056. } while (0);
  34057. zend_exception_save();
  34058. Z_TRY_ADDREF_P(value);
  34059. zend_throw_exception_object(value);
  34060. zend_exception_restore();
  34061. HANDLE_EXCEPTION();
  34062. }
  34063. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34064. {
  34065. USE_OPLINE
  34066. zval *arg, *param;
  34067. SAVE_OPLINE();
  34068. arg = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34069. param = ZEND_CALL_VAR(EX(call), opline->result.var);
  34070. if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
  34071. zend_param_must_be_ref(EX(call)->func, opline->op2.num);
  34072. Z_TRY_ADDREF_P(arg);
  34073. ZVAL_NEW_REF(param, arg);
  34074. } else {
  34075. ZVAL_COPY(param, arg);
  34076. }
  34077. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34078. }
  34079. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34080. {
  34081. USE_OPLINE
  34082. zval *val;
  34083. val = EX_VAR(opline->op1.var);
  34084. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  34085. ZVAL_TRUE(EX_VAR(opline->result.var));
  34086. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  34087. /* The result and op1 can be the same cv zval */
  34088. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  34089. ZVAL_FALSE(EX_VAR(opline->result.var));
  34090. if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  34091. SAVE_OPLINE();
  34092. ZVAL_UNDEFINED_OP1();
  34093. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34094. }
  34095. } else {
  34096. SAVE_OPLINE();
  34097. ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
  34098. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34099. }
  34100. ZEND_VM_NEXT_OPCODE();
  34101. }
  34102. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34103. {
  34104. USE_OPLINE
  34105. zval *obj;
  34106. zend_object *zobj;
  34107. zend_class_entry *ce, *scope;
  34108. zend_function *clone;
  34109. zend_object_clone_obj_t clone_call;
  34110. SAVE_OPLINE();
  34111. obj = EX_VAR(opline->op1.var);
  34112. do {
  34113. if (IS_CV == IS_CONST ||
  34114. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
  34115. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
  34116. obj = Z_REFVAL_P(obj);
  34117. if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
  34118. break;
  34119. }
  34120. }
  34121. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34122. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
  34123. ZVAL_UNDEFINED_OP1();
  34124. if (UNEXPECTED(EG(exception) != NULL)) {
  34125. HANDLE_EXCEPTION();
  34126. }
  34127. }
  34128. zend_throw_error(NULL, "__clone method called on non-object");
  34129. HANDLE_EXCEPTION();
  34130. }
  34131. } while (0);
  34132. zobj = Z_OBJ_P(obj);
  34133. ce = zobj->ce;
  34134. clone = ce->clone;
  34135. clone_call = zobj->handlers->clone_obj;
  34136. if (UNEXPECTED(clone_call == NULL)) {
  34137. zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
  34138. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34139. HANDLE_EXCEPTION();
  34140. }
  34141. if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
  34142. scope = EX(func)->op_array.scope;
  34143. if (clone->common.scope != scope) {
  34144. if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
  34145. || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
  34146. zend_wrong_clone_call(clone, scope);
  34147. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34148. HANDLE_EXCEPTION();
  34149. }
  34150. }
  34151. }
  34152. ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
  34153. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34154. }
  34155. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34156. {
  34157. USE_OPLINE
  34158. zval *expr;
  34159. zval *result = EX_VAR(opline->result.var);
  34160. HashTable *ht;
  34161. SAVE_OPLINE();
  34162. expr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34163. switch (opline->extended_value) {
  34164. case IS_LONG:
  34165. ZVAL_LONG(result, zval_get_long(expr));
  34166. break;
  34167. case IS_DOUBLE:
  34168. ZVAL_DOUBLE(result, zval_get_double(expr));
  34169. break;
  34170. case IS_STRING:
  34171. ZVAL_STR(result, zval_get_string(expr));
  34172. break;
  34173. default:
  34174. ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
  34175. if (IS_CV & (IS_VAR|IS_CV)) {
  34176. ZVAL_DEREF(expr);
  34177. }
  34178. /* If value is already of correct type, return it directly */
  34179. if (Z_TYPE_P(expr) == opline->extended_value) {
  34180. ZVAL_COPY_VALUE(result, expr);
  34181. if (IS_CV == IS_CONST) {
  34182. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  34183. } else if (IS_CV != IS_TMP_VAR) {
  34184. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  34185. }
  34186. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34187. }
  34188. if (opline->extended_value == IS_ARRAY) {
  34189. if (IS_CV == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
  34190. if (Z_TYPE_P(expr) != IS_NULL) {
  34191. ZVAL_ARR(result, zend_new_array(1));
  34192. expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
  34193. if (IS_CV == IS_CONST) {
  34194. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  34195. } else {
  34196. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  34197. }
  34198. } else {
  34199. ZVAL_EMPTY_ARRAY(result);
  34200. }
  34201. } else if (Z_OBJ_P(expr)->properties == NULL
  34202. && Z_OBJ_HT_P(expr)->get_properties_for == NULL
  34203. && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
  34204. /* Optimized version without rebuilding properties HashTable */
  34205. ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
  34206. } else {
  34207. HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
  34208. if (obj_ht) {
  34209. /* fast copy */
  34210. ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
  34211. (Z_OBJCE_P(expr)->default_properties_count ||
  34212. Z_OBJ_P(expr)->handlers != &std_object_handlers ||
  34213. GC_IS_RECURSIVE(obj_ht))));
  34214. zend_release_properties(obj_ht);
  34215. } else {
  34216. ZVAL_EMPTY_ARRAY(result);
  34217. }
  34218. }
  34219. } else {
  34220. ZEND_ASSERT(opline->extended_value == IS_OBJECT);
  34221. ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
  34222. if (Z_TYPE_P(expr) == IS_ARRAY) {
  34223. ht = zend_symtable_to_proptable(Z_ARR_P(expr));
  34224. if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
  34225. /* TODO: try not to duplicate immutable arrays as well ??? */
  34226. ht = zend_array_dup(ht);
  34227. }
  34228. Z_OBJ_P(result)->properties = ht;
  34229. } else if (Z_TYPE_P(expr) != IS_NULL) {
  34230. Z_OBJ_P(result)->properties = ht = zend_new_array(1);
  34231. expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
  34232. if (IS_CV == IS_CONST) {
  34233. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  34234. } else {
  34235. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  34236. }
  34237. }
  34238. }
  34239. }
  34240. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34241. }
  34242. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34243. {
  34244. USE_OPLINE
  34245. zend_op_array *new_op_array;
  34246. zval *inc_filename;
  34247. SAVE_OPLINE();
  34248. inc_filename = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34249. new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
  34250. if (UNEXPECTED(EG(exception) != NULL)) {
  34251. if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
  34252. destroy_op_array(new_op_array);
  34253. efree_size(new_op_array, sizeof(zend_op_array));
  34254. }
  34255. UNDEF_RESULT();
  34256. HANDLE_EXCEPTION();
  34257. } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
  34258. if (RETURN_VALUE_USED(opline)) {
  34259. ZVAL_TRUE(EX_VAR(opline->result.var));
  34260. }
  34261. } else if (EXPECTED(new_op_array != NULL)) {
  34262. zval *return_value = NULL;
  34263. zend_execute_data *call;
  34264. if (RETURN_VALUE_USED(opline)) {
  34265. return_value = EX_VAR(opline->result.var);
  34266. }
  34267. new_op_array->scope = EX(func)->op_array.scope;
  34268. call = zend_vm_stack_push_call_frame(
  34269. (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
  34270. (zend_function*)new_op_array, 0,
  34271. Z_PTR(EX(This)));
  34272. if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
  34273. call->symbol_table = EX(symbol_table);
  34274. } else {
  34275. call->symbol_table = zend_rebuild_symbol_table();
  34276. }
  34277. call->prev_execute_data = execute_data;
  34278. i_init_code_execute_data(call, new_op_array, return_value);
  34279. if (EXPECTED(zend_execute_ex == execute_ex)) {
  34280. ZEND_VM_ENTER();
  34281. } else {
  34282. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  34283. zend_execute_ex(call);
  34284. zend_vm_stack_free_call_frame(call);
  34285. }
  34286. zend_destroy_static_vars(new_op_array);
  34287. destroy_op_array(new_op_array);
  34288. efree_size(new_op_array, sizeof(zend_op_array));
  34289. if (UNEXPECTED(EG(exception) != NULL)) {
  34290. zend_rethrow_exception(execute_data);
  34291. UNDEF_RESULT();
  34292. HANDLE_EXCEPTION();
  34293. }
  34294. } else if (RETURN_VALUE_USED(opline)) {
  34295. ZVAL_FALSE(EX_VAR(opline->result.var));
  34296. }
  34297. ZEND_VM_NEXT_OPCODE();
  34298. }
  34299. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34300. {
  34301. USE_OPLINE
  34302. zval *array_ptr, *result;
  34303. SAVE_OPLINE();
  34304. array_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34305. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  34306. result = EX_VAR(opline->result.var);
  34307. ZVAL_COPY_VALUE(result, array_ptr);
  34308. if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
  34309. Z_ADDREF_P(array_ptr);
  34310. }
  34311. Z_FE_POS_P(result) = 0;
  34312. ZEND_VM_NEXT_OPCODE();
  34313. } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  34314. zend_object *zobj = Z_OBJ_P(array_ptr);
  34315. if (!zobj->ce->get_iterator) {
  34316. HashTable *properties = zobj->properties;
  34317. if (properties) {
  34318. if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
  34319. if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
  34320. GC_DELREF(properties);
  34321. }
  34322. properties = zobj->properties = zend_array_dup(properties);
  34323. }
  34324. } else {
  34325. properties = zobj->handlers->get_properties(zobj);
  34326. }
  34327. result = EX_VAR(opline->result.var);
  34328. ZVAL_COPY_VALUE(result, array_ptr);
  34329. if (IS_CV != IS_TMP_VAR) {
  34330. Z_ADDREF_P(array_ptr);
  34331. }
  34332. if (zend_hash_num_elements(properties) == 0) {
  34333. Z_FE_ITER_P(result) = (uint32_t) -1;
  34334. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  34335. }
  34336. Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
  34337. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34338. } else {
  34339. bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
  34340. if (UNEXPECTED(EG(exception))) {
  34341. HANDLE_EXCEPTION();
  34342. } else if (is_empty) {
  34343. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  34344. } else {
  34345. ZEND_VM_NEXT_OPCODE();
  34346. }
  34347. }
  34348. } else {
  34349. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
  34350. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34351. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  34352. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  34353. }
  34354. }
  34355. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34356. {
  34357. USE_OPLINE
  34358. zval *array_ptr, *array_ref;
  34359. SAVE_OPLINE();
  34360. if (IS_CV == IS_VAR || IS_CV == IS_CV) {
  34361. array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34362. if (Z_ISREF_P(array_ref)) {
  34363. array_ptr = Z_REFVAL_P(array_ref);
  34364. }
  34365. } else {
  34366. array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34367. }
  34368. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  34369. if (IS_CV == IS_VAR || IS_CV == IS_CV) {
  34370. if (array_ptr == array_ref) {
  34371. ZVAL_NEW_REF(array_ref, array_ref);
  34372. array_ptr = Z_REFVAL_P(array_ref);
  34373. }
  34374. Z_ADDREF_P(array_ref);
  34375. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  34376. } else {
  34377. array_ref = EX_VAR(opline->result.var);
  34378. ZVAL_NEW_REF(array_ref, array_ptr);
  34379. array_ptr = Z_REFVAL_P(array_ref);
  34380. }
  34381. if (IS_CV == IS_CONST) {
  34382. ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
  34383. } else {
  34384. SEPARATE_ARRAY(array_ptr);
  34385. }
  34386. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
  34387. if (IS_CV == IS_VAR) {
  34388. }
  34389. ZEND_VM_NEXT_OPCODE();
  34390. } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  34391. if (!Z_OBJCE_P(array_ptr)->get_iterator) {
  34392. HashTable *properties;
  34393. if (IS_CV == IS_VAR || IS_CV == IS_CV) {
  34394. if (array_ptr == array_ref) {
  34395. ZVAL_NEW_REF(array_ref, array_ref);
  34396. array_ptr = Z_REFVAL_P(array_ref);
  34397. }
  34398. Z_ADDREF_P(array_ref);
  34399. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  34400. } else {
  34401. array_ptr = EX_VAR(opline->result.var);
  34402. ZVAL_COPY_VALUE(array_ptr, array_ref);
  34403. }
  34404. if (Z_OBJ_P(array_ptr)->properties
  34405. && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
  34406. if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
  34407. GC_DELREF(Z_OBJ_P(array_ptr)->properties);
  34408. }
  34409. Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
  34410. }
  34411. properties = Z_OBJPROP_P(array_ptr);
  34412. if (zend_hash_num_elements(properties) == 0) {
  34413. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
  34414. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  34415. }
  34416. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
  34417. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34418. } else {
  34419. bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
  34420. if (IS_CV == IS_VAR) {
  34421. } else {
  34422. }
  34423. if (UNEXPECTED(EG(exception))) {
  34424. HANDLE_EXCEPTION();
  34425. } else if (is_empty) {
  34426. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  34427. } else {
  34428. ZEND_VM_NEXT_OPCODE();
  34429. }
  34430. }
  34431. } else {
  34432. zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
  34433. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34434. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  34435. if (IS_CV == IS_VAR) {
  34436. } else {
  34437. }
  34438. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  34439. }
  34440. }
  34441. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34442. {
  34443. USE_OPLINE
  34444. zval *value;
  34445. zend_reference *ref = NULL;
  34446. bool ret;
  34447. SAVE_OPLINE();
  34448. value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34449. if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
  34450. if (IS_CV == IS_VAR) {
  34451. ref = Z_REF_P(value);
  34452. }
  34453. value = Z_REFVAL_P(value);
  34454. }
  34455. ret = i_zend_is_true(value);
  34456. if (UNEXPECTED(EG(exception))) {
  34457. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34458. HANDLE_EXCEPTION();
  34459. }
  34460. if (ret) {
  34461. zval *result = EX_VAR(opline->result.var);
  34462. ZVAL_COPY_VALUE(result, value);
  34463. if (IS_CV == IS_CONST) {
  34464. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  34465. } else if (IS_CV == IS_CV) {
  34466. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  34467. } else if (IS_CV == IS_VAR && ref) {
  34468. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  34469. efree_size(ref, sizeof(zend_reference));
  34470. } else if (Z_OPT_REFCOUNTED_P(result)) {
  34471. Z_ADDREF_P(result);
  34472. }
  34473. }
  34474. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  34475. }
  34476. ZEND_VM_NEXT_OPCODE();
  34477. }
  34478. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34479. {
  34480. USE_OPLINE
  34481. zval *value;
  34482. zend_reference *ref = NULL;
  34483. SAVE_OPLINE();
  34484. value = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  34485. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  34486. if (IS_CV & IS_VAR) {
  34487. ref = Z_REF_P(value);
  34488. }
  34489. value = Z_REFVAL_P(value);
  34490. }
  34491. if (Z_TYPE_P(value) > IS_NULL) {
  34492. zval *result = EX_VAR(opline->result.var);
  34493. ZVAL_COPY_VALUE(result, value);
  34494. if (IS_CV == IS_CONST) {
  34495. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  34496. } else if (IS_CV == IS_CV) {
  34497. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  34498. } else if ((IS_CV & IS_VAR) && ref) {
  34499. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  34500. efree_size(ref, sizeof(zend_reference));
  34501. } else if (Z_OPT_REFCOUNTED_P(result)) {
  34502. Z_ADDREF_P(result);
  34503. }
  34504. }
  34505. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  34506. }
  34507. if ((IS_CV & IS_VAR) && ref) {
  34508. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  34509. efree_size(ref, sizeof(zend_reference));
  34510. }
  34511. }
  34512. ZEND_VM_NEXT_OPCODE();
  34513. }
  34514. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34515. {
  34516. USE_OPLINE
  34517. zval *val, *result;
  34518. val = EX_VAR(opline->op1.var);
  34519. if (Z_TYPE_P(val) > IS_NULL) {
  34520. do {
  34521. if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
  34522. val = Z_REFVAL_P(val);
  34523. if (Z_TYPE_P(val) <= IS_NULL) {
  34524. break;
  34525. }
  34526. }
  34527. ZEND_VM_NEXT_OPCODE();
  34528. } while (0);
  34529. }
  34530. result = EX_VAR(opline->result.var);
  34531. if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
  34532. ZVAL_NULL(result);
  34533. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
  34534. SAVE_OPLINE();
  34535. ZVAL_UNDEFINED_OP1();
  34536. if (UNEXPECTED(EG(exception) != NULL)) {
  34537. HANDLE_EXCEPTION();
  34538. }
  34539. }
  34540. } else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
  34541. ZVAL_FALSE(result);
  34542. } else {
  34543. ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
  34544. ZVAL_TRUE(result);
  34545. }
  34546. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  34547. }
  34548. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34549. {
  34550. USE_OPLINE
  34551. zval *value;
  34552. zval *result = EX_VAR(opline->result.var);
  34553. value = EX_VAR(opline->op1.var);
  34554. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  34555. SAVE_OPLINE();
  34556. ZVAL_UNDEFINED_OP1();
  34557. ZVAL_NULL(result);
  34558. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34559. }
  34560. if (IS_CV == IS_CV) {
  34561. ZVAL_COPY_DEREF(result, value);
  34562. } else if (IS_CV == IS_VAR) {
  34563. if (UNEXPECTED(Z_ISREF_P(value))) {
  34564. ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
  34565. if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
  34566. efree_size(Z_REF_P(value), sizeof(zend_reference));
  34567. } else if (Z_OPT_REFCOUNTED_P(result)) {
  34568. Z_ADDREF_P(result);
  34569. }
  34570. } else {
  34571. ZVAL_COPY_VALUE(result, value);
  34572. }
  34573. } else {
  34574. ZVAL_COPY_VALUE(result, value);
  34575. if (IS_CV == IS_CONST) {
  34576. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
  34577. Z_ADDREF_P(result);
  34578. }
  34579. }
  34580. }
  34581. ZEND_VM_NEXT_OPCODE();
  34582. }
  34583. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34584. {
  34585. USE_OPLINE
  34586. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  34587. zval *val;
  34588. SAVE_OPLINE();
  34589. val = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34590. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  34591. zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
  34592. UNDEF_RESULT();
  34593. HANDLE_EXCEPTION();
  34594. }
  34595. yield_from_try_again:
  34596. if (Z_TYPE_P(val) == IS_ARRAY) {
  34597. ZVAL_COPY_VALUE(&generator->values, val);
  34598. if (Z_OPT_REFCOUNTED_P(val)) {
  34599. Z_ADDREF_P(val);
  34600. }
  34601. Z_FE_POS(generator->values) = 0;
  34602. } else if (IS_CV != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
  34603. zend_class_entry *ce = Z_OBJCE_P(val);
  34604. if (ce == zend_ce_generator) {
  34605. zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
  34606. Z_ADDREF_P(val);
  34607. if (UNEXPECTED(new_gen->execute_data == NULL)) {
  34608. zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
  34609. zval_ptr_dtor(val);
  34610. UNDEF_RESULT();
  34611. HANDLE_EXCEPTION();
  34612. } else if (Z_ISUNDEF(new_gen->retval)) {
  34613. if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
  34614. zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
  34615. zval_ptr_dtor(val);
  34616. UNDEF_RESULT();
  34617. HANDLE_EXCEPTION();
  34618. } else {
  34619. zend_generator_yield_from(generator, new_gen);
  34620. }
  34621. } else {
  34622. if (RETURN_VALUE_USED(opline)) {
  34623. ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
  34624. }
  34625. ZEND_VM_NEXT_OPCODE();
  34626. }
  34627. } else {
  34628. zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
  34629. if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
  34630. if (!EG(exception)) {
  34631. zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
  34632. }
  34633. UNDEF_RESULT();
  34634. HANDLE_EXCEPTION();
  34635. }
  34636. iter->index = 0;
  34637. if (iter->funcs->rewind) {
  34638. iter->funcs->rewind(iter);
  34639. if (UNEXPECTED(EG(exception) != NULL)) {
  34640. OBJ_RELEASE(&iter->std);
  34641. UNDEF_RESULT();
  34642. HANDLE_EXCEPTION();
  34643. }
  34644. }
  34645. ZVAL_OBJ(&generator->values, &iter->std);
  34646. }
  34647. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
  34648. val = Z_REFVAL_P(val);
  34649. goto yield_from_try_again;
  34650. } else {
  34651. zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
  34652. UNDEF_RESULT();
  34653. HANDLE_EXCEPTION();
  34654. }
  34655. /* This is the default return value
  34656. * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
  34657. if (RETURN_VALUE_USED(opline)) {
  34658. ZVAL_NULL(EX_VAR(opline->result.var));
  34659. }
  34660. /* This generator has no send target (though the generator we delegate to might have one) */
  34661. generator->send_target = NULL;
  34662. /* We increment to the next op, so we are at the correct position when the
  34663. * generator is resumed. */
  34664. ZEND_VM_INC_OPCODE();
  34665. /* The GOTO VM uses a local opline variable. We need to set the opline
  34666. * variable in execute_data so we don't resume at an old position. */
  34667. SAVE_OPLINE();
  34668. ZEND_VM_RETURN();
  34669. }
  34670. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34671. {
  34672. USE_OPLINE
  34673. zval *value;
  34674. value = EX_VAR(opline->op1.var);
  34675. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  34676. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  34677. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  34678. zval_ptr_dtor_str(value);
  34679. }
  34680. ZEND_VM_NEXT_OPCODE();
  34681. } else {
  34682. bool strict;
  34683. if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
  34684. value = Z_REFVAL_P(value);
  34685. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  34686. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  34687. ZEND_VM_NEXT_OPCODE();
  34688. }
  34689. }
  34690. SAVE_OPLINE();
  34691. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  34692. value = ZVAL_UNDEFINED_OP1();
  34693. }
  34694. strict = EX_USES_STRICT_TYPES();
  34695. do {
  34696. if (EXPECTED(!strict)) {
  34697. zend_string *str;
  34698. zval tmp;
  34699. if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
  34700. zend_error(E_DEPRECATED,
  34701. "strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
  34702. ZVAL_LONG(EX_VAR(opline->result.var), 0);
  34703. if (UNEXPECTED(EG(exception))) {
  34704. HANDLE_EXCEPTION();
  34705. }
  34706. break;
  34707. }
  34708. ZVAL_COPY(&tmp, value);
  34709. if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
  34710. ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
  34711. zval_ptr_dtor(&tmp);
  34712. break;
  34713. }
  34714. zval_ptr_dtor(&tmp);
  34715. }
  34716. if (!EG(exception)) {
  34717. zend_type_error("strlen(): Argument #1 ($str) must be of type string, %s given", zend_zval_type_name(value));
  34718. }
  34719. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34720. } while (0);
  34721. }
  34722. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34723. }
  34724. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34725. {
  34726. USE_OPLINE
  34727. zval *value;
  34728. int result = 0;
  34729. value = EX_VAR(opline->op1.var);
  34730. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  34731. type_check_resource:
  34732. if (opline->extended_value != MAY_BE_RESOURCE
  34733. || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
  34734. result = 1;
  34735. }
  34736. } else if ((IS_CV & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
  34737. value = Z_REFVAL_P(value);
  34738. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  34739. goto type_check_resource;
  34740. }
  34741. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  34742. result = ((1 << IS_NULL) & opline->extended_value) != 0;
  34743. SAVE_OPLINE();
  34744. ZVAL_UNDEFINED_OP1();
  34745. if (UNEXPECTED(EG(exception))) {
  34746. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34747. HANDLE_EXCEPTION();
  34748. }
  34749. }
  34750. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  34751. SAVE_OPLINE();
  34752. ZEND_VM_SMART_BRANCH(result, 1);
  34753. } else {
  34754. ZEND_VM_SMART_BRANCH(result, 0);
  34755. }
  34756. }
  34757. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34758. {
  34759. uint32_t fetch_type;
  34760. zend_class_entry *called_scope, *scope;
  34761. USE_OPLINE
  34762. if (IS_CV != IS_UNUSED) {
  34763. SAVE_OPLINE();
  34764. zval *op = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34765. if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
  34766. ZVAL_DEREF(op);
  34767. if (Z_TYPE_P(op) != IS_OBJECT) {
  34768. zend_type_error("Cannot use \"::class\" on value of type %s", zend_zval_type_name(op));
  34769. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34770. HANDLE_EXCEPTION();
  34771. }
  34772. }
  34773. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
  34774. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34775. }
  34776. fetch_type = opline->op1.num;
  34777. scope = EX(func)->op_array.scope;
  34778. if (UNEXPECTED(scope == NULL)) {
  34779. SAVE_OPLINE();
  34780. zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
  34781. fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
  34782. fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
  34783. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34784. HANDLE_EXCEPTION();
  34785. }
  34786. switch (fetch_type) {
  34787. case ZEND_FETCH_CLASS_SELF:
  34788. ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
  34789. break;
  34790. case ZEND_FETCH_CLASS_PARENT:
  34791. if (UNEXPECTED(scope->parent == NULL)) {
  34792. SAVE_OPLINE();
  34793. zend_throw_error(NULL,
  34794. "Cannot use \"parent\" when current class scope has no parent");
  34795. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34796. HANDLE_EXCEPTION();
  34797. }
  34798. ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
  34799. break;
  34800. case ZEND_FETCH_CLASS_STATIC:
  34801. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  34802. called_scope = Z_OBJCE(EX(This));
  34803. } else {
  34804. called_scope = Z_CE(EX(This));
  34805. }
  34806. ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
  34807. break;
  34808. EMPTY_SWITCH_DEFAULT_CASE()
  34809. }
  34810. ZEND_VM_NEXT_OPCODE();
  34811. }
  34812. 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)
  34813. {
  34814. USE_OPLINE
  34815. zval *var_ptr;
  34816. var_ptr = EX_VAR(opline->op1.var);
  34817. Z_LVAL_P(var_ptr)++;
  34818. if (UNEXPECTED(0)) {
  34819. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  34820. }
  34821. ZEND_VM_NEXT_OPCODE();
  34822. }
  34823. 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)
  34824. {
  34825. USE_OPLINE
  34826. zval *var_ptr;
  34827. var_ptr = EX_VAR(opline->op1.var);
  34828. Z_LVAL_P(var_ptr)++;
  34829. if (UNEXPECTED(1)) {
  34830. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  34831. }
  34832. ZEND_VM_NEXT_OPCODE();
  34833. }
  34834. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34835. {
  34836. USE_OPLINE
  34837. zval *var_ptr;
  34838. var_ptr = EX_VAR(opline->op1.var);
  34839. fast_long_increment_function(var_ptr);
  34840. if (UNEXPECTED(0)) {
  34841. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  34842. }
  34843. ZEND_VM_NEXT_OPCODE();
  34844. }
  34845. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34846. {
  34847. USE_OPLINE
  34848. zval *var_ptr;
  34849. var_ptr = EX_VAR(opline->op1.var);
  34850. fast_long_increment_function(var_ptr);
  34851. if (UNEXPECTED(1)) {
  34852. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  34853. }
  34854. ZEND_VM_NEXT_OPCODE();
  34855. }
  34856. 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)
  34857. {
  34858. USE_OPLINE
  34859. zval *var_ptr;
  34860. var_ptr = EX_VAR(opline->op1.var);
  34861. Z_LVAL_P(var_ptr)--;
  34862. if (UNEXPECTED(0)) {
  34863. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  34864. }
  34865. ZEND_VM_NEXT_OPCODE();
  34866. }
  34867. 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)
  34868. {
  34869. USE_OPLINE
  34870. zval *var_ptr;
  34871. var_ptr = EX_VAR(opline->op1.var);
  34872. Z_LVAL_P(var_ptr)--;
  34873. if (UNEXPECTED(1)) {
  34874. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  34875. }
  34876. ZEND_VM_NEXT_OPCODE();
  34877. }
  34878. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34879. {
  34880. USE_OPLINE
  34881. zval *var_ptr;
  34882. var_ptr = EX_VAR(opline->op1.var);
  34883. fast_long_decrement_function(var_ptr);
  34884. if (UNEXPECTED(0)) {
  34885. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  34886. }
  34887. ZEND_VM_NEXT_OPCODE();
  34888. }
  34889. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34890. {
  34891. USE_OPLINE
  34892. zval *var_ptr;
  34893. var_ptr = EX_VAR(opline->op1.var);
  34894. fast_long_decrement_function(var_ptr);
  34895. if (UNEXPECTED(1)) {
  34896. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  34897. }
  34898. ZEND_VM_NEXT_OPCODE();
  34899. }
  34900. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34901. {
  34902. USE_OPLINE
  34903. zval *var_ptr;
  34904. var_ptr = EX_VAR(opline->op1.var);
  34905. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  34906. Z_LVAL_P(var_ptr)++;
  34907. ZEND_VM_NEXT_OPCODE();
  34908. }
  34909. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34910. {
  34911. USE_OPLINE
  34912. zval *var_ptr;
  34913. var_ptr = EX_VAR(opline->op1.var);
  34914. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  34915. fast_long_increment_function(var_ptr);
  34916. ZEND_VM_NEXT_OPCODE();
  34917. }
  34918. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_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_DEC_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_decrement_function(var_ptr);
  34934. ZEND_VM_NEXT_OPCODE();
  34935. }
  34936. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34937. {
  34938. USE_OPLINE
  34939. zval *varptr, *arg;
  34940. varptr = EX_VAR(opline->op1.var);
  34941. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  34942. if (IS_CV == IS_CV) {
  34943. ZVAL_COPY(arg, varptr);
  34944. } else /* if (IS_CV == IS_VAR) */ {
  34945. ZVAL_COPY_VALUE(arg, varptr);
  34946. }
  34947. ZEND_VM_NEXT_OPCODE();
  34948. }
  34949. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34950. {
  34951. USE_OPLINE
  34952. zval *op1, *op2;
  34953. SAVE_OPLINE();
  34954. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34955. op2 = RT_CONSTANT(opline, opline->op2);
  34956. div_function(EX_VAR(opline->result.var), op1, op2);
  34957. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34958. }
  34959. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34960. {
  34961. USE_OPLINE
  34962. zval *op1, *op2;
  34963. SAVE_OPLINE();
  34964. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  34965. op2 = RT_CONSTANT(opline, opline->op2);
  34966. pow_function(EX_VAR(opline->result.var), op1, op2);
  34967. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34968. }
  34969. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34970. {
  34971. USE_OPLINE
  34972. zval *op1, *op2;
  34973. op1 = EX_VAR(opline->op1.var);
  34974. op2 = RT_CONSTANT(opline, opline->op2);
  34975. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  34976. (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  34977. zend_string *op1_str = Z_STR_P(op1);
  34978. zend_string *op2_str = Z_STR_P(op2);
  34979. zend_string *str;
  34980. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  34981. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  34982. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  34983. } else {
  34984. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  34985. }
  34986. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  34987. zend_string_release_ex(op1_str, 0);
  34988. }
  34989. } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  34990. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  34991. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  34992. } else {
  34993. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  34994. }
  34995. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  34996. zend_string_release_ex(op2_str, 0);
  34997. }
  34998. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  34999. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  35000. size_t len = ZSTR_LEN(op1_str);
  35001. if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
  35002. zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
  35003. }
  35004. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  35005. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  35006. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  35007. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  35008. zend_string_release_ex(op2_str, 0);
  35009. }
  35010. } else {
  35011. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  35012. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  35013. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  35014. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  35015. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  35016. zend_string_release_ex(op1_str, 0);
  35017. }
  35018. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  35019. zend_string_release_ex(op2_str, 0);
  35020. }
  35021. }
  35022. ZEND_VM_NEXT_OPCODE();
  35023. } else {
  35024. SAVE_OPLINE();
  35025. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  35026. op1 = ZVAL_UNDEFINED_OP1();
  35027. }
  35028. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  35029. op2 = ZVAL_UNDEFINED_OP2();
  35030. }
  35031. concat_function(EX_VAR(opline->result.var), op1, op2);
  35032. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35033. }
  35034. }
  35035. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35036. {
  35037. USE_OPLINE
  35038. zval *op1, *op2;
  35039. bool result;
  35040. SAVE_OPLINE();
  35041. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  35042. op2 = RT_CONSTANT(opline, opline->op2);
  35043. result = fast_is_identical_function(op1, op2);
  35044. ZEND_VM_SMART_BRANCH(result, 1);
  35045. }
  35046. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35047. {
  35048. USE_OPLINE
  35049. zval *op1, *op2;
  35050. bool result;
  35051. SAVE_OPLINE();
  35052. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  35053. op2 = RT_CONSTANT(opline, opline->op2);
  35054. result = fast_is_not_identical_function(op1, op2);
  35055. ZEND_VM_SMART_BRANCH(result, 1);
  35056. }
  35057. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35058. {
  35059. USE_OPLINE
  35060. zval *op1, *op2;
  35061. double d1, d2;
  35062. op1 = EX_VAR(opline->op1.var);
  35063. op2 = RT_CONSTANT(opline, opline->op2);
  35064. if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
  35065. /* pass */
  35066. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  35067. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35068. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  35069. is_equal_true:
  35070. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  35071. } else {
  35072. is_equal_false:
  35073. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  35074. }
  35075. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35076. d1 = (double)Z_LVAL_P(op1);
  35077. d2 = Z_DVAL_P(op2);
  35078. goto is_equal_double;
  35079. }
  35080. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  35081. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35082. d1 = Z_DVAL_P(op1);
  35083. d2 = Z_DVAL_P(op2);
  35084. is_equal_double:
  35085. if (d1 == d2) {
  35086. goto is_equal_true;
  35087. } else {
  35088. goto is_equal_false;
  35089. }
  35090. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35091. d1 = Z_DVAL_P(op1);
  35092. d2 = (double)Z_LVAL_P(op2);
  35093. goto is_equal_double;
  35094. }
  35095. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  35096. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  35097. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  35098. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  35099. zval_ptr_dtor_str(op1);
  35100. }
  35101. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  35102. zval_ptr_dtor_str(op2);
  35103. }
  35104. if (result) {
  35105. goto is_equal_true;
  35106. } else {
  35107. goto is_equal_false;
  35108. }
  35109. }
  35110. }
  35111. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  35112. }
  35113. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35114. {
  35115. USE_OPLINE
  35116. zval *op1, *op2;
  35117. double d1, d2;
  35118. op1 = EX_VAR(opline->op1.var);
  35119. op2 = RT_CONSTANT(opline, opline->op2);
  35120. if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
  35121. /* pass */
  35122. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  35123. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35124. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  35125. is_equal_true:
  35126. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  35127. } else {
  35128. is_equal_false:
  35129. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  35130. }
  35131. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35132. d1 = (double)Z_LVAL_P(op1);
  35133. d2 = Z_DVAL_P(op2);
  35134. goto is_equal_double;
  35135. }
  35136. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  35137. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35138. d1 = Z_DVAL_P(op1);
  35139. d2 = Z_DVAL_P(op2);
  35140. is_equal_double:
  35141. if (d1 == d2) {
  35142. goto is_equal_true;
  35143. } else {
  35144. goto is_equal_false;
  35145. }
  35146. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35147. d1 = Z_DVAL_P(op1);
  35148. d2 = (double)Z_LVAL_P(op2);
  35149. goto is_equal_double;
  35150. }
  35151. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  35152. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  35153. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  35154. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  35155. zval_ptr_dtor_str(op1);
  35156. }
  35157. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  35158. zval_ptr_dtor_str(op2);
  35159. }
  35160. if (result) {
  35161. goto is_equal_true;
  35162. } else {
  35163. goto is_equal_false;
  35164. }
  35165. }
  35166. }
  35167. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  35168. }
  35169. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35170. {
  35171. USE_OPLINE
  35172. zval *op1, *op2;
  35173. double d1, d2;
  35174. op1 = EX_VAR(opline->op1.var);
  35175. op2 = RT_CONSTANT(opline, opline->op2);
  35176. if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
  35177. /* pass */
  35178. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  35179. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35180. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  35181. is_equal_true:
  35182. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  35183. } else {
  35184. is_equal_false:
  35185. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  35186. }
  35187. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35188. d1 = (double)Z_LVAL_P(op1);
  35189. d2 = Z_DVAL_P(op2);
  35190. goto is_equal_double;
  35191. }
  35192. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  35193. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35194. d1 = Z_DVAL_P(op1);
  35195. d2 = Z_DVAL_P(op2);
  35196. is_equal_double:
  35197. if (d1 == d2) {
  35198. goto is_equal_true;
  35199. } else {
  35200. goto is_equal_false;
  35201. }
  35202. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35203. d1 = Z_DVAL_P(op1);
  35204. d2 = (double)Z_LVAL_P(op2);
  35205. goto is_equal_double;
  35206. }
  35207. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  35208. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  35209. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  35210. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  35211. zval_ptr_dtor_str(op1);
  35212. }
  35213. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  35214. zval_ptr_dtor_str(op2);
  35215. }
  35216. if (result) {
  35217. goto is_equal_true;
  35218. } else {
  35219. goto is_equal_false;
  35220. }
  35221. }
  35222. }
  35223. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  35224. }
  35225. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35226. {
  35227. USE_OPLINE
  35228. zval *op1, *op2;
  35229. double d1, d2;
  35230. op1 = EX_VAR(opline->op1.var);
  35231. op2 = RT_CONSTANT(opline, opline->op2);
  35232. if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
  35233. /* pass */
  35234. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  35235. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35236. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  35237. is_not_equal_true:
  35238. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  35239. } else {
  35240. is_not_equal_false:
  35241. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  35242. }
  35243. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35244. d1 = (double)Z_LVAL_P(op1);
  35245. d2 = Z_DVAL_P(op2);
  35246. goto is_not_equal_double;
  35247. }
  35248. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  35249. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35250. d1 = Z_DVAL_P(op1);
  35251. d2 = Z_DVAL_P(op2);
  35252. is_not_equal_double:
  35253. if (d1 != d2) {
  35254. goto is_not_equal_true;
  35255. } else {
  35256. goto is_not_equal_false;
  35257. }
  35258. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35259. d1 = Z_DVAL_P(op1);
  35260. d2 = (double)Z_LVAL_P(op2);
  35261. goto is_not_equal_double;
  35262. }
  35263. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  35264. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  35265. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  35266. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  35267. zval_ptr_dtor_str(op1);
  35268. }
  35269. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  35270. zval_ptr_dtor_str(op2);
  35271. }
  35272. if (!result) {
  35273. goto is_not_equal_true;
  35274. } else {
  35275. goto is_not_equal_false;
  35276. }
  35277. }
  35278. }
  35279. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  35280. }
  35281. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35282. {
  35283. USE_OPLINE
  35284. zval *op1, *op2;
  35285. double d1, d2;
  35286. op1 = EX_VAR(opline->op1.var);
  35287. op2 = RT_CONSTANT(opline, opline->op2);
  35288. if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
  35289. /* pass */
  35290. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  35291. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35292. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  35293. is_not_equal_true:
  35294. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  35295. } else {
  35296. is_not_equal_false:
  35297. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  35298. }
  35299. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35300. d1 = (double)Z_LVAL_P(op1);
  35301. d2 = Z_DVAL_P(op2);
  35302. goto is_not_equal_double;
  35303. }
  35304. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  35305. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35306. d1 = Z_DVAL_P(op1);
  35307. d2 = Z_DVAL_P(op2);
  35308. is_not_equal_double:
  35309. if (d1 != d2) {
  35310. goto is_not_equal_true;
  35311. } else {
  35312. goto is_not_equal_false;
  35313. }
  35314. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35315. d1 = Z_DVAL_P(op1);
  35316. d2 = (double)Z_LVAL_P(op2);
  35317. goto is_not_equal_double;
  35318. }
  35319. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  35320. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  35321. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  35322. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  35323. zval_ptr_dtor_str(op1);
  35324. }
  35325. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  35326. zval_ptr_dtor_str(op2);
  35327. }
  35328. if (!result) {
  35329. goto is_not_equal_true;
  35330. } else {
  35331. goto is_not_equal_false;
  35332. }
  35333. }
  35334. }
  35335. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  35336. }
  35337. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35338. {
  35339. USE_OPLINE
  35340. zval *op1, *op2;
  35341. double d1, d2;
  35342. op1 = EX_VAR(opline->op1.var);
  35343. op2 = RT_CONSTANT(opline, opline->op2);
  35344. if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
  35345. /* pass */
  35346. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  35347. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35348. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  35349. is_not_equal_true:
  35350. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  35351. } else {
  35352. is_not_equal_false:
  35353. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  35354. }
  35355. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35356. d1 = (double)Z_LVAL_P(op1);
  35357. d2 = Z_DVAL_P(op2);
  35358. goto is_not_equal_double;
  35359. }
  35360. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  35361. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  35362. d1 = Z_DVAL_P(op1);
  35363. d2 = Z_DVAL_P(op2);
  35364. is_not_equal_double:
  35365. if (d1 != d2) {
  35366. goto is_not_equal_true;
  35367. } else {
  35368. goto is_not_equal_false;
  35369. }
  35370. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  35371. d1 = Z_DVAL_P(op1);
  35372. d2 = (double)Z_LVAL_P(op2);
  35373. goto is_not_equal_double;
  35374. }
  35375. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  35376. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  35377. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  35378. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  35379. zval_ptr_dtor_str(op1);
  35380. }
  35381. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  35382. zval_ptr_dtor_str(op2);
  35383. }
  35384. if (!result) {
  35385. goto is_not_equal_true;
  35386. } else {
  35387. goto is_not_equal_false;
  35388. }
  35389. }
  35390. }
  35391. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  35392. }
  35393. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35394. {
  35395. USE_OPLINE
  35396. zval *op1, *op2;
  35397. SAVE_OPLINE();
  35398. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  35399. op2 = RT_CONSTANT(opline, opline->op2);
  35400. compare_function(EX_VAR(opline->result.var), op1, op2);
  35401. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35402. }
  35403. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35404. {
  35405. USE_OPLINE
  35406. zval *op1, *op2;
  35407. SAVE_OPLINE();
  35408. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  35409. op2 = RT_CONSTANT(opline, opline->op2);
  35410. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  35411. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35412. }
  35413. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35414. {
  35415. USE_OPLINE
  35416. zval *object;
  35417. zval *property;
  35418. zval *value;
  35419. zval *zptr;
  35420. void **cache_slot;
  35421. zend_property_info *prop_info;
  35422. zend_object *zobj;
  35423. zend_string *name, *tmp_name;
  35424. SAVE_OPLINE();
  35425. object = EX_VAR(opline->op1.var);
  35426. property = RT_CONSTANT(opline, opline->op2);
  35427. do {
  35428. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  35429. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  35430. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  35431. object = Z_REFVAL_P(object);
  35432. goto assign_op_object;
  35433. }
  35434. if (IS_CV == IS_CV
  35435. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  35436. ZVAL_UNDEFINED_OP1();
  35437. }
  35438. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  35439. break;
  35440. }
  35441. assign_op_object:
  35442. /* here we are sure we are dealing with an object */
  35443. zobj = Z_OBJ_P(object);
  35444. if (IS_CONST == IS_CONST) {
  35445. name = Z_STR_P(property);
  35446. } else {
  35447. name = zval_try_get_tmp_string(property, &tmp_name);
  35448. if (UNEXPECTED(!name)) {
  35449. UNDEF_RESULT();
  35450. break;
  35451. }
  35452. }
  35453. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  35454. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  35455. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  35456. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35457. ZVAL_NULL(EX_VAR(opline->result.var));
  35458. }
  35459. } else {
  35460. zval *orig_zptr = zptr;
  35461. zend_reference *ref;
  35462. do {
  35463. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  35464. ref = Z_REF_P(zptr);
  35465. zptr = Z_REFVAL_P(zptr);
  35466. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  35467. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  35468. break;
  35469. }
  35470. }
  35471. if (IS_CONST == IS_CONST) {
  35472. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  35473. } else {
  35474. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  35475. }
  35476. if (UNEXPECTED(prop_info)) {
  35477. /* special case for typed properties */
  35478. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  35479. } else {
  35480. zend_binary_op(zptr, zptr, value OPLINE_CC);
  35481. }
  35482. } while (0);
  35483. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35484. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  35485. }
  35486. }
  35487. } else {
  35488. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  35489. }
  35490. if (IS_CONST != IS_CONST) {
  35491. zend_tmp_string_release(tmp_name);
  35492. }
  35493. } while (0);
  35494. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  35495. /* assign_obj has two opcodes! */
  35496. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  35497. }
  35498. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  35499. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35500. {
  35501. USE_OPLINE
  35502. zval *var_ptr;
  35503. zval *value, *container, *dim;
  35504. HashTable *ht;
  35505. SAVE_OPLINE();
  35506. container = EX_VAR(opline->op1.var);
  35507. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  35508. assign_dim_op_array:
  35509. SEPARATE_ARRAY(container);
  35510. ht = Z_ARRVAL_P(container);
  35511. assign_dim_op_new_array:
  35512. dim = RT_CONSTANT(opline, opline->op2);
  35513. if (IS_CONST == IS_UNUSED) {
  35514. var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
  35515. if (UNEXPECTED(!var_ptr)) {
  35516. zend_cannot_add_element();
  35517. goto assign_dim_op_ret_null;
  35518. }
  35519. } else {
  35520. if (IS_CONST == IS_CONST) {
  35521. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
  35522. } else {
  35523. var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
  35524. }
  35525. if (UNEXPECTED(!var_ptr)) {
  35526. goto assign_dim_op_ret_null;
  35527. }
  35528. }
  35529. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  35530. do {
  35531. if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
  35532. zend_reference *ref = Z_REF_P(var_ptr);
  35533. var_ptr = Z_REFVAL_P(var_ptr);
  35534. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  35535. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  35536. break;
  35537. }
  35538. }
  35539. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  35540. } while (0);
  35541. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35542. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  35543. }
  35544. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  35545. } else {
  35546. if (EXPECTED(Z_ISREF_P(container))) {
  35547. container = Z_REFVAL_P(container);
  35548. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  35549. goto assign_dim_op_array;
  35550. }
  35551. }
  35552. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  35553. zend_object *obj = Z_OBJ_P(container);
  35554. dim = RT_CONSTANT(opline, opline->op2);
  35555. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  35556. dim++;
  35557. }
  35558. zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
  35559. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  35560. zend_uchar old_type;
  35561. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  35562. ZVAL_UNDEFINED_OP1();
  35563. }
  35564. ht = zend_new_array(8);
  35565. old_type = Z_TYPE_P(container);
  35566. ZVAL_ARR(container, ht);
  35567. if (UNEXPECTED(old_type == IS_FALSE)) {
  35568. GC_ADDREF(ht);
  35569. zend_false_to_array_deprecated();
  35570. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  35571. zend_array_destroy(ht);
  35572. goto assign_dim_op_ret_null;
  35573. }
  35574. }
  35575. goto assign_dim_op_new_array;
  35576. } else {
  35577. dim = RT_CONSTANT(opline, opline->op2);
  35578. zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  35579. assign_dim_op_ret_null:
  35580. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  35581. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35582. ZVAL_NULL(EX_VAR(opline->result.var));
  35583. }
  35584. }
  35585. }
  35586. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  35587. }
  35588. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35589. {
  35590. USE_OPLINE
  35591. zval *var_ptr;
  35592. zval *value;
  35593. SAVE_OPLINE();
  35594. value = RT_CONSTANT(opline, opline->op2);
  35595. var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  35596. do {
  35597. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  35598. zend_reference *ref = Z_REF_P(var_ptr);
  35599. var_ptr = Z_REFVAL_P(var_ptr);
  35600. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  35601. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  35602. break;
  35603. }
  35604. }
  35605. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  35606. } while (0);
  35607. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35608. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  35609. }
  35610. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35611. }
  35612. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35613. {
  35614. USE_OPLINE
  35615. zval *object;
  35616. zval *property;
  35617. zval *zptr;
  35618. void **cache_slot;
  35619. zend_property_info *prop_info;
  35620. zend_object *zobj;
  35621. zend_string *name, *tmp_name;
  35622. SAVE_OPLINE();
  35623. object = EX_VAR(opline->op1.var);
  35624. property = RT_CONSTANT(opline, opline->op2);
  35625. do {
  35626. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  35627. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  35628. object = Z_REFVAL_P(object);
  35629. goto pre_incdec_object;
  35630. }
  35631. if (IS_CV == IS_CV
  35632. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  35633. ZVAL_UNDEFINED_OP1();
  35634. }
  35635. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  35636. break;
  35637. }
  35638. pre_incdec_object:
  35639. /* here we are sure we are dealing with an object */
  35640. zobj = Z_OBJ_P(object);
  35641. if (IS_CONST == IS_CONST) {
  35642. name = Z_STR_P(property);
  35643. } else {
  35644. name = zval_try_get_tmp_string(property, &tmp_name);
  35645. if (UNEXPECTED(!name)) {
  35646. UNDEF_RESULT();
  35647. break;
  35648. }
  35649. }
  35650. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  35651. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  35652. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  35653. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35654. ZVAL_NULL(EX_VAR(opline->result.var));
  35655. }
  35656. } else {
  35657. if (IS_CONST == IS_CONST) {
  35658. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  35659. } else {
  35660. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  35661. }
  35662. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  35663. }
  35664. } else {
  35665. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  35666. }
  35667. if (IS_CONST != IS_CONST) {
  35668. zend_tmp_string_release(tmp_name);
  35669. }
  35670. } while (0);
  35671. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35672. }
  35673. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35674. {
  35675. USE_OPLINE
  35676. zval *object;
  35677. zval *property;
  35678. zval *zptr;
  35679. void **cache_slot;
  35680. zend_property_info *prop_info;
  35681. zend_object *zobj;
  35682. zend_string *name, *tmp_name;
  35683. SAVE_OPLINE();
  35684. object = EX_VAR(opline->op1.var);
  35685. property = RT_CONSTANT(opline, opline->op2);
  35686. do {
  35687. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  35688. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  35689. object = Z_REFVAL_P(object);
  35690. goto post_incdec_object;
  35691. }
  35692. if (IS_CV == IS_CV
  35693. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  35694. ZVAL_UNDEFINED_OP1();
  35695. }
  35696. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  35697. break;
  35698. }
  35699. post_incdec_object:
  35700. /* here we are sure we are dealing with an object */
  35701. zobj = Z_OBJ_P(object);
  35702. if (IS_CONST == IS_CONST) {
  35703. name = Z_STR_P(property);
  35704. } else {
  35705. name = zval_try_get_tmp_string(property, &tmp_name);
  35706. if (UNEXPECTED(!name)) {
  35707. ZVAL_UNDEF(EX_VAR(opline->result.var));
  35708. break;
  35709. }
  35710. }
  35711. cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  35712. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  35713. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  35714. ZVAL_NULL(EX_VAR(opline->result.var));
  35715. } else {
  35716. if (IS_CONST == IS_CONST) {
  35717. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  35718. } else {
  35719. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  35720. }
  35721. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  35722. }
  35723. } else {
  35724. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  35725. }
  35726. if (IS_CONST != IS_CONST) {
  35727. zend_tmp_string_release(tmp_name);
  35728. }
  35729. } while (0);
  35730. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35731. }
  35732. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35733. {
  35734. USE_OPLINE
  35735. zval *container, *dim, *value;
  35736. SAVE_OPLINE();
  35737. container = EX_VAR(opline->op1.var);
  35738. dim = RT_CONSTANT(opline, opline->op2);
  35739. if (IS_CV != IS_CONST) {
  35740. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  35741. fetch_dim_r_array:
  35742. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
  35743. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  35744. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  35745. container = Z_REFVAL_P(container);
  35746. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  35747. goto fetch_dim_r_array;
  35748. } else {
  35749. goto fetch_dim_r_slow;
  35750. }
  35751. } else {
  35752. fetch_dim_r_slow:
  35753. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  35754. dim++;
  35755. }
  35756. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  35757. }
  35758. } else {
  35759. zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  35760. }
  35761. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35762. }
  35763. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35764. {
  35765. USE_OPLINE
  35766. zval *container;
  35767. SAVE_OPLINE();
  35768. container = EX_VAR(opline->op1.var);
  35769. zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  35770. if (IS_CV == IS_VAR) {
  35771. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  35772. }
  35773. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35774. }
  35775. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35776. {
  35777. USE_OPLINE
  35778. zval *container;
  35779. SAVE_OPLINE();
  35780. container = EX_VAR(opline->op1.var);
  35781. zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  35782. if (IS_CV == IS_VAR) {
  35783. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  35784. }
  35785. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35786. }
  35787. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35788. {
  35789. USE_OPLINE
  35790. zval *container;
  35791. SAVE_OPLINE();
  35792. container = EX_VAR(opline->op1.var);
  35793. zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  35794. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35795. }
  35796. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35797. {
  35798. #if 0
  35799. USE_OPLINE
  35800. #endif
  35801. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  35802. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  35803. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  35804. }
  35805. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  35806. } else {
  35807. if (IS_CONST == IS_UNUSED) {
  35808. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  35809. }
  35810. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  35811. }
  35812. }
  35813. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35814. {
  35815. USE_OPLINE
  35816. zval *container;
  35817. SAVE_OPLINE();
  35818. container = EX_VAR(opline->op1.var);
  35819. zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  35820. if (IS_CV == IS_VAR) {
  35821. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  35822. }
  35823. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35824. }
  35825. static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35826. {
  35827. USE_OPLINE
  35828. zval *container;
  35829. void **cache_slot = NULL;
  35830. SAVE_OPLINE();
  35831. container = EX_VAR(opline->op1.var);
  35832. if (IS_CV == IS_CONST ||
  35833. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  35834. do {
  35835. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  35836. container = Z_REFVAL_P(container);
  35837. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  35838. break;
  35839. }
  35840. }
  35841. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  35842. ZVAL_UNDEFINED_OP1();
  35843. }
  35844. zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
  35845. ZVAL_NULL(EX_VAR(opline->result.var));
  35846. goto fetch_obj_r_finish;
  35847. } while (0);
  35848. }
  35849. /* here we are sure we are dealing with an object */
  35850. do {
  35851. zend_object *zobj = Z_OBJ_P(container);
  35852. zend_string *name, *tmp_name;
  35853. zval *retval;
  35854. if (IS_CONST == IS_CONST) {
  35855. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  35856. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  35857. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  35858. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  35859. retval = OBJ_PROP(zobj, prop_offset);
  35860. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  35861. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  35862. goto fetch_obj_r_copy;
  35863. } else {
  35864. fetch_obj_r_fast_copy:
  35865. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  35866. ZEND_VM_NEXT_OPCODE();
  35867. }
  35868. }
  35869. } else if (EXPECTED(zobj->properties != NULL)) {
  35870. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  35871. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  35872. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  35873. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  35874. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  35875. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  35876. (EXPECTED(p->key == name) ||
  35877. (EXPECTED(p->h == ZSTR_H(name)) &&
  35878. EXPECTED(p->key != NULL) &&
  35879. EXPECTED(zend_string_equal_content(p->key, name))))) {
  35880. retval = &p->val;
  35881. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  35882. goto fetch_obj_r_copy;
  35883. } else {
  35884. goto fetch_obj_r_fast_copy;
  35885. }
  35886. }
  35887. }
  35888. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  35889. }
  35890. retval = zend_hash_find_known_hash(zobj->properties, name);
  35891. if (EXPECTED(retval)) {
  35892. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  35893. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  35894. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  35895. goto fetch_obj_r_copy;
  35896. } else {
  35897. goto fetch_obj_r_fast_copy;
  35898. }
  35899. }
  35900. }
  35901. }
  35902. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  35903. } else {
  35904. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  35905. if (UNEXPECTED(!name)) {
  35906. ZVAL_UNDEF(EX_VAR(opline->result.var));
  35907. break;
  35908. }
  35909. }
  35910. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  35911. #if ZEND_DEBUG
  35912. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  35913. zend_verify_internal_read_property_type(zobj, name, retval);
  35914. }
  35915. #endif
  35916. if (IS_CONST != IS_CONST) {
  35917. zend_tmp_string_release(tmp_name);
  35918. }
  35919. if (retval != EX_VAR(opline->result.var)) {
  35920. fetch_obj_r_copy:
  35921. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  35922. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  35923. zend_unwrap_reference(retval);
  35924. }
  35925. } while (0);
  35926. fetch_obj_r_finish:
  35927. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35928. }
  35929. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35930. {
  35931. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  35932. }
  35933. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35934. {
  35935. USE_OPLINE
  35936. zval *property, *container, *result;
  35937. SAVE_OPLINE();
  35938. container = EX_VAR(opline->op1.var);
  35939. property = RT_CONSTANT(opline, opline->op2);
  35940. result = EX_VAR(opline->result.var);
  35941. zend_fetch_property_address(
  35942. result, container, IS_CV, property, IS_CONST,
  35943. ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  35944. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
  35945. if (IS_CV == IS_VAR) {
  35946. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  35947. }
  35948. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35949. }
  35950. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35951. {
  35952. USE_OPLINE
  35953. zval *property, *container, *result;
  35954. SAVE_OPLINE();
  35955. container = EX_VAR(opline->op1.var);
  35956. property = RT_CONSTANT(opline, opline->op2);
  35957. result = EX_VAR(opline->result.var);
  35958. 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);
  35959. if (IS_CV == IS_VAR) {
  35960. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  35961. }
  35962. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35963. }
  35964. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35965. {
  35966. USE_OPLINE
  35967. zval *container;
  35968. void **cache_slot = NULL;
  35969. SAVE_OPLINE();
  35970. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  35971. if (IS_CV == IS_CONST ||
  35972. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  35973. do {
  35974. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  35975. container = Z_REFVAL_P(container);
  35976. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  35977. break;
  35978. }
  35979. }
  35980. if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  35981. ZVAL_UNDEFINED_OP2();
  35982. }
  35983. ZVAL_NULL(EX_VAR(opline->result.var));
  35984. goto fetch_obj_is_finish;
  35985. } while (0);
  35986. }
  35987. /* here we are sure we are dealing with an object */
  35988. do {
  35989. zend_object *zobj = Z_OBJ_P(container);
  35990. zend_string *name, *tmp_name;
  35991. zval *retval;
  35992. if (IS_CONST == IS_CONST) {
  35993. cache_slot = CACHE_ADDR(opline->extended_value);
  35994. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  35995. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  35996. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  35997. retval = OBJ_PROP(zobj, prop_offset);
  35998. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  35999. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  36000. goto fetch_obj_is_copy;
  36001. } else {
  36002. fetch_obj_is_fast_copy:
  36003. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  36004. ZEND_VM_NEXT_OPCODE();
  36005. }
  36006. }
  36007. } else if (EXPECTED(zobj->properties != NULL)) {
  36008. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36009. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  36010. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  36011. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  36012. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  36013. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  36014. (EXPECTED(p->key == name) ||
  36015. (EXPECTED(p->h == ZSTR_H(name)) &&
  36016. EXPECTED(p->key != NULL) &&
  36017. EXPECTED(zend_string_equal_content(p->key, name))))) {
  36018. retval = &p->val;
  36019. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  36020. goto fetch_obj_is_copy;
  36021. } else {
  36022. goto fetch_obj_is_fast_copy;
  36023. }
  36024. }
  36025. }
  36026. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  36027. }
  36028. retval = zend_hash_find_known_hash(zobj->properties, name);
  36029. if (EXPECTED(retval)) {
  36030. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  36031. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  36032. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  36033. goto fetch_obj_is_copy;
  36034. } else {
  36035. goto fetch_obj_is_fast_copy;
  36036. }
  36037. }
  36038. }
  36039. }
  36040. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36041. } else {
  36042. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  36043. if (UNEXPECTED(!name)) {
  36044. ZVAL_UNDEF(EX_VAR(opline->result.var));
  36045. break;
  36046. }
  36047. }
  36048. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  36049. if (IS_CONST != IS_CONST) {
  36050. zend_tmp_string_release(tmp_name);
  36051. }
  36052. if (retval != EX_VAR(opline->result.var)) {
  36053. fetch_obj_is_copy:
  36054. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  36055. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  36056. zend_unwrap_reference(retval);
  36057. }
  36058. } while (0);
  36059. fetch_obj_is_finish:
  36060. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36061. }
  36062. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36063. {
  36064. #if 0
  36065. USE_OPLINE
  36066. #endif
  36067. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  36068. /* Behave like FETCH_OBJ_W */
  36069. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  36070. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  36071. }
  36072. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  36073. } else {
  36074. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  36075. }
  36076. }
  36077. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36078. {
  36079. USE_OPLINE
  36080. zval *container, *property, *result;
  36081. SAVE_OPLINE();
  36082. container = EX_VAR(opline->op1.var);
  36083. property = RT_CONSTANT(opline, opline->op2);
  36084. result = EX_VAR(opline->result.var);
  36085. 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);
  36086. if (IS_CV == IS_VAR) {
  36087. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  36088. }
  36089. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36090. }
  36091. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36092. {
  36093. USE_OPLINE
  36094. zval *object, *value, tmp;
  36095. zend_object *zobj;
  36096. zend_string *name, *tmp_name;
  36097. SAVE_OPLINE();
  36098. object = EX_VAR(opline->op1.var);
  36099. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  36100. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  36101. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  36102. object = Z_REFVAL_P(object);
  36103. goto assign_object;
  36104. }
  36105. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  36106. value = &EG(uninitialized_zval);
  36107. goto free_and_exit_assign_obj;
  36108. }
  36109. assign_object:
  36110. zobj = Z_OBJ_P(object);
  36111. if (IS_CONST == IS_CONST) {
  36112. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  36113. void **cache_slot = CACHE_ADDR(opline->extended_value);
  36114. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  36115. zend_object *zobj = Z_OBJ_P(object);
  36116. zval *property_val;
  36117. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  36118. property_val = OBJ_PROP(zobj, prop_offset);
  36119. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  36120. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  36121. if (UNEXPECTED(prop_info != NULL)) {
  36122. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  36123. goto free_and_exit_assign_obj;
  36124. } else {
  36125. fast_assign_obj:
  36126. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  36127. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36128. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36129. }
  36130. goto exit_assign_obj;
  36131. }
  36132. }
  36133. } else {
  36134. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36135. if (EXPECTED(zobj->properties != NULL)) {
  36136. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  36137. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  36138. GC_DELREF(zobj->properties);
  36139. }
  36140. zobj->properties = zend_array_dup(zobj->properties);
  36141. }
  36142. property_val = zend_hash_find_known_hash(zobj->properties, name);
  36143. if (property_val) {
  36144. goto fast_assign_obj;
  36145. }
  36146. }
  36147. if (!zobj->ce->__set) {
  36148. if (EXPECTED(zobj->properties == NULL)) {
  36149. rebuild_object_properties(zobj);
  36150. }
  36151. if (IS_CONST == IS_CONST) {
  36152. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  36153. Z_ADDREF_P(value);
  36154. }
  36155. } else if (IS_CONST != IS_TMP_VAR) {
  36156. if (Z_ISREF_P(value)) {
  36157. if (IS_CONST == IS_VAR) {
  36158. zend_reference *ref = Z_REF_P(value);
  36159. if (GC_DELREF(ref) == 0) {
  36160. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  36161. efree_size(ref, sizeof(zend_reference));
  36162. value = &tmp;
  36163. } else {
  36164. value = Z_REFVAL_P(value);
  36165. Z_TRY_ADDREF_P(value);
  36166. }
  36167. } else {
  36168. value = Z_REFVAL_P(value);
  36169. Z_TRY_ADDREF_P(value);
  36170. }
  36171. } else if (IS_CONST == IS_CV) {
  36172. Z_TRY_ADDREF_P(value);
  36173. }
  36174. }
  36175. zend_hash_add_new(zobj->properties, name, value);
  36176. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36177. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36178. }
  36179. goto exit_assign_obj;
  36180. }
  36181. }
  36182. }
  36183. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36184. } else {
  36185. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  36186. if (UNEXPECTED(!name)) {
  36187. UNDEF_RESULT();
  36188. goto exit_assign_obj;
  36189. }
  36190. }
  36191. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  36192. ZVAL_DEREF(value);
  36193. }
  36194. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  36195. if (IS_CONST != IS_CONST) {
  36196. zend_tmp_string_release(tmp_name);
  36197. }
  36198. free_and_exit_assign_obj:
  36199. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36200. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  36201. }
  36202. exit_assign_obj:
  36203. /* assign_obj has two opcodes! */
  36204. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  36205. }
  36206. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  36207. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36208. {
  36209. USE_OPLINE
  36210. zval *object, *value, tmp;
  36211. zend_object *zobj;
  36212. zend_string *name, *tmp_name;
  36213. SAVE_OPLINE();
  36214. object = EX_VAR(opline->op1.var);
  36215. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  36216. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  36217. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  36218. object = Z_REFVAL_P(object);
  36219. goto assign_object;
  36220. }
  36221. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  36222. value = &EG(uninitialized_zval);
  36223. goto free_and_exit_assign_obj;
  36224. }
  36225. assign_object:
  36226. zobj = Z_OBJ_P(object);
  36227. if (IS_CONST == IS_CONST) {
  36228. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  36229. void **cache_slot = CACHE_ADDR(opline->extended_value);
  36230. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  36231. zend_object *zobj = Z_OBJ_P(object);
  36232. zval *property_val;
  36233. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  36234. property_val = OBJ_PROP(zobj, prop_offset);
  36235. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  36236. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  36237. if (UNEXPECTED(prop_info != NULL)) {
  36238. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  36239. goto free_and_exit_assign_obj;
  36240. } else {
  36241. fast_assign_obj:
  36242. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  36243. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36244. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36245. }
  36246. goto exit_assign_obj;
  36247. }
  36248. }
  36249. } else {
  36250. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36251. if (EXPECTED(zobj->properties != NULL)) {
  36252. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  36253. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  36254. GC_DELREF(zobj->properties);
  36255. }
  36256. zobj->properties = zend_array_dup(zobj->properties);
  36257. }
  36258. property_val = zend_hash_find_known_hash(zobj->properties, name);
  36259. if (property_val) {
  36260. goto fast_assign_obj;
  36261. }
  36262. }
  36263. if (!zobj->ce->__set) {
  36264. if (EXPECTED(zobj->properties == NULL)) {
  36265. rebuild_object_properties(zobj);
  36266. }
  36267. if (IS_TMP_VAR == IS_CONST) {
  36268. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  36269. Z_ADDREF_P(value);
  36270. }
  36271. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  36272. if (Z_ISREF_P(value)) {
  36273. if (IS_TMP_VAR == IS_VAR) {
  36274. zend_reference *ref = Z_REF_P(value);
  36275. if (GC_DELREF(ref) == 0) {
  36276. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  36277. efree_size(ref, sizeof(zend_reference));
  36278. value = &tmp;
  36279. } else {
  36280. value = Z_REFVAL_P(value);
  36281. Z_TRY_ADDREF_P(value);
  36282. }
  36283. } else {
  36284. value = Z_REFVAL_P(value);
  36285. Z_TRY_ADDREF_P(value);
  36286. }
  36287. } else if (IS_TMP_VAR == IS_CV) {
  36288. Z_TRY_ADDREF_P(value);
  36289. }
  36290. }
  36291. zend_hash_add_new(zobj->properties, name, value);
  36292. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36293. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36294. }
  36295. goto exit_assign_obj;
  36296. }
  36297. }
  36298. }
  36299. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36300. } else {
  36301. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  36302. if (UNEXPECTED(!name)) {
  36303. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36304. UNDEF_RESULT();
  36305. goto exit_assign_obj;
  36306. }
  36307. }
  36308. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  36309. ZVAL_DEREF(value);
  36310. }
  36311. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  36312. if (IS_CONST != IS_CONST) {
  36313. zend_tmp_string_release(tmp_name);
  36314. }
  36315. free_and_exit_assign_obj:
  36316. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36317. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  36318. }
  36319. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36320. exit_assign_obj:
  36321. /* assign_obj has two opcodes! */
  36322. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  36323. }
  36324. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  36325. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36326. {
  36327. USE_OPLINE
  36328. zval *object, *value, tmp;
  36329. zend_object *zobj;
  36330. zend_string *name, *tmp_name;
  36331. SAVE_OPLINE();
  36332. object = EX_VAR(opline->op1.var);
  36333. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  36334. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  36335. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  36336. object = Z_REFVAL_P(object);
  36337. goto assign_object;
  36338. }
  36339. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  36340. value = &EG(uninitialized_zval);
  36341. goto free_and_exit_assign_obj;
  36342. }
  36343. assign_object:
  36344. zobj = Z_OBJ_P(object);
  36345. if (IS_CONST == IS_CONST) {
  36346. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  36347. void **cache_slot = CACHE_ADDR(opline->extended_value);
  36348. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  36349. zend_object *zobj = Z_OBJ_P(object);
  36350. zval *property_val;
  36351. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  36352. property_val = OBJ_PROP(zobj, prop_offset);
  36353. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  36354. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  36355. if (UNEXPECTED(prop_info != NULL)) {
  36356. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  36357. goto free_and_exit_assign_obj;
  36358. } else {
  36359. fast_assign_obj:
  36360. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  36361. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36362. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36363. }
  36364. goto exit_assign_obj;
  36365. }
  36366. }
  36367. } else {
  36368. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36369. if (EXPECTED(zobj->properties != NULL)) {
  36370. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  36371. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  36372. GC_DELREF(zobj->properties);
  36373. }
  36374. zobj->properties = zend_array_dup(zobj->properties);
  36375. }
  36376. property_val = zend_hash_find_known_hash(zobj->properties, name);
  36377. if (property_val) {
  36378. goto fast_assign_obj;
  36379. }
  36380. }
  36381. if (!zobj->ce->__set) {
  36382. if (EXPECTED(zobj->properties == NULL)) {
  36383. rebuild_object_properties(zobj);
  36384. }
  36385. if (IS_VAR == IS_CONST) {
  36386. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  36387. Z_ADDREF_P(value);
  36388. }
  36389. } else if (IS_VAR != IS_TMP_VAR) {
  36390. if (Z_ISREF_P(value)) {
  36391. if (IS_VAR == IS_VAR) {
  36392. zend_reference *ref = Z_REF_P(value);
  36393. if (GC_DELREF(ref) == 0) {
  36394. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  36395. efree_size(ref, sizeof(zend_reference));
  36396. value = &tmp;
  36397. } else {
  36398. value = Z_REFVAL_P(value);
  36399. Z_TRY_ADDREF_P(value);
  36400. }
  36401. } else {
  36402. value = Z_REFVAL_P(value);
  36403. Z_TRY_ADDREF_P(value);
  36404. }
  36405. } else if (IS_VAR == IS_CV) {
  36406. Z_TRY_ADDREF_P(value);
  36407. }
  36408. }
  36409. zend_hash_add_new(zobj->properties, name, value);
  36410. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36411. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36412. }
  36413. goto exit_assign_obj;
  36414. }
  36415. }
  36416. }
  36417. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36418. } else {
  36419. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  36420. if (UNEXPECTED(!name)) {
  36421. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36422. UNDEF_RESULT();
  36423. goto exit_assign_obj;
  36424. }
  36425. }
  36426. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  36427. ZVAL_DEREF(value);
  36428. }
  36429. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  36430. if (IS_CONST != IS_CONST) {
  36431. zend_tmp_string_release(tmp_name);
  36432. }
  36433. free_and_exit_assign_obj:
  36434. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36435. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  36436. }
  36437. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36438. exit_assign_obj:
  36439. /* assign_obj has two opcodes! */
  36440. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  36441. }
  36442. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  36443. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36444. {
  36445. USE_OPLINE
  36446. zval *object, *value, tmp;
  36447. zend_object *zobj;
  36448. zend_string *name, *tmp_name;
  36449. SAVE_OPLINE();
  36450. object = EX_VAR(opline->op1.var);
  36451. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  36452. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  36453. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  36454. object = Z_REFVAL_P(object);
  36455. goto assign_object;
  36456. }
  36457. zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
  36458. value = &EG(uninitialized_zval);
  36459. goto free_and_exit_assign_obj;
  36460. }
  36461. assign_object:
  36462. zobj = Z_OBJ_P(object);
  36463. if (IS_CONST == IS_CONST) {
  36464. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  36465. void **cache_slot = CACHE_ADDR(opline->extended_value);
  36466. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  36467. zend_object *zobj = Z_OBJ_P(object);
  36468. zval *property_val;
  36469. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  36470. property_val = OBJ_PROP(zobj, prop_offset);
  36471. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  36472. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  36473. if (UNEXPECTED(prop_info != NULL)) {
  36474. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  36475. goto free_and_exit_assign_obj;
  36476. } else {
  36477. fast_assign_obj:
  36478. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  36479. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36480. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36481. }
  36482. goto exit_assign_obj;
  36483. }
  36484. }
  36485. } else {
  36486. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36487. if (EXPECTED(zobj->properties != NULL)) {
  36488. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  36489. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  36490. GC_DELREF(zobj->properties);
  36491. }
  36492. zobj->properties = zend_array_dup(zobj->properties);
  36493. }
  36494. property_val = zend_hash_find_known_hash(zobj->properties, name);
  36495. if (property_val) {
  36496. goto fast_assign_obj;
  36497. }
  36498. }
  36499. if (!zobj->ce->__set) {
  36500. if (EXPECTED(zobj->properties == NULL)) {
  36501. rebuild_object_properties(zobj);
  36502. }
  36503. if (IS_CV == IS_CONST) {
  36504. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  36505. Z_ADDREF_P(value);
  36506. }
  36507. } else if (IS_CV != IS_TMP_VAR) {
  36508. if (Z_ISREF_P(value)) {
  36509. if (IS_CV == IS_VAR) {
  36510. zend_reference *ref = Z_REF_P(value);
  36511. if (GC_DELREF(ref) == 0) {
  36512. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  36513. efree_size(ref, sizeof(zend_reference));
  36514. value = &tmp;
  36515. } else {
  36516. value = Z_REFVAL_P(value);
  36517. Z_TRY_ADDREF_P(value);
  36518. }
  36519. } else {
  36520. value = Z_REFVAL_P(value);
  36521. Z_TRY_ADDREF_P(value);
  36522. }
  36523. } else if (IS_CV == IS_CV) {
  36524. Z_TRY_ADDREF_P(value);
  36525. }
  36526. }
  36527. zend_hash_add_new(zobj->properties, name, value);
  36528. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36529. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36530. }
  36531. goto exit_assign_obj;
  36532. }
  36533. }
  36534. }
  36535. name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  36536. } else {
  36537. name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
  36538. if (UNEXPECTED(!name)) {
  36539. UNDEF_RESULT();
  36540. goto exit_assign_obj;
  36541. }
  36542. }
  36543. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  36544. ZVAL_DEREF(value);
  36545. }
  36546. value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  36547. if (IS_CONST != IS_CONST) {
  36548. zend_tmp_string_release(tmp_name);
  36549. }
  36550. free_and_exit_assign_obj:
  36551. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36552. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  36553. }
  36554. exit_assign_obj:
  36555. /* assign_obj has two opcodes! */
  36556. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  36557. }
  36558. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  36559. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36560. {
  36561. USE_OPLINE
  36562. zval *object_ptr, *orig_object_ptr;
  36563. zval *value;
  36564. zval *variable_ptr;
  36565. zval *dim;
  36566. SAVE_OPLINE();
  36567. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  36568. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  36569. try_assign_dim_array:
  36570. SEPARATE_ARRAY(object_ptr);
  36571. if (IS_CONST == IS_UNUSED) {
  36572. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  36573. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  36574. HashTable *ht = Z_ARRVAL_P(object_ptr);
  36575. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  36576. GC_ADDREF(ht);
  36577. }
  36578. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  36579. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  36580. zend_array_destroy(ht);
  36581. goto assign_dim_error;
  36582. }
  36583. }
  36584. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  36585. ZVAL_DEREF(value);
  36586. }
  36587. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  36588. if (UNEXPECTED(value == NULL)) {
  36589. zend_cannot_add_element();
  36590. goto assign_dim_error;
  36591. } else if (IS_CONST == IS_CV) {
  36592. if (Z_REFCOUNTED_P(value)) {
  36593. Z_ADDREF_P(value);
  36594. }
  36595. } else if (IS_CONST == IS_VAR) {
  36596. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  36597. if (Z_ISREF_P(free_op_data)) {
  36598. if (Z_REFCOUNTED_P(value)) {
  36599. Z_ADDREF_P(value);
  36600. }
  36601. zval_ptr_dtor_nogc(free_op_data);
  36602. }
  36603. } else if (IS_CONST == IS_CONST) {
  36604. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  36605. Z_ADDREF_P(value);
  36606. }
  36607. }
  36608. } else {
  36609. dim = RT_CONSTANT(opline, opline->op2);
  36610. if (IS_CONST == IS_CONST) {
  36611. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  36612. } else {
  36613. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  36614. }
  36615. if (UNEXPECTED(variable_ptr == NULL)) {
  36616. goto assign_dim_error;
  36617. }
  36618. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  36619. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  36620. }
  36621. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36622. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36623. }
  36624. } else {
  36625. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  36626. object_ptr = Z_REFVAL_P(object_ptr);
  36627. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  36628. goto try_assign_dim_array;
  36629. }
  36630. }
  36631. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  36632. zend_object *obj = Z_OBJ_P(object_ptr);
  36633. GC_ADDREF(obj);
  36634. dim = RT_CONSTANT(opline, opline->op2);
  36635. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  36636. dim = ZVAL_UNDEFINED_OP2();
  36637. } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  36638. dim++;
  36639. }
  36640. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  36641. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  36642. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  36643. } else if (IS_CONST & (IS_CV|IS_VAR)) {
  36644. ZVAL_DEREF(value);
  36645. }
  36646. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  36647. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  36648. zend_objects_store_del(obj);
  36649. }
  36650. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  36651. if (IS_CONST == IS_UNUSED) {
  36652. zend_use_new_element_for_string();
  36653. UNDEF_RESULT();
  36654. } else {
  36655. dim = RT_CONSTANT(opline, opline->op2);
  36656. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  36657. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  36658. }
  36659. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  36660. if (Z_ISREF_P(orig_object_ptr)
  36661. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  36662. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  36663. dim = RT_CONSTANT(opline, opline->op2);
  36664. UNDEF_RESULT();
  36665. } else {
  36666. HashTable *ht = zend_new_array(8);
  36667. zend_uchar old_type = Z_TYPE_P(object_ptr);
  36668. ZVAL_ARR(object_ptr, ht);
  36669. if (UNEXPECTED(old_type == IS_FALSE)) {
  36670. GC_ADDREF(ht);
  36671. zend_false_to_array_deprecated();
  36672. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  36673. zend_array_destroy(ht);
  36674. goto assign_dim_error;
  36675. }
  36676. }
  36677. goto try_assign_dim_array;
  36678. }
  36679. } else {
  36680. zend_use_scalar_as_array();
  36681. dim = RT_CONSTANT(opline, opline->op2);
  36682. assign_dim_error:
  36683. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36684. ZVAL_NULL(EX_VAR(opline->result.var));
  36685. }
  36686. }
  36687. }
  36688. if (IS_CONST != IS_UNUSED) {
  36689. }
  36690. /* assign_dim has two opcodes! */
  36691. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  36692. }
  36693. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36694. {
  36695. USE_OPLINE
  36696. zval *object_ptr, *orig_object_ptr;
  36697. zval *value;
  36698. zval *variable_ptr;
  36699. zval *dim;
  36700. SAVE_OPLINE();
  36701. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  36702. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  36703. try_assign_dim_array:
  36704. SEPARATE_ARRAY(object_ptr);
  36705. if (IS_CONST == IS_UNUSED) {
  36706. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  36707. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  36708. HashTable *ht = Z_ARRVAL_P(object_ptr);
  36709. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  36710. GC_ADDREF(ht);
  36711. }
  36712. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  36713. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  36714. zend_array_destroy(ht);
  36715. goto assign_dim_error;
  36716. }
  36717. }
  36718. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  36719. ZVAL_DEREF(value);
  36720. }
  36721. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  36722. if (UNEXPECTED(value == NULL)) {
  36723. zend_cannot_add_element();
  36724. goto assign_dim_error;
  36725. } else if (IS_TMP_VAR == IS_CV) {
  36726. if (Z_REFCOUNTED_P(value)) {
  36727. Z_ADDREF_P(value);
  36728. }
  36729. } else if (IS_TMP_VAR == IS_VAR) {
  36730. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  36731. if (Z_ISREF_P(free_op_data)) {
  36732. if (Z_REFCOUNTED_P(value)) {
  36733. Z_ADDREF_P(value);
  36734. }
  36735. zval_ptr_dtor_nogc(free_op_data);
  36736. }
  36737. } else if (IS_TMP_VAR == IS_CONST) {
  36738. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  36739. Z_ADDREF_P(value);
  36740. }
  36741. }
  36742. } else {
  36743. dim = RT_CONSTANT(opline, opline->op2);
  36744. if (IS_CONST == IS_CONST) {
  36745. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  36746. } else {
  36747. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  36748. }
  36749. if (UNEXPECTED(variable_ptr == NULL)) {
  36750. goto assign_dim_error;
  36751. }
  36752. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  36753. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  36754. }
  36755. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36756. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36757. }
  36758. } else {
  36759. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  36760. object_ptr = Z_REFVAL_P(object_ptr);
  36761. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  36762. goto try_assign_dim_array;
  36763. }
  36764. }
  36765. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  36766. zend_object *obj = Z_OBJ_P(object_ptr);
  36767. GC_ADDREF(obj);
  36768. dim = RT_CONSTANT(opline, opline->op2);
  36769. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  36770. dim = ZVAL_UNDEFINED_OP2();
  36771. } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  36772. dim++;
  36773. }
  36774. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  36775. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  36776. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  36777. } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
  36778. ZVAL_DEREF(value);
  36779. }
  36780. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  36781. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36782. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  36783. zend_objects_store_del(obj);
  36784. }
  36785. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  36786. if (IS_CONST == IS_UNUSED) {
  36787. zend_use_new_element_for_string();
  36788. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36789. UNDEF_RESULT();
  36790. } else {
  36791. dim = RT_CONSTANT(opline, opline->op2);
  36792. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  36793. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  36794. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36795. }
  36796. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  36797. if (Z_ISREF_P(orig_object_ptr)
  36798. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  36799. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  36800. dim = RT_CONSTANT(opline, opline->op2);
  36801. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36802. UNDEF_RESULT();
  36803. } else {
  36804. HashTable *ht = zend_new_array(8);
  36805. zend_uchar old_type = Z_TYPE_P(object_ptr);
  36806. ZVAL_ARR(object_ptr, ht);
  36807. if (UNEXPECTED(old_type == IS_FALSE)) {
  36808. GC_ADDREF(ht);
  36809. zend_false_to_array_deprecated();
  36810. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  36811. zend_array_destroy(ht);
  36812. goto assign_dim_error;
  36813. }
  36814. }
  36815. goto try_assign_dim_array;
  36816. }
  36817. } else {
  36818. zend_use_scalar_as_array();
  36819. dim = RT_CONSTANT(opline, opline->op2);
  36820. assign_dim_error:
  36821. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36822. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36823. ZVAL_NULL(EX_VAR(opline->result.var));
  36824. }
  36825. }
  36826. }
  36827. if (IS_CONST != IS_UNUSED) {
  36828. }
  36829. /* assign_dim has two opcodes! */
  36830. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  36831. }
  36832. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36833. {
  36834. USE_OPLINE
  36835. zval *object_ptr, *orig_object_ptr;
  36836. zval *value;
  36837. zval *variable_ptr;
  36838. zval *dim;
  36839. SAVE_OPLINE();
  36840. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  36841. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  36842. try_assign_dim_array:
  36843. SEPARATE_ARRAY(object_ptr);
  36844. if (IS_CONST == IS_UNUSED) {
  36845. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  36846. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  36847. HashTable *ht = Z_ARRVAL_P(object_ptr);
  36848. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  36849. GC_ADDREF(ht);
  36850. }
  36851. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  36852. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  36853. zend_array_destroy(ht);
  36854. goto assign_dim_error;
  36855. }
  36856. }
  36857. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  36858. ZVAL_DEREF(value);
  36859. }
  36860. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  36861. if (UNEXPECTED(value == NULL)) {
  36862. zend_cannot_add_element();
  36863. goto assign_dim_error;
  36864. } else if (IS_VAR == IS_CV) {
  36865. if (Z_REFCOUNTED_P(value)) {
  36866. Z_ADDREF_P(value);
  36867. }
  36868. } else if (IS_VAR == IS_VAR) {
  36869. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  36870. if (Z_ISREF_P(free_op_data)) {
  36871. if (Z_REFCOUNTED_P(value)) {
  36872. Z_ADDREF_P(value);
  36873. }
  36874. zval_ptr_dtor_nogc(free_op_data);
  36875. }
  36876. } else if (IS_VAR == IS_CONST) {
  36877. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  36878. Z_ADDREF_P(value);
  36879. }
  36880. }
  36881. } else {
  36882. dim = RT_CONSTANT(opline, opline->op2);
  36883. if (IS_CONST == IS_CONST) {
  36884. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  36885. } else {
  36886. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  36887. }
  36888. if (UNEXPECTED(variable_ptr == NULL)) {
  36889. goto assign_dim_error;
  36890. }
  36891. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  36892. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  36893. }
  36894. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36895. ZVAL_COPY(EX_VAR(opline->result.var), value);
  36896. }
  36897. } else {
  36898. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  36899. object_ptr = Z_REFVAL_P(object_ptr);
  36900. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  36901. goto try_assign_dim_array;
  36902. }
  36903. }
  36904. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  36905. zend_object *obj = Z_OBJ_P(object_ptr);
  36906. GC_ADDREF(obj);
  36907. dim = RT_CONSTANT(opline, opline->op2);
  36908. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  36909. dim = ZVAL_UNDEFINED_OP2();
  36910. } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  36911. dim++;
  36912. }
  36913. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  36914. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  36915. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  36916. } else if (IS_VAR & (IS_CV|IS_VAR)) {
  36917. ZVAL_DEREF(value);
  36918. }
  36919. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  36920. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36921. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  36922. zend_objects_store_del(obj);
  36923. }
  36924. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  36925. if (IS_CONST == IS_UNUSED) {
  36926. zend_use_new_element_for_string();
  36927. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36928. UNDEF_RESULT();
  36929. } else {
  36930. dim = RT_CONSTANT(opline, opline->op2);
  36931. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  36932. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  36933. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36934. }
  36935. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  36936. if (Z_ISREF_P(orig_object_ptr)
  36937. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  36938. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  36939. dim = RT_CONSTANT(opline, opline->op2);
  36940. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36941. UNDEF_RESULT();
  36942. } else {
  36943. HashTable *ht = zend_new_array(8);
  36944. zend_uchar old_type = Z_TYPE_P(object_ptr);
  36945. ZVAL_ARR(object_ptr, ht);
  36946. if (UNEXPECTED(old_type == IS_FALSE)) {
  36947. GC_ADDREF(ht);
  36948. zend_false_to_array_deprecated();
  36949. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  36950. zend_array_destroy(ht);
  36951. goto assign_dim_error;
  36952. }
  36953. }
  36954. goto try_assign_dim_array;
  36955. }
  36956. } else {
  36957. zend_use_scalar_as_array();
  36958. dim = RT_CONSTANT(opline, opline->op2);
  36959. assign_dim_error:
  36960. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  36961. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  36962. ZVAL_NULL(EX_VAR(opline->result.var));
  36963. }
  36964. }
  36965. }
  36966. if (IS_CONST != IS_UNUSED) {
  36967. }
  36968. /* assign_dim has two opcodes! */
  36969. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  36970. }
  36971. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36972. {
  36973. USE_OPLINE
  36974. zval *object_ptr, *orig_object_ptr;
  36975. zval *value;
  36976. zval *variable_ptr;
  36977. zval *dim;
  36978. SAVE_OPLINE();
  36979. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  36980. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  36981. try_assign_dim_array:
  36982. SEPARATE_ARRAY(object_ptr);
  36983. if (IS_CONST == IS_UNUSED) {
  36984. value = EX_VAR((opline+1)->op1.var);
  36985. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  36986. HashTable *ht = Z_ARRVAL_P(object_ptr);
  36987. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  36988. GC_ADDREF(ht);
  36989. }
  36990. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  36991. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  36992. zend_array_destroy(ht);
  36993. goto assign_dim_error;
  36994. }
  36995. }
  36996. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  36997. ZVAL_DEREF(value);
  36998. }
  36999. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  37000. if (UNEXPECTED(value == NULL)) {
  37001. zend_cannot_add_element();
  37002. goto assign_dim_error;
  37003. } else if (IS_CV == IS_CV) {
  37004. if (Z_REFCOUNTED_P(value)) {
  37005. Z_ADDREF_P(value);
  37006. }
  37007. } else if (IS_CV == IS_VAR) {
  37008. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  37009. if (Z_ISREF_P(free_op_data)) {
  37010. if (Z_REFCOUNTED_P(value)) {
  37011. Z_ADDREF_P(value);
  37012. }
  37013. zval_ptr_dtor_nogc(free_op_data);
  37014. }
  37015. } else if (IS_CV == IS_CONST) {
  37016. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  37017. Z_ADDREF_P(value);
  37018. }
  37019. }
  37020. } else {
  37021. dim = RT_CONSTANT(opline, opline->op2);
  37022. if (IS_CONST == IS_CONST) {
  37023. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  37024. } else {
  37025. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  37026. }
  37027. if (UNEXPECTED(variable_ptr == NULL)) {
  37028. goto assign_dim_error;
  37029. }
  37030. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  37031. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  37032. }
  37033. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  37034. ZVAL_COPY(EX_VAR(opline->result.var), value);
  37035. }
  37036. } else {
  37037. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  37038. object_ptr = Z_REFVAL_P(object_ptr);
  37039. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  37040. goto try_assign_dim_array;
  37041. }
  37042. }
  37043. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  37044. zend_object *obj = Z_OBJ_P(object_ptr);
  37045. GC_ADDREF(obj);
  37046. dim = RT_CONSTANT(opline, opline->op2);
  37047. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  37048. dim = ZVAL_UNDEFINED_OP2();
  37049. } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  37050. dim++;
  37051. }
  37052. value = EX_VAR((opline+1)->op1.var);
  37053. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  37054. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  37055. } else if (IS_CV & (IS_CV|IS_VAR)) {
  37056. ZVAL_DEREF(value);
  37057. }
  37058. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  37059. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  37060. zend_objects_store_del(obj);
  37061. }
  37062. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  37063. if (IS_CONST == IS_UNUSED) {
  37064. zend_use_new_element_for_string();
  37065. UNDEF_RESULT();
  37066. } else {
  37067. dim = RT_CONSTANT(opline, opline->op2);
  37068. value = EX_VAR((opline+1)->op1.var);
  37069. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  37070. }
  37071. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  37072. if (Z_ISREF_P(orig_object_ptr)
  37073. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  37074. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  37075. dim = RT_CONSTANT(opline, opline->op2);
  37076. UNDEF_RESULT();
  37077. } else {
  37078. HashTable *ht = zend_new_array(8);
  37079. zend_uchar old_type = Z_TYPE_P(object_ptr);
  37080. ZVAL_ARR(object_ptr, ht);
  37081. if (UNEXPECTED(old_type == IS_FALSE)) {
  37082. GC_ADDREF(ht);
  37083. zend_false_to_array_deprecated();
  37084. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  37085. zend_array_destroy(ht);
  37086. goto assign_dim_error;
  37087. }
  37088. }
  37089. goto try_assign_dim_array;
  37090. }
  37091. } else {
  37092. zend_use_scalar_as_array();
  37093. dim = RT_CONSTANT(opline, opline->op2);
  37094. assign_dim_error:
  37095. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  37096. ZVAL_NULL(EX_VAR(opline->result.var));
  37097. }
  37098. }
  37099. }
  37100. if (IS_CONST != IS_UNUSED) {
  37101. }
  37102. /* assign_dim has two opcodes! */
  37103. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  37104. }
  37105. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37106. {
  37107. USE_OPLINE
  37108. zval *value;
  37109. zval *variable_ptr;
  37110. SAVE_OPLINE();
  37111. value = RT_CONSTANT(opline, opline->op2);
  37112. variable_ptr = EX_VAR(opline->op1.var);
  37113. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  37114. if (UNEXPECTED(0)) {
  37115. ZVAL_COPY(EX_VAR(opline->result.var), value);
  37116. }
  37117. /* zend_assign_to_variable() always takes care of op2, never free it! */
  37118. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37119. }
  37120. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37121. {
  37122. USE_OPLINE
  37123. zval *value;
  37124. zval *variable_ptr;
  37125. SAVE_OPLINE();
  37126. value = RT_CONSTANT(opline, opline->op2);
  37127. variable_ptr = EX_VAR(opline->op1.var);
  37128. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  37129. if (UNEXPECTED(1)) {
  37130. ZVAL_COPY(EX_VAR(opline->result.var), value);
  37131. }
  37132. /* zend_assign_to_variable() always takes care of op2, never free it! */
  37133. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37134. }
  37135. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37136. {
  37137. USE_OPLINE
  37138. zval *property, *container, *value_ptr;
  37139. SAVE_OPLINE();
  37140. container = EX_VAR(opline->op1.var);
  37141. property = RT_CONSTANT(opline, opline->op2);
  37142. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  37143. if (1) {
  37144. if (IS_CV == IS_UNUSED) {
  37145. if (IS_CONST == IS_CONST) {
  37146. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37147. } else {
  37148. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37149. }
  37150. } else {
  37151. if (IS_CONST == IS_CONST) {
  37152. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37153. } else {
  37154. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37155. }
  37156. }
  37157. } else {
  37158. zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37159. }
  37160. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  37161. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  37162. }
  37163. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  37164. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37165. {
  37166. USE_OPLINE
  37167. zval *property, *container, *value_ptr;
  37168. SAVE_OPLINE();
  37169. container = EX_VAR(opline->op1.var);
  37170. property = RT_CONSTANT(opline, opline->op2);
  37171. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  37172. if (1) {
  37173. if (IS_CV == IS_UNUSED) {
  37174. if (IS_CONST == IS_CONST) {
  37175. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37176. } else {
  37177. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37178. }
  37179. } else {
  37180. if (IS_CONST == IS_CONST) {
  37181. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37182. } else {
  37183. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37184. }
  37185. }
  37186. } else {
  37187. zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  37188. }
  37189. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  37190. }
  37191. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  37192. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37193. {
  37194. USE_OPLINE
  37195. zval *op1, *op2;
  37196. zend_string *op1_str, *op2_str, *str;
  37197. op1 = EX_VAR(opline->op1.var);
  37198. op2 = RT_CONSTANT(opline, opline->op2);
  37199. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  37200. (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  37201. zend_string *op1_str = Z_STR_P(op1);
  37202. zend_string *op2_str = Z_STR_P(op2);
  37203. zend_string *str;
  37204. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  37205. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  37206. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  37207. } else {
  37208. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  37209. }
  37210. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  37211. zend_string_release_ex(op1_str, 0);
  37212. }
  37213. } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  37214. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  37215. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  37216. } else {
  37217. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  37218. }
  37219. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  37220. zend_string_release_ex(op2_str, 0);
  37221. }
  37222. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  37223. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  37224. size_t len = ZSTR_LEN(op1_str);
  37225. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  37226. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  37227. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  37228. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  37229. zend_string_release_ex(op2_str, 0);
  37230. }
  37231. } else {
  37232. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  37233. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  37234. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  37235. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  37236. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  37237. zend_string_release_ex(op1_str, 0);
  37238. }
  37239. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  37240. zend_string_release_ex(op2_str, 0);
  37241. }
  37242. }
  37243. ZEND_VM_NEXT_OPCODE();
  37244. }
  37245. SAVE_OPLINE();
  37246. if (IS_CV == IS_CONST) {
  37247. op1_str = Z_STR_P(op1);
  37248. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  37249. op1_str = zend_string_copy(Z_STR_P(op1));
  37250. } else {
  37251. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  37252. ZVAL_UNDEFINED_OP1();
  37253. }
  37254. op1_str = zval_get_string_func(op1);
  37255. }
  37256. if (IS_CONST == IS_CONST) {
  37257. op2_str = Z_STR_P(op2);
  37258. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  37259. op2_str = zend_string_copy(Z_STR_P(op2));
  37260. } else {
  37261. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  37262. ZVAL_UNDEFINED_OP2();
  37263. }
  37264. op2_str = zval_get_string_func(op2);
  37265. }
  37266. do {
  37267. if (IS_CV != IS_CONST) {
  37268. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  37269. if (IS_CONST == IS_CONST) {
  37270. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  37271. GC_ADDREF(op2_str);
  37272. }
  37273. }
  37274. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  37275. zend_string_release_ex(op1_str, 0);
  37276. break;
  37277. }
  37278. }
  37279. if (IS_CONST != IS_CONST) {
  37280. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  37281. if (IS_CV == IS_CONST) {
  37282. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  37283. GC_ADDREF(op1_str);
  37284. }
  37285. }
  37286. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  37287. zend_string_release_ex(op2_str, 0);
  37288. break;
  37289. }
  37290. }
  37291. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  37292. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  37293. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  37294. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  37295. if (IS_CV != IS_CONST) {
  37296. zend_string_release_ex(op1_str, 0);
  37297. }
  37298. if (IS_CONST != IS_CONST) {
  37299. zend_string_release_ex(op2_str, 0);
  37300. }
  37301. } while (0);
  37302. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37303. }
  37304. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37305. {
  37306. USE_OPLINE
  37307. zval *function_name;
  37308. zval *object;
  37309. zend_function *fbc;
  37310. zend_class_entry *called_scope;
  37311. zend_object *obj;
  37312. zend_execute_data *call;
  37313. uint32_t call_info;
  37314. SAVE_OPLINE();
  37315. object = EX_VAR(opline->op1.var);
  37316. if (IS_CONST != IS_CONST) {
  37317. function_name = RT_CONSTANT(opline, opline->op2);
  37318. }
  37319. if (IS_CONST != IS_CONST &&
  37320. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  37321. do {
  37322. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  37323. function_name = Z_REFVAL_P(function_name);
  37324. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  37325. break;
  37326. }
  37327. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  37328. ZVAL_UNDEFINED_OP2();
  37329. if (UNEXPECTED(EG(exception) != NULL)) {
  37330. HANDLE_EXCEPTION();
  37331. }
  37332. }
  37333. zend_throw_error(NULL, "Method name must be a string");
  37334. HANDLE_EXCEPTION();
  37335. } while (0);
  37336. }
  37337. if (IS_CV == IS_UNUSED) {
  37338. obj = Z_OBJ_P(object);
  37339. } else {
  37340. do {
  37341. if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  37342. obj = Z_OBJ_P(object);
  37343. } else {
  37344. if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  37345. zend_reference *ref = Z_REF_P(object);
  37346. object = &ref->val;
  37347. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  37348. obj = Z_OBJ_P(object);
  37349. if (IS_CV & IS_VAR) {
  37350. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  37351. efree_size(ref, sizeof(zend_reference));
  37352. } else {
  37353. Z_ADDREF_P(object);
  37354. }
  37355. }
  37356. break;
  37357. }
  37358. }
  37359. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  37360. object = ZVAL_UNDEFINED_OP1();
  37361. if (UNEXPECTED(EG(exception) != NULL)) {
  37362. if (IS_CONST != IS_CONST) {
  37363. }
  37364. HANDLE_EXCEPTION();
  37365. }
  37366. }
  37367. if (IS_CONST == IS_CONST) {
  37368. function_name = RT_CONSTANT(opline, opline->op2);
  37369. }
  37370. zend_invalid_method_call(object, function_name);
  37371. HANDLE_EXCEPTION();
  37372. }
  37373. } while (0);
  37374. }
  37375. called_scope = obj->ce;
  37376. if (IS_CONST == IS_CONST &&
  37377. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  37378. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  37379. } else {
  37380. zend_object *orig_obj = obj;
  37381. if (IS_CONST == IS_CONST) {
  37382. function_name = RT_CONSTANT(opline, opline->op2);
  37383. }
  37384. /* First, locate the function. */
  37385. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  37386. if (UNEXPECTED(fbc == NULL)) {
  37387. if (EXPECTED(!EG(exception))) {
  37388. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  37389. }
  37390. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  37391. zend_objects_store_del(orig_obj);
  37392. }
  37393. HANDLE_EXCEPTION();
  37394. }
  37395. if (IS_CONST == IS_CONST &&
  37396. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  37397. EXPECTED(obj == orig_obj)) {
  37398. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  37399. }
  37400. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  37401. GC_ADDREF(obj); /* For $this pointer */
  37402. if (GC_DELREF(orig_obj) == 0) {
  37403. zend_objects_store_del(orig_obj);
  37404. }
  37405. }
  37406. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  37407. init_func_run_time_cache(&fbc->op_array);
  37408. }
  37409. }
  37410. if (IS_CONST != IS_CONST) {
  37411. }
  37412. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  37413. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  37414. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  37415. zend_objects_store_del(obj);
  37416. if (UNEXPECTED(EG(exception))) {
  37417. HANDLE_EXCEPTION();
  37418. }
  37419. }
  37420. /* call static method */
  37421. obj = (zend_object*)called_scope;
  37422. call_info = ZEND_CALL_NESTED_FUNCTION;
  37423. } else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  37424. if (IS_CV == IS_CV) {
  37425. GC_ADDREF(obj); /* For $this pointer */
  37426. }
  37427. /* CV may be changed indirectly (e.g. when it's a reference) */
  37428. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  37429. }
  37430. call = zend_vm_stack_push_call_frame(call_info,
  37431. fbc, opline->extended_value, obj);
  37432. call->prev_execute_data = EX(call);
  37433. EX(call) = call;
  37434. ZEND_VM_NEXT_OPCODE();
  37435. }
  37436. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37437. {
  37438. USE_OPLINE
  37439. zval *varptr, *arg;
  37440. if (IS_CONST == IS_CONST) {
  37441. SAVE_OPLINE();
  37442. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  37443. uint32_t arg_num;
  37444. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  37445. if (UNEXPECTED(!arg)) {
  37446. HANDLE_EXCEPTION();
  37447. }
  37448. } else {
  37449. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  37450. }
  37451. varptr = EX_VAR(opline->op1.var);
  37452. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  37453. SAVE_OPLINE();
  37454. ZVAL_UNDEFINED_OP1();
  37455. ZVAL_NULL(arg);
  37456. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37457. }
  37458. if (IS_CV == IS_CV) {
  37459. ZVAL_COPY_DEREF(arg, varptr);
  37460. } else /* if (IS_CV == IS_VAR) */ {
  37461. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  37462. zend_refcounted *ref = Z_COUNTED_P(varptr);
  37463. varptr = Z_REFVAL_P(varptr);
  37464. ZVAL_COPY_VALUE(arg, varptr);
  37465. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  37466. efree_size(ref, sizeof(zend_reference));
  37467. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  37468. Z_ADDREF_P(arg);
  37469. }
  37470. } else {
  37471. ZVAL_COPY_VALUE(arg, varptr);
  37472. }
  37473. }
  37474. ZEND_VM_NEXT_OPCODE();
  37475. }
  37476. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37477. {
  37478. USE_OPLINE
  37479. zval *varptr, *arg;
  37480. SAVE_OPLINE();
  37481. if (IS_CONST == IS_CONST) {
  37482. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  37483. uint32_t arg_num;
  37484. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  37485. if (UNEXPECTED(!arg)) {
  37486. HANDLE_EXCEPTION();
  37487. }
  37488. } else {
  37489. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  37490. }
  37491. varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  37492. if (Z_ISREF_P(varptr)) {
  37493. Z_ADDREF_P(varptr);
  37494. } else {
  37495. ZVAL_MAKE_REF_EX(varptr, 2);
  37496. }
  37497. ZVAL_REF(arg, Z_REF_P(varptr));
  37498. ZEND_VM_NEXT_OPCODE();
  37499. }
  37500. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37501. {
  37502. USE_OPLINE
  37503. zval *varptr, *arg;
  37504. uint32_t arg_num;
  37505. if (IS_CONST == IS_CONST) {
  37506. SAVE_OPLINE();
  37507. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  37508. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  37509. if (UNEXPECTED(!arg)) {
  37510. HANDLE_EXCEPTION();
  37511. }
  37512. } else {
  37513. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  37514. arg_num = opline->op2.num;
  37515. }
  37516. if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
  37517. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  37518. goto send_var_by_ref;
  37519. }
  37520. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  37521. send_var_by_ref:
  37522. varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  37523. if (Z_ISREF_P(varptr)) {
  37524. Z_ADDREF_P(varptr);
  37525. } else {
  37526. ZVAL_MAKE_REF_EX(varptr, 2);
  37527. }
  37528. ZVAL_REF(arg, Z_REF_P(varptr));
  37529. ZEND_VM_NEXT_OPCODE();
  37530. }
  37531. varptr = EX_VAR(opline->op1.var);
  37532. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  37533. SAVE_OPLINE();
  37534. ZVAL_UNDEFINED_OP1();
  37535. ZVAL_NULL(arg);
  37536. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37537. }
  37538. if (IS_CV == IS_CV) {
  37539. ZVAL_COPY_DEREF(arg, varptr);
  37540. } else /* if (IS_CV == IS_VAR) */ {
  37541. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  37542. zend_refcounted *ref = Z_COUNTED_P(varptr);
  37543. varptr = Z_REFVAL_P(varptr);
  37544. ZVAL_COPY_VALUE(arg, varptr);
  37545. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  37546. efree_size(ref, sizeof(zend_reference));
  37547. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  37548. Z_ADDREF_P(arg);
  37549. }
  37550. } else {
  37551. ZVAL_COPY_VALUE(arg, varptr);
  37552. }
  37553. }
  37554. ZEND_VM_NEXT_OPCODE();
  37555. }
  37556. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37557. {
  37558. USE_OPLINE
  37559. zval *expr_ptr, new_expr;
  37560. SAVE_OPLINE();
  37561. if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
  37562. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  37563. expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  37564. if (Z_ISREF_P(expr_ptr)) {
  37565. Z_ADDREF_P(expr_ptr);
  37566. } else {
  37567. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  37568. }
  37569. } else {
  37570. expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  37571. if (IS_CV == IS_TMP_VAR) {
  37572. /* pass */
  37573. } else if (IS_CV == IS_CONST) {
  37574. Z_TRY_ADDREF_P(expr_ptr);
  37575. } else if (IS_CV == IS_CV) {
  37576. ZVAL_DEREF(expr_ptr);
  37577. Z_TRY_ADDREF_P(expr_ptr);
  37578. } else /* if (IS_CV == IS_VAR) */ {
  37579. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  37580. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  37581. expr_ptr = Z_REFVAL_P(expr_ptr);
  37582. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  37583. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  37584. expr_ptr = &new_expr;
  37585. efree_size(ref, sizeof(zend_reference));
  37586. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  37587. Z_ADDREF_P(expr_ptr);
  37588. }
  37589. }
  37590. }
  37591. }
  37592. if (IS_CONST != IS_UNUSED) {
  37593. zval *offset = RT_CONSTANT(opline, opline->op2);
  37594. zend_string *str;
  37595. zend_ulong hval;
  37596. add_again:
  37597. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  37598. str = Z_STR_P(offset);
  37599. if (IS_CONST != IS_CONST) {
  37600. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  37601. goto num_index;
  37602. }
  37603. }
  37604. str_index:
  37605. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  37606. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  37607. hval = Z_LVAL_P(offset);
  37608. num_index:
  37609. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  37610. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  37611. offset = Z_REFVAL_P(offset);
  37612. goto add_again;
  37613. } else if (Z_TYPE_P(offset) == IS_NULL) {
  37614. str = ZSTR_EMPTY_ALLOC();
  37615. goto str_index;
  37616. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  37617. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  37618. goto num_index;
  37619. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  37620. hval = 0;
  37621. goto num_index;
  37622. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  37623. hval = 1;
  37624. goto num_index;
  37625. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  37626. zend_use_resource_as_offset(offset);
  37627. hval = Z_RES_HANDLE_P(offset);
  37628. goto num_index;
  37629. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  37630. ZVAL_UNDEFINED_OP2();
  37631. str = ZSTR_EMPTY_ALLOC();
  37632. goto str_index;
  37633. } else {
  37634. zend_illegal_offset();
  37635. zval_ptr_dtor_nogc(expr_ptr);
  37636. }
  37637. } else {
  37638. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  37639. zend_cannot_add_element();
  37640. zval_ptr_dtor_nogc(expr_ptr);
  37641. }
  37642. }
  37643. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37644. }
  37645. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37646. {
  37647. zval *array;
  37648. uint32_t size;
  37649. USE_OPLINE
  37650. array = EX_VAR(opline->result.var);
  37651. if (IS_CV != IS_UNUSED) {
  37652. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  37653. ZVAL_ARR(array, zend_new_array(size));
  37654. /* Explicitly initialize array as not-packed if flag is set */
  37655. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  37656. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  37657. }
  37658. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37659. } else {
  37660. ZVAL_ARR(array, zend_new_array(0));
  37661. ZEND_VM_NEXT_OPCODE();
  37662. }
  37663. }
  37664. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37665. {
  37666. USE_OPLINE
  37667. zval *container;
  37668. zval *offset;
  37669. zend_ulong hval;
  37670. zend_string *key;
  37671. SAVE_OPLINE();
  37672. container = EX_VAR(opline->op1.var);
  37673. offset = RT_CONSTANT(opline, opline->op2);
  37674. do {
  37675. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  37676. HashTable *ht;
  37677. unset_dim_array:
  37678. SEPARATE_ARRAY(container);
  37679. ht = Z_ARRVAL_P(container);
  37680. offset_again:
  37681. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  37682. key = Z_STR_P(offset);
  37683. if (IS_CONST != IS_CONST) {
  37684. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  37685. goto num_index_dim;
  37686. }
  37687. }
  37688. str_index_dim:
  37689. ZEND_ASSERT(ht != &EG(symbol_table));
  37690. zend_hash_del(ht, key);
  37691. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  37692. hval = Z_LVAL_P(offset);
  37693. num_index_dim:
  37694. zend_hash_index_del(ht, hval);
  37695. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  37696. offset = Z_REFVAL_P(offset);
  37697. goto offset_again;
  37698. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  37699. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  37700. goto num_index_dim;
  37701. } else if (Z_TYPE_P(offset) == IS_NULL) {
  37702. key = ZSTR_EMPTY_ALLOC();
  37703. goto str_index_dim;
  37704. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  37705. hval = 0;
  37706. goto num_index_dim;
  37707. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  37708. hval = 1;
  37709. goto num_index_dim;
  37710. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  37711. zend_use_resource_as_offset(offset);
  37712. hval = Z_RES_HANDLE_P(offset);
  37713. goto num_index_dim;
  37714. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  37715. ZVAL_UNDEFINED_OP2();
  37716. key = ZSTR_EMPTY_ALLOC();
  37717. goto str_index_dim;
  37718. } else {
  37719. zend_type_error("Illegal offset type in unset");
  37720. }
  37721. break;
  37722. } else if (Z_ISREF_P(container)) {
  37723. container = Z_REFVAL_P(container);
  37724. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  37725. goto unset_dim_array;
  37726. }
  37727. }
  37728. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  37729. container = ZVAL_UNDEFINED_OP1();
  37730. }
  37731. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  37732. offset = ZVAL_UNDEFINED_OP2();
  37733. }
  37734. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  37735. if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  37736. offset++;
  37737. }
  37738. Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
  37739. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  37740. zend_throw_error(NULL, "Cannot unset string offsets");
  37741. } else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
  37742. zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
  37743. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
  37744. zend_false_to_array_deprecated();
  37745. }
  37746. } while (0);
  37747. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37748. }
  37749. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37750. {
  37751. USE_OPLINE
  37752. zval *container;
  37753. zval *offset;
  37754. zend_string *name, *tmp_name;
  37755. SAVE_OPLINE();
  37756. container = EX_VAR(opline->op1.var);
  37757. offset = RT_CONSTANT(opline, opline->op2);
  37758. do {
  37759. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  37760. if (Z_ISREF_P(container)) {
  37761. container = Z_REFVAL_P(container);
  37762. if (Z_TYPE_P(container) != IS_OBJECT) {
  37763. if (IS_CV == IS_CV
  37764. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  37765. ZVAL_UNDEFINED_OP1();
  37766. }
  37767. break;
  37768. }
  37769. } else {
  37770. break;
  37771. }
  37772. }
  37773. if (IS_CONST == IS_CONST) {
  37774. name = Z_STR_P(offset);
  37775. } else {
  37776. name = zval_try_get_tmp_string(offset, &tmp_name);
  37777. if (UNEXPECTED(!name)) {
  37778. break;
  37779. }
  37780. }
  37781. Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  37782. if (IS_CONST != IS_CONST) {
  37783. zend_tmp_string_release(tmp_name);
  37784. }
  37785. } while (0);
  37786. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37787. }
  37788. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37789. {
  37790. USE_OPLINE
  37791. zval *container;
  37792. bool result;
  37793. zend_ulong hval;
  37794. zval *offset;
  37795. SAVE_OPLINE();
  37796. container = EX_VAR(opline->op1.var);
  37797. offset = RT_CONSTANT(opline, opline->op2);
  37798. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  37799. HashTable *ht;
  37800. zval *value;
  37801. zend_string *str;
  37802. isset_dim_obj_array:
  37803. ht = Z_ARRVAL_P(container);
  37804. isset_again:
  37805. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  37806. str = Z_STR_P(offset);
  37807. if (IS_CONST != IS_CONST) {
  37808. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  37809. goto num_index_prop;
  37810. }
  37811. }
  37812. value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
  37813. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  37814. hval = Z_LVAL_P(offset);
  37815. num_index_prop:
  37816. value = zend_hash_index_find(ht, hval);
  37817. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  37818. offset = Z_REFVAL_P(offset);
  37819. goto isset_again;
  37820. } else {
  37821. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  37822. if (UNEXPECTED(EG(exception))) {
  37823. result = 0;
  37824. goto isset_dim_obj_exit;
  37825. }
  37826. }
  37827. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  37828. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  37829. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  37830. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  37831. if (IS_CV & (IS_CONST|IS_CV)) {
  37832. /* avoid exception check */
  37833. ZEND_VM_SMART_BRANCH(result, 0);
  37834. }
  37835. } else {
  37836. result = (value == NULL || !i_zend_is_true(value));
  37837. }
  37838. goto isset_dim_obj_exit;
  37839. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  37840. container = Z_REFVAL_P(container);
  37841. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  37842. goto isset_dim_obj_array;
  37843. }
  37844. }
  37845. if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  37846. offset++;
  37847. }
  37848. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  37849. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  37850. } else {
  37851. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  37852. }
  37853. isset_dim_obj_exit:
  37854. ZEND_VM_SMART_BRANCH(result, 1);
  37855. }
  37856. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37857. {
  37858. USE_OPLINE
  37859. zval *container;
  37860. int result;
  37861. zval *offset;
  37862. zend_string *name, *tmp_name;
  37863. SAVE_OPLINE();
  37864. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  37865. offset = RT_CONSTANT(opline, opline->op2);
  37866. if (IS_CV == IS_CONST ||
  37867. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  37868. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  37869. container = Z_REFVAL_P(container);
  37870. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  37871. result = (opline->extended_value & ZEND_ISEMPTY);
  37872. goto isset_object_finish;
  37873. }
  37874. } else {
  37875. result = (opline->extended_value & ZEND_ISEMPTY);
  37876. goto isset_object_finish;
  37877. }
  37878. }
  37879. if (IS_CONST == IS_CONST) {
  37880. name = Z_STR_P(offset);
  37881. } else {
  37882. name = zval_try_get_tmp_string(offset, &tmp_name);
  37883. if (UNEXPECTED(!name)) {
  37884. result = 0;
  37885. goto isset_object_finish;
  37886. }
  37887. }
  37888. result =
  37889. (opline->extended_value & ZEND_ISEMPTY) ^
  37890. 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));
  37891. if (IS_CONST != IS_CONST) {
  37892. zend_tmp_string_release(tmp_name);
  37893. }
  37894. isset_object_finish:
  37895. ZEND_VM_SMART_BRANCH(result, 1);
  37896. }
  37897. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37898. {
  37899. USE_OPLINE
  37900. zval *key, *subject;
  37901. HashTable *ht;
  37902. bool result;
  37903. SAVE_OPLINE();
  37904. key = EX_VAR(opline->op1.var);
  37905. subject = RT_CONSTANT(opline, opline->op2);
  37906. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  37907. array_key_exists_array:
  37908. ht = Z_ARRVAL_P(subject);
  37909. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  37910. } else {
  37911. if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  37912. subject = Z_REFVAL_P(subject);
  37913. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  37914. goto array_key_exists_array;
  37915. }
  37916. }
  37917. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  37918. result = 0;
  37919. }
  37920. ZEND_VM_SMART_BRANCH(result, 1);
  37921. }
  37922. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  37923. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37924. {
  37925. USE_OPLINE
  37926. zval *expr;
  37927. bool result;
  37928. SAVE_OPLINE();
  37929. expr = EX_VAR(opline->op1.var);
  37930. try_instanceof:
  37931. if (Z_TYPE_P(expr) == IS_OBJECT) {
  37932. zend_class_entry *ce;
  37933. if (IS_CONST == IS_CONST) {
  37934. ce = CACHED_PTR(opline->extended_value);
  37935. if (UNEXPECTED(ce == NULL)) {
  37936. 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);
  37937. if (EXPECTED(ce)) {
  37938. CACHE_PTR(opline->extended_value, ce);
  37939. }
  37940. }
  37941. } else if (IS_CONST == IS_UNUSED) {
  37942. ce = zend_fetch_class(NULL, opline->op2.num);
  37943. if (UNEXPECTED(ce == NULL)) {
  37944. ZVAL_UNDEF(EX_VAR(opline->result.var));
  37945. HANDLE_EXCEPTION();
  37946. }
  37947. } else {
  37948. ce = Z_CE_P(EX_VAR(opline->op2.var));
  37949. }
  37950. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  37951. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  37952. expr = Z_REFVAL_P(expr);
  37953. goto try_instanceof;
  37954. } else {
  37955. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  37956. ZVAL_UNDEFINED_OP1();
  37957. }
  37958. result = 0;
  37959. }
  37960. ZEND_VM_SMART_BRANCH(result, 1);
  37961. }
  37962. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37963. {
  37964. USE_OPLINE
  37965. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  37966. SAVE_OPLINE();
  37967. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  37968. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37969. }
  37970. /* Destroy the previously yielded value */
  37971. zval_ptr_dtor(&generator->value);
  37972. /* Destroy the previously yielded key */
  37973. zval_ptr_dtor(&generator->key);
  37974. /* Set the new yielded value */
  37975. if (IS_CV != IS_UNUSED) {
  37976. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  37977. /* Constants and temporary variables aren't yieldable by reference,
  37978. * but we still allow them with a notice. */
  37979. if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
  37980. zval *value;
  37981. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  37982. value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  37983. ZVAL_COPY_VALUE(&generator->value, value);
  37984. if (IS_CV == IS_CONST) {
  37985. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  37986. Z_ADDREF(generator->value);
  37987. }
  37988. }
  37989. } else {
  37990. zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  37991. /* If a function call result is yielded and the function did
  37992. * not return by reference we throw a notice. */
  37993. do {
  37994. if (IS_CV == IS_VAR) {
  37995. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  37996. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  37997. && !Z_ISREF_P(value_ptr)) {
  37998. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  37999. ZVAL_COPY(&generator->value, value_ptr);
  38000. break;
  38001. }
  38002. }
  38003. if (Z_ISREF_P(value_ptr)) {
  38004. Z_ADDREF_P(value_ptr);
  38005. } else {
  38006. ZVAL_MAKE_REF_EX(value_ptr, 2);
  38007. }
  38008. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  38009. } while (0);
  38010. }
  38011. } else {
  38012. zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  38013. /* Consts, temporary variables and references need copying */
  38014. if (IS_CV == IS_CONST) {
  38015. ZVAL_COPY_VALUE(&generator->value, value);
  38016. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  38017. Z_ADDREF(generator->value);
  38018. }
  38019. } else if (IS_CV == IS_TMP_VAR) {
  38020. ZVAL_COPY_VALUE(&generator->value, value);
  38021. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  38022. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  38023. } else {
  38024. ZVAL_COPY_VALUE(&generator->value, value);
  38025. if (IS_CV == IS_CV) {
  38026. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  38027. }
  38028. }
  38029. }
  38030. } else {
  38031. /* If no value was specified yield null */
  38032. ZVAL_NULL(&generator->value);
  38033. }
  38034. /* Set the new yielded key */
  38035. if (IS_CONST != IS_UNUSED) {
  38036. zval *key = RT_CONSTANT(opline, opline->op2);
  38037. if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  38038. key = Z_REFVAL_P(key);
  38039. }
  38040. ZVAL_COPY(&generator->key, key);
  38041. if (Z_TYPE(generator->key) == IS_LONG
  38042. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  38043. ) {
  38044. generator->largest_used_integer_key = Z_LVAL(generator->key);
  38045. }
  38046. } else {
  38047. /* If no key was specified we use auto-increment keys */
  38048. generator->largest_used_integer_key++;
  38049. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  38050. }
  38051. if (RETURN_VALUE_USED(opline)) {
  38052. /* If the return value of yield is used set the send
  38053. * target and initialize it to NULL */
  38054. generator->send_target = EX_VAR(opline->result.var);
  38055. ZVAL_NULL(generator->send_target);
  38056. } else {
  38057. generator->send_target = NULL;
  38058. }
  38059. /* We increment to the next op, so we are at the correct position when the
  38060. * generator is resumed. */
  38061. ZEND_VM_INC_OPCODE();
  38062. /* The GOTO VM uses a local opline variable. We need to set the opline
  38063. * variable in execute_data so we don't resume at an old position. */
  38064. SAVE_OPLINE();
  38065. ZEND_VM_RETURN();
  38066. }
  38067. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38068. {
  38069. USE_OPLINE
  38070. zend_string *varname;
  38071. zval *value;
  38072. zval *variable_ptr;
  38073. uintptr_t idx;
  38074. zend_reference *ref;
  38075. ZEND_VM_REPEATABLE_OPCODE
  38076. varname = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  38077. /* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
  38078. idx = (uintptr_t)CACHED_PTR(opline->extended_value) - 1;
  38079. if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) {
  38080. Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx);
  38081. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  38082. (EXPECTED(p->key == varname) ||
  38083. (EXPECTED(p->h == ZSTR_H(varname)) &&
  38084. EXPECTED(p->key != NULL) &&
  38085. EXPECTED(zend_string_equal_content(p->key, varname))))) {
  38086. value = (zval*)p; /* value = &p->val; */
  38087. goto check_indirect;
  38088. }
  38089. }
  38090. value = zend_hash_find_known_hash(&EG(symbol_table), varname);
  38091. if (UNEXPECTED(value == NULL)) {
  38092. value = zend_hash_add_new(&EG(symbol_table), varname, &EG(uninitialized_zval));
  38093. idx = (char*)value - (char*)EG(symbol_table).arData;
  38094. /* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
  38095. CACHE_PTR(opline->extended_value, (void*)(idx + 1));
  38096. } else {
  38097. idx = (char*)value - (char*)EG(symbol_table).arData;
  38098. /* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
  38099. CACHE_PTR(opline->extended_value, (void*)(idx + 1));
  38100. check_indirect:
  38101. /* GLOBAL variable may be an INDIRECT pointer to CV */
  38102. if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) {
  38103. value = Z_INDIRECT_P(value);
  38104. if (UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  38105. ZVAL_NULL(value);
  38106. }
  38107. }
  38108. }
  38109. if (UNEXPECTED(!Z_ISREF_P(value))) {
  38110. ZVAL_MAKE_REF_EX(value, 2);
  38111. ref = Z_REF_P(value);
  38112. } else {
  38113. ref = Z_REF_P(value);
  38114. GC_ADDREF(ref);
  38115. }
  38116. variable_ptr = EX_VAR(opline->op1.var);
  38117. if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
  38118. zend_refcounted *garbage = Z_COUNTED_P(variable_ptr);
  38119. ZVAL_REF(variable_ptr, ref);
  38120. if (GC_DELREF(garbage) == 0) {
  38121. SAVE_OPLINE();
  38122. rc_dtor_func(garbage);
  38123. if (UNEXPECTED(EG(exception))) {
  38124. ZVAL_NULL(variable_ptr);
  38125. HANDLE_EXCEPTION();
  38126. }
  38127. } else {
  38128. gc_check_possible_root(garbage);
  38129. }
  38130. } else {
  38131. ZVAL_REF(variable_ptr, ref);
  38132. }
  38133. ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
  38134. ZEND_VM_NEXT_OPCODE();
  38135. }
  38136. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38137. {
  38138. USE_OPLINE
  38139. zval *op1;
  38140. HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  38141. zval *result;
  38142. op1 = EX_VAR(opline->op1.var);
  38143. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38144. result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CV == IS_CONST);
  38145. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38146. zval_ptr_dtor_str(op1);
  38147. }
  38148. ZEND_VM_SMART_BRANCH(result, 0);
  38149. }
  38150. if (opline->extended_value) {
  38151. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  38152. result = zend_hash_index_find(ht, Z_LVAL_P(op1));
  38153. ZEND_VM_SMART_BRANCH(result, 0);
  38154. }
  38155. SAVE_OPLINE();
  38156. if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
  38157. op1 = Z_REFVAL_P(op1);
  38158. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38159. result = zend_hash_find(ht, Z_STR_P(op1));
  38160. ZEND_VM_SMART_BRANCH(result, 0);
  38161. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  38162. result = zend_hash_index_find(ht, Z_LVAL_P(op1));
  38163. ZEND_VM_SMART_BRANCH(result, 0);
  38164. }
  38165. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  38166. ZVAL_UNDEFINED_OP1();
  38167. }
  38168. } else if (Z_TYPE_P(op1) <= IS_FALSE) {
  38169. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  38170. SAVE_OPLINE();
  38171. ZVAL_UNDEFINED_OP1();
  38172. if (UNEXPECTED(EG(exception) != NULL)) {
  38173. HANDLE_EXCEPTION();
  38174. }
  38175. }
  38176. result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
  38177. ZEND_VM_SMART_BRANCH(result, 0);
  38178. } else {
  38179. zend_string *key;
  38180. zval key_tmp;
  38181. if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
  38182. op1 = Z_REFVAL_P(op1);
  38183. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38184. result = zend_hash_find(ht, Z_STR_P(op1));
  38185. ZEND_VM_SMART_BRANCH(result, 0);
  38186. }
  38187. }
  38188. SAVE_OPLINE();
  38189. ZEND_HASH_FOREACH_STR_KEY(ht, key) {
  38190. ZVAL_STR(&key_tmp, key);
  38191. if (zend_compare(op1, &key_tmp) == 0) {
  38192. ZEND_VM_SMART_BRANCH(1, 1);
  38193. }
  38194. } ZEND_HASH_FOREACH_END();
  38195. }
  38196. ZEND_VM_SMART_BRANCH(0, 1);
  38197. }
  38198. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38199. {
  38200. /* This is declared below the specializations for MAY_BE_LONG/MAY_BE_DOUBLE so those will be used instead if possible. */
  38201. /* This optimizes $x === SOME_CONST_EXPR and $x === $y for non-refs and non-undef, which can't throw. */
  38202. /* (Infinite recursion when comparing arrays is an uncatchable fatal error) */
  38203. USE_OPLINE
  38204. zval *op1, *op2;
  38205. bool result;
  38206. op1 = EX_VAR(opline->op1.var);
  38207. op2 = RT_CONSTANT(opline, opline->op2);
  38208. result = fast_is_identical_function(op1, op2);
  38209. /* Free is a no-op for const/cv */
  38210. ZEND_VM_SMART_BRANCH(result, 0);
  38211. }
  38212. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38213. {
  38214. USE_OPLINE
  38215. zval *op1, *op2;
  38216. bool result;
  38217. op1 = EX_VAR(opline->op1.var);
  38218. op2 = RT_CONSTANT(opline, opline->op2);
  38219. result = fast_is_identical_function(op1, op2);
  38220. /* Free is a no-op for const/cv */
  38221. ZEND_VM_SMART_BRANCH(!result, 0);
  38222. }
  38223. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38224. {
  38225. USE_OPLINE
  38226. zval *container, *dim, *value;
  38227. zend_long offset;
  38228. HashTable *ht;
  38229. container = EX_VAR(opline->op1.var);
  38230. dim = RT_CONSTANT(opline, opline->op2);
  38231. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  38232. fetch_dim_r_index_array:
  38233. if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
  38234. offset = Z_LVAL_P(dim);
  38235. } else {
  38236. SAVE_OPLINE();
  38237. zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  38238. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38239. }
  38240. ht = Z_ARRVAL_P(container);
  38241. ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
  38242. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  38243. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38244. SAVE_OPLINE();
  38245. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38246. } else {
  38247. ZEND_VM_NEXT_OPCODE();
  38248. }
  38249. } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  38250. container = Z_REFVAL_P(container);
  38251. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  38252. goto fetch_dim_r_index_array;
  38253. } else {
  38254. goto fetch_dim_r_index_slow;
  38255. }
  38256. } else {
  38257. fetch_dim_r_index_slow:
  38258. SAVE_OPLINE();
  38259. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  38260. dim++;
  38261. }
  38262. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  38263. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38264. }
  38265. fetch_dim_r_index_undef:
  38266. ZVAL_NULL(EX_VAR(opline->result.var));
  38267. SAVE_OPLINE();
  38268. zend_undefined_offset(offset);
  38269. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38270. }
  38271. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38272. {
  38273. USE_OPLINE
  38274. zval *container, *dim, *value;
  38275. zend_long offset;
  38276. HashTable *ht;
  38277. container = EX_VAR(opline->op1.var);
  38278. dim = EX_VAR(opline->op2.var);
  38279. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  38280. fetch_dim_r_index_array:
  38281. if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
  38282. offset = Z_LVAL_P(dim);
  38283. } else {
  38284. SAVE_OPLINE();
  38285. zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);
  38286. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38287. }
  38288. ht = Z_ARRVAL_P(container);
  38289. ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
  38290. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  38291. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38292. SAVE_OPLINE();
  38293. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38294. } else {
  38295. ZEND_VM_NEXT_OPCODE();
  38296. }
  38297. } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  38298. container = Z_REFVAL_P(container);
  38299. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  38300. goto fetch_dim_r_index_array;
  38301. } else {
  38302. goto fetch_dim_r_index_slow;
  38303. }
  38304. } else {
  38305. fetch_dim_r_index_slow:
  38306. SAVE_OPLINE();
  38307. if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  38308. dim++;
  38309. }
  38310. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  38311. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38312. }
  38313. fetch_dim_r_index_undef:
  38314. ZVAL_NULL(EX_VAR(opline->result.var));
  38315. SAVE_OPLINE();
  38316. zend_undefined_offset(offset);
  38317. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38318. }
  38319. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38320. {
  38321. USE_OPLINE
  38322. zval *op1, *op2;
  38323. SAVE_OPLINE();
  38324. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  38325. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38326. div_function(EX_VAR(opline->result.var), op1, op2);
  38327. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  38328. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38329. }
  38330. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38331. {
  38332. USE_OPLINE
  38333. zval *op1, *op2;
  38334. SAVE_OPLINE();
  38335. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  38336. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38337. pow_function(EX_VAR(opline->result.var), op1, op2);
  38338. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  38339. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38340. }
  38341. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38342. {
  38343. USE_OPLINE
  38344. zval *op1, *op2;
  38345. op1 = EX_VAR(opline->op1.var);
  38346. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38347. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  38348. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  38349. zend_string *op1_str = Z_STR_P(op1);
  38350. zend_string *op2_str = Z_STR_P(op2);
  38351. zend_string *str;
  38352. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  38353. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  38354. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  38355. } else {
  38356. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  38357. }
  38358. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38359. zend_string_release_ex(op1_str, 0);
  38360. }
  38361. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  38362. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  38363. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  38364. } else {
  38365. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  38366. }
  38367. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38368. zend_string_release_ex(op2_str, 0);
  38369. }
  38370. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  38371. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  38372. size_t len = ZSTR_LEN(op1_str);
  38373. if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
  38374. zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
  38375. }
  38376. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  38377. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  38378. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  38379. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38380. zend_string_release_ex(op2_str, 0);
  38381. }
  38382. } else {
  38383. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  38384. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  38385. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  38386. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  38387. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38388. zend_string_release_ex(op1_str, 0);
  38389. }
  38390. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38391. zend_string_release_ex(op2_str, 0);
  38392. }
  38393. }
  38394. ZEND_VM_NEXT_OPCODE();
  38395. } else {
  38396. SAVE_OPLINE();
  38397. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  38398. op1 = ZVAL_UNDEFINED_OP1();
  38399. }
  38400. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  38401. op2 = ZVAL_UNDEFINED_OP2();
  38402. }
  38403. concat_function(EX_VAR(opline->result.var), op1, op2);
  38404. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  38405. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38406. }
  38407. }
  38408. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38409. {
  38410. USE_OPLINE
  38411. zval *op1, *op2;
  38412. double d1, d2;
  38413. op1 = EX_VAR(opline->op1.var);
  38414. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38415. if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38416. /* pass */
  38417. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  38418. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38419. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  38420. is_equal_true:
  38421. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  38422. } else {
  38423. is_equal_false:
  38424. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  38425. }
  38426. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38427. d1 = (double)Z_LVAL_P(op1);
  38428. d2 = Z_DVAL_P(op2);
  38429. goto is_equal_double;
  38430. }
  38431. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  38432. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38433. d1 = Z_DVAL_P(op1);
  38434. d2 = Z_DVAL_P(op2);
  38435. is_equal_double:
  38436. if (d1 == d2) {
  38437. goto is_equal_true;
  38438. } else {
  38439. goto is_equal_false;
  38440. }
  38441. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38442. d1 = Z_DVAL_P(op1);
  38443. d2 = (double)Z_LVAL_P(op2);
  38444. goto is_equal_double;
  38445. }
  38446. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38447. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  38448. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  38449. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38450. zval_ptr_dtor_str(op1);
  38451. }
  38452. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38453. zval_ptr_dtor_str(op2);
  38454. }
  38455. if (result) {
  38456. goto is_equal_true;
  38457. } else {
  38458. goto is_equal_false;
  38459. }
  38460. }
  38461. }
  38462. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  38463. }
  38464. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38465. {
  38466. USE_OPLINE
  38467. zval *op1, *op2;
  38468. double d1, d2;
  38469. op1 = EX_VAR(opline->op1.var);
  38470. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38471. if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38472. /* pass */
  38473. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  38474. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38475. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  38476. is_equal_true:
  38477. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  38478. } else {
  38479. is_equal_false:
  38480. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  38481. }
  38482. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38483. d1 = (double)Z_LVAL_P(op1);
  38484. d2 = Z_DVAL_P(op2);
  38485. goto is_equal_double;
  38486. }
  38487. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  38488. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38489. d1 = Z_DVAL_P(op1);
  38490. d2 = Z_DVAL_P(op2);
  38491. is_equal_double:
  38492. if (d1 == d2) {
  38493. goto is_equal_true;
  38494. } else {
  38495. goto is_equal_false;
  38496. }
  38497. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38498. d1 = Z_DVAL_P(op1);
  38499. d2 = (double)Z_LVAL_P(op2);
  38500. goto is_equal_double;
  38501. }
  38502. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38503. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  38504. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  38505. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38506. zval_ptr_dtor_str(op1);
  38507. }
  38508. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38509. zval_ptr_dtor_str(op2);
  38510. }
  38511. if (result) {
  38512. goto is_equal_true;
  38513. } else {
  38514. goto is_equal_false;
  38515. }
  38516. }
  38517. }
  38518. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  38519. }
  38520. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38521. {
  38522. USE_OPLINE
  38523. zval *op1, *op2;
  38524. double d1, d2;
  38525. op1 = EX_VAR(opline->op1.var);
  38526. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38527. if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38528. /* pass */
  38529. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  38530. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38531. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  38532. is_equal_true:
  38533. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  38534. } else {
  38535. is_equal_false:
  38536. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  38537. }
  38538. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38539. d1 = (double)Z_LVAL_P(op1);
  38540. d2 = Z_DVAL_P(op2);
  38541. goto is_equal_double;
  38542. }
  38543. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  38544. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38545. d1 = Z_DVAL_P(op1);
  38546. d2 = Z_DVAL_P(op2);
  38547. is_equal_double:
  38548. if (d1 == d2) {
  38549. goto is_equal_true;
  38550. } else {
  38551. goto is_equal_false;
  38552. }
  38553. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38554. d1 = Z_DVAL_P(op1);
  38555. d2 = (double)Z_LVAL_P(op2);
  38556. goto is_equal_double;
  38557. }
  38558. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38559. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  38560. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  38561. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38562. zval_ptr_dtor_str(op1);
  38563. }
  38564. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38565. zval_ptr_dtor_str(op2);
  38566. }
  38567. if (result) {
  38568. goto is_equal_true;
  38569. } else {
  38570. goto is_equal_false;
  38571. }
  38572. }
  38573. }
  38574. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  38575. }
  38576. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38577. {
  38578. USE_OPLINE
  38579. zval *op1, *op2;
  38580. double d1, d2;
  38581. op1 = EX_VAR(opline->op1.var);
  38582. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38583. if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38584. /* pass */
  38585. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  38586. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38587. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  38588. is_not_equal_true:
  38589. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  38590. } else {
  38591. is_not_equal_false:
  38592. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  38593. }
  38594. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38595. d1 = (double)Z_LVAL_P(op1);
  38596. d2 = Z_DVAL_P(op2);
  38597. goto is_not_equal_double;
  38598. }
  38599. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  38600. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38601. d1 = Z_DVAL_P(op1);
  38602. d2 = Z_DVAL_P(op2);
  38603. is_not_equal_double:
  38604. if (d1 != d2) {
  38605. goto is_not_equal_true;
  38606. } else {
  38607. goto is_not_equal_false;
  38608. }
  38609. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38610. d1 = Z_DVAL_P(op1);
  38611. d2 = (double)Z_LVAL_P(op2);
  38612. goto is_not_equal_double;
  38613. }
  38614. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38615. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  38616. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  38617. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38618. zval_ptr_dtor_str(op1);
  38619. }
  38620. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38621. zval_ptr_dtor_str(op2);
  38622. }
  38623. if (!result) {
  38624. goto is_not_equal_true;
  38625. } else {
  38626. goto is_not_equal_false;
  38627. }
  38628. }
  38629. }
  38630. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  38631. }
  38632. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38633. {
  38634. USE_OPLINE
  38635. zval *op1, *op2;
  38636. double d1, d2;
  38637. op1 = EX_VAR(opline->op1.var);
  38638. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38639. if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38640. /* pass */
  38641. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  38642. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38643. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  38644. is_not_equal_true:
  38645. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  38646. } else {
  38647. is_not_equal_false:
  38648. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  38649. }
  38650. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38651. d1 = (double)Z_LVAL_P(op1);
  38652. d2 = Z_DVAL_P(op2);
  38653. goto is_not_equal_double;
  38654. }
  38655. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  38656. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38657. d1 = Z_DVAL_P(op1);
  38658. d2 = Z_DVAL_P(op2);
  38659. is_not_equal_double:
  38660. if (d1 != d2) {
  38661. goto is_not_equal_true;
  38662. } else {
  38663. goto is_not_equal_false;
  38664. }
  38665. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38666. d1 = Z_DVAL_P(op1);
  38667. d2 = (double)Z_LVAL_P(op2);
  38668. goto is_not_equal_double;
  38669. }
  38670. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38671. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  38672. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  38673. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38674. zval_ptr_dtor_str(op1);
  38675. }
  38676. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38677. zval_ptr_dtor_str(op2);
  38678. }
  38679. if (!result) {
  38680. goto is_not_equal_true;
  38681. } else {
  38682. goto is_not_equal_false;
  38683. }
  38684. }
  38685. }
  38686. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  38687. }
  38688. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38689. {
  38690. USE_OPLINE
  38691. zval *op1, *op2;
  38692. double d1, d2;
  38693. op1 = EX_VAR(opline->op1.var);
  38694. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38695. if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38696. /* pass */
  38697. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  38698. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38699. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  38700. is_not_equal_true:
  38701. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  38702. } else {
  38703. is_not_equal_false:
  38704. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  38705. }
  38706. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38707. d1 = (double)Z_LVAL_P(op1);
  38708. d2 = Z_DVAL_P(op2);
  38709. goto is_not_equal_double;
  38710. }
  38711. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  38712. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  38713. d1 = Z_DVAL_P(op1);
  38714. d2 = Z_DVAL_P(op2);
  38715. is_not_equal_double:
  38716. if (d1 != d2) {
  38717. goto is_not_equal_true;
  38718. } else {
  38719. goto is_not_equal_false;
  38720. }
  38721. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  38722. d1 = Z_DVAL_P(op1);
  38723. d2 = (double)Z_LVAL_P(op2);
  38724. goto is_not_equal_double;
  38725. }
  38726. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38727. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  38728. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  38729. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  38730. zval_ptr_dtor_str(op1);
  38731. }
  38732. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  38733. zval_ptr_dtor_str(op2);
  38734. }
  38735. if (!result) {
  38736. goto is_not_equal_true;
  38737. } else {
  38738. goto is_not_equal_false;
  38739. }
  38740. }
  38741. }
  38742. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  38743. }
  38744. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38745. {
  38746. USE_OPLINE
  38747. zval *op1, *op2;
  38748. SAVE_OPLINE();
  38749. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  38750. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38751. compare_function(EX_VAR(opline->result.var), op1, op2);
  38752. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  38753. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38754. }
  38755. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38756. {
  38757. USE_OPLINE
  38758. zval *op1, *op2;
  38759. SAVE_OPLINE();
  38760. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  38761. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38762. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  38763. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  38764. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38765. }
  38766. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38767. {
  38768. USE_OPLINE
  38769. zval *object;
  38770. zval *property;
  38771. zval *value;
  38772. zval *zptr;
  38773. void **cache_slot;
  38774. zend_property_info *prop_info;
  38775. zend_object *zobj;
  38776. zend_string *name, *tmp_name;
  38777. SAVE_OPLINE();
  38778. object = EX_VAR(opline->op1.var);
  38779. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38780. do {
  38781. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  38782. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  38783. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  38784. object = Z_REFVAL_P(object);
  38785. goto assign_op_object;
  38786. }
  38787. if (IS_CV == IS_CV
  38788. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  38789. ZVAL_UNDEFINED_OP1();
  38790. }
  38791. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  38792. break;
  38793. }
  38794. assign_op_object:
  38795. /* here we are sure we are dealing with an object */
  38796. zobj = Z_OBJ_P(object);
  38797. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38798. name = Z_STR_P(property);
  38799. } else {
  38800. name = zval_try_get_tmp_string(property, &tmp_name);
  38801. if (UNEXPECTED(!name)) {
  38802. UNDEF_RESULT();
  38803. break;
  38804. }
  38805. }
  38806. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  38807. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  38808. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  38809. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38810. ZVAL_NULL(EX_VAR(opline->result.var));
  38811. }
  38812. } else {
  38813. zval *orig_zptr = zptr;
  38814. zend_reference *ref;
  38815. do {
  38816. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  38817. ref = Z_REF_P(zptr);
  38818. zptr = Z_REFVAL_P(zptr);
  38819. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  38820. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  38821. break;
  38822. }
  38823. }
  38824. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38825. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  38826. } else {
  38827. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  38828. }
  38829. if (UNEXPECTED(prop_info)) {
  38830. /* special case for typed properties */
  38831. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  38832. } else {
  38833. zend_binary_op(zptr, zptr, value OPLINE_CC);
  38834. }
  38835. } while (0);
  38836. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38837. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  38838. }
  38839. }
  38840. } else {
  38841. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  38842. }
  38843. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  38844. zend_tmp_string_release(tmp_name);
  38845. }
  38846. } while (0);
  38847. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  38848. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  38849. /* assign_obj has two opcodes! */
  38850. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  38851. }
  38852. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  38853. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38854. {
  38855. USE_OPLINE
  38856. zval *var_ptr;
  38857. zval *value, *container, *dim;
  38858. HashTable *ht;
  38859. SAVE_OPLINE();
  38860. container = EX_VAR(opline->op1.var);
  38861. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  38862. assign_dim_op_array:
  38863. SEPARATE_ARRAY(container);
  38864. ht = Z_ARRVAL_P(container);
  38865. assign_dim_op_new_array:
  38866. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38867. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  38868. var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
  38869. if (UNEXPECTED(!var_ptr)) {
  38870. zend_cannot_add_element();
  38871. goto assign_dim_op_ret_null;
  38872. }
  38873. } else {
  38874. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38875. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
  38876. } else {
  38877. var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
  38878. }
  38879. if (UNEXPECTED(!var_ptr)) {
  38880. goto assign_dim_op_ret_null;
  38881. }
  38882. }
  38883. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  38884. do {
  38885. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
  38886. zend_reference *ref = Z_REF_P(var_ptr);
  38887. var_ptr = Z_REFVAL_P(var_ptr);
  38888. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  38889. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  38890. break;
  38891. }
  38892. }
  38893. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  38894. } while (0);
  38895. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38896. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  38897. }
  38898. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  38899. } else {
  38900. if (EXPECTED(Z_ISREF_P(container))) {
  38901. container = Z_REFVAL_P(container);
  38902. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  38903. goto assign_dim_op_array;
  38904. }
  38905. }
  38906. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  38907. zend_object *obj = Z_OBJ_P(container);
  38908. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38909. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  38910. dim++;
  38911. }
  38912. zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
  38913. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  38914. zend_uchar old_type;
  38915. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  38916. ZVAL_UNDEFINED_OP1();
  38917. }
  38918. ht = zend_new_array(8);
  38919. old_type = Z_TYPE_P(container);
  38920. ZVAL_ARR(container, ht);
  38921. if (UNEXPECTED(old_type == IS_FALSE)) {
  38922. GC_ADDREF(ht);
  38923. zend_false_to_array_deprecated();
  38924. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  38925. zend_array_destroy(ht);
  38926. goto assign_dim_op_ret_null;
  38927. }
  38928. }
  38929. goto assign_dim_op_new_array;
  38930. } else {
  38931. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38932. zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  38933. assign_dim_op_ret_null:
  38934. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  38935. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38936. ZVAL_NULL(EX_VAR(opline->result.var));
  38937. }
  38938. }
  38939. }
  38940. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  38941. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  38942. }
  38943. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38944. {
  38945. USE_OPLINE
  38946. zval *var_ptr;
  38947. zval *value;
  38948. SAVE_OPLINE();
  38949. value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38950. var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  38951. do {
  38952. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  38953. zend_reference *ref = Z_REF_P(var_ptr);
  38954. var_ptr = Z_REFVAL_P(var_ptr);
  38955. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  38956. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  38957. break;
  38958. }
  38959. }
  38960. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  38961. } while (0);
  38962. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38963. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  38964. }
  38965. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  38966. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38967. }
  38968. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38969. {
  38970. USE_OPLINE
  38971. zval *object;
  38972. zval *property;
  38973. zval *zptr;
  38974. void **cache_slot;
  38975. zend_property_info *prop_info;
  38976. zend_object *zobj;
  38977. zend_string *name, *tmp_name;
  38978. SAVE_OPLINE();
  38979. object = EX_VAR(opline->op1.var);
  38980. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  38981. do {
  38982. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  38983. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  38984. object = Z_REFVAL_P(object);
  38985. goto pre_incdec_object;
  38986. }
  38987. if (IS_CV == IS_CV
  38988. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  38989. ZVAL_UNDEFINED_OP1();
  38990. }
  38991. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  38992. break;
  38993. }
  38994. pre_incdec_object:
  38995. /* here we are sure we are dealing with an object */
  38996. zobj = Z_OBJ_P(object);
  38997. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38998. name = Z_STR_P(property);
  38999. } else {
  39000. name = zval_try_get_tmp_string(property, &tmp_name);
  39001. if (UNEXPECTED(!name)) {
  39002. UNDEF_RESULT();
  39003. break;
  39004. }
  39005. }
  39006. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  39007. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  39008. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  39009. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39010. ZVAL_NULL(EX_VAR(opline->result.var));
  39011. }
  39012. } else {
  39013. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39014. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  39015. } else {
  39016. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  39017. }
  39018. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  39019. }
  39020. } else {
  39021. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  39022. }
  39023. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39024. zend_tmp_string_release(tmp_name);
  39025. }
  39026. } while (0);
  39027. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39028. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39029. }
  39030. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39031. {
  39032. USE_OPLINE
  39033. zval *object;
  39034. zval *property;
  39035. zval *zptr;
  39036. void **cache_slot;
  39037. zend_property_info *prop_info;
  39038. zend_object *zobj;
  39039. zend_string *name, *tmp_name;
  39040. SAVE_OPLINE();
  39041. object = EX_VAR(opline->op1.var);
  39042. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  39043. do {
  39044. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  39045. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  39046. object = Z_REFVAL_P(object);
  39047. goto post_incdec_object;
  39048. }
  39049. if (IS_CV == IS_CV
  39050. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  39051. ZVAL_UNDEFINED_OP1();
  39052. }
  39053. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  39054. break;
  39055. }
  39056. post_incdec_object:
  39057. /* here we are sure we are dealing with an object */
  39058. zobj = Z_OBJ_P(object);
  39059. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39060. name = Z_STR_P(property);
  39061. } else {
  39062. name = zval_try_get_tmp_string(property, &tmp_name);
  39063. if (UNEXPECTED(!name)) {
  39064. ZVAL_UNDEF(EX_VAR(opline->result.var));
  39065. break;
  39066. }
  39067. }
  39068. cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  39069. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  39070. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  39071. ZVAL_NULL(EX_VAR(opline->result.var));
  39072. } else {
  39073. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39074. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  39075. } else {
  39076. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  39077. }
  39078. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  39079. }
  39080. } else {
  39081. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  39082. }
  39083. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39084. zend_tmp_string_release(tmp_name);
  39085. }
  39086. } while (0);
  39087. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39088. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39089. }
  39090. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39091. {
  39092. USE_OPLINE
  39093. zval *container, *dim, *value;
  39094. SAVE_OPLINE();
  39095. container = EX_VAR(opline->op1.var);
  39096. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  39097. if (IS_CV != IS_CONST) {
  39098. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  39099. fetch_dim_r_array:
  39100. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
  39101. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  39102. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  39103. container = Z_REFVAL_P(container);
  39104. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  39105. goto fetch_dim_r_array;
  39106. } else {
  39107. goto fetch_dim_r_slow;
  39108. }
  39109. } else {
  39110. fetch_dim_r_slow:
  39111. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  39112. dim++;
  39113. }
  39114. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  39115. }
  39116. } else {
  39117. zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  39118. }
  39119. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39120. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39121. }
  39122. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39123. {
  39124. USE_OPLINE
  39125. zval *container;
  39126. SAVE_OPLINE();
  39127. container = EX_VAR(opline->op1.var);
  39128. 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);
  39129. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39130. if (IS_CV == IS_VAR) {
  39131. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  39132. }
  39133. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39134. }
  39135. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39136. {
  39137. USE_OPLINE
  39138. zval *container;
  39139. SAVE_OPLINE();
  39140. container = EX_VAR(opline->op1.var);
  39141. 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);
  39142. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39143. if (IS_CV == IS_VAR) {
  39144. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  39145. }
  39146. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39147. }
  39148. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39149. {
  39150. USE_OPLINE
  39151. zval *container;
  39152. SAVE_OPLINE();
  39153. container = EX_VAR(opline->op1.var);
  39154. 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);
  39155. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39156. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39157. }
  39158. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39159. {
  39160. #if 0
  39161. USE_OPLINE
  39162. #endif
  39163. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  39164. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  39165. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39166. }
  39167. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39168. } else {
  39169. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  39170. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39171. }
  39172. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39173. }
  39174. }
  39175. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39176. {
  39177. USE_OPLINE
  39178. zval *container;
  39179. SAVE_OPLINE();
  39180. container = EX_VAR(opline->op1.var);
  39181. 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);
  39182. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39183. if (IS_CV == IS_VAR) {
  39184. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  39185. }
  39186. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39187. }
  39188. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39189. {
  39190. USE_OPLINE
  39191. zval *container;
  39192. void **cache_slot = NULL;
  39193. SAVE_OPLINE();
  39194. container = EX_VAR(opline->op1.var);
  39195. if (IS_CV == IS_CONST ||
  39196. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  39197. do {
  39198. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  39199. container = Z_REFVAL_P(container);
  39200. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  39201. break;
  39202. }
  39203. }
  39204. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  39205. ZVAL_UNDEFINED_OP1();
  39206. }
  39207. zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39208. ZVAL_NULL(EX_VAR(opline->result.var));
  39209. goto fetch_obj_r_finish;
  39210. } while (0);
  39211. }
  39212. /* here we are sure we are dealing with an object */
  39213. do {
  39214. zend_object *zobj = Z_OBJ_P(container);
  39215. zend_string *name, *tmp_name;
  39216. zval *retval;
  39217. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39218. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  39219. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  39220. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  39221. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  39222. retval = OBJ_PROP(zobj, prop_offset);
  39223. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  39224. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  39225. goto fetch_obj_r_copy;
  39226. } else {
  39227. fetch_obj_r_fast_copy:
  39228. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  39229. ZEND_VM_NEXT_OPCODE();
  39230. }
  39231. }
  39232. } else if (EXPECTED(zobj->properties != NULL)) {
  39233. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39234. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  39235. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  39236. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  39237. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  39238. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  39239. (EXPECTED(p->key == name) ||
  39240. (EXPECTED(p->h == ZSTR_H(name)) &&
  39241. EXPECTED(p->key != NULL) &&
  39242. EXPECTED(zend_string_equal_content(p->key, name))))) {
  39243. retval = &p->val;
  39244. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  39245. goto fetch_obj_r_copy;
  39246. } else {
  39247. goto fetch_obj_r_fast_copy;
  39248. }
  39249. }
  39250. }
  39251. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  39252. }
  39253. retval = zend_hash_find_known_hash(zobj->properties, name);
  39254. if (EXPECTED(retval)) {
  39255. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  39256. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  39257. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  39258. goto fetch_obj_r_copy;
  39259. } else {
  39260. goto fetch_obj_r_fast_copy;
  39261. }
  39262. }
  39263. }
  39264. }
  39265. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39266. } else {
  39267. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  39268. if (UNEXPECTED(!name)) {
  39269. ZVAL_UNDEF(EX_VAR(opline->result.var));
  39270. break;
  39271. }
  39272. }
  39273. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  39274. #if ZEND_DEBUG
  39275. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  39276. zend_verify_internal_read_property_type(zobj, name, retval);
  39277. }
  39278. #endif
  39279. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39280. zend_tmp_string_release(tmp_name);
  39281. }
  39282. if (retval != EX_VAR(opline->result.var)) {
  39283. fetch_obj_r_copy:
  39284. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  39285. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  39286. zend_unwrap_reference(retval);
  39287. }
  39288. } while (0);
  39289. fetch_obj_r_finish:
  39290. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39291. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39292. }
  39293. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39294. {
  39295. USE_OPLINE
  39296. zval *property, *container, *result;
  39297. SAVE_OPLINE();
  39298. container = EX_VAR(opline->op1.var);
  39299. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  39300. result = EX_VAR(opline->result.var);
  39301. zend_fetch_property_address(
  39302. result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR),
  39303. (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  39304. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
  39305. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39306. if (IS_CV == IS_VAR) {
  39307. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  39308. }
  39309. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39310. }
  39311. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_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(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);
  39320. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39321. if (IS_CV == IS_VAR) {
  39322. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  39323. }
  39324. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39325. }
  39326. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39327. {
  39328. USE_OPLINE
  39329. zval *container;
  39330. void **cache_slot = NULL;
  39331. SAVE_OPLINE();
  39332. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  39333. if (IS_CV == IS_CONST ||
  39334. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  39335. do {
  39336. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  39337. container = Z_REFVAL_P(container);
  39338. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  39339. break;
  39340. }
  39341. }
  39342. if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  39343. ZVAL_UNDEFINED_OP2();
  39344. }
  39345. ZVAL_NULL(EX_VAR(opline->result.var));
  39346. goto fetch_obj_is_finish;
  39347. } while (0);
  39348. }
  39349. /* here we are sure we are dealing with an object */
  39350. do {
  39351. zend_object *zobj = Z_OBJ_P(container);
  39352. zend_string *name, *tmp_name;
  39353. zval *retval;
  39354. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39355. cache_slot = CACHE_ADDR(opline->extended_value);
  39356. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  39357. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  39358. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  39359. retval = OBJ_PROP(zobj, prop_offset);
  39360. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  39361. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  39362. goto fetch_obj_is_copy;
  39363. } else {
  39364. fetch_obj_is_fast_copy:
  39365. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  39366. ZEND_VM_NEXT_OPCODE();
  39367. }
  39368. }
  39369. } else if (EXPECTED(zobj->properties != NULL)) {
  39370. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39371. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  39372. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  39373. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  39374. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  39375. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  39376. (EXPECTED(p->key == name) ||
  39377. (EXPECTED(p->h == ZSTR_H(name)) &&
  39378. EXPECTED(p->key != NULL) &&
  39379. EXPECTED(zend_string_equal_content(p->key, name))))) {
  39380. retval = &p->val;
  39381. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  39382. goto fetch_obj_is_copy;
  39383. } else {
  39384. goto fetch_obj_is_fast_copy;
  39385. }
  39386. }
  39387. }
  39388. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  39389. }
  39390. retval = zend_hash_find_known_hash(zobj->properties, name);
  39391. if (EXPECTED(retval)) {
  39392. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  39393. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  39394. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  39395. goto fetch_obj_is_copy;
  39396. } else {
  39397. goto fetch_obj_is_fast_copy;
  39398. }
  39399. }
  39400. }
  39401. }
  39402. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39403. } else {
  39404. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  39405. if (UNEXPECTED(!name)) {
  39406. ZVAL_UNDEF(EX_VAR(opline->result.var));
  39407. break;
  39408. }
  39409. }
  39410. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  39411. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39412. zend_tmp_string_release(tmp_name);
  39413. }
  39414. if (retval != EX_VAR(opline->result.var)) {
  39415. fetch_obj_is_copy:
  39416. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  39417. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  39418. zend_unwrap_reference(retval);
  39419. }
  39420. } while (0);
  39421. fetch_obj_is_finish:
  39422. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39423. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39424. }
  39425. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39426. {
  39427. #if 0
  39428. USE_OPLINE
  39429. #endif
  39430. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  39431. /* Behave like FETCH_OBJ_W */
  39432. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  39433. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39434. }
  39435. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39436. } else {
  39437. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39438. }
  39439. }
  39440. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39441. {
  39442. USE_OPLINE
  39443. zval *container, *property, *result;
  39444. SAVE_OPLINE();
  39445. container = EX_VAR(opline->op1.var);
  39446. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  39447. result = EX_VAR(opline->result.var);
  39448. 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);
  39449. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39450. if (IS_CV == IS_VAR) {
  39451. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  39452. }
  39453. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39454. }
  39455. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39456. {
  39457. USE_OPLINE
  39458. zval *object, *value, tmp;
  39459. zend_object *zobj;
  39460. zend_string *name, *tmp_name;
  39461. SAVE_OPLINE();
  39462. object = EX_VAR(opline->op1.var);
  39463. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  39464. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  39465. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  39466. object = Z_REFVAL_P(object);
  39467. goto assign_object;
  39468. }
  39469. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  39470. value = &EG(uninitialized_zval);
  39471. goto free_and_exit_assign_obj;
  39472. }
  39473. assign_object:
  39474. zobj = Z_OBJ_P(object);
  39475. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39476. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  39477. void **cache_slot = CACHE_ADDR(opline->extended_value);
  39478. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  39479. zend_object *zobj = Z_OBJ_P(object);
  39480. zval *property_val;
  39481. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  39482. property_val = OBJ_PROP(zobj, prop_offset);
  39483. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  39484. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  39485. if (UNEXPECTED(prop_info != NULL)) {
  39486. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  39487. goto free_and_exit_assign_obj;
  39488. } else {
  39489. fast_assign_obj:
  39490. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  39491. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39492. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39493. }
  39494. goto exit_assign_obj;
  39495. }
  39496. }
  39497. } else {
  39498. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39499. if (EXPECTED(zobj->properties != NULL)) {
  39500. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  39501. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  39502. GC_DELREF(zobj->properties);
  39503. }
  39504. zobj->properties = zend_array_dup(zobj->properties);
  39505. }
  39506. property_val = zend_hash_find_known_hash(zobj->properties, name);
  39507. if (property_val) {
  39508. goto fast_assign_obj;
  39509. }
  39510. }
  39511. if (!zobj->ce->__set) {
  39512. if (EXPECTED(zobj->properties == NULL)) {
  39513. rebuild_object_properties(zobj);
  39514. }
  39515. if (IS_CONST == IS_CONST) {
  39516. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  39517. Z_ADDREF_P(value);
  39518. }
  39519. } else if (IS_CONST != IS_TMP_VAR) {
  39520. if (Z_ISREF_P(value)) {
  39521. if (IS_CONST == IS_VAR) {
  39522. zend_reference *ref = Z_REF_P(value);
  39523. if (GC_DELREF(ref) == 0) {
  39524. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  39525. efree_size(ref, sizeof(zend_reference));
  39526. value = &tmp;
  39527. } else {
  39528. value = Z_REFVAL_P(value);
  39529. Z_TRY_ADDREF_P(value);
  39530. }
  39531. } else {
  39532. value = Z_REFVAL_P(value);
  39533. Z_TRY_ADDREF_P(value);
  39534. }
  39535. } else if (IS_CONST == IS_CV) {
  39536. Z_TRY_ADDREF_P(value);
  39537. }
  39538. }
  39539. zend_hash_add_new(zobj->properties, name, value);
  39540. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39541. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39542. }
  39543. goto exit_assign_obj;
  39544. }
  39545. }
  39546. }
  39547. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39548. } else {
  39549. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  39550. if (UNEXPECTED(!name)) {
  39551. UNDEF_RESULT();
  39552. goto exit_assign_obj;
  39553. }
  39554. }
  39555. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  39556. ZVAL_DEREF(value);
  39557. }
  39558. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  39559. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39560. zend_tmp_string_release(tmp_name);
  39561. }
  39562. free_and_exit_assign_obj:
  39563. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39564. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  39565. }
  39566. exit_assign_obj:
  39567. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39568. /* assign_obj has two opcodes! */
  39569. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  39570. }
  39571. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  39572. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39573. {
  39574. USE_OPLINE
  39575. zval *object, *value, tmp;
  39576. zend_object *zobj;
  39577. zend_string *name, *tmp_name;
  39578. SAVE_OPLINE();
  39579. object = EX_VAR(opline->op1.var);
  39580. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  39581. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  39582. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  39583. object = Z_REFVAL_P(object);
  39584. goto assign_object;
  39585. }
  39586. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  39587. value = &EG(uninitialized_zval);
  39588. goto free_and_exit_assign_obj;
  39589. }
  39590. assign_object:
  39591. zobj = Z_OBJ_P(object);
  39592. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39593. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  39594. void **cache_slot = CACHE_ADDR(opline->extended_value);
  39595. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  39596. zend_object *zobj = Z_OBJ_P(object);
  39597. zval *property_val;
  39598. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  39599. property_val = OBJ_PROP(zobj, prop_offset);
  39600. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  39601. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  39602. if (UNEXPECTED(prop_info != NULL)) {
  39603. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  39604. goto free_and_exit_assign_obj;
  39605. } else {
  39606. fast_assign_obj:
  39607. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  39608. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39609. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39610. }
  39611. goto exit_assign_obj;
  39612. }
  39613. }
  39614. } else {
  39615. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39616. if (EXPECTED(zobj->properties != NULL)) {
  39617. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  39618. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  39619. GC_DELREF(zobj->properties);
  39620. }
  39621. zobj->properties = zend_array_dup(zobj->properties);
  39622. }
  39623. property_val = zend_hash_find_known_hash(zobj->properties, name);
  39624. if (property_val) {
  39625. goto fast_assign_obj;
  39626. }
  39627. }
  39628. if (!zobj->ce->__set) {
  39629. if (EXPECTED(zobj->properties == NULL)) {
  39630. rebuild_object_properties(zobj);
  39631. }
  39632. if (IS_TMP_VAR == IS_CONST) {
  39633. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  39634. Z_ADDREF_P(value);
  39635. }
  39636. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  39637. if (Z_ISREF_P(value)) {
  39638. if (IS_TMP_VAR == IS_VAR) {
  39639. zend_reference *ref = Z_REF_P(value);
  39640. if (GC_DELREF(ref) == 0) {
  39641. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  39642. efree_size(ref, sizeof(zend_reference));
  39643. value = &tmp;
  39644. } else {
  39645. value = Z_REFVAL_P(value);
  39646. Z_TRY_ADDREF_P(value);
  39647. }
  39648. } else {
  39649. value = Z_REFVAL_P(value);
  39650. Z_TRY_ADDREF_P(value);
  39651. }
  39652. } else if (IS_TMP_VAR == IS_CV) {
  39653. Z_TRY_ADDREF_P(value);
  39654. }
  39655. }
  39656. zend_hash_add_new(zobj->properties, name, value);
  39657. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39658. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39659. }
  39660. goto exit_assign_obj;
  39661. }
  39662. }
  39663. }
  39664. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39665. } else {
  39666. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  39667. if (UNEXPECTED(!name)) {
  39668. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  39669. UNDEF_RESULT();
  39670. goto exit_assign_obj;
  39671. }
  39672. }
  39673. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  39674. ZVAL_DEREF(value);
  39675. }
  39676. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  39677. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39678. zend_tmp_string_release(tmp_name);
  39679. }
  39680. free_and_exit_assign_obj:
  39681. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39682. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  39683. }
  39684. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  39685. exit_assign_obj:
  39686. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39687. /* assign_obj has two opcodes! */
  39688. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  39689. }
  39690. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  39691. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39692. {
  39693. USE_OPLINE
  39694. zval *object, *value, tmp;
  39695. zend_object *zobj;
  39696. zend_string *name, *tmp_name;
  39697. SAVE_OPLINE();
  39698. object = EX_VAR(opline->op1.var);
  39699. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  39700. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  39701. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  39702. object = Z_REFVAL_P(object);
  39703. goto assign_object;
  39704. }
  39705. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  39706. value = &EG(uninitialized_zval);
  39707. goto free_and_exit_assign_obj;
  39708. }
  39709. assign_object:
  39710. zobj = Z_OBJ_P(object);
  39711. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39712. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  39713. void **cache_slot = CACHE_ADDR(opline->extended_value);
  39714. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  39715. zend_object *zobj = Z_OBJ_P(object);
  39716. zval *property_val;
  39717. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  39718. property_val = OBJ_PROP(zobj, prop_offset);
  39719. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  39720. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  39721. if (UNEXPECTED(prop_info != NULL)) {
  39722. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  39723. goto free_and_exit_assign_obj;
  39724. } else {
  39725. fast_assign_obj:
  39726. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  39727. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39728. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39729. }
  39730. goto exit_assign_obj;
  39731. }
  39732. }
  39733. } else {
  39734. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39735. if (EXPECTED(zobj->properties != NULL)) {
  39736. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  39737. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  39738. GC_DELREF(zobj->properties);
  39739. }
  39740. zobj->properties = zend_array_dup(zobj->properties);
  39741. }
  39742. property_val = zend_hash_find_known_hash(zobj->properties, name);
  39743. if (property_val) {
  39744. goto fast_assign_obj;
  39745. }
  39746. }
  39747. if (!zobj->ce->__set) {
  39748. if (EXPECTED(zobj->properties == NULL)) {
  39749. rebuild_object_properties(zobj);
  39750. }
  39751. if (IS_VAR == IS_CONST) {
  39752. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  39753. Z_ADDREF_P(value);
  39754. }
  39755. } else if (IS_VAR != IS_TMP_VAR) {
  39756. if (Z_ISREF_P(value)) {
  39757. if (IS_VAR == IS_VAR) {
  39758. zend_reference *ref = Z_REF_P(value);
  39759. if (GC_DELREF(ref) == 0) {
  39760. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  39761. efree_size(ref, sizeof(zend_reference));
  39762. value = &tmp;
  39763. } else {
  39764. value = Z_REFVAL_P(value);
  39765. Z_TRY_ADDREF_P(value);
  39766. }
  39767. } else {
  39768. value = Z_REFVAL_P(value);
  39769. Z_TRY_ADDREF_P(value);
  39770. }
  39771. } else if (IS_VAR == IS_CV) {
  39772. Z_TRY_ADDREF_P(value);
  39773. }
  39774. }
  39775. zend_hash_add_new(zobj->properties, name, value);
  39776. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39777. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39778. }
  39779. goto exit_assign_obj;
  39780. }
  39781. }
  39782. }
  39783. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39784. } else {
  39785. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  39786. if (UNEXPECTED(!name)) {
  39787. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  39788. UNDEF_RESULT();
  39789. goto exit_assign_obj;
  39790. }
  39791. }
  39792. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  39793. ZVAL_DEREF(value);
  39794. }
  39795. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  39796. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39797. zend_tmp_string_release(tmp_name);
  39798. }
  39799. free_and_exit_assign_obj:
  39800. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39801. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  39802. }
  39803. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  39804. exit_assign_obj:
  39805. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39806. /* assign_obj has two opcodes! */
  39807. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  39808. }
  39809. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  39810. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39811. {
  39812. USE_OPLINE
  39813. zval *object, *value, tmp;
  39814. zend_object *zobj;
  39815. zend_string *name, *tmp_name;
  39816. SAVE_OPLINE();
  39817. object = EX_VAR(opline->op1.var);
  39818. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  39819. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  39820. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  39821. object = Z_REFVAL_P(object);
  39822. goto assign_object;
  39823. }
  39824. zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  39825. value = &EG(uninitialized_zval);
  39826. goto free_and_exit_assign_obj;
  39827. }
  39828. assign_object:
  39829. zobj = Z_OBJ_P(object);
  39830. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39831. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  39832. void **cache_slot = CACHE_ADDR(opline->extended_value);
  39833. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  39834. zend_object *zobj = Z_OBJ_P(object);
  39835. zval *property_val;
  39836. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  39837. property_val = OBJ_PROP(zobj, prop_offset);
  39838. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  39839. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  39840. if (UNEXPECTED(prop_info != NULL)) {
  39841. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  39842. goto free_and_exit_assign_obj;
  39843. } else {
  39844. fast_assign_obj:
  39845. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  39846. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39847. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39848. }
  39849. goto exit_assign_obj;
  39850. }
  39851. }
  39852. } else {
  39853. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39854. if (EXPECTED(zobj->properties != NULL)) {
  39855. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  39856. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  39857. GC_DELREF(zobj->properties);
  39858. }
  39859. zobj->properties = zend_array_dup(zobj->properties);
  39860. }
  39861. property_val = zend_hash_find_known_hash(zobj->properties, name);
  39862. if (property_val) {
  39863. goto fast_assign_obj;
  39864. }
  39865. }
  39866. if (!zobj->ce->__set) {
  39867. if (EXPECTED(zobj->properties == NULL)) {
  39868. rebuild_object_properties(zobj);
  39869. }
  39870. if (IS_CV == IS_CONST) {
  39871. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  39872. Z_ADDREF_P(value);
  39873. }
  39874. } else if (IS_CV != IS_TMP_VAR) {
  39875. if (Z_ISREF_P(value)) {
  39876. if (IS_CV == IS_VAR) {
  39877. zend_reference *ref = Z_REF_P(value);
  39878. if (GC_DELREF(ref) == 0) {
  39879. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  39880. efree_size(ref, sizeof(zend_reference));
  39881. value = &tmp;
  39882. } else {
  39883. value = Z_REFVAL_P(value);
  39884. Z_TRY_ADDREF_P(value);
  39885. }
  39886. } else {
  39887. value = Z_REFVAL_P(value);
  39888. Z_TRY_ADDREF_P(value);
  39889. }
  39890. } else if (IS_CV == IS_CV) {
  39891. Z_TRY_ADDREF_P(value);
  39892. }
  39893. }
  39894. zend_hash_add_new(zobj->properties, name, value);
  39895. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39896. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39897. }
  39898. goto exit_assign_obj;
  39899. }
  39900. }
  39901. }
  39902. name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
  39903. } else {
  39904. name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  39905. if (UNEXPECTED(!name)) {
  39906. UNDEF_RESULT();
  39907. goto exit_assign_obj;
  39908. }
  39909. }
  39910. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  39911. ZVAL_DEREF(value);
  39912. }
  39913. value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  39914. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39915. zend_tmp_string_release(tmp_name);
  39916. }
  39917. free_and_exit_assign_obj:
  39918. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39919. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  39920. }
  39921. exit_assign_obj:
  39922. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  39923. /* assign_obj has two opcodes! */
  39924. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  39925. }
  39926. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  39927. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39928. {
  39929. USE_OPLINE
  39930. zval *object_ptr, *orig_object_ptr;
  39931. zval *value;
  39932. zval *variable_ptr;
  39933. zval *dim;
  39934. SAVE_OPLINE();
  39935. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  39936. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  39937. try_assign_dim_array:
  39938. SEPARATE_ARRAY(object_ptr);
  39939. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  39940. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  39941. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  39942. HashTable *ht = Z_ARRVAL_P(object_ptr);
  39943. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  39944. GC_ADDREF(ht);
  39945. }
  39946. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  39947. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  39948. zend_array_destroy(ht);
  39949. goto assign_dim_error;
  39950. }
  39951. }
  39952. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  39953. ZVAL_DEREF(value);
  39954. }
  39955. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  39956. if (UNEXPECTED(value == NULL)) {
  39957. zend_cannot_add_element();
  39958. goto assign_dim_error;
  39959. } else if (IS_CONST == IS_CV) {
  39960. if (Z_REFCOUNTED_P(value)) {
  39961. Z_ADDREF_P(value);
  39962. }
  39963. } else if (IS_CONST == IS_VAR) {
  39964. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  39965. if (Z_ISREF_P(free_op_data)) {
  39966. if (Z_REFCOUNTED_P(value)) {
  39967. Z_ADDREF_P(value);
  39968. }
  39969. zval_ptr_dtor_nogc(free_op_data);
  39970. }
  39971. } else if (IS_CONST == IS_CONST) {
  39972. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  39973. Z_ADDREF_P(value);
  39974. }
  39975. }
  39976. } else {
  39977. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  39978. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  39979. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  39980. } else {
  39981. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  39982. }
  39983. if (UNEXPECTED(variable_ptr == NULL)) {
  39984. goto assign_dim_error;
  39985. }
  39986. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  39987. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  39988. }
  39989. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39990. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39991. }
  39992. } else {
  39993. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  39994. object_ptr = Z_REFVAL_P(object_ptr);
  39995. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  39996. goto try_assign_dim_array;
  39997. }
  39998. }
  39999. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  40000. zend_object *obj = Z_OBJ_P(object_ptr);
  40001. GC_ADDREF(obj);
  40002. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40003. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  40004. dim = ZVAL_UNDEFINED_OP2();
  40005. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  40006. dim++;
  40007. }
  40008. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  40009. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  40010. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  40011. } else if (IS_CONST & (IS_CV|IS_VAR)) {
  40012. ZVAL_DEREF(value);
  40013. }
  40014. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40015. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  40016. zend_objects_store_del(obj);
  40017. }
  40018. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  40019. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  40020. zend_use_new_element_for_string();
  40021. UNDEF_RESULT();
  40022. } else {
  40023. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40024. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  40025. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40026. }
  40027. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  40028. if (Z_ISREF_P(orig_object_ptr)
  40029. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  40030. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  40031. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40032. UNDEF_RESULT();
  40033. } else {
  40034. HashTable *ht = zend_new_array(8);
  40035. zend_uchar old_type = Z_TYPE_P(object_ptr);
  40036. ZVAL_ARR(object_ptr, ht);
  40037. if (UNEXPECTED(old_type == IS_FALSE)) {
  40038. GC_ADDREF(ht);
  40039. zend_false_to_array_deprecated();
  40040. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  40041. zend_array_destroy(ht);
  40042. goto assign_dim_error;
  40043. }
  40044. }
  40045. goto try_assign_dim_array;
  40046. }
  40047. } else {
  40048. zend_use_scalar_as_array();
  40049. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40050. assign_dim_error:
  40051. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40052. ZVAL_NULL(EX_VAR(opline->result.var));
  40053. }
  40054. }
  40055. }
  40056. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  40057. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40058. }
  40059. /* assign_dim has two opcodes! */
  40060. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  40061. }
  40062. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40063. {
  40064. USE_OPLINE
  40065. zval *object_ptr, *orig_object_ptr;
  40066. zval *value;
  40067. zval *variable_ptr;
  40068. zval *dim;
  40069. SAVE_OPLINE();
  40070. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  40071. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40072. try_assign_dim_array:
  40073. SEPARATE_ARRAY(object_ptr);
  40074. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  40075. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  40076. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  40077. HashTable *ht = Z_ARRVAL_P(object_ptr);
  40078. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  40079. GC_ADDREF(ht);
  40080. }
  40081. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  40082. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  40083. zend_array_destroy(ht);
  40084. goto assign_dim_error;
  40085. }
  40086. }
  40087. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  40088. ZVAL_DEREF(value);
  40089. }
  40090. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  40091. if (UNEXPECTED(value == NULL)) {
  40092. zend_cannot_add_element();
  40093. goto assign_dim_error;
  40094. } else if (IS_TMP_VAR == IS_CV) {
  40095. if (Z_REFCOUNTED_P(value)) {
  40096. Z_ADDREF_P(value);
  40097. }
  40098. } else if (IS_TMP_VAR == IS_VAR) {
  40099. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  40100. if (Z_ISREF_P(free_op_data)) {
  40101. if (Z_REFCOUNTED_P(value)) {
  40102. Z_ADDREF_P(value);
  40103. }
  40104. zval_ptr_dtor_nogc(free_op_data);
  40105. }
  40106. } else if (IS_TMP_VAR == IS_CONST) {
  40107. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  40108. Z_ADDREF_P(value);
  40109. }
  40110. }
  40111. } else {
  40112. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40113. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40114. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40115. } else {
  40116. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40117. }
  40118. if (UNEXPECTED(variable_ptr == NULL)) {
  40119. goto assign_dim_error;
  40120. }
  40121. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  40122. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  40123. }
  40124. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40125. ZVAL_COPY(EX_VAR(opline->result.var), value);
  40126. }
  40127. } else {
  40128. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  40129. object_ptr = Z_REFVAL_P(object_ptr);
  40130. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40131. goto try_assign_dim_array;
  40132. }
  40133. }
  40134. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  40135. zend_object *obj = Z_OBJ_P(object_ptr);
  40136. GC_ADDREF(obj);
  40137. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40138. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  40139. dim = ZVAL_UNDEFINED_OP2();
  40140. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  40141. dim++;
  40142. }
  40143. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  40144. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  40145. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  40146. } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
  40147. ZVAL_DEREF(value);
  40148. }
  40149. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40150. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40151. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  40152. zend_objects_store_del(obj);
  40153. }
  40154. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  40155. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  40156. zend_use_new_element_for_string();
  40157. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40158. UNDEF_RESULT();
  40159. } else {
  40160. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40161. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  40162. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40163. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40164. }
  40165. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  40166. if (Z_ISREF_P(orig_object_ptr)
  40167. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  40168. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  40169. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40170. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40171. UNDEF_RESULT();
  40172. } else {
  40173. HashTable *ht = zend_new_array(8);
  40174. zend_uchar old_type = Z_TYPE_P(object_ptr);
  40175. ZVAL_ARR(object_ptr, ht);
  40176. if (UNEXPECTED(old_type == IS_FALSE)) {
  40177. GC_ADDREF(ht);
  40178. zend_false_to_array_deprecated();
  40179. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  40180. zend_array_destroy(ht);
  40181. goto assign_dim_error;
  40182. }
  40183. }
  40184. goto try_assign_dim_array;
  40185. }
  40186. } else {
  40187. zend_use_scalar_as_array();
  40188. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40189. assign_dim_error:
  40190. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40191. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40192. ZVAL_NULL(EX_VAR(opline->result.var));
  40193. }
  40194. }
  40195. }
  40196. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  40197. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40198. }
  40199. /* assign_dim has two opcodes! */
  40200. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  40201. }
  40202. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40203. {
  40204. USE_OPLINE
  40205. zval *object_ptr, *orig_object_ptr;
  40206. zval *value;
  40207. zval *variable_ptr;
  40208. zval *dim;
  40209. SAVE_OPLINE();
  40210. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  40211. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40212. try_assign_dim_array:
  40213. SEPARATE_ARRAY(object_ptr);
  40214. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  40215. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  40216. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  40217. HashTable *ht = Z_ARRVAL_P(object_ptr);
  40218. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  40219. GC_ADDREF(ht);
  40220. }
  40221. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  40222. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  40223. zend_array_destroy(ht);
  40224. goto assign_dim_error;
  40225. }
  40226. }
  40227. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  40228. ZVAL_DEREF(value);
  40229. }
  40230. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  40231. if (UNEXPECTED(value == NULL)) {
  40232. zend_cannot_add_element();
  40233. goto assign_dim_error;
  40234. } else if (IS_VAR == IS_CV) {
  40235. if (Z_REFCOUNTED_P(value)) {
  40236. Z_ADDREF_P(value);
  40237. }
  40238. } else if (IS_VAR == IS_VAR) {
  40239. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  40240. if (Z_ISREF_P(free_op_data)) {
  40241. if (Z_REFCOUNTED_P(value)) {
  40242. Z_ADDREF_P(value);
  40243. }
  40244. zval_ptr_dtor_nogc(free_op_data);
  40245. }
  40246. } else if (IS_VAR == IS_CONST) {
  40247. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  40248. Z_ADDREF_P(value);
  40249. }
  40250. }
  40251. } else {
  40252. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40253. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40254. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40255. } else {
  40256. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40257. }
  40258. if (UNEXPECTED(variable_ptr == NULL)) {
  40259. goto assign_dim_error;
  40260. }
  40261. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  40262. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  40263. }
  40264. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40265. ZVAL_COPY(EX_VAR(opline->result.var), value);
  40266. }
  40267. } else {
  40268. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  40269. object_ptr = Z_REFVAL_P(object_ptr);
  40270. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40271. goto try_assign_dim_array;
  40272. }
  40273. }
  40274. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  40275. zend_object *obj = Z_OBJ_P(object_ptr);
  40276. GC_ADDREF(obj);
  40277. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40278. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  40279. dim = ZVAL_UNDEFINED_OP2();
  40280. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  40281. dim++;
  40282. }
  40283. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  40284. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  40285. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  40286. } else if (IS_VAR & (IS_CV|IS_VAR)) {
  40287. ZVAL_DEREF(value);
  40288. }
  40289. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40290. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40291. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  40292. zend_objects_store_del(obj);
  40293. }
  40294. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  40295. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  40296. zend_use_new_element_for_string();
  40297. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40298. UNDEF_RESULT();
  40299. } else {
  40300. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40301. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  40302. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40303. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40304. }
  40305. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  40306. if (Z_ISREF_P(orig_object_ptr)
  40307. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  40308. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  40309. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40310. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40311. UNDEF_RESULT();
  40312. } else {
  40313. HashTable *ht = zend_new_array(8);
  40314. zend_uchar old_type = Z_TYPE_P(object_ptr);
  40315. ZVAL_ARR(object_ptr, ht);
  40316. if (UNEXPECTED(old_type == IS_FALSE)) {
  40317. GC_ADDREF(ht);
  40318. zend_false_to_array_deprecated();
  40319. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  40320. zend_array_destroy(ht);
  40321. goto assign_dim_error;
  40322. }
  40323. }
  40324. goto try_assign_dim_array;
  40325. }
  40326. } else {
  40327. zend_use_scalar_as_array();
  40328. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40329. assign_dim_error:
  40330. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40331. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40332. ZVAL_NULL(EX_VAR(opline->result.var));
  40333. }
  40334. }
  40335. }
  40336. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  40337. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40338. }
  40339. /* assign_dim has two opcodes! */
  40340. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  40341. }
  40342. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40343. {
  40344. USE_OPLINE
  40345. zval *object_ptr, *orig_object_ptr;
  40346. zval *value;
  40347. zval *variable_ptr;
  40348. zval *dim;
  40349. SAVE_OPLINE();
  40350. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  40351. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40352. try_assign_dim_array:
  40353. SEPARATE_ARRAY(object_ptr);
  40354. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  40355. value = EX_VAR((opline+1)->op1.var);
  40356. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  40357. HashTable *ht = Z_ARRVAL_P(object_ptr);
  40358. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  40359. GC_ADDREF(ht);
  40360. }
  40361. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  40362. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  40363. zend_array_destroy(ht);
  40364. goto assign_dim_error;
  40365. }
  40366. }
  40367. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  40368. ZVAL_DEREF(value);
  40369. }
  40370. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  40371. if (UNEXPECTED(value == NULL)) {
  40372. zend_cannot_add_element();
  40373. goto assign_dim_error;
  40374. } else if (IS_CV == IS_CV) {
  40375. if (Z_REFCOUNTED_P(value)) {
  40376. Z_ADDREF_P(value);
  40377. }
  40378. } else if (IS_CV == IS_VAR) {
  40379. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  40380. if (Z_ISREF_P(free_op_data)) {
  40381. if (Z_REFCOUNTED_P(value)) {
  40382. Z_ADDREF_P(value);
  40383. }
  40384. zval_ptr_dtor_nogc(free_op_data);
  40385. }
  40386. } else if (IS_CV == IS_CONST) {
  40387. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  40388. Z_ADDREF_P(value);
  40389. }
  40390. }
  40391. } else {
  40392. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40393. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40394. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40395. } else {
  40396. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40397. }
  40398. if (UNEXPECTED(variable_ptr == NULL)) {
  40399. goto assign_dim_error;
  40400. }
  40401. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  40402. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  40403. }
  40404. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40405. ZVAL_COPY(EX_VAR(opline->result.var), value);
  40406. }
  40407. } else {
  40408. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  40409. object_ptr = Z_REFVAL_P(object_ptr);
  40410. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40411. goto try_assign_dim_array;
  40412. }
  40413. }
  40414. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  40415. zend_object *obj = Z_OBJ_P(object_ptr);
  40416. GC_ADDREF(obj);
  40417. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40418. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  40419. dim = ZVAL_UNDEFINED_OP2();
  40420. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  40421. dim++;
  40422. }
  40423. value = EX_VAR((opline+1)->op1.var);
  40424. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  40425. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  40426. } else if (IS_CV & (IS_CV|IS_VAR)) {
  40427. ZVAL_DEREF(value);
  40428. }
  40429. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40430. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  40431. zend_objects_store_del(obj);
  40432. }
  40433. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  40434. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  40435. zend_use_new_element_for_string();
  40436. UNDEF_RESULT();
  40437. } else {
  40438. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40439. value = EX_VAR((opline+1)->op1.var);
  40440. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40441. }
  40442. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  40443. if (Z_ISREF_P(orig_object_ptr)
  40444. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  40445. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  40446. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40447. UNDEF_RESULT();
  40448. } else {
  40449. HashTable *ht = zend_new_array(8);
  40450. zend_uchar old_type = Z_TYPE_P(object_ptr);
  40451. ZVAL_ARR(object_ptr, ht);
  40452. if (UNEXPECTED(old_type == IS_FALSE)) {
  40453. GC_ADDREF(ht);
  40454. zend_false_to_array_deprecated();
  40455. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  40456. zend_array_destroy(ht);
  40457. goto assign_dim_error;
  40458. }
  40459. }
  40460. goto try_assign_dim_array;
  40461. }
  40462. } else {
  40463. zend_use_scalar_as_array();
  40464. dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40465. assign_dim_error:
  40466. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40467. ZVAL_NULL(EX_VAR(opline->result.var));
  40468. }
  40469. }
  40470. }
  40471. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  40472. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40473. }
  40474. /* assign_dim has two opcodes! */
  40475. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  40476. }
  40477. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40478. {
  40479. USE_OPLINE
  40480. zval *property, *container, *value_ptr;
  40481. SAVE_OPLINE();
  40482. container = EX_VAR(opline->op1.var);
  40483. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40484. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  40485. if (1) {
  40486. if (IS_CV == IS_UNUSED) {
  40487. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40488. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40489. } else {
  40490. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40491. }
  40492. } else {
  40493. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40494. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40495. } else {
  40496. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40497. }
  40498. }
  40499. } else {
  40500. zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40501. }
  40502. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40503. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  40504. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  40505. }
  40506. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  40507. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40508. {
  40509. USE_OPLINE
  40510. zval *property, *container, *value_ptr;
  40511. SAVE_OPLINE();
  40512. container = EX_VAR(opline->op1.var);
  40513. property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40514. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  40515. if (1) {
  40516. if (IS_CV == IS_UNUSED) {
  40517. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40518. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40519. } else {
  40520. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40521. }
  40522. } else {
  40523. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40524. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40525. } else {
  40526. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40527. }
  40528. }
  40529. } else {
  40530. zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
  40531. }
  40532. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40533. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  40534. }
  40535. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  40536. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40537. {
  40538. USE_OPLINE
  40539. zval *op1, *op2;
  40540. zend_string *op1_str, *op2_str, *str;
  40541. op1 = EX_VAR(opline->op1.var);
  40542. op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40543. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  40544. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  40545. zend_string *op1_str = Z_STR_P(op1);
  40546. zend_string *op2_str = Z_STR_P(op2);
  40547. zend_string *str;
  40548. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  40549. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  40550. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  40551. } else {
  40552. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  40553. }
  40554. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  40555. zend_string_release_ex(op1_str, 0);
  40556. }
  40557. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  40558. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  40559. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  40560. } else {
  40561. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  40562. }
  40563. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  40564. zend_string_release_ex(op2_str, 0);
  40565. }
  40566. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  40567. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  40568. size_t len = ZSTR_LEN(op1_str);
  40569. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  40570. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  40571. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  40572. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  40573. zend_string_release_ex(op2_str, 0);
  40574. }
  40575. } else {
  40576. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  40577. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  40578. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  40579. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  40580. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  40581. zend_string_release_ex(op1_str, 0);
  40582. }
  40583. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  40584. zend_string_release_ex(op2_str, 0);
  40585. }
  40586. }
  40587. ZEND_VM_NEXT_OPCODE();
  40588. }
  40589. SAVE_OPLINE();
  40590. if (IS_CV == IS_CONST) {
  40591. op1_str = Z_STR_P(op1);
  40592. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  40593. op1_str = zend_string_copy(Z_STR_P(op1));
  40594. } else {
  40595. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  40596. ZVAL_UNDEFINED_OP1();
  40597. }
  40598. op1_str = zval_get_string_func(op1);
  40599. }
  40600. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40601. op2_str = Z_STR_P(op2);
  40602. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  40603. op2_str = zend_string_copy(Z_STR_P(op2));
  40604. } else {
  40605. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  40606. ZVAL_UNDEFINED_OP2();
  40607. }
  40608. op2_str = zval_get_string_func(op2);
  40609. }
  40610. do {
  40611. if (IS_CV != IS_CONST) {
  40612. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  40613. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40614. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  40615. GC_ADDREF(op2_str);
  40616. }
  40617. }
  40618. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  40619. zend_string_release_ex(op1_str, 0);
  40620. break;
  40621. }
  40622. }
  40623. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  40624. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  40625. if (IS_CV == IS_CONST) {
  40626. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  40627. GC_ADDREF(op1_str);
  40628. }
  40629. }
  40630. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  40631. zend_string_release_ex(op2_str, 0);
  40632. break;
  40633. }
  40634. }
  40635. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  40636. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  40637. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  40638. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  40639. if (IS_CV != IS_CONST) {
  40640. zend_string_release_ex(op1_str, 0);
  40641. }
  40642. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  40643. zend_string_release_ex(op2_str, 0);
  40644. }
  40645. } while (0);
  40646. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40647. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  40648. }
  40649. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40650. {
  40651. USE_OPLINE
  40652. zval *function_name;
  40653. zval *object;
  40654. zend_function *fbc;
  40655. zend_class_entry *called_scope;
  40656. zend_object *obj;
  40657. zend_execute_data *call;
  40658. uint32_t call_info;
  40659. SAVE_OPLINE();
  40660. object = EX_VAR(opline->op1.var);
  40661. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  40662. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40663. }
  40664. if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
  40665. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  40666. do {
  40667. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  40668. function_name = Z_REFVAL_P(function_name);
  40669. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  40670. break;
  40671. }
  40672. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  40673. ZVAL_UNDEFINED_OP2();
  40674. if (UNEXPECTED(EG(exception) != NULL)) {
  40675. HANDLE_EXCEPTION();
  40676. }
  40677. }
  40678. zend_throw_error(NULL, "Method name must be a string");
  40679. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40680. HANDLE_EXCEPTION();
  40681. } while (0);
  40682. }
  40683. if (IS_CV == IS_UNUSED) {
  40684. obj = Z_OBJ_P(object);
  40685. } else {
  40686. do {
  40687. if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  40688. obj = Z_OBJ_P(object);
  40689. } else {
  40690. if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  40691. zend_reference *ref = Z_REF_P(object);
  40692. object = &ref->val;
  40693. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  40694. obj = Z_OBJ_P(object);
  40695. if (IS_CV & IS_VAR) {
  40696. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  40697. efree_size(ref, sizeof(zend_reference));
  40698. } else {
  40699. Z_ADDREF_P(object);
  40700. }
  40701. }
  40702. break;
  40703. }
  40704. }
  40705. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  40706. object = ZVAL_UNDEFINED_OP1();
  40707. if (UNEXPECTED(EG(exception) != NULL)) {
  40708. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  40709. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40710. }
  40711. HANDLE_EXCEPTION();
  40712. }
  40713. }
  40714. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40715. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40716. }
  40717. zend_invalid_method_call(object, function_name);
  40718. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40719. HANDLE_EXCEPTION();
  40720. }
  40721. } while (0);
  40722. }
  40723. called_scope = obj->ce;
  40724. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  40725. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  40726. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  40727. } else {
  40728. zend_object *orig_obj = obj;
  40729. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  40730. function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40731. }
  40732. /* First, locate the function. */
  40733. 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));
  40734. if (UNEXPECTED(fbc == NULL)) {
  40735. if (EXPECTED(!EG(exception))) {
  40736. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  40737. }
  40738. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40739. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  40740. zend_objects_store_del(orig_obj);
  40741. }
  40742. HANDLE_EXCEPTION();
  40743. }
  40744. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  40745. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  40746. EXPECTED(obj == orig_obj)) {
  40747. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  40748. }
  40749. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  40750. GC_ADDREF(obj); /* For $this pointer */
  40751. if (GC_DELREF(orig_obj) == 0) {
  40752. zend_objects_store_del(orig_obj);
  40753. }
  40754. }
  40755. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  40756. init_func_run_time_cache(&fbc->op_array);
  40757. }
  40758. }
  40759. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  40760. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40761. }
  40762. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  40763. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  40764. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  40765. zend_objects_store_del(obj);
  40766. if (UNEXPECTED(EG(exception))) {
  40767. HANDLE_EXCEPTION();
  40768. }
  40769. }
  40770. /* call static method */
  40771. obj = (zend_object*)called_scope;
  40772. call_info = ZEND_CALL_NESTED_FUNCTION;
  40773. } else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  40774. if (IS_CV == IS_CV) {
  40775. GC_ADDREF(obj); /* For $this pointer */
  40776. }
  40777. /* CV may be changed indirectly (e.g. when it's a reference) */
  40778. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  40779. }
  40780. call = zend_vm_stack_push_call_frame(call_info,
  40781. fbc, opline->extended_value, obj);
  40782. call->prev_execute_data = EX(call);
  40783. EX(call) = call;
  40784. ZEND_VM_NEXT_OPCODE();
  40785. }
  40786. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40787. {
  40788. USE_OPLINE
  40789. zval *expr_ptr, new_expr;
  40790. SAVE_OPLINE();
  40791. if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
  40792. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  40793. expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  40794. if (Z_ISREF_P(expr_ptr)) {
  40795. Z_ADDREF_P(expr_ptr);
  40796. } else {
  40797. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  40798. }
  40799. } else {
  40800. expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  40801. if (IS_CV == IS_TMP_VAR) {
  40802. /* pass */
  40803. } else if (IS_CV == IS_CONST) {
  40804. Z_TRY_ADDREF_P(expr_ptr);
  40805. } else if (IS_CV == IS_CV) {
  40806. ZVAL_DEREF(expr_ptr);
  40807. Z_TRY_ADDREF_P(expr_ptr);
  40808. } else /* if (IS_CV == IS_VAR) */ {
  40809. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  40810. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  40811. expr_ptr = Z_REFVAL_P(expr_ptr);
  40812. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  40813. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  40814. expr_ptr = &new_expr;
  40815. efree_size(ref, sizeof(zend_reference));
  40816. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  40817. Z_ADDREF_P(expr_ptr);
  40818. }
  40819. }
  40820. }
  40821. }
  40822. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  40823. zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40824. zend_string *str;
  40825. zend_ulong hval;
  40826. add_again:
  40827. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  40828. str = Z_STR_P(offset);
  40829. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  40830. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  40831. goto num_index;
  40832. }
  40833. }
  40834. str_index:
  40835. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  40836. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  40837. hval = Z_LVAL_P(offset);
  40838. num_index:
  40839. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  40840. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  40841. offset = Z_REFVAL_P(offset);
  40842. goto add_again;
  40843. } else if (Z_TYPE_P(offset) == IS_NULL) {
  40844. str = ZSTR_EMPTY_ALLOC();
  40845. goto str_index;
  40846. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  40847. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  40848. goto num_index;
  40849. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  40850. hval = 0;
  40851. goto num_index;
  40852. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  40853. hval = 1;
  40854. goto num_index;
  40855. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  40856. zend_use_resource_as_offset(offset);
  40857. hval = Z_RES_HANDLE_P(offset);
  40858. goto num_index;
  40859. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  40860. ZVAL_UNDEFINED_OP2();
  40861. str = ZSTR_EMPTY_ALLOC();
  40862. goto str_index;
  40863. } else {
  40864. zend_illegal_offset();
  40865. zval_ptr_dtor_nogc(expr_ptr);
  40866. }
  40867. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40868. } else {
  40869. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  40870. zend_cannot_add_element();
  40871. zval_ptr_dtor_nogc(expr_ptr);
  40872. }
  40873. }
  40874. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  40875. }
  40876. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40877. {
  40878. zval *array;
  40879. uint32_t size;
  40880. USE_OPLINE
  40881. array = EX_VAR(opline->result.var);
  40882. if (IS_CV != IS_UNUSED) {
  40883. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  40884. ZVAL_ARR(array, zend_new_array(size));
  40885. /* Explicitly initialize array as not-packed if flag is set */
  40886. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  40887. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  40888. }
  40889. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  40890. } else {
  40891. ZVAL_ARR(array, zend_new_array(0));
  40892. ZEND_VM_NEXT_OPCODE();
  40893. }
  40894. }
  40895. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40896. {
  40897. USE_OPLINE
  40898. zval *container;
  40899. zval *offset;
  40900. zend_ulong hval;
  40901. zend_string *key;
  40902. SAVE_OPLINE();
  40903. container = EX_VAR(opline->op1.var);
  40904. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40905. do {
  40906. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  40907. HashTable *ht;
  40908. unset_dim_array:
  40909. SEPARATE_ARRAY(container);
  40910. ht = Z_ARRVAL_P(container);
  40911. offset_again:
  40912. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  40913. key = Z_STR_P(offset);
  40914. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  40915. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  40916. goto num_index_dim;
  40917. }
  40918. }
  40919. str_index_dim:
  40920. ZEND_ASSERT(ht != &EG(symbol_table));
  40921. zend_hash_del(ht, key);
  40922. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  40923. hval = Z_LVAL_P(offset);
  40924. num_index_dim:
  40925. zend_hash_index_del(ht, hval);
  40926. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  40927. offset = Z_REFVAL_P(offset);
  40928. goto offset_again;
  40929. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  40930. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  40931. goto num_index_dim;
  40932. } else if (Z_TYPE_P(offset) == IS_NULL) {
  40933. key = ZSTR_EMPTY_ALLOC();
  40934. goto str_index_dim;
  40935. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  40936. hval = 0;
  40937. goto num_index_dim;
  40938. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  40939. hval = 1;
  40940. goto num_index_dim;
  40941. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  40942. zend_use_resource_as_offset(offset);
  40943. hval = Z_RES_HANDLE_P(offset);
  40944. goto num_index_dim;
  40945. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  40946. ZVAL_UNDEFINED_OP2();
  40947. key = ZSTR_EMPTY_ALLOC();
  40948. goto str_index_dim;
  40949. } else {
  40950. zend_type_error("Illegal offset type in unset");
  40951. }
  40952. break;
  40953. } else if (Z_ISREF_P(container)) {
  40954. container = Z_REFVAL_P(container);
  40955. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  40956. goto unset_dim_array;
  40957. }
  40958. }
  40959. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  40960. container = ZVAL_UNDEFINED_OP1();
  40961. }
  40962. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  40963. offset = ZVAL_UNDEFINED_OP2();
  40964. }
  40965. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  40966. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  40967. offset++;
  40968. }
  40969. Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
  40970. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  40971. zend_throw_error(NULL, "Cannot unset string offsets");
  40972. } else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
  40973. zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
  40974. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
  40975. zend_false_to_array_deprecated();
  40976. }
  40977. } while (0);
  40978. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  40979. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  40980. }
  40981. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40982. {
  40983. USE_OPLINE
  40984. zval *container;
  40985. zval *offset;
  40986. zend_string *name, *tmp_name;
  40987. SAVE_OPLINE();
  40988. container = EX_VAR(opline->op1.var);
  40989. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  40990. do {
  40991. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  40992. if (Z_ISREF_P(container)) {
  40993. container = Z_REFVAL_P(container);
  40994. if (Z_TYPE_P(container) != IS_OBJECT) {
  40995. if (IS_CV == IS_CV
  40996. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  40997. ZVAL_UNDEFINED_OP1();
  40998. }
  40999. break;
  41000. }
  41001. } else {
  41002. break;
  41003. }
  41004. }
  41005. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  41006. name = Z_STR_P(offset);
  41007. } else {
  41008. name = zval_try_get_tmp_string(offset, &tmp_name);
  41009. if (UNEXPECTED(!name)) {
  41010. break;
  41011. }
  41012. }
  41013. 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));
  41014. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  41015. zend_tmp_string_release(tmp_name);
  41016. }
  41017. } while (0);
  41018. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41019. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41020. }
  41021. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41022. {
  41023. USE_OPLINE
  41024. zval *container;
  41025. bool result;
  41026. zend_ulong hval;
  41027. zval *offset;
  41028. SAVE_OPLINE();
  41029. container = EX_VAR(opline->op1.var);
  41030. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  41031. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  41032. HashTable *ht;
  41033. zval *value;
  41034. zend_string *str;
  41035. isset_dim_obj_array:
  41036. ht = Z_ARRVAL_P(container);
  41037. isset_again:
  41038. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  41039. str = Z_STR_P(offset);
  41040. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  41041. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  41042. goto num_index_prop;
  41043. }
  41044. }
  41045. value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
  41046. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  41047. hval = Z_LVAL_P(offset);
  41048. num_index_prop:
  41049. value = zend_hash_index_find(ht, hval);
  41050. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  41051. offset = Z_REFVAL_P(offset);
  41052. goto isset_again;
  41053. } else {
  41054. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  41055. if (UNEXPECTED(EG(exception))) {
  41056. result = 0;
  41057. goto isset_dim_obj_exit;
  41058. }
  41059. }
  41060. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  41061. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  41062. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  41063. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  41064. if (IS_CV & (IS_CONST|IS_CV)) {
  41065. /* avoid exception check */
  41066. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41067. ZEND_VM_SMART_BRANCH(result, 0);
  41068. }
  41069. } else {
  41070. result = (value == NULL || !i_zend_is_true(value));
  41071. }
  41072. goto isset_dim_obj_exit;
  41073. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  41074. container = Z_REFVAL_P(container);
  41075. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  41076. goto isset_dim_obj_array;
  41077. }
  41078. }
  41079. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  41080. offset++;
  41081. }
  41082. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  41083. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  41084. } else {
  41085. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  41086. }
  41087. isset_dim_obj_exit:
  41088. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41089. ZEND_VM_SMART_BRANCH(result, 1);
  41090. }
  41091. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41092. {
  41093. USE_OPLINE
  41094. zval *container;
  41095. int result;
  41096. zval *offset;
  41097. zend_string *name, *tmp_name;
  41098. SAVE_OPLINE();
  41099. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  41100. offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  41101. if (IS_CV == IS_CONST ||
  41102. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  41103. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  41104. container = Z_REFVAL_P(container);
  41105. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  41106. result = (opline->extended_value & ZEND_ISEMPTY);
  41107. goto isset_object_finish;
  41108. }
  41109. } else {
  41110. result = (opline->extended_value & ZEND_ISEMPTY);
  41111. goto isset_object_finish;
  41112. }
  41113. }
  41114. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  41115. name = Z_STR_P(offset);
  41116. } else {
  41117. name = zval_try_get_tmp_string(offset, &tmp_name);
  41118. if (UNEXPECTED(!name)) {
  41119. result = 0;
  41120. goto isset_object_finish;
  41121. }
  41122. }
  41123. result =
  41124. (opline->extended_value & ZEND_ISEMPTY) ^
  41125. 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));
  41126. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  41127. zend_tmp_string_release(tmp_name);
  41128. }
  41129. isset_object_finish:
  41130. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41131. ZEND_VM_SMART_BRANCH(result, 1);
  41132. }
  41133. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41134. {
  41135. USE_OPLINE
  41136. zval *key, *subject;
  41137. HashTable *ht;
  41138. bool result;
  41139. SAVE_OPLINE();
  41140. key = EX_VAR(opline->op1.var);
  41141. subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  41142. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  41143. array_key_exists_array:
  41144. ht = Z_ARRVAL_P(subject);
  41145. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  41146. } else {
  41147. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  41148. subject = Z_REFVAL_P(subject);
  41149. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  41150. goto array_key_exists_array;
  41151. }
  41152. }
  41153. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  41154. result = 0;
  41155. }
  41156. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41157. ZEND_VM_SMART_BRANCH(result, 1);
  41158. }
  41159. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  41160. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41161. {
  41162. USE_OPLINE
  41163. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  41164. SAVE_OPLINE();
  41165. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  41166. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  41167. }
  41168. /* Destroy the previously yielded value */
  41169. zval_ptr_dtor(&generator->value);
  41170. /* Destroy the previously yielded key */
  41171. zval_ptr_dtor(&generator->key);
  41172. /* Set the new yielded value */
  41173. if (IS_CV != IS_UNUSED) {
  41174. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  41175. /* Constants and temporary variables aren't yieldable by reference,
  41176. * but we still allow them with a notice. */
  41177. if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
  41178. zval *value;
  41179. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  41180. value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41181. ZVAL_COPY_VALUE(&generator->value, value);
  41182. if (IS_CV == IS_CONST) {
  41183. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  41184. Z_ADDREF(generator->value);
  41185. }
  41186. }
  41187. } else {
  41188. zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  41189. /* If a function call result is yielded and the function did
  41190. * not return by reference we throw a notice. */
  41191. do {
  41192. if (IS_CV == IS_VAR) {
  41193. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  41194. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  41195. && !Z_ISREF_P(value_ptr)) {
  41196. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  41197. ZVAL_COPY(&generator->value, value_ptr);
  41198. break;
  41199. }
  41200. }
  41201. if (Z_ISREF_P(value_ptr)) {
  41202. Z_ADDREF_P(value_ptr);
  41203. } else {
  41204. ZVAL_MAKE_REF_EX(value_ptr, 2);
  41205. }
  41206. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  41207. } while (0);
  41208. }
  41209. } else {
  41210. zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41211. /* Consts, temporary variables and references need copying */
  41212. if (IS_CV == IS_CONST) {
  41213. ZVAL_COPY_VALUE(&generator->value, value);
  41214. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  41215. Z_ADDREF(generator->value);
  41216. }
  41217. } else if (IS_CV == IS_TMP_VAR) {
  41218. ZVAL_COPY_VALUE(&generator->value, value);
  41219. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  41220. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  41221. } else {
  41222. ZVAL_COPY_VALUE(&generator->value, value);
  41223. if (IS_CV == IS_CV) {
  41224. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  41225. }
  41226. }
  41227. }
  41228. } else {
  41229. /* If no value was specified yield null */
  41230. ZVAL_NULL(&generator->value);
  41231. }
  41232. /* Set the new yielded key */
  41233. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  41234. zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  41235. if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  41236. key = Z_REFVAL_P(key);
  41237. }
  41238. ZVAL_COPY(&generator->key, key);
  41239. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41240. if (Z_TYPE(generator->key) == IS_LONG
  41241. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  41242. ) {
  41243. generator->largest_used_integer_key = Z_LVAL(generator->key);
  41244. }
  41245. } else {
  41246. /* If no key was specified we use auto-increment keys */
  41247. generator->largest_used_integer_key++;
  41248. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  41249. }
  41250. if (RETURN_VALUE_USED(opline)) {
  41251. /* If the return value of yield is used set the send
  41252. * target and initialize it to NULL */
  41253. generator->send_target = EX_VAR(opline->result.var);
  41254. ZVAL_NULL(generator->send_target);
  41255. } else {
  41256. generator->send_target = NULL;
  41257. }
  41258. /* We increment to the next op, so we are at the correct position when the
  41259. * generator is resumed. */
  41260. ZEND_VM_INC_OPCODE();
  41261. /* The GOTO VM uses a local opline variable. We need to set the opline
  41262. * variable in execute_data so we don't resume at an old position. */
  41263. SAVE_OPLINE();
  41264. ZEND_VM_RETURN();
  41265. }
  41266. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41267. {
  41268. USE_OPLINE
  41269. zval *op1, *op2;
  41270. bool result;
  41271. SAVE_OPLINE();
  41272. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41273. op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  41274. result = fast_is_identical_function(op1, op2);
  41275. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41276. ZEND_VM_SMART_BRANCH(result, 1);
  41277. }
  41278. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41279. {
  41280. USE_OPLINE
  41281. zval *op1, *op2;
  41282. bool result;
  41283. SAVE_OPLINE();
  41284. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41285. op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  41286. result = fast_is_not_identical_function(op1, op2);
  41287. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41288. ZEND_VM_SMART_BRANCH(result, 1);
  41289. }
  41290. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41291. {
  41292. USE_OPLINE
  41293. zval *value;
  41294. zval *variable_ptr;
  41295. SAVE_OPLINE();
  41296. value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  41297. variable_ptr = EX_VAR(opline->op1.var);
  41298. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  41299. if (UNEXPECTED(0)) {
  41300. ZVAL_COPY(EX_VAR(opline->result.var), value);
  41301. }
  41302. /* zend_assign_to_variable() always takes care of op2, never free it! */
  41303. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41304. }
  41305. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41306. {
  41307. USE_OPLINE
  41308. zval *value;
  41309. zval *variable_ptr;
  41310. SAVE_OPLINE();
  41311. value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
  41312. variable_ptr = EX_VAR(opline->op1.var);
  41313. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  41314. if (UNEXPECTED(1)) {
  41315. ZVAL_COPY(EX_VAR(opline->result.var), value);
  41316. }
  41317. /* zend_assign_to_variable() always takes care of op2, never free it! */
  41318. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41319. }
  41320. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41321. {
  41322. USE_OPLINE
  41323. zval *op1, *op2;
  41324. bool result;
  41325. SAVE_OPLINE();
  41326. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41327. op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
  41328. result = fast_is_identical_function(op1, op2);
  41329. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41330. ZEND_VM_SMART_BRANCH(result, 1);
  41331. }
  41332. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41333. {
  41334. USE_OPLINE
  41335. zval *op1, *op2;
  41336. bool result;
  41337. SAVE_OPLINE();
  41338. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41339. op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
  41340. result = fast_is_not_identical_function(op1, op2);
  41341. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41342. ZEND_VM_SMART_BRANCH(result, 1);
  41343. }
  41344. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41345. {
  41346. USE_OPLINE
  41347. zval *value;
  41348. zval *variable_ptr;
  41349. SAVE_OPLINE();
  41350. value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  41351. variable_ptr = EX_VAR(opline->op1.var);
  41352. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  41353. if (UNEXPECTED(0)) {
  41354. ZVAL_COPY(EX_VAR(opline->result.var), value);
  41355. }
  41356. /* zend_assign_to_variable() always takes care of op2, never free it! */
  41357. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41358. }
  41359. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41360. {
  41361. USE_OPLINE
  41362. zval *value;
  41363. zval *variable_ptr;
  41364. SAVE_OPLINE();
  41365. value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  41366. variable_ptr = EX_VAR(opline->op1.var);
  41367. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  41368. if (UNEXPECTED(1)) {
  41369. ZVAL_COPY(EX_VAR(opline->result.var), value);
  41370. }
  41371. /* zend_assign_to_variable() always takes care of op2, never free it! */
  41372. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41373. }
  41374. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41375. {
  41376. USE_OPLINE
  41377. zval *variable_ptr;
  41378. zval *value_ptr;
  41379. SAVE_OPLINE();
  41380. value_ptr = _get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC);
  41381. variable_ptr = EX_VAR(opline->op1.var);
  41382. if (IS_CV == IS_VAR &&
  41383. UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
  41384. zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
  41385. variable_ptr = &EG(uninitialized_zval);
  41386. } else if (IS_VAR == IS_VAR &&
  41387. opline->extended_value == ZEND_RETURNS_FUNCTION &&
  41388. UNEXPECTED(!Z_ISREF_P(value_ptr))) {
  41389. variable_ptr = zend_wrong_assign_to_variable_reference(
  41390. variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  41391. } else {
  41392. zend_assign_to_variable_reference(variable_ptr, value_ptr);
  41393. }
  41394. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  41395. ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
  41396. }
  41397. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  41398. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41399. }
  41400. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41401. {
  41402. USE_OPLINE
  41403. zval *expr;
  41404. bool result;
  41405. SAVE_OPLINE();
  41406. expr = EX_VAR(opline->op1.var);
  41407. try_instanceof:
  41408. if (Z_TYPE_P(expr) == IS_OBJECT) {
  41409. zend_class_entry *ce;
  41410. if (IS_VAR == IS_CONST) {
  41411. ce = CACHED_PTR(opline->extended_value);
  41412. if (UNEXPECTED(ce == NULL)) {
  41413. 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);
  41414. if (EXPECTED(ce)) {
  41415. CACHE_PTR(opline->extended_value, ce);
  41416. }
  41417. }
  41418. } else if (IS_VAR == IS_UNUSED) {
  41419. ce = zend_fetch_class(NULL, opline->op2.num);
  41420. if (UNEXPECTED(ce == NULL)) {
  41421. ZVAL_UNDEF(EX_VAR(opline->result.var));
  41422. HANDLE_EXCEPTION();
  41423. }
  41424. } else {
  41425. ce = Z_CE_P(EX_VAR(opline->op2.var));
  41426. }
  41427. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  41428. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  41429. expr = Z_REFVAL_P(expr);
  41430. goto try_instanceof;
  41431. } else {
  41432. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  41433. ZVAL_UNDEFINED_OP1();
  41434. }
  41435. result = 0;
  41436. }
  41437. ZEND_VM_SMART_BRANCH(result, 1);
  41438. }
  41439. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41440. {
  41441. USE_OPLINE
  41442. zval *var_ptr;
  41443. zval *value, *container, *dim;
  41444. HashTable *ht;
  41445. SAVE_OPLINE();
  41446. container = EX_VAR(opline->op1.var);
  41447. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  41448. assign_dim_op_array:
  41449. SEPARATE_ARRAY(container);
  41450. ht = Z_ARRVAL_P(container);
  41451. assign_dim_op_new_array:
  41452. dim = NULL;
  41453. if (IS_UNUSED == IS_UNUSED) {
  41454. var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
  41455. if (UNEXPECTED(!var_ptr)) {
  41456. zend_cannot_add_element();
  41457. goto assign_dim_op_ret_null;
  41458. }
  41459. } else {
  41460. if (IS_UNUSED == IS_CONST) {
  41461. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
  41462. } else {
  41463. var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
  41464. }
  41465. if (UNEXPECTED(!var_ptr)) {
  41466. goto assign_dim_op_ret_null;
  41467. }
  41468. }
  41469. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  41470. do {
  41471. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
  41472. zend_reference *ref = Z_REF_P(var_ptr);
  41473. var_ptr = Z_REFVAL_P(var_ptr);
  41474. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  41475. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  41476. break;
  41477. }
  41478. }
  41479. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  41480. } while (0);
  41481. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  41482. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  41483. }
  41484. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  41485. } else {
  41486. if (EXPECTED(Z_ISREF_P(container))) {
  41487. container = Z_REFVAL_P(container);
  41488. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  41489. goto assign_dim_op_array;
  41490. }
  41491. }
  41492. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  41493. zend_object *obj = Z_OBJ_P(container);
  41494. dim = NULL;
  41495. if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  41496. dim++;
  41497. }
  41498. zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
  41499. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  41500. zend_uchar old_type;
  41501. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  41502. ZVAL_UNDEFINED_OP1();
  41503. }
  41504. ht = zend_new_array(8);
  41505. old_type = Z_TYPE_P(container);
  41506. ZVAL_ARR(container, ht);
  41507. if (UNEXPECTED(old_type == IS_FALSE)) {
  41508. GC_ADDREF(ht);
  41509. zend_false_to_array_deprecated();
  41510. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  41511. zend_array_destroy(ht);
  41512. goto assign_dim_op_ret_null;
  41513. }
  41514. }
  41515. goto assign_dim_op_new_array;
  41516. } else {
  41517. dim = NULL;
  41518. zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  41519. assign_dim_op_ret_null:
  41520. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  41521. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  41522. ZVAL_NULL(EX_VAR(opline->result.var));
  41523. }
  41524. }
  41525. }
  41526. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  41527. }
  41528. 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)
  41529. {
  41530. USE_OPLINE
  41531. zval *varname;
  41532. zval *retval;
  41533. zend_string *name, *tmp_name;
  41534. HashTable *target_symbol_table;
  41535. SAVE_OPLINE();
  41536. varname = EX_VAR(opline->op1.var);
  41537. if (IS_CV == IS_CONST) {
  41538. name = Z_STR_P(varname);
  41539. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  41540. name = Z_STR_P(varname);
  41541. tmp_name = NULL;
  41542. } else {
  41543. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  41544. ZVAL_UNDEFINED_OP1();
  41545. }
  41546. name = zval_try_get_tmp_string(varname, &tmp_name);
  41547. if (UNEXPECTED(!name)) {
  41548. if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
  41549. }
  41550. ZVAL_UNDEF(EX_VAR(opline->result.var));
  41551. HANDLE_EXCEPTION();
  41552. }
  41553. }
  41554. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  41555. retval = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
  41556. if (retval == NULL) {
  41557. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  41558. fetch_this:
  41559. zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
  41560. if (IS_CV != IS_CONST) {
  41561. zend_tmp_string_release(tmp_name);
  41562. }
  41563. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41564. }
  41565. if (type == BP_VAR_W) {
  41566. retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
  41567. } else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
  41568. retval = &EG(uninitialized_zval);
  41569. } else {
  41570. zend_error(E_WARNING, "Undefined %svariable $%s",
  41571. (opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
  41572. if (type == BP_VAR_RW && !EG(exception)) {
  41573. retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
  41574. } else {
  41575. retval = &EG(uninitialized_zval);
  41576. }
  41577. }
  41578. /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
  41579. } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
  41580. retval = Z_INDIRECT_P(retval);
  41581. if (Z_TYPE_P(retval) == IS_UNDEF) {
  41582. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  41583. goto fetch_this;
  41584. }
  41585. if (type == BP_VAR_W) {
  41586. ZVAL_NULL(retval);
  41587. } else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
  41588. retval = &EG(uninitialized_zval);
  41589. } else {
  41590. zend_error(E_WARNING, "Undefined %svariable $%s",
  41591. (opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
  41592. if (type == BP_VAR_RW && !EG(exception)) {
  41593. ZVAL_NULL(retval);
  41594. } else {
  41595. retval = &EG(uninitialized_zval);
  41596. }
  41597. }
  41598. }
  41599. }
  41600. if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
  41601. }
  41602. if (IS_CV != IS_CONST) {
  41603. zend_tmp_string_release(tmp_name);
  41604. }
  41605. ZEND_ASSERT(retval != NULL);
  41606. if (type == BP_VAR_R || type == BP_VAR_IS) {
  41607. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  41608. } else {
  41609. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  41610. }
  41611. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41612. }
  41613. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41614. {
  41615. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  41616. }
  41617. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41618. {
  41619. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  41620. }
  41621. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41622. {
  41623. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  41624. }
  41625. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41626. {
  41627. int fetch_type =
  41628. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  41629. BP_VAR_W : BP_VAR_R;
  41630. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  41631. }
  41632. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41633. {
  41634. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  41635. }
  41636. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41637. {
  41638. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  41639. }
  41640. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  41641. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41642. {
  41643. USE_OPLINE
  41644. zval *container;
  41645. SAVE_OPLINE();
  41646. container = EX_VAR(opline->op1.var);
  41647. zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
  41648. if (IS_CV == IS_VAR) {
  41649. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  41650. }
  41651. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41652. }
  41653. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41654. {
  41655. USE_OPLINE
  41656. zval *container;
  41657. SAVE_OPLINE();
  41658. container = EX_VAR(opline->op1.var);
  41659. zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
  41660. if (IS_CV == IS_VAR) {
  41661. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  41662. }
  41663. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41664. }
  41665. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41666. {
  41667. #if 0
  41668. USE_OPLINE
  41669. #endif
  41670. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  41671. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  41672. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  41673. }
  41674. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  41675. } else {
  41676. if (IS_UNUSED == IS_UNUSED) {
  41677. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  41678. }
  41679. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  41680. }
  41681. }
  41682. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41683. {
  41684. USE_OPLINE
  41685. zval *object_ptr, *orig_object_ptr;
  41686. zval *value;
  41687. zval *variable_ptr;
  41688. zval *dim;
  41689. SAVE_OPLINE();
  41690. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  41691. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  41692. try_assign_dim_array:
  41693. SEPARATE_ARRAY(object_ptr);
  41694. if (IS_UNUSED == IS_UNUSED) {
  41695. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  41696. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  41697. HashTable *ht = Z_ARRVAL_P(object_ptr);
  41698. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  41699. GC_ADDREF(ht);
  41700. }
  41701. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  41702. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  41703. zend_array_destroy(ht);
  41704. goto assign_dim_error;
  41705. }
  41706. }
  41707. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  41708. ZVAL_DEREF(value);
  41709. }
  41710. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  41711. if (UNEXPECTED(value == NULL)) {
  41712. zend_cannot_add_element();
  41713. goto assign_dim_error;
  41714. } else if (IS_CONST == IS_CV) {
  41715. if (Z_REFCOUNTED_P(value)) {
  41716. Z_ADDREF_P(value);
  41717. }
  41718. } else if (IS_CONST == IS_VAR) {
  41719. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  41720. if (Z_ISREF_P(free_op_data)) {
  41721. if (Z_REFCOUNTED_P(value)) {
  41722. Z_ADDREF_P(value);
  41723. }
  41724. zval_ptr_dtor_nogc(free_op_data);
  41725. }
  41726. } else if (IS_CONST == IS_CONST) {
  41727. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  41728. Z_ADDREF_P(value);
  41729. }
  41730. }
  41731. } else {
  41732. dim = NULL;
  41733. if (IS_UNUSED == IS_CONST) {
  41734. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  41735. } else {
  41736. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  41737. }
  41738. if (UNEXPECTED(variable_ptr == NULL)) {
  41739. goto assign_dim_error;
  41740. }
  41741. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  41742. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  41743. }
  41744. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  41745. ZVAL_COPY(EX_VAR(opline->result.var), value);
  41746. }
  41747. } else {
  41748. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  41749. object_ptr = Z_REFVAL_P(object_ptr);
  41750. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  41751. goto try_assign_dim_array;
  41752. }
  41753. }
  41754. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  41755. zend_object *obj = Z_OBJ_P(object_ptr);
  41756. GC_ADDREF(obj);
  41757. dim = NULL;
  41758. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  41759. dim = ZVAL_UNDEFINED_OP2();
  41760. } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  41761. dim++;
  41762. }
  41763. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  41764. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  41765. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  41766. } else if (IS_CONST & (IS_CV|IS_VAR)) {
  41767. ZVAL_DEREF(value);
  41768. }
  41769. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  41770. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  41771. zend_objects_store_del(obj);
  41772. }
  41773. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  41774. if (IS_UNUSED == IS_UNUSED) {
  41775. zend_use_new_element_for_string();
  41776. UNDEF_RESULT();
  41777. } else {
  41778. dim = NULL;
  41779. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  41780. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  41781. }
  41782. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  41783. if (Z_ISREF_P(orig_object_ptr)
  41784. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  41785. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  41786. dim = NULL;
  41787. UNDEF_RESULT();
  41788. } else {
  41789. HashTable *ht = zend_new_array(8);
  41790. zend_uchar old_type = Z_TYPE_P(object_ptr);
  41791. ZVAL_ARR(object_ptr, ht);
  41792. if (UNEXPECTED(old_type == IS_FALSE)) {
  41793. GC_ADDREF(ht);
  41794. zend_false_to_array_deprecated();
  41795. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  41796. zend_array_destroy(ht);
  41797. goto assign_dim_error;
  41798. }
  41799. }
  41800. goto try_assign_dim_array;
  41801. }
  41802. } else {
  41803. zend_use_scalar_as_array();
  41804. dim = NULL;
  41805. assign_dim_error:
  41806. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  41807. ZVAL_NULL(EX_VAR(opline->result.var));
  41808. }
  41809. }
  41810. }
  41811. if (IS_UNUSED != IS_UNUSED) {
  41812. }
  41813. /* assign_dim has two opcodes! */
  41814. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  41815. }
  41816. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41817. {
  41818. USE_OPLINE
  41819. zval *object_ptr, *orig_object_ptr;
  41820. zval *value;
  41821. zval *variable_ptr;
  41822. zval *dim;
  41823. SAVE_OPLINE();
  41824. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  41825. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  41826. try_assign_dim_array:
  41827. SEPARATE_ARRAY(object_ptr);
  41828. if (IS_UNUSED == IS_UNUSED) {
  41829. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  41830. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  41831. HashTable *ht = Z_ARRVAL_P(object_ptr);
  41832. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  41833. GC_ADDREF(ht);
  41834. }
  41835. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  41836. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  41837. zend_array_destroy(ht);
  41838. goto assign_dim_error;
  41839. }
  41840. }
  41841. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  41842. ZVAL_DEREF(value);
  41843. }
  41844. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  41845. if (UNEXPECTED(value == NULL)) {
  41846. zend_cannot_add_element();
  41847. goto assign_dim_error;
  41848. } else if (IS_TMP_VAR == IS_CV) {
  41849. if (Z_REFCOUNTED_P(value)) {
  41850. Z_ADDREF_P(value);
  41851. }
  41852. } else if (IS_TMP_VAR == IS_VAR) {
  41853. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  41854. if (Z_ISREF_P(free_op_data)) {
  41855. if (Z_REFCOUNTED_P(value)) {
  41856. Z_ADDREF_P(value);
  41857. }
  41858. zval_ptr_dtor_nogc(free_op_data);
  41859. }
  41860. } else if (IS_TMP_VAR == IS_CONST) {
  41861. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  41862. Z_ADDREF_P(value);
  41863. }
  41864. }
  41865. } else {
  41866. dim = NULL;
  41867. if (IS_UNUSED == IS_CONST) {
  41868. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  41869. } else {
  41870. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  41871. }
  41872. if (UNEXPECTED(variable_ptr == NULL)) {
  41873. goto assign_dim_error;
  41874. }
  41875. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  41876. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  41877. }
  41878. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  41879. ZVAL_COPY(EX_VAR(opline->result.var), value);
  41880. }
  41881. } else {
  41882. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  41883. object_ptr = Z_REFVAL_P(object_ptr);
  41884. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  41885. goto try_assign_dim_array;
  41886. }
  41887. }
  41888. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  41889. zend_object *obj = Z_OBJ_P(object_ptr);
  41890. GC_ADDREF(obj);
  41891. dim = NULL;
  41892. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  41893. dim = ZVAL_UNDEFINED_OP2();
  41894. } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  41895. dim++;
  41896. }
  41897. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  41898. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  41899. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  41900. } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
  41901. ZVAL_DEREF(value);
  41902. }
  41903. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  41904. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  41905. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  41906. zend_objects_store_del(obj);
  41907. }
  41908. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  41909. if (IS_UNUSED == IS_UNUSED) {
  41910. zend_use_new_element_for_string();
  41911. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  41912. UNDEF_RESULT();
  41913. } else {
  41914. dim = NULL;
  41915. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  41916. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  41917. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  41918. }
  41919. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  41920. if (Z_ISREF_P(orig_object_ptr)
  41921. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  41922. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  41923. dim = NULL;
  41924. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  41925. UNDEF_RESULT();
  41926. } else {
  41927. HashTable *ht = zend_new_array(8);
  41928. zend_uchar old_type = Z_TYPE_P(object_ptr);
  41929. ZVAL_ARR(object_ptr, ht);
  41930. if (UNEXPECTED(old_type == IS_FALSE)) {
  41931. GC_ADDREF(ht);
  41932. zend_false_to_array_deprecated();
  41933. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  41934. zend_array_destroy(ht);
  41935. goto assign_dim_error;
  41936. }
  41937. }
  41938. goto try_assign_dim_array;
  41939. }
  41940. } else {
  41941. zend_use_scalar_as_array();
  41942. dim = NULL;
  41943. assign_dim_error:
  41944. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  41945. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  41946. ZVAL_NULL(EX_VAR(opline->result.var));
  41947. }
  41948. }
  41949. }
  41950. if (IS_UNUSED != IS_UNUSED) {
  41951. }
  41952. /* assign_dim has two opcodes! */
  41953. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  41954. }
  41955. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41956. {
  41957. USE_OPLINE
  41958. zval *object_ptr, *orig_object_ptr;
  41959. zval *value;
  41960. zval *variable_ptr;
  41961. zval *dim;
  41962. SAVE_OPLINE();
  41963. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  41964. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  41965. try_assign_dim_array:
  41966. SEPARATE_ARRAY(object_ptr);
  41967. if (IS_UNUSED == IS_UNUSED) {
  41968. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  41969. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  41970. HashTable *ht = Z_ARRVAL_P(object_ptr);
  41971. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  41972. GC_ADDREF(ht);
  41973. }
  41974. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  41975. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  41976. zend_array_destroy(ht);
  41977. goto assign_dim_error;
  41978. }
  41979. }
  41980. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  41981. ZVAL_DEREF(value);
  41982. }
  41983. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  41984. if (UNEXPECTED(value == NULL)) {
  41985. zend_cannot_add_element();
  41986. goto assign_dim_error;
  41987. } else if (IS_VAR == IS_CV) {
  41988. if (Z_REFCOUNTED_P(value)) {
  41989. Z_ADDREF_P(value);
  41990. }
  41991. } else if (IS_VAR == IS_VAR) {
  41992. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  41993. if (Z_ISREF_P(free_op_data)) {
  41994. if (Z_REFCOUNTED_P(value)) {
  41995. Z_ADDREF_P(value);
  41996. }
  41997. zval_ptr_dtor_nogc(free_op_data);
  41998. }
  41999. } else if (IS_VAR == IS_CONST) {
  42000. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  42001. Z_ADDREF_P(value);
  42002. }
  42003. }
  42004. } else {
  42005. dim = NULL;
  42006. if (IS_UNUSED == IS_CONST) {
  42007. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  42008. } else {
  42009. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  42010. }
  42011. if (UNEXPECTED(variable_ptr == NULL)) {
  42012. goto assign_dim_error;
  42013. }
  42014. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  42015. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  42016. }
  42017. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42018. ZVAL_COPY(EX_VAR(opline->result.var), value);
  42019. }
  42020. } else {
  42021. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  42022. object_ptr = Z_REFVAL_P(object_ptr);
  42023. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  42024. goto try_assign_dim_array;
  42025. }
  42026. }
  42027. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  42028. zend_object *obj = Z_OBJ_P(object_ptr);
  42029. GC_ADDREF(obj);
  42030. dim = NULL;
  42031. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  42032. dim = ZVAL_UNDEFINED_OP2();
  42033. } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  42034. dim++;
  42035. }
  42036. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  42037. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  42038. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  42039. } else if (IS_VAR & (IS_CV|IS_VAR)) {
  42040. ZVAL_DEREF(value);
  42041. }
  42042. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  42043. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  42044. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  42045. zend_objects_store_del(obj);
  42046. }
  42047. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  42048. if (IS_UNUSED == IS_UNUSED) {
  42049. zend_use_new_element_for_string();
  42050. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  42051. UNDEF_RESULT();
  42052. } else {
  42053. dim = NULL;
  42054. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  42055. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  42056. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  42057. }
  42058. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  42059. if (Z_ISREF_P(orig_object_ptr)
  42060. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  42061. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  42062. dim = NULL;
  42063. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  42064. UNDEF_RESULT();
  42065. } else {
  42066. HashTable *ht = zend_new_array(8);
  42067. zend_uchar old_type = Z_TYPE_P(object_ptr);
  42068. ZVAL_ARR(object_ptr, ht);
  42069. if (UNEXPECTED(old_type == IS_FALSE)) {
  42070. GC_ADDREF(ht);
  42071. zend_false_to_array_deprecated();
  42072. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  42073. zend_array_destroy(ht);
  42074. goto assign_dim_error;
  42075. }
  42076. }
  42077. goto try_assign_dim_array;
  42078. }
  42079. } else {
  42080. zend_use_scalar_as_array();
  42081. dim = NULL;
  42082. assign_dim_error:
  42083. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  42084. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42085. ZVAL_NULL(EX_VAR(opline->result.var));
  42086. }
  42087. }
  42088. }
  42089. if (IS_UNUSED != IS_UNUSED) {
  42090. }
  42091. /* assign_dim has two opcodes! */
  42092. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  42093. }
  42094. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42095. {
  42096. USE_OPLINE
  42097. zval *object_ptr, *orig_object_ptr;
  42098. zval *value;
  42099. zval *variable_ptr;
  42100. zval *dim;
  42101. SAVE_OPLINE();
  42102. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  42103. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  42104. try_assign_dim_array:
  42105. SEPARATE_ARRAY(object_ptr);
  42106. if (IS_UNUSED == IS_UNUSED) {
  42107. value = EX_VAR((opline+1)->op1.var);
  42108. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  42109. HashTable *ht = Z_ARRVAL_P(object_ptr);
  42110. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  42111. GC_ADDREF(ht);
  42112. }
  42113. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  42114. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  42115. zend_array_destroy(ht);
  42116. goto assign_dim_error;
  42117. }
  42118. }
  42119. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  42120. ZVAL_DEREF(value);
  42121. }
  42122. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  42123. if (UNEXPECTED(value == NULL)) {
  42124. zend_cannot_add_element();
  42125. goto assign_dim_error;
  42126. } else if (IS_CV == IS_CV) {
  42127. if (Z_REFCOUNTED_P(value)) {
  42128. Z_ADDREF_P(value);
  42129. }
  42130. } else if (IS_CV == IS_VAR) {
  42131. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  42132. if (Z_ISREF_P(free_op_data)) {
  42133. if (Z_REFCOUNTED_P(value)) {
  42134. Z_ADDREF_P(value);
  42135. }
  42136. zval_ptr_dtor_nogc(free_op_data);
  42137. }
  42138. } else if (IS_CV == IS_CONST) {
  42139. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  42140. Z_ADDREF_P(value);
  42141. }
  42142. }
  42143. } else {
  42144. dim = NULL;
  42145. if (IS_UNUSED == IS_CONST) {
  42146. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  42147. } else {
  42148. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  42149. }
  42150. if (UNEXPECTED(variable_ptr == NULL)) {
  42151. goto assign_dim_error;
  42152. }
  42153. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  42154. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  42155. }
  42156. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42157. ZVAL_COPY(EX_VAR(opline->result.var), value);
  42158. }
  42159. } else {
  42160. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  42161. object_ptr = Z_REFVAL_P(object_ptr);
  42162. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  42163. goto try_assign_dim_array;
  42164. }
  42165. }
  42166. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  42167. zend_object *obj = Z_OBJ_P(object_ptr);
  42168. GC_ADDREF(obj);
  42169. dim = NULL;
  42170. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  42171. dim = ZVAL_UNDEFINED_OP2();
  42172. } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  42173. dim++;
  42174. }
  42175. value = EX_VAR((opline+1)->op1.var);
  42176. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  42177. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  42178. } else if (IS_CV & (IS_CV|IS_VAR)) {
  42179. ZVAL_DEREF(value);
  42180. }
  42181. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  42182. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  42183. zend_objects_store_del(obj);
  42184. }
  42185. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  42186. if (IS_UNUSED == IS_UNUSED) {
  42187. zend_use_new_element_for_string();
  42188. UNDEF_RESULT();
  42189. } else {
  42190. dim = NULL;
  42191. value = EX_VAR((opline+1)->op1.var);
  42192. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  42193. }
  42194. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  42195. if (Z_ISREF_P(orig_object_ptr)
  42196. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  42197. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  42198. dim = NULL;
  42199. UNDEF_RESULT();
  42200. } else {
  42201. HashTable *ht = zend_new_array(8);
  42202. zend_uchar old_type = Z_TYPE_P(object_ptr);
  42203. ZVAL_ARR(object_ptr, ht);
  42204. if (UNEXPECTED(old_type == IS_FALSE)) {
  42205. GC_ADDREF(ht);
  42206. zend_false_to_array_deprecated();
  42207. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  42208. zend_array_destroy(ht);
  42209. goto assign_dim_error;
  42210. }
  42211. }
  42212. goto try_assign_dim_array;
  42213. }
  42214. } else {
  42215. zend_use_scalar_as_array();
  42216. dim = NULL;
  42217. assign_dim_error:
  42218. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42219. ZVAL_NULL(EX_VAR(opline->result.var));
  42220. }
  42221. }
  42222. }
  42223. if (IS_UNUSED != IS_UNUSED) {
  42224. }
  42225. /* assign_dim has two opcodes! */
  42226. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  42227. }
  42228. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42229. {
  42230. if (IS_CV == IS_UNUSED) {
  42231. SAVE_OPLINE();
  42232. zend_verify_missing_return_type(EX(func));
  42233. HANDLE_EXCEPTION();
  42234. } else {
  42235. /* prevents "undefined variable opline" errors */
  42236. #if 0 || (IS_CV != IS_UNUSED)
  42237. USE_OPLINE
  42238. zval *retval_ref, *retval_ptr;
  42239. zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
  42240. retval_ref = retval_ptr = EX_VAR(opline->op1.var);
  42241. if (IS_CV == IS_CONST) {
  42242. ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
  42243. retval_ref = retval_ptr = EX_VAR(opline->result.var);
  42244. } else if (IS_CV == IS_VAR) {
  42245. if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
  42246. retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
  42247. }
  42248. ZVAL_DEREF(retval_ptr);
  42249. } else if (IS_CV == IS_CV) {
  42250. ZVAL_DEREF(retval_ptr);
  42251. }
  42252. if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
  42253. ZEND_VM_NEXT_OPCODE();
  42254. }
  42255. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
  42256. SAVE_OPLINE();
  42257. retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
  42258. if (UNEXPECTED(EG(exception))) {
  42259. HANDLE_EXCEPTION();
  42260. }
  42261. if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
  42262. ZEND_VM_NEXT_OPCODE();
  42263. }
  42264. }
  42265. zend_reference *ref = NULL;
  42266. void *cache_slot = CACHE_ADDR(opline->op2.num);
  42267. if (UNEXPECTED(retval_ref != retval_ptr)) {
  42268. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  42269. ref = Z_REF_P(retval_ref);
  42270. } else {
  42271. /* A cast might happen - unwrap the reference if this is a by-value return */
  42272. if (Z_REFCOUNT_P(retval_ref) == 1) {
  42273. ZVAL_UNREF(retval_ref);
  42274. } else {
  42275. Z_DELREF_P(retval_ref);
  42276. ZVAL_COPY(retval_ref, retval_ptr);
  42277. }
  42278. retval_ptr = retval_ref;
  42279. }
  42280. }
  42281. SAVE_OPLINE();
  42282. if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
  42283. zend_verify_return_error(EX(func), retval_ptr);
  42284. HANDLE_EXCEPTION();
  42285. }
  42286. ZEND_VM_NEXT_OPCODE();
  42287. #endif
  42288. }
  42289. }
  42290. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42291. {
  42292. USE_OPLINE
  42293. zval *varptr, *arg;
  42294. if (IS_UNUSED == IS_CONST) {
  42295. SAVE_OPLINE();
  42296. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  42297. uint32_t arg_num;
  42298. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  42299. if (UNEXPECTED(!arg)) {
  42300. HANDLE_EXCEPTION();
  42301. }
  42302. } else {
  42303. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  42304. }
  42305. varptr = EX_VAR(opline->op1.var);
  42306. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  42307. SAVE_OPLINE();
  42308. ZVAL_UNDEFINED_OP1();
  42309. ZVAL_NULL(arg);
  42310. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42311. }
  42312. if (IS_CV == IS_CV) {
  42313. ZVAL_COPY_DEREF(arg, varptr);
  42314. } else /* if (IS_CV == IS_VAR) */ {
  42315. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  42316. zend_refcounted *ref = Z_COUNTED_P(varptr);
  42317. varptr = Z_REFVAL_P(varptr);
  42318. ZVAL_COPY_VALUE(arg, varptr);
  42319. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  42320. efree_size(ref, sizeof(zend_reference));
  42321. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  42322. Z_ADDREF_P(arg);
  42323. }
  42324. } else {
  42325. ZVAL_COPY_VALUE(arg, varptr);
  42326. }
  42327. }
  42328. ZEND_VM_NEXT_OPCODE();
  42329. }
  42330. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42331. {
  42332. USE_OPLINE
  42333. zval *varptr, *arg;
  42334. SAVE_OPLINE();
  42335. if (IS_UNUSED == IS_CONST) {
  42336. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  42337. uint32_t arg_num;
  42338. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  42339. if (UNEXPECTED(!arg)) {
  42340. HANDLE_EXCEPTION();
  42341. }
  42342. } else {
  42343. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  42344. }
  42345. varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  42346. if (Z_ISREF_P(varptr)) {
  42347. Z_ADDREF_P(varptr);
  42348. } else {
  42349. ZVAL_MAKE_REF_EX(varptr, 2);
  42350. }
  42351. ZVAL_REF(arg, Z_REF_P(varptr));
  42352. ZEND_VM_NEXT_OPCODE();
  42353. }
  42354. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42355. {
  42356. USE_OPLINE
  42357. zval *varptr, *arg;
  42358. uint32_t arg_num;
  42359. if (IS_UNUSED == IS_CONST) {
  42360. SAVE_OPLINE();
  42361. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  42362. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  42363. if (UNEXPECTED(!arg)) {
  42364. HANDLE_EXCEPTION();
  42365. }
  42366. } else {
  42367. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  42368. arg_num = opline->op2.num;
  42369. }
  42370. if (EXPECTED(0)) {
  42371. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  42372. goto send_var_by_ref;
  42373. }
  42374. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  42375. send_var_by_ref:
  42376. varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  42377. if (Z_ISREF_P(varptr)) {
  42378. Z_ADDREF_P(varptr);
  42379. } else {
  42380. ZVAL_MAKE_REF_EX(varptr, 2);
  42381. }
  42382. ZVAL_REF(arg, Z_REF_P(varptr));
  42383. ZEND_VM_NEXT_OPCODE();
  42384. }
  42385. varptr = EX_VAR(opline->op1.var);
  42386. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  42387. SAVE_OPLINE();
  42388. ZVAL_UNDEFINED_OP1();
  42389. ZVAL_NULL(arg);
  42390. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42391. }
  42392. if (IS_CV == IS_CV) {
  42393. ZVAL_COPY_DEREF(arg, varptr);
  42394. } else /* if (IS_CV == IS_VAR) */ {
  42395. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  42396. zend_refcounted *ref = Z_COUNTED_P(varptr);
  42397. varptr = Z_REFVAL_P(varptr);
  42398. ZVAL_COPY_VALUE(arg, varptr);
  42399. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  42400. efree_size(ref, sizeof(zend_reference));
  42401. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  42402. Z_ADDREF_P(arg);
  42403. }
  42404. } else {
  42405. ZVAL_COPY_VALUE(arg, varptr);
  42406. }
  42407. }
  42408. ZEND_VM_NEXT_OPCODE();
  42409. }
  42410. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42411. {
  42412. USE_OPLINE
  42413. zval *varptr, *arg;
  42414. uint32_t arg_num;
  42415. if (IS_UNUSED == IS_CONST) {
  42416. SAVE_OPLINE();
  42417. zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
  42418. arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
  42419. if (UNEXPECTED(!arg)) {
  42420. HANDLE_EXCEPTION();
  42421. }
  42422. } else {
  42423. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  42424. arg_num = opline->op2.num;
  42425. }
  42426. if (EXPECTED(1)) {
  42427. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  42428. goto send_var_by_ref;
  42429. }
  42430. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  42431. send_var_by_ref:
  42432. varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  42433. if (Z_ISREF_P(varptr)) {
  42434. Z_ADDREF_P(varptr);
  42435. } else {
  42436. ZVAL_MAKE_REF_EX(varptr, 2);
  42437. }
  42438. ZVAL_REF(arg, Z_REF_P(varptr));
  42439. ZEND_VM_NEXT_OPCODE();
  42440. }
  42441. varptr = EX_VAR(opline->op1.var);
  42442. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  42443. SAVE_OPLINE();
  42444. ZVAL_UNDEFINED_OP1();
  42445. ZVAL_NULL(arg);
  42446. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42447. }
  42448. if (IS_CV == IS_CV) {
  42449. ZVAL_COPY_DEREF(arg, varptr);
  42450. } else /* if (IS_CV == IS_VAR) */ {
  42451. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  42452. zend_refcounted *ref = Z_COUNTED_P(varptr);
  42453. varptr = Z_REFVAL_P(varptr);
  42454. ZVAL_COPY_VALUE(arg, varptr);
  42455. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  42456. efree_size(ref, sizeof(zend_reference));
  42457. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  42458. Z_ADDREF_P(arg);
  42459. }
  42460. } else {
  42461. ZVAL_COPY_VALUE(arg, varptr);
  42462. }
  42463. }
  42464. ZEND_VM_NEXT_OPCODE();
  42465. }
  42466. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42467. {
  42468. USE_OPLINE
  42469. zval *expr_ptr, new_expr;
  42470. SAVE_OPLINE();
  42471. if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
  42472. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  42473. expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  42474. if (Z_ISREF_P(expr_ptr)) {
  42475. Z_ADDREF_P(expr_ptr);
  42476. } else {
  42477. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  42478. }
  42479. } else {
  42480. expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  42481. if (IS_CV == IS_TMP_VAR) {
  42482. /* pass */
  42483. } else if (IS_CV == IS_CONST) {
  42484. Z_TRY_ADDREF_P(expr_ptr);
  42485. } else if (IS_CV == IS_CV) {
  42486. ZVAL_DEREF(expr_ptr);
  42487. Z_TRY_ADDREF_P(expr_ptr);
  42488. } else /* if (IS_CV == IS_VAR) */ {
  42489. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  42490. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  42491. expr_ptr = Z_REFVAL_P(expr_ptr);
  42492. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  42493. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  42494. expr_ptr = &new_expr;
  42495. efree_size(ref, sizeof(zend_reference));
  42496. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  42497. Z_ADDREF_P(expr_ptr);
  42498. }
  42499. }
  42500. }
  42501. }
  42502. if (IS_UNUSED != IS_UNUSED) {
  42503. zval *offset = NULL;
  42504. zend_string *str;
  42505. zend_ulong hval;
  42506. add_again:
  42507. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  42508. str = Z_STR_P(offset);
  42509. if (IS_UNUSED != IS_CONST) {
  42510. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  42511. goto num_index;
  42512. }
  42513. }
  42514. str_index:
  42515. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  42516. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  42517. hval = Z_LVAL_P(offset);
  42518. num_index:
  42519. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  42520. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  42521. offset = Z_REFVAL_P(offset);
  42522. goto add_again;
  42523. } else if (Z_TYPE_P(offset) == IS_NULL) {
  42524. str = ZSTR_EMPTY_ALLOC();
  42525. goto str_index;
  42526. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  42527. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  42528. goto num_index;
  42529. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  42530. hval = 0;
  42531. goto num_index;
  42532. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  42533. hval = 1;
  42534. goto num_index;
  42535. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  42536. zend_use_resource_as_offset(offset);
  42537. hval = Z_RES_HANDLE_P(offset);
  42538. goto num_index;
  42539. } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  42540. ZVAL_UNDEFINED_OP2();
  42541. str = ZSTR_EMPTY_ALLOC();
  42542. goto str_index;
  42543. } else {
  42544. zend_illegal_offset();
  42545. zval_ptr_dtor_nogc(expr_ptr);
  42546. }
  42547. } else {
  42548. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  42549. zend_cannot_add_element();
  42550. zval_ptr_dtor_nogc(expr_ptr);
  42551. }
  42552. }
  42553. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42554. }
  42555. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42556. {
  42557. zval *array;
  42558. uint32_t size;
  42559. USE_OPLINE
  42560. array = EX_VAR(opline->result.var);
  42561. if (IS_CV != IS_UNUSED) {
  42562. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  42563. ZVAL_ARR(array, zend_new_array(size));
  42564. /* Explicitly initialize array as not-packed if flag is set */
  42565. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  42566. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  42567. }
  42568. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42569. } else {
  42570. ZVAL_ARR(array, zend_new_array(0));
  42571. ZEND_VM_NEXT_OPCODE();
  42572. }
  42573. }
  42574. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42575. {
  42576. USE_OPLINE
  42577. zval *var = EX_VAR(opline->op1.var);
  42578. if (Z_REFCOUNTED_P(var)) {
  42579. zend_refcounted *garbage = Z_COUNTED_P(var);
  42580. ZVAL_UNDEF(var);
  42581. SAVE_OPLINE();
  42582. if (!GC_DELREF(garbage)) {
  42583. rc_dtor_func(garbage);
  42584. } else {
  42585. gc_check_possible_root(garbage);
  42586. }
  42587. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42588. } else {
  42589. ZVAL_UNDEF(var);
  42590. }
  42591. ZEND_VM_NEXT_OPCODE();
  42592. }
  42593. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42594. {
  42595. USE_OPLINE
  42596. zval *varname;
  42597. zend_string *name, *tmp_name;
  42598. HashTable *target_symbol_table;
  42599. SAVE_OPLINE();
  42600. varname = EX_VAR(opline->op1.var);
  42601. if (IS_CV == IS_CONST) {
  42602. name = Z_STR_P(varname);
  42603. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  42604. name = Z_STR_P(varname);
  42605. tmp_name = NULL;
  42606. } else {
  42607. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  42608. varname = ZVAL_UNDEFINED_OP1();
  42609. }
  42610. name = zval_try_get_tmp_string(varname, &tmp_name);
  42611. if (UNEXPECTED(!name)) {
  42612. HANDLE_EXCEPTION();
  42613. }
  42614. }
  42615. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  42616. zend_hash_del_ind(target_symbol_table, name);
  42617. if (IS_CV != IS_CONST) {
  42618. zend_tmp_string_release(tmp_name);
  42619. }
  42620. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42621. }
  42622. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  42623. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42624. {
  42625. USE_OPLINE
  42626. zval *value;
  42627. value = EX_VAR(opline->op1.var);
  42628. if (!(0)) {
  42629. if (Z_TYPE_P(value) > IS_NULL &&
  42630. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
  42631. ZEND_VM_SMART_BRANCH_TRUE();
  42632. } else {
  42633. ZEND_VM_SMART_BRANCH_FALSE();
  42634. }
  42635. } else {
  42636. bool result;
  42637. SAVE_OPLINE();
  42638. result = !i_zend_is_true(value);
  42639. ZEND_VM_SMART_BRANCH(result, 1);
  42640. }
  42641. }
  42642. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42643. {
  42644. USE_OPLINE
  42645. zval *value;
  42646. value = EX_VAR(opline->op1.var);
  42647. if (!(1)) {
  42648. if (Z_TYPE_P(value) > IS_NULL &&
  42649. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
  42650. ZEND_VM_SMART_BRANCH_TRUE();
  42651. } else {
  42652. ZEND_VM_SMART_BRANCH_FALSE();
  42653. }
  42654. } else {
  42655. bool result;
  42656. SAVE_OPLINE();
  42657. result = !i_zend_is_true(value);
  42658. ZEND_VM_SMART_BRANCH(result, 1);
  42659. }
  42660. }
  42661. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42662. {
  42663. USE_OPLINE
  42664. zval *value;
  42665. /* Should be bool result? as below got: result = (opline->extended_value & ZEND_ISEMPTY) */
  42666. int result;
  42667. zval *varname;
  42668. zend_string *name, *tmp_name;
  42669. HashTable *target_symbol_table;
  42670. SAVE_OPLINE();
  42671. varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  42672. if (IS_CV == IS_CONST) {
  42673. name = Z_STR_P(varname);
  42674. } else {
  42675. name = zval_get_tmp_string(varname, &tmp_name);
  42676. }
  42677. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  42678. value = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
  42679. if (IS_CV != IS_CONST) {
  42680. zend_tmp_string_release(tmp_name);
  42681. }
  42682. if (!value) {
  42683. result = (opline->extended_value & ZEND_ISEMPTY);
  42684. } else {
  42685. if (Z_TYPE_P(value) == IS_INDIRECT) {
  42686. value = Z_INDIRECT_P(value);
  42687. }
  42688. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  42689. if (Z_ISREF_P(value)) {
  42690. value = Z_REFVAL_P(value);
  42691. }
  42692. result = Z_TYPE_P(value) > IS_NULL;
  42693. } else {
  42694. result = !i_zend_is_true(value);
  42695. }
  42696. }
  42697. ZEND_VM_SMART_BRANCH(result, 1);
  42698. }
  42699. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
  42700. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42701. {
  42702. USE_OPLINE
  42703. zval *expr;
  42704. bool result;
  42705. SAVE_OPLINE();
  42706. expr = EX_VAR(opline->op1.var);
  42707. try_instanceof:
  42708. if (Z_TYPE_P(expr) == IS_OBJECT) {
  42709. zend_class_entry *ce;
  42710. if (IS_UNUSED == IS_CONST) {
  42711. ce = CACHED_PTR(opline->extended_value);
  42712. if (UNEXPECTED(ce == NULL)) {
  42713. 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);
  42714. if (EXPECTED(ce)) {
  42715. CACHE_PTR(opline->extended_value, ce);
  42716. }
  42717. }
  42718. } else if (IS_UNUSED == IS_UNUSED) {
  42719. ce = zend_fetch_class(NULL, opline->op2.num);
  42720. if (UNEXPECTED(ce == NULL)) {
  42721. ZVAL_UNDEF(EX_VAR(opline->result.var));
  42722. HANDLE_EXCEPTION();
  42723. }
  42724. } else {
  42725. ce = Z_CE_P(EX_VAR(opline->op2.var));
  42726. }
  42727. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  42728. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  42729. expr = Z_REFVAL_P(expr);
  42730. goto try_instanceof;
  42731. } else {
  42732. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  42733. ZVAL_UNDEFINED_OP1();
  42734. }
  42735. result = 0;
  42736. }
  42737. ZEND_VM_SMART_BRANCH(result, 1);
  42738. }
  42739. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42740. {
  42741. USE_OPLINE
  42742. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  42743. SAVE_OPLINE();
  42744. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  42745. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42746. }
  42747. /* Destroy the previously yielded value */
  42748. zval_ptr_dtor(&generator->value);
  42749. /* Destroy the previously yielded key */
  42750. zval_ptr_dtor(&generator->key);
  42751. /* Set the new yielded value */
  42752. if (IS_CV != IS_UNUSED) {
  42753. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  42754. /* Constants and temporary variables aren't yieldable by reference,
  42755. * but we still allow them with a notice. */
  42756. if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
  42757. zval *value;
  42758. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  42759. value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  42760. ZVAL_COPY_VALUE(&generator->value, value);
  42761. if (IS_CV == IS_CONST) {
  42762. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  42763. Z_ADDREF(generator->value);
  42764. }
  42765. }
  42766. } else {
  42767. zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  42768. /* If a function call result is yielded and the function did
  42769. * not return by reference we throw a notice. */
  42770. do {
  42771. if (IS_CV == IS_VAR) {
  42772. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  42773. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  42774. && !Z_ISREF_P(value_ptr)) {
  42775. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  42776. ZVAL_COPY(&generator->value, value_ptr);
  42777. break;
  42778. }
  42779. }
  42780. if (Z_ISREF_P(value_ptr)) {
  42781. Z_ADDREF_P(value_ptr);
  42782. } else {
  42783. ZVAL_MAKE_REF_EX(value_ptr, 2);
  42784. }
  42785. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  42786. } while (0);
  42787. }
  42788. } else {
  42789. zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  42790. /* Consts, temporary variables and references need copying */
  42791. if (IS_CV == IS_CONST) {
  42792. ZVAL_COPY_VALUE(&generator->value, value);
  42793. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  42794. Z_ADDREF(generator->value);
  42795. }
  42796. } else if (IS_CV == IS_TMP_VAR) {
  42797. ZVAL_COPY_VALUE(&generator->value, value);
  42798. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  42799. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  42800. } else {
  42801. ZVAL_COPY_VALUE(&generator->value, value);
  42802. if (IS_CV == IS_CV) {
  42803. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  42804. }
  42805. }
  42806. }
  42807. } else {
  42808. /* If no value was specified yield null */
  42809. ZVAL_NULL(&generator->value);
  42810. }
  42811. /* Set the new yielded key */
  42812. if (IS_UNUSED != IS_UNUSED) {
  42813. zval *key = NULL;
  42814. if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  42815. key = Z_REFVAL_P(key);
  42816. }
  42817. ZVAL_COPY(&generator->key, key);
  42818. if (Z_TYPE(generator->key) == IS_LONG
  42819. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  42820. ) {
  42821. generator->largest_used_integer_key = Z_LVAL(generator->key);
  42822. }
  42823. } else {
  42824. /* If no key was specified we use auto-increment keys */
  42825. generator->largest_used_integer_key++;
  42826. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  42827. }
  42828. if (RETURN_VALUE_USED(opline)) {
  42829. /* If the return value of yield is used set the send
  42830. * target and initialize it to NULL */
  42831. generator->send_target = EX_VAR(opline->result.var);
  42832. ZVAL_NULL(generator->send_target);
  42833. } else {
  42834. generator->send_target = NULL;
  42835. }
  42836. /* We increment to the next op, so we are at the correct position when the
  42837. * generator is resumed. */
  42838. ZEND_VM_INC_OPCODE();
  42839. /* The GOTO VM uses a local opline variable. We need to set the opline
  42840. * variable in execute_data so we don't resume at an old position. */
  42841. SAVE_OPLINE();
  42842. ZEND_VM_RETURN();
  42843. }
  42844. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42845. {
  42846. USE_OPLINE
  42847. HashTable *ht;
  42848. zval *value;
  42849. zval *variable_ptr;
  42850. variable_ptr = EX_VAR(opline->op1.var);
  42851. ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
  42852. if (!ht) {
  42853. ht = zend_array_dup(EX(func)->op_array.static_variables);
  42854. ZEND_MAP_PTR_SET(EX(func)->op_array.static_variables_ptr, ht);
  42855. }
  42856. ZEND_ASSERT(GC_REFCOUNT(ht) == 1);
  42857. value = (zval*)((char*)ht->arData + (opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT|ZEND_BIND_EXPLICIT)));
  42858. SAVE_OPLINE();
  42859. if (opline->extended_value & ZEND_BIND_REF) {
  42860. if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
  42861. if (UNEXPECTED(zval_update_constant_ex(value, EX(func)->op_array.scope) != SUCCESS)) {
  42862. HANDLE_EXCEPTION();
  42863. }
  42864. }
  42865. i_zval_ptr_dtor(variable_ptr);
  42866. if (UNEXPECTED(!Z_ISREF_P(value))) {
  42867. zend_reference *ref = (zend_reference*)emalloc(sizeof(zend_reference));
  42868. GC_SET_REFCOUNT(ref, 2);
  42869. GC_TYPE_INFO(ref) = GC_REFERENCE;
  42870. ZVAL_COPY_VALUE(&ref->val, value);
  42871. ref->sources.ptr = NULL;
  42872. Z_REF_P(value) = ref;
  42873. Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
  42874. ZVAL_REF(variable_ptr, ref);
  42875. } else {
  42876. Z_ADDREF_P(value);
  42877. ZVAL_REF(variable_ptr, Z_REF_P(value));
  42878. }
  42879. } else {
  42880. i_zval_ptr_dtor(variable_ptr);
  42881. ZVAL_COPY(variable_ptr, value);
  42882. }
  42883. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42884. }
  42885. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42886. {
  42887. USE_OPLINE
  42888. zval *op1 = EX_VAR(opline->op1.var);
  42889. if (UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  42890. SAVE_OPLINE();
  42891. ZVAL_UNDEFINED_OP1();
  42892. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42893. }
  42894. ZEND_VM_NEXT_OPCODE();
  42895. }
  42896. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42897. {
  42898. USE_OPLINE
  42899. zval *op1 = EX_VAR(opline->op1.var);
  42900. if (IS_CV == IS_CV) {
  42901. if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  42902. ZVAL_NEW_EMPTY_REF(op1);
  42903. Z_SET_REFCOUNT_P(op1, 2);
  42904. ZVAL_NULL(Z_REFVAL_P(op1));
  42905. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  42906. } else {
  42907. if (Z_ISREF_P(op1)) {
  42908. Z_ADDREF_P(op1);
  42909. } else {
  42910. ZVAL_MAKE_REF_EX(op1, 2);
  42911. }
  42912. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  42913. }
  42914. } else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
  42915. op1 = Z_INDIRECT_P(op1);
  42916. if (EXPECTED(!Z_ISREF_P(op1))) {
  42917. ZVAL_MAKE_REF_EX(op1, 2);
  42918. } else {
  42919. GC_ADDREF(Z_REF_P(op1));
  42920. }
  42921. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  42922. } else {
  42923. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
  42924. }
  42925. ZEND_VM_NEXT_OPCODE();
  42926. }
  42927. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42928. {
  42929. USE_OPLINE
  42930. zval *op1;
  42931. zend_long count;
  42932. SAVE_OPLINE();
  42933. op1 = EX_VAR(opline->op1.var);
  42934. while (1) {
  42935. if (Z_TYPE_P(op1) == IS_ARRAY) {
  42936. count = zend_hash_num_elements(Z_ARRVAL_P(op1));
  42937. break;
  42938. } else if (Z_TYPE_P(op1) == IS_OBJECT) {
  42939. zend_object *zobj = Z_OBJ_P(op1);
  42940. /* first, we check if the handler is defined */
  42941. if (zobj->handlers->count_elements) {
  42942. if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
  42943. break;
  42944. }
  42945. if (UNEXPECTED(EG(exception))) {
  42946. count = 0;
  42947. break;
  42948. }
  42949. }
  42950. /* if not and the object implements Countable we call its count() method */
  42951. if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
  42952. zval retval;
  42953. zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
  42954. count = zval_get_long(&retval);
  42955. zval_ptr_dtor(&retval);
  42956. break;
  42957. }
  42958. /* If There's no handler and it doesn't implement Countable then emit a TypeError */
  42959. } else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
  42960. op1 = Z_REFVAL_P(op1);
  42961. continue;
  42962. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  42963. ZVAL_UNDEFINED_OP1();
  42964. }
  42965. count = 0;
  42966. 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));
  42967. break;
  42968. }
  42969. ZVAL_LONG(EX_VAR(opline->result.var), count);
  42970. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42971. }
  42972. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42973. {
  42974. USE_OPLINE
  42975. if (IS_CV == IS_UNUSED) {
  42976. if (UNEXPECTED(!EX(func)->common.scope)) {
  42977. SAVE_OPLINE();
  42978. zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
  42979. ZVAL_UNDEF(EX_VAR(opline->result.var));
  42980. HANDLE_EXCEPTION();
  42981. } else {
  42982. ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
  42983. ZEND_VM_NEXT_OPCODE();
  42984. }
  42985. } else {
  42986. zval *op1;
  42987. SAVE_OPLINE();
  42988. op1 = EX_VAR(opline->op1.var);
  42989. while (1) {
  42990. if (Z_TYPE_P(op1) == IS_OBJECT) {
  42991. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
  42992. } else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
  42993. op1 = Z_REFVAL_P(op1);
  42994. continue;
  42995. } else {
  42996. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  42997. ZVAL_UNDEFINED_OP1();
  42998. }
  42999. zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_type_name(op1));
  43000. ZVAL_UNDEF(EX_VAR(opline->result.var));
  43001. }
  43002. break;
  43003. }
  43004. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43005. }
  43006. }
  43007. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43008. {
  43009. USE_OPLINE
  43010. zval *op1;
  43011. zend_string *type;
  43012. SAVE_OPLINE();
  43013. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  43014. type = zend_zval_get_legacy_type(op1);
  43015. if (EXPECTED(type)) {
  43016. ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
  43017. } else {
  43018. ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
  43019. }
  43020. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43021. }
  43022. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43023. {
  43024. USE_OPLINE
  43025. zval *varptr, *arg;
  43026. uint32_t arg_num = opline->op2.num;
  43027. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  43028. ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  43029. }
  43030. varptr = EX_VAR(opline->op1.var);
  43031. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  43032. if (IS_CV == IS_CV) {
  43033. ZVAL_COPY(arg, varptr);
  43034. } else /* if (IS_CV == IS_VAR) */ {
  43035. ZVAL_COPY_VALUE(arg, varptr);
  43036. }
  43037. ZEND_VM_NEXT_OPCODE();
  43038. }
  43039. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43040. {
  43041. USE_OPLINE
  43042. zval *op1, *op2;
  43043. SAVE_OPLINE();
  43044. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  43045. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43046. div_function(EX_VAR(opline->result.var), op1, op2);
  43047. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43048. }
  43049. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43050. {
  43051. USE_OPLINE
  43052. zval *op1, *op2;
  43053. SAVE_OPLINE();
  43054. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  43055. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43056. pow_function(EX_VAR(opline->result.var), op1, op2);
  43057. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43058. }
  43059. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43060. {
  43061. USE_OPLINE
  43062. zval *op1, *op2;
  43063. op1 = EX_VAR(opline->op1.var);
  43064. op2 = EX_VAR(opline->op2.var);
  43065. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  43066. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  43067. zend_string *op1_str = Z_STR_P(op1);
  43068. zend_string *op2_str = Z_STR_P(op2);
  43069. zend_string *str;
  43070. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  43071. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  43072. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  43073. } else {
  43074. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  43075. }
  43076. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43077. zend_string_release_ex(op1_str, 0);
  43078. }
  43079. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  43080. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  43081. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  43082. } else {
  43083. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  43084. }
  43085. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43086. zend_string_release_ex(op2_str, 0);
  43087. }
  43088. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  43089. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  43090. size_t len = ZSTR_LEN(op1_str);
  43091. if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
  43092. zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
  43093. }
  43094. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  43095. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  43096. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  43097. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43098. zend_string_release_ex(op2_str, 0);
  43099. }
  43100. } else {
  43101. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  43102. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  43103. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  43104. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  43105. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43106. zend_string_release_ex(op1_str, 0);
  43107. }
  43108. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43109. zend_string_release_ex(op2_str, 0);
  43110. }
  43111. }
  43112. ZEND_VM_NEXT_OPCODE();
  43113. } else {
  43114. SAVE_OPLINE();
  43115. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  43116. op1 = ZVAL_UNDEFINED_OP1();
  43117. }
  43118. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  43119. op2 = ZVAL_UNDEFINED_OP2();
  43120. }
  43121. concat_function(EX_VAR(opline->result.var), op1, op2);
  43122. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43123. }
  43124. }
  43125. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43126. {
  43127. USE_OPLINE
  43128. zval *op1, *op2;
  43129. bool result;
  43130. SAVE_OPLINE();
  43131. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  43132. op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43133. result = fast_is_identical_function(op1, op2);
  43134. ZEND_VM_SMART_BRANCH(result, 1);
  43135. }
  43136. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43137. {
  43138. USE_OPLINE
  43139. zval *op1, *op2;
  43140. bool result;
  43141. SAVE_OPLINE();
  43142. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  43143. op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43144. result = fast_is_not_identical_function(op1, op2);
  43145. ZEND_VM_SMART_BRANCH(result, 1);
  43146. }
  43147. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43148. {
  43149. USE_OPLINE
  43150. zval *op1, *op2;
  43151. double d1, d2;
  43152. op1 = EX_VAR(opline->op1.var);
  43153. op2 = EX_VAR(opline->op2.var);
  43154. if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
  43155. /* pass */
  43156. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  43157. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43158. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  43159. is_equal_true:
  43160. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  43161. } else {
  43162. is_equal_false:
  43163. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  43164. }
  43165. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43166. d1 = (double)Z_LVAL_P(op1);
  43167. d2 = Z_DVAL_P(op2);
  43168. goto is_equal_double;
  43169. }
  43170. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  43171. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43172. d1 = Z_DVAL_P(op1);
  43173. d2 = Z_DVAL_P(op2);
  43174. is_equal_double:
  43175. if (d1 == d2) {
  43176. goto is_equal_true;
  43177. } else {
  43178. goto is_equal_false;
  43179. }
  43180. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43181. d1 = Z_DVAL_P(op1);
  43182. d2 = (double)Z_LVAL_P(op2);
  43183. goto is_equal_double;
  43184. }
  43185. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  43186. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  43187. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  43188. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43189. zval_ptr_dtor_str(op1);
  43190. }
  43191. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43192. zval_ptr_dtor_str(op2);
  43193. }
  43194. if (result) {
  43195. goto is_equal_true;
  43196. } else {
  43197. goto is_equal_false;
  43198. }
  43199. }
  43200. }
  43201. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  43202. }
  43203. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43204. {
  43205. USE_OPLINE
  43206. zval *op1, *op2;
  43207. double d1, d2;
  43208. op1 = EX_VAR(opline->op1.var);
  43209. op2 = EX_VAR(opline->op2.var);
  43210. if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
  43211. /* pass */
  43212. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  43213. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43214. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  43215. is_equal_true:
  43216. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  43217. } else {
  43218. is_equal_false:
  43219. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  43220. }
  43221. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43222. d1 = (double)Z_LVAL_P(op1);
  43223. d2 = Z_DVAL_P(op2);
  43224. goto is_equal_double;
  43225. }
  43226. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  43227. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43228. d1 = Z_DVAL_P(op1);
  43229. d2 = Z_DVAL_P(op2);
  43230. is_equal_double:
  43231. if (d1 == d2) {
  43232. goto is_equal_true;
  43233. } else {
  43234. goto is_equal_false;
  43235. }
  43236. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43237. d1 = Z_DVAL_P(op1);
  43238. d2 = (double)Z_LVAL_P(op2);
  43239. goto is_equal_double;
  43240. }
  43241. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  43242. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  43243. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  43244. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43245. zval_ptr_dtor_str(op1);
  43246. }
  43247. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43248. zval_ptr_dtor_str(op2);
  43249. }
  43250. if (result) {
  43251. goto is_equal_true;
  43252. } else {
  43253. goto is_equal_false;
  43254. }
  43255. }
  43256. }
  43257. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  43258. }
  43259. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43260. {
  43261. USE_OPLINE
  43262. zval *op1, *op2;
  43263. double d1, d2;
  43264. op1 = EX_VAR(opline->op1.var);
  43265. op2 = EX_VAR(opline->op2.var);
  43266. if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
  43267. /* pass */
  43268. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  43269. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43270. if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
  43271. is_equal_true:
  43272. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  43273. } else {
  43274. is_equal_false:
  43275. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  43276. }
  43277. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43278. d1 = (double)Z_LVAL_P(op1);
  43279. d2 = Z_DVAL_P(op2);
  43280. goto is_equal_double;
  43281. }
  43282. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  43283. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43284. d1 = Z_DVAL_P(op1);
  43285. d2 = Z_DVAL_P(op2);
  43286. is_equal_double:
  43287. if (d1 == d2) {
  43288. goto is_equal_true;
  43289. } else {
  43290. goto is_equal_false;
  43291. }
  43292. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43293. d1 = Z_DVAL_P(op1);
  43294. d2 = (double)Z_LVAL_P(op2);
  43295. goto is_equal_double;
  43296. }
  43297. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  43298. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  43299. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  43300. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43301. zval_ptr_dtor_str(op1);
  43302. }
  43303. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43304. zval_ptr_dtor_str(op2);
  43305. }
  43306. if (result) {
  43307. goto is_equal_true;
  43308. } else {
  43309. goto is_equal_false;
  43310. }
  43311. }
  43312. }
  43313. ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  43314. }
  43315. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43316. {
  43317. USE_OPLINE
  43318. zval *op1, *op2;
  43319. double d1, d2;
  43320. op1 = EX_VAR(opline->op1.var);
  43321. op2 = EX_VAR(opline->op2.var);
  43322. if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
  43323. /* pass */
  43324. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  43325. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43326. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  43327. is_not_equal_true:
  43328. ZEND_VM_SMART_BRANCH_TRUE_NONE();
  43329. } else {
  43330. is_not_equal_false:
  43331. ZEND_VM_SMART_BRANCH_FALSE_NONE();
  43332. }
  43333. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43334. d1 = (double)Z_LVAL_P(op1);
  43335. d2 = Z_DVAL_P(op2);
  43336. goto is_not_equal_double;
  43337. }
  43338. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  43339. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43340. d1 = Z_DVAL_P(op1);
  43341. d2 = Z_DVAL_P(op2);
  43342. is_not_equal_double:
  43343. if (d1 != d2) {
  43344. goto is_not_equal_true;
  43345. } else {
  43346. goto is_not_equal_false;
  43347. }
  43348. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43349. d1 = Z_DVAL_P(op1);
  43350. d2 = (double)Z_LVAL_P(op2);
  43351. goto is_not_equal_double;
  43352. }
  43353. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  43354. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  43355. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  43356. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43357. zval_ptr_dtor_str(op1);
  43358. }
  43359. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43360. zval_ptr_dtor_str(op2);
  43361. }
  43362. if (!result) {
  43363. goto is_not_equal_true;
  43364. } else {
  43365. goto is_not_equal_false;
  43366. }
  43367. }
  43368. }
  43369. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  43370. }
  43371. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43372. {
  43373. USE_OPLINE
  43374. zval *op1, *op2;
  43375. double d1, d2;
  43376. op1 = EX_VAR(opline->op1.var);
  43377. op2 = EX_VAR(opline->op2.var);
  43378. if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
  43379. /* pass */
  43380. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  43381. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43382. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  43383. is_not_equal_true:
  43384. ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
  43385. } else {
  43386. is_not_equal_false:
  43387. ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
  43388. }
  43389. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43390. d1 = (double)Z_LVAL_P(op1);
  43391. d2 = Z_DVAL_P(op2);
  43392. goto is_not_equal_double;
  43393. }
  43394. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  43395. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43396. d1 = Z_DVAL_P(op1);
  43397. d2 = Z_DVAL_P(op2);
  43398. is_not_equal_double:
  43399. if (d1 != d2) {
  43400. goto is_not_equal_true;
  43401. } else {
  43402. goto is_not_equal_false;
  43403. }
  43404. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43405. d1 = Z_DVAL_P(op1);
  43406. d2 = (double)Z_LVAL_P(op2);
  43407. goto is_not_equal_double;
  43408. }
  43409. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  43410. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  43411. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  43412. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43413. zval_ptr_dtor_str(op1);
  43414. }
  43415. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43416. zval_ptr_dtor_str(op2);
  43417. }
  43418. if (!result) {
  43419. goto is_not_equal_true;
  43420. } else {
  43421. goto is_not_equal_false;
  43422. }
  43423. }
  43424. }
  43425. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  43426. }
  43427. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43428. {
  43429. USE_OPLINE
  43430. zval *op1, *op2;
  43431. double d1, d2;
  43432. op1 = EX_VAR(opline->op1.var);
  43433. op2 = EX_VAR(opline->op2.var);
  43434. if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
  43435. /* pass */
  43436. } else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  43437. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43438. if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
  43439. is_not_equal_true:
  43440. ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
  43441. } else {
  43442. is_not_equal_false:
  43443. ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
  43444. }
  43445. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43446. d1 = (double)Z_LVAL_P(op1);
  43447. d2 = Z_DVAL_P(op2);
  43448. goto is_not_equal_double;
  43449. }
  43450. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  43451. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  43452. d1 = Z_DVAL_P(op1);
  43453. d2 = Z_DVAL_P(op2);
  43454. is_not_equal_double:
  43455. if (d1 != d2) {
  43456. goto is_not_equal_true;
  43457. } else {
  43458. goto is_not_equal_false;
  43459. }
  43460. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  43461. d1 = Z_DVAL_P(op1);
  43462. d2 = (double)Z_LVAL_P(op2);
  43463. goto is_not_equal_double;
  43464. }
  43465. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  43466. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  43467. bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  43468. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43469. zval_ptr_dtor_str(op1);
  43470. }
  43471. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  43472. zval_ptr_dtor_str(op2);
  43473. }
  43474. if (!result) {
  43475. goto is_not_equal_true;
  43476. } else {
  43477. goto is_not_equal_false;
  43478. }
  43479. }
  43480. }
  43481. ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  43482. }
  43483. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43484. {
  43485. USE_OPLINE
  43486. zval *op1, *op2;
  43487. SAVE_OPLINE();
  43488. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  43489. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43490. compare_function(EX_VAR(opline->result.var), op1, op2);
  43491. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43492. }
  43493. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43494. {
  43495. USE_OPLINE
  43496. zval *op1, *op2;
  43497. SAVE_OPLINE();
  43498. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  43499. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43500. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  43501. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43502. }
  43503. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43504. {
  43505. USE_OPLINE
  43506. zval *object;
  43507. zval *property;
  43508. zval *value;
  43509. zval *zptr;
  43510. void **cache_slot;
  43511. zend_property_info *prop_info;
  43512. zend_object *zobj;
  43513. zend_string *name, *tmp_name;
  43514. SAVE_OPLINE();
  43515. object = EX_VAR(opline->op1.var);
  43516. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43517. do {
  43518. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  43519. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  43520. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  43521. object = Z_REFVAL_P(object);
  43522. goto assign_op_object;
  43523. }
  43524. if (IS_CV == IS_CV
  43525. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  43526. ZVAL_UNDEFINED_OP1();
  43527. }
  43528. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  43529. break;
  43530. }
  43531. assign_op_object:
  43532. /* here we are sure we are dealing with an object */
  43533. zobj = Z_OBJ_P(object);
  43534. if (IS_CV == IS_CONST) {
  43535. name = Z_STR_P(property);
  43536. } else {
  43537. name = zval_try_get_tmp_string(property, &tmp_name);
  43538. if (UNEXPECTED(!name)) {
  43539. UNDEF_RESULT();
  43540. break;
  43541. }
  43542. }
  43543. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
  43544. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  43545. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  43546. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43547. ZVAL_NULL(EX_VAR(opline->result.var));
  43548. }
  43549. } else {
  43550. zval *orig_zptr = zptr;
  43551. zend_reference *ref;
  43552. do {
  43553. if (UNEXPECTED(Z_ISREF_P(zptr))) {
  43554. ref = Z_REF_P(zptr);
  43555. zptr = Z_REFVAL_P(zptr);
  43556. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  43557. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  43558. break;
  43559. }
  43560. }
  43561. if (IS_CV == IS_CONST) {
  43562. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  43563. } else {
  43564. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
  43565. }
  43566. if (UNEXPECTED(prop_info)) {
  43567. /* special case for typed properties */
  43568. zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
  43569. } else {
  43570. zend_binary_op(zptr, zptr, value OPLINE_CC);
  43571. }
  43572. } while (0);
  43573. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43574. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  43575. }
  43576. }
  43577. } else {
  43578. zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
  43579. }
  43580. if (IS_CV != IS_CONST) {
  43581. zend_tmp_string_release(tmp_name);
  43582. }
  43583. } while (0);
  43584. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  43585. /* assign_obj has two opcodes! */
  43586. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  43587. }
  43588. /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
  43589. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43590. {
  43591. USE_OPLINE
  43592. zval *var_ptr;
  43593. zval *value, *container, *dim;
  43594. HashTable *ht;
  43595. SAVE_OPLINE();
  43596. container = EX_VAR(opline->op1.var);
  43597. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  43598. assign_dim_op_array:
  43599. SEPARATE_ARRAY(container);
  43600. ht = Z_ARRVAL_P(container);
  43601. assign_dim_op_new_array:
  43602. dim = EX_VAR(opline->op2.var);
  43603. if (IS_CV == IS_UNUSED) {
  43604. var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
  43605. if (UNEXPECTED(!var_ptr)) {
  43606. zend_cannot_add_element();
  43607. goto assign_dim_op_ret_null;
  43608. }
  43609. } else {
  43610. if (IS_CV == IS_CONST) {
  43611. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
  43612. } else {
  43613. var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
  43614. }
  43615. if (UNEXPECTED(!var_ptr)) {
  43616. goto assign_dim_op_ret_null;
  43617. }
  43618. }
  43619. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
  43620. do {
  43621. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
  43622. zend_reference *ref = Z_REF_P(var_ptr);
  43623. var_ptr = Z_REFVAL_P(var_ptr);
  43624. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  43625. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  43626. break;
  43627. }
  43628. }
  43629. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  43630. } while (0);
  43631. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43632. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  43633. }
  43634. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  43635. } else {
  43636. if (EXPECTED(Z_ISREF_P(container))) {
  43637. container = Z_REFVAL_P(container);
  43638. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  43639. goto assign_dim_op_array;
  43640. }
  43641. }
  43642. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  43643. zend_object *obj = Z_OBJ_P(container);
  43644. dim = EX_VAR(opline->op2.var);
  43645. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  43646. dim++;
  43647. }
  43648. zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
  43649. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  43650. zend_uchar old_type;
  43651. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  43652. ZVAL_UNDEFINED_OP1();
  43653. }
  43654. ht = zend_new_array(8);
  43655. old_type = Z_TYPE_P(container);
  43656. ZVAL_ARR(container, ht);
  43657. if (UNEXPECTED(old_type == IS_FALSE)) {
  43658. GC_ADDREF(ht);
  43659. zend_false_to_array_deprecated();
  43660. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  43661. zend_array_destroy(ht);
  43662. goto assign_dim_op_ret_null;
  43663. }
  43664. }
  43665. goto assign_dim_op_new_array;
  43666. } else {
  43667. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43668. zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  43669. assign_dim_op_ret_null:
  43670. FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
  43671. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43672. ZVAL_NULL(EX_VAR(opline->result.var));
  43673. }
  43674. }
  43675. }
  43676. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  43677. }
  43678. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43679. {
  43680. USE_OPLINE
  43681. zval *var_ptr;
  43682. zval *value;
  43683. SAVE_OPLINE();
  43684. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43685. var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  43686. do {
  43687. if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
  43688. zend_reference *ref = Z_REF_P(var_ptr);
  43689. var_ptr = Z_REFVAL_P(var_ptr);
  43690. if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
  43691. zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
  43692. break;
  43693. }
  43694. }
  43695. zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
  43696. } while (0);
  43697. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43698. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  43699. }
  43700. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43701. }
  43702. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43703. {
  43704. USE_OPLINE
  43705. zval *object;
  43706. zval *property;
  43707. zval *zptr;
  43708. void **cache_slot;
  43709. zend_property_info *prop_info;
  43710. zend_object *zobj;
  43711. zend_string *name, *tmp_name;
  43712. SAVE_OPLINE();
  43713. object = EX_VAR(opline->op1.var);
  43714. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43715. do {
  43716. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  43717. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  43718. object = Z_REFVAL_P(object);
  43719. goto pre_incdec_object;
  43720. }
  43721. if (IS_CV == IS_CV
  43722. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  43723. ZVAL_UNDEFINED_OP1();
  43724. }
  43725. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  43726. break;
  43727. }
  43728. pre_incdec_object:
  43729. /* here we are sure we are dealing with an object */
  43730. zobj = Z_OBJ_P(object);
  43731. if (IS_CV == IS_CONST) {
  43732. name = Z_STR_P(property);
  43733. } else {
  43734. name = zval_try_get_tmp_string(property, &tmp_name);
  43735. if (UNEXPECTED(!name)) {
  43736. UNDEF_RESULT();
  43737. break;
  43738. }
  43739. }
  43740. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  43741. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  43742. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  43743. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43744. ZVAL_NULL(EX_VAR(opline->result.var));
  43745. }
  43746. } else {
  43747. if (IS_CV == IS_CONST) {
  43748. prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
  43749. } else {
  43750. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  43751. }
  43752. zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  43753. }
  43754. } else {
  43755. zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  43756. }
  43757. if (IS_CV != IS_CONST) {
  43758. zend_tmp_string_release(tmp_name);
  43759. }
  43760. } while (0);
  43761. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43762. }
  43763. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43764. {
  43765. USE_OPLINE
  43766. zval *object;
  43767. zval *property;
  43768. zval *zptr;
  43769. void **cache_slot;
  43770. zend_property_info *prop_info;
  43771. zend_object *zobj;
  43772. zend_string *name, *tmp_name;
  43773. SAVE_OPLINE();
  43774. object = EX_VAR(opline->op1.var);
  43775. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43776. do {
  43777. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  43778. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  43779. object = Z_REFVAL_P(object);
  43780. goto post_incdec_object;
  43781. }
  43782. if (IS_CV == IS_CV
  43783. && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  43784. ZVAL_UNDEFINED_OP1();
  43785. }
  43786. zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
  43787. break;
  43788. }
  43789. post_incdec_object:
  43790. /* here we are sure we are dealing with an object */
  43791. zobj = Z_OBJ_P(object);
  43792. if (IS_CV == IS_CONST) {
  43793. name = Z_STR_P(property);
  43794. } else {
  43795. name = zval_try_get_tmp_string(property, &tmp_name);
  43796. if (UNEXPECTED(!name)) {
  43797. ZVAL_UNDEF(EX_VAR(opline->result.var));
  43798. break;
  43799. }
  43800. }
  43801. cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
  43802. if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
  43803. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  43804. ZVAL_NULL(EX_VAR(opline->result.var));
  43805. } else {
  43806. if (IS_CV == IS_CONST) {
  43807. prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
  43808. } else {
  43809. prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
  43810. }
  43811. zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
  43812. }
  43813. } else {
  43814. zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
  43815. }
  43816. if (IS_CV != IS_CONST) {
  43817. zend_tmp_string_release(tmp_name);
  43818. }
  43819. } while (0);
  43820. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43821. }
  43822. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43823. {
  43824. USE_OPLINE
  43825. zval *container, *dim, *value;
  43826. SAVE_OPLINE();
  43827. container = EX_VAR(opline->op1.var);
  43828. dim = EX_VAR(opline->op2.var);
  43829. if (IS_CV != IS_CONST) {
  43830. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  43831. fetch_dim_r_array:
  43832. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
  43833. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  43834. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  43835. container = Z_REFVAL_P(container);
  43836. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  43837. goto fetch_dim_r_array;
  43838. } else {
  43839. goto fetch_dim_r_slow;
  43840. }
  43841. } else {
  43842. fetch_dim_r_slow:
  43843. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  43844. dim++;
  43845. }
  43846. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  43847. }
  43848. } else {
  43849. zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
  43850. }
  43851. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43852. }
  43853. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43854. {
  43855. USE_OPLINE
  43856. zval *container;
  43857. SAVE_OPLINE();
  43858. container = EX_VAR(opline->op1.var);
  43859. zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  43860. if (IS_CV == IS_VAR) {
  43861. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  43862. }
  43863. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43864. }
  43865. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43866. {
  43867. USE_OPLINE
  43868. zval *container;
  43869. SAVE_OPLINE();
  43870. container = EX_VAR(opline->op1.var);
  43871. zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  43872. if (IS_CV == IS_VAR) {
  43873. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  43874. }
  43875. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43876. }
  43877. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43878. {
  43879. USE_OPLINE
  43880. zval *container;
  43881. SAVE_OPLINE();
  43882. container = EX_VAR(opline->op1.var);
  43883. zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  43884. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43885. }
  43886. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43887. {
  43888. #if 0
  43889. USE_OPLINE
  43890. #endif
  43891. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  43892. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  43893. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  43894. }
  43895. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  43896. } else {
  43897. if (IS_CV == IS_UNUSED) {
  43898. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  43899. }
  43900. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  43901. }
  43902. }
  43903. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43904. {
  43905. USE_OPLINE
  43906. zval *container;
  43907. SAVE_OPLINE();
  43908. container = EX_VAR(opline->op1.var);
  43909. zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  43910. if (IS_CV == IS_VAR) {
  43911. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  43912. }
  43913. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43914. }
  43915. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43916. {
  43917. USE_OPLINE
  43918. zval *container;
  43919. void **cache_slot = NULL;
  43920. SAVE_OPLINE();
  43921. container = EX_VAR(opline->op1.var);
  43922. if (IS_CV == IS_CONST ||
  43923. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  43924. do {
  43925. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  43926. container = Z_REFVAL_P(container);
  43927. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  43928. break;
  43929. }
  43930. }
  43931. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  43932. ZVAL_UNDEFINED_OP1();
  43933. }
  43934. zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  43935. ZVAL_NULL(EX_VAR(opline->result.var));
  43936. goto fetch_obj_r_finish;
  43937. } while (0);
  43938. }
  43939. /* here we are sure we are dealing with an object */
  43940. do {
  43941. zend_object *zobj = Z_OBJ_P(container);
  43942. zend_string *name, *tmp_name;
  43943. zval *retval;
  43944. if (IS_CV == IS_CONST) {
  43945. cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
  43946. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  43947. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  43948. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  43949. retval = OBJ_PROP(zobj, prop_offset);
  43950. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  43951. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  43952. goto fetch_obj_r_copy;
  43953. } else {
  43954. fetch_obj_r_fast_copy:
  43955. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  43956. ZEND_VM_NEXT_OPCODE();
  43957. }
  43958. }
  43959. } else if (EXPECTED(zobj->properties != NULL)) {
  43960. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  43961. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  43962. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  43963. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  43964. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  43965. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  43966. (EXPECTED(p->key == name) ||
  43967. (EXPECTED(p->h == ZSTR_H(name)) &&
  43968. EXPECTED(p->key != NULL) &&
  43969. EXPECTED(zend_string_equal_content(p->key, name))))) {
  43970. retval = &p->val;
  43971. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  43972. goto fetch_obj_r_copy;
  43973. } else {
  43974. goto fetch_obj_r_fast_copy;
  43975. }
  43976. }
  43977. }
  43978. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  43979. }
  43980. retval = zend_hash_find_known_hash(zobj->properties, name);
  43981. if (EXPECTED(retval)) {
  43982. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  43983. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  43984. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  43985. goto fetch_obj_r_copy;
  43986. } else {
  43987. goto fetch_obj_r_fast_copy;
  43988. }
  43989. }
  43990. }
  43991. }
  43992. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  43993. } else {
  43994. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  43995. if (UNEXPECTED(!name)) {
  43996. ZVAL_UNDEF(EX_VAR(opline->result.var));
  43997. break;
  43998. }
  43999. }
  44000. retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  44001. #if ZEND_DEBUG
  44002. if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
  44003. zend_verify_internal_read_property_type(zobj, name, retval);
  44004. }
  44005. #endif
  44006. if (IS_CV != IS_CONST) {
  44007. zend_tmp_string_release(tmp_name);
  44008. }
  44009. if (retval != EX_VAR(opline->result.var)) {
  44010. fetch_obj_r_copy:
  44011. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  44012. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  44013. zend_unwrap_reference(retval);
  44014. }
  44015. } while (0);
  44016. fetch_obj_r_finish:
  44017. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  44018. }
  44019. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44020. {
  44021. USE_OPLINE
  44022. zval *property, *container, *result;
  44023. SAVE_OPLINE();
  44024. container = EX_VAR(opline->op1.var);
  44025. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  44026. result = EX_VAR(opline->result.var);
  44027. zend_fetch_property_address(
  44028. result, container, IS_CV, property, IS_CV,
  44029. ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
  44030. BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
  44031. if (IS_CV == IS_VAR) {
  44032. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  44033. }
  44034. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  44035. }
  44036. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44037. {
  44038. USE_OPLINE
  44039. zval *property, *container, *result;
  44040. SAVE_OPLINE();
  44041. container = EX_VAR(opline->op1.var);
  44042. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  44043. result = EX_VAR(opline->result.var);
  44044. 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);
  44045. if (IS_CV == IS_VAR) {
  44046. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  44047. }
  44048. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  44049. }
  44050. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44051. {
  44052. USE_OPLINE
  44053. zval *container;
  44054. void **cache_slot = NULL;
  44055. SAVE_OPLINE();
  44056. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  44057. if (IS_CV == IS_CONST ||
  44058. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  44059. do {
  44060. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  44061. container = Z_REFVAL_P(container);
  44062. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  44063. break;
  44064. }
  44065. }
  44066. if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
  44067. ZVAL_UNDEFINED_OP2();
  44068. }
  44069. ZVAL_NULL(EX_VAR(opline->result.var));
  44070. goto fetch_obj_is_finish;
  44071. } while (0);
  44072. }
  44073. /* here we are sure we are dealing with an object */
  44074. do {
  44075. zend_object *zobj = Z_OBJ_P(container);
  44076. zend_string *name, *tmp_name;
  44077. zval *retval;
  44078. if (IS_CV == IS_CONST) {
  44079. cache_slot = CACHE_ADDR(opline->extended_value);
  44080. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  44081. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  44082. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  44083. retval = OBJ_PROP(zobj, prop_offset);
  44084. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  44085. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  44086. goto fetch_obj_is_copy;
  44087. } else {
  44088. fetch_obj_is_fast_copy:
  44089. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  44090. ZEND_VM_NEXT_OPCODE();
  44091. }
  44092. }
  44093. } else if (EXPECTED(zobj->properties != NULL)) {
  44094. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44095. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  44096. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  44097. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  44098. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  44099. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  44100. (EXPECTED(p->key == name) ||
  44101. (EXPECTED(p->h == ZSTR_H(name)) &&
  44102. EXPECTED(p->key != NULL) &&
  44103. EXPECTED(zend_string_equal_content(p->key, name))))) {
  44104. retval = &p->val;
  44105. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  44106. goto fetch_obj_is_copy;
  44107. } else {
  44108. goto fetch_obj_is_fast_copy;
  44109. }
  44110. }
  44111. }
  44112. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  44113. }
  44114. retval = zend_hash_find_known_hash(zobj->properties, name);
  44115. if (EXPECTED(retval)) {
  44116. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  44117. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  44118. if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
  44119. goto fetch_obj_is_copy;
  44120. } else {
  44121. goto fetch_obj_is_fast_copy;
  44122. }
  44123. }
  44124. }
  44125. }
  44126. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44127. } else {
  44128. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  44129. if (UNEXPECTED(!name)) {
  44130. ZVAL_UNDEF(EX_VAR(opline->result.var));
  44131. break;
  44132. }
  44133. }
  44134. retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  44135. if (IS_CV != IS_CONST) {
  44136. zend_tmp_string_release(tmp_name);
  44137. }
  44138. if (retval != EX_VAR(opline->result.var)) {
  44139. fetch_obj_is_copy:
  44140. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  44141. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  44142. zend_unwrap_reference(retval);
  44143. }
  44144. } while (0);
  44145. fetch_obj_is_finish:
  44146. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  44147. }
  44148. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44149. {
  44150. #if 0
  44151. USE_OPLINE
  44152. #endif
  44153. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  44154. /* Behave like FETCH_OBJ_W */
  44155. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  44156. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  44157. }
  44158. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  44159. } else {
  44160. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  44161. }
  44162. }
  44163. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44164. {
  44165. USE_OPLINE
  44166. zval *container, *property, *result;
  44167. SAVE_OPLINE();
  44168. container = EX_VAR(opline->op1.var);
  44169. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  44170. result = EX_VAR(opline->result.var);
  44171. 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);
  44172. if (IS_CV == IS_VAR) {
  44173. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
  44174. }
  44175. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  44176. }
  44177. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44178. {
  44179. USE_OPLINE
  44180. zval *object, *value, tmp;
  44181. zend_object *zobj;
  44182. zend_string *name, *tmp_name;
  44183. SAVE_OPLINE();
  44184. object = EX_VAR(opline->op1.var);
  44185. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  44186. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  44187. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  44188. object = Z_REFVAL_P(object);
  44189. goto assign_object;
  44190. }
  44191. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  44192. value = &EG(uninitialized_zval);
  44193. goto free_and_exit_assign_obj;
  44194. }
  44195. assign_object:
  44196. zobj = Z_OBJ_P(object);
  44197. if (IS_CV == IS_CONST) {
  44198. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  44199. void **cache_slot = CACHE_ADDR(opline->extended_value);
  44200. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  44201. zend_object *zobj = Z_OBJ_P(object);
  44202. zval *property_val;
  44203. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  44204. property_val = OBJ_PROP(zobj, prop_offset);
  44205. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  44206. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  44207. if (UNEXPECTED(prop_info != NULL)) {
  44208. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  44209. goto free_and_exit_assign_obj;
  44210. } else {
  44211. fast_assign_obj:
  44212. value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
  44213. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44214. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44215. }
  44216. goto exit_assign_obj;
  44217. }
  44218. }
  44219. } else {
  44220. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44221. if (EXPECTED(zobj->properties != NULL)) {
  44222. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  44223. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  44224. GC_DELREF(zobj->properties);
  44225. }
  44226. zobj->properties = zend_array_dup(zobj->properties);
  44227. }
  44228. property_val = zend_hash_find_known_hash(zobj->properties, name);
  44229. if (property_val) {
  44230. goto fast_assign_obj;
  44231. }
  44232. }
  44233. if (!zobj->ce->__set) {
  44234. if (EXPECTED(zobj->properties == NULL)) {
  44235. rebuild_object_properties(zobj);
  44236. }
  44237. if (IS_CONST == IS_CONST) {
  44238. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  44239. Z_ADDREF_P(value);
  44240. }
  44241. } else if (IS_CONST != IS_TMP_VAR) {
  44242. if (Z_ISREF_P(value)) {
  44243. if (IS_CONST == IS_VAR) {
  44244. zend_reference *ref = Z_REF_P(value);
  44245. if (GC_DELREF(ref) == 0) {
  44246. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  44247. efree_size(ref, sizeof(zend_reference));
  44248. value = &tmp;
  44249. } else {
  44250. value = Z_REFVAL_P(value);
  44251. Z_TRY_ADDREF_P(value);
  44252. }
  44253. } else {
  44254. value = Z_REFVAL_P(value);
  44255. Z_TRY_ADDREF_P(value);
  44256. }
  44257. } else if (IS_CONST == IS_CV) {
  44258. Z_TRY_ADDREF_P(value);
  44259. }
  44260. }
  44261. zend_hash_add_new(zobj->properties, name, value);
  44262. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44263. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44264. }
  44265. goto exit_assign_obj;
  44266. }
  44267. }
  44268. }
  44269. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44270. } else {
  44271. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  44272. if (UNEXPECTED(!name)) {
  44273. UNDEF_RESULT();
  44274. goto exit_assign_obj;
  44275. }
  44276. }
  44277. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  44278. ZVAL_DEREF(value);
  44279. }
  44280. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  44281. if (IS_CV != IS_CONST) {
  44282. zend_tmp_string_release(tmp_name);
  44283. }
  44284. free_and_exit_assign_obj:
  44285. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44286. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  44287. }
  44288. exit_assign_obj:
  44289. /* assign_obj has two opcodes! */
  44290. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  44291. }
  44292. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  44293. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44294. {
  44295. USE_OPLINE
  44296. zval *object, *value, tmp;
  44297. zend_object *zobj;
  44298. zend_string *name, *tmp_name;
  44299. SAVE_OPLINE();
  44300. object = EX_VAR(opline->op1.var);
  44301. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  44302. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  44303. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  44304. object = Z_REFVAL_P(object);
  44305. goto assign_object;
  44306. }
  44307. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  44308. value = &EG(uninitialized_zval);
  44309. goto free_and_exit_assign_obj;
  44310. }
  44311. assign_object:
  44312. zobj = Z_OBJ_P(object);
  44313. if (IS_CV == IS_CONST) {
  44314. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  44315. void **cache_slot = CACHE_ADDR(opline->extended_value);
  44316. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  44317. zend_object *zobj = Z_OBJ_P(object);
  44318. zval *property_val;
  44319. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  44320. property_val = OBJ_PROP(zobj, prop_offset);
  44321. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  44322. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  44323. if (UNEXPECTED(prop_info != NULL)) {
  44324. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  44325. goto free_and_exit_assign_obj;
  44326. } else {
  44327. fast_assign_obj:
  44328. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  44329. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44330. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44331. }
  44332. goto exit_assign_obj;
  44333. }
  44334. }
  44335. } else {
  44336. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44337. if (EXPECTED(zobj->properties != NULL)) {
  44338. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  44339. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  44340. GC_DELREF(zobj->properties);
  44341. }
  44342. zobj->properties = zend_array_dup(zobj->properties);
  44343. }
  44344. property_val = zend_hash_find_known_hash(zobj->properties, name);
  44345. if (property_val) {
  44346. goto fast_assign_obj;
  44347. }
  44348. }
  44349. if (!zobj->ce->__set) {
  44350. if (EXPECTED(zobj->properties == NULL)) {
  44351. rebuild_object_properties(zobj);
  44352. }
  44353. if (IS_TMP_VAR == IS_CONST) {
  44354. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  44355. Z_ADDREF_P(value);
  44356. }
  44357. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  44358. if (Z_ISREF_P(value)) {
  44359. if (IS_TMP_VAR == IS_VAR) {
  44360. zend_reference *ref = Z_REF_P(value);
  44361. if (GC_DELREF(ref) == 0) {
  44362. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  44363. efree_size(ref, sizeof(zend_reference));
  44364. value = &tmp;
  44365. } else {
  44366. value = Z_REFVAL_P(value);
  44367. Z_TRY_ADDREF_P(value);
  44368. }
  44369. } else {
  44370. value = Z_REFVAL_P(value);
  44371. Z_TRY_ADDREF_P(value);
  44372. }
  44373. } else if (IS_TMP_VAR == IS_CV) {
  44374. Z_TRY_ADDREF_P(value);
  44375. }
  44376. }
  44377. zend_hash_add_new(zobj->properties, name, value);
  44378. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44379. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44380. }
  44381. goto exit_assign_obj;
  44382. }
  44383. }
  44384. }
  44385. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44386. } else {
  44387. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  44388. if (UNEXPECTED(!name)) {
  44389. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44390. UNDEF_RESULT();
  44391. goto exit_assign_obj;
  44392. }
  44393. }
  44394. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  44395. ZVAL_DEREF(value);
  44396. }
  44397. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  44398. if (IS_CV != IS_CONST) {
  44399. zend_tmp_string_release(tmp_name);
  44400. }
  44401. free_and_exit_assign_obj:
  44402. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44403. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  44404. }
  44405. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44406. exit_assign_obj:
  44407. /* assign_obj has two opcodes! */
  44408. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  44409. }
  44410. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  44411. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44412. {
  44413. USE_OPLINE
  44414. zval *object, *value, tmp;
  44415. zend_object *zobj;
  44416. zend_string *name, *tmp_name;
  44417. SAVE_OPLINE();
  44418. object = EX_VAR(opline->op1.var);
  44419. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  44420. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  44421. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  44422. object = Z_REFVAL_P(object);
  44423. goto assign_object;
  44424. }
  44425. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  44426. value = &EG(uninitialized_zval);
  44427. goto free_and_exit_assign_obj;
  44428. }
  44429. assign_object:
  44430. zobj = Z_OBJ_P(object);
  44431. if (IS_CV == IS_CONST) {
  44432. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  44433. void **cache_slot = CACHE_ADDR(opline->extended_value);
  44434. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  44435. zend_object *zobj = Z_OBJ_P(object);
  44436. zval *property_val;
  44437. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  44438. property_val = OBJ_PROP(zobj, prop_offset);
  44439. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  44440. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  44441. if (UNEXPECTED(prop_info != NULL)) {
  44442. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  44443. goto free_and_exit_assign_obj;
  44444. } else {
  44445. fast_assign_obj:
  44446. value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
  44447. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44448. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44449. }
  44450. goto exit_assign_obj;
  44451. }
  44452. }
  44453. } else {
  44454. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44455. if (EXPECTED(zobj->properties != NULL)) {
  44456. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  44457. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  44458. GC_DELREF(zobj->properties);
  44459. }
  44460. zobj->properties = zend_array_dup(zobj->properties);
  44461. }
  44462. property_val = zend_hash_find_known_hash(zobj->properties, name);
  44463. if (property_val) {
  44464. goto fast_assign_obj;
  44465. }
  44466. }
  44467. if (!zobj->ce->__set) {
  44468. if (EXPECTED(zobj->properties == NULL)) {
  44469. rebuild_object_properties(zobj);
  44470. }
  44471. if (IS_VAR == IS_CONST) {
  44472. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  44473. Z_ADDREF_P(value);
  44474. }
  44475. } else if (IS_VAR != IS_TMP_VAR) {
  44476. if (Z_ISREF_P(value)) {
  44477. if (IS_VAR == IS_VAR) {
  44478. zend_reference *ref = Z_REF_P(value);
  44479. if (GC_DELREF(ref) == 0) {
  44480. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  44481. efree_size(ref, sizeof(zend_reference));
  44482. value = &tmp;
  44483. } else {
  44484. value = Z_REFVAL_P(value);
  44485. Z_TRY_ADDREF_P(value);
  44486. }
  44487. } else {
  44488. value = Z_REFVAL_P(value);
  44489. Z_TRY_ADDREF_P(value);
  44490. }
  44491. } else if (IS_VAR == IS_CV) {
  44492. Z_TRY_ADDREF_P(value);
  44493. }
  44494. }
  44495. zend_hash_add_new(zobj->properties, name, value);
  44496. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44497. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44498. }
  44499. goto exit_assign_obj;
  44500. }
  44501. }
  44502. }
  44503. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44504. } else {
  44505. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  44506. if (UNEXPECTED(!name)) {
  44507. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44508. UNDEF_RESULT();
  44509. goto exit_assign_obj;
  44510. }
  44511. }
  44512. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  44513. ZVAL_DEREF(value);
  44514. }
  44515. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  44516. if (IS_CV != IS_CONST) {
  44517. zend_tmp_string_release(tmp_name);
  44518. }
  44519. free_and_exit_assign_obj:
  44520. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44521. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  44522. }
  44523. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44524. exit_assign_obj:
  44525. /* assign_obj has two opcodes! */
  44526. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  44527. }
  44528. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  44529. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44530. {
  44531. USE_OPLINE
  44532. zval *object, *value, tmp;
  44533. zend_object *zobj;
  44534. zend_string *name, *tmp_name;
  44535. SAVE_OPLINE();
  44536. object = EX_VAR(opline->op1.var);
  44537. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  44538. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  44539. if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
  44540. object = Z_REFVAL_P(object);
  44541. goto assign_object;
  44542. }
  44543. zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
  44544. value = &EG(uninitialized_zval);
  44545. goto free_and_exit_assign_obj;
  44546. }
  44547. assign_object:
  44548. zobj = Z_OBJ_P(object);
  44549. if (IS_CV == IS_CONST) {
  44550. if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
  44551. void **cache_slot = CACHE_ADDR(opline->extended_value);
  44552. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  44553. zend_object *zobj = Z_OBJ_P(object);
  44554. zval *property_val;
  44555. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  44556. property_val = OBJ_PROP(zobj, prop_offset);
  44557. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  44558. zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
  44559. if (UNEXPECTED(prop_info != NULL)) {
  44560. value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
  44561. goto free_and_exit_assign_obj;
  44562. } else {
  44563. fast_assign_obj:
  44564. value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
  44565. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44566. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44567. }
  44568. goto exit_assign_obj;
  44569. }
  44570. }
  44571. } else {
  44572. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44573. if (EXPECTED(zobj->properties != NULL)) {
  44574. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  44575. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  44576. GC_DELREF(zobj->properties);
  44577. }
  44578. zobj->properties = zend_array_dup(zobj->properties);
  44579. }
  44580. property_val = zend_hash_find_known_hash(zobj->properties, name);
  44581. if (property_val) {
  44582. goto fast_assign_obj;
  44583. }
  44584. }
  44585. if (!zobj->ce->__set) {
  44586. if (EXPECTED(zobj->properties == NULL)) {
  44587. rebuild_object_properties(zobj);
  44588. }
  44589. if (IS_CV == IS_CONST) {
  44590. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  44591. Z_ADDREF_P(value);
  44592. }
  44593. } else if (IS_CV != IS_TMP_VAR) {
  44594. if (Z_ISREF_P(value)) {
  44595. if (IS_CV == IS_VAR) {
  44596. zend_reference *ref = Z_REF_P(value);
  44597. if (GC_DELREF(ref) == 0) {
  44598. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  44599. efree_size(ref, sizeof(zend_reference));
  44600. value = &tmp;
  44601. } else {
  44602. value = Z_REFVAL_P(value);
  44603. Z_TRY_ADDREF_P(value);
  44604. }
  44605. } else {
  44606. value = Z_REFVAL_P(value);
  44607. Z_TRY_ADDREF_P(value);
  44608. }
  44609. } else if (IS_CV == IS_CV) {
  44610. Z_TRY_ADDREF_P(value);
  44611. }
  44612. }
  44613. zend_hash_add_new(zobj->properties, name, value);
  44614. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44615. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44616. }
  44617. goto exit_assign_obj;
  44618. }
  44619. }
  44620. }
  44621. name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
  44622. } else {
  44623. name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
  44624. if (UNEXPECTED(!name)) {
  44625. UNDEF_RESULT();
  44626. goto exit_assign_obj;
  44627. }
  44628. }
  44629. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  44630. ZVAL_DEREF(value);
  44631. }
  44632. value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  44633. if (IS_CV != IS_CONST) {
  44634. zend_tmp_string_release(tmp_name);
  44635. }
  44636. free_and_exit_assign_obj:
  44637. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44638. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  44639. }
  44640. exit_assign_obj:
  44641. /* assign_obj has two opcodes! */
  44642. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  44643. }
  44644. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  44645. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44646. {
  44647. USE_OPLINE
  44648. zval *object_ptr, *orig_object_ptr;
  44649. zval *value;
  44650. zval *variable_ptr;
  44651. zval *dim;
  44652. SAVE_OPLINE();
  44653. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  44654. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  44655. try_assign_dim_array:
  44656. SEPARATE_ARRAY(object_ptr);
  44657. if (IS_CV == IS_UNUSED) {
  44658. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  44659. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  44660. HashTable *ht = Z_ARRVAL_P(object_ptr);
  44661. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  44662. GC_ADDREF(ht);
  44663. }
  44664. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  44665. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  44666. zend_array_destroy(ht);
  44667. goto assign_dim_error;
  44668. }
  44669. }
  44670. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  44671. ZVAL_DEREF(value);
  44672. }
  44673. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  44674. if (UNEXPECTED(value == NULL)) {
  44675. zend_cannot_add_element();
  44676. goto assign_dim_error;
  44677. } else if (IS_CONST == IS_CV) {
  44678. if (Z_REFCOUNTED_P(value)) {
  44679. Z_ADDREF_P(value);
  44680. }
  44681. } else if (IS_CONST == IS_VAR) {
  44682. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  44683. if (Z_ISREF_P(free_op_data)) {
  44684. if (Z_REFCOUNTED_P(value)) {
  44685. Z_ADDREF_P(value);
  44686. }
  44687. zval_ptr_dtor_nogc(free_op_data);
  44688. }
  44689. } else if (IS_CONST == IS_CONST) {
  44690. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  44691. Z_ADDREF_P(value);
  44692. }
  44693. }
  44694. } else {
  44695. dim = EX_VAR(opline->op2.var);
  44696. if (IS_CV == IS_CONST) {
  44697. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  44698. } else {
  44699. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  44700. }
  44701. if (UNEXPECTED(variable_ptr == NULL)) {
  44702. goto assign_dim_error;
  44703. }
  44704. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  44705. value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
  44706. }
  44707. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44708. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44709. }
  44710. } else {
  44711. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  44712. object_ptr = Z_REFVAL_P(object_ptr);
  44713. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  44714. goto try_assign_dim_array;
  44715. }
  44716. }
  44717. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  44718. zend_object *obj = Z_OBJ_P(object_ptr);
  44719. GC_ADDREF(obj);
  44720. dim = EX_VAR(opline->op2.var);
  44721. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  44722. dim = ZVAL_UNDEFINED_OP2();
  44723. } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  44724. dim++;
  44725. }
  44726. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  44727. if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  44728. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  44729. } else if (IS_CONST & (IS_CV|IS_VAR)) {
  44730. ZVAL_DEREF(value);
  44731. }
  44732. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  44733. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  44734. zend_objects_store_del(obj);
  44735. }
  44736. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  44737. if (IS_CV == IS_UNUSED) {
  44738. zend_use_new_element_for_string();
  44739. UNDEF_RESULT();
  44740. } else {
  44741. dim = EX_VAR(opline->op2.var);
  44742. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  44743. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  44744. }
  44745. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  44746. if (Z_ISREF_P(orig_object_ptr)
  44747. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  44748. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  44749. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  44750. UNDEF_RESULT();
  44751. } else {
  44752. HashTable *ht = zend_new_array(8);
  44753. zend_uchar old_type = Z_TYPE_P(object_ptr);
  44754. ZVAL_ARR(object_ptr, ht);
  44755. if (UNEXPECTED(old_type == IS_FALSE)) {
  44756. GC_ADDREF(ht);
  44757. zend_false_to_array_deprecated();
  44758. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  44759. zend_array_destroy(ht);
  44760. goto assign_dim_error;
  44761. }
  44762. }
  44763. goto try_assign_dim_array;
  44764. }
  44765. } else {
  44766. zend_use_scalar_as_array();
  44767. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  44768. assign_dim_error:
  44769. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44770. ZVAL_NULL(EX_VAR(opline->result.var));
  44771. }
  44772. }
  44773. }
  44774. if (IS_CV != IS_UNUSED) {
  44775. }
  44776. /* assign_dim has two opcodes! */
  44777. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  44778. }
  44779. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44780. {
  44781. USE_OPLINE
  44782. zval *object_ptr, *orig_object_ptr;
  44783. zval *value;
  44784. zval *variable_ptr;
  44785. zval *dim;
  44786. SAVE_OPLINE();
  44787. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  44788. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  44789. try_assign_dim_array:
  44790. SEPARATE_ARRAY(object_ptr);
  44791. if (IS_CV == IS_UNUSED) {
  44792. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  44793. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  44794. HashTable *ht = Z_ARRVAL_P(object_ptr);
  44795. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  44796. GC_ADDREF(ht);
  44797. }
  44798. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  44799. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  44800. zend_array_destroy(ht);
  44801. goto assign_dim_error;
  44802. }
  44803. }
  44804. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  44805. ZVAL_DEREF(value);
  44806. }
  44807. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  44808. if (UNEXPECTED(value == NULL)) {
  44809. zend_cannot_add_element();
  44810. goto assign_dim_error;
  44811. } else if (IS_TMP_VAR == IS_CV) {
  44812. if (Z_REFCOUNTED_P(value)) {
  44813. Z_ADDREF_P(value);
  44814. }
  44815. } else if (IS_TMP_VAR == IS_VAR) {
  44816. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  44817. if (Z_ISREF_P(free_op_data)) {
  44818. if (Z_REFCOUNTED_P(value)) {
  44819. Z_ADDREF_P(value);
  44820. }
  44821. zval_ptr_dtor_nogc(free_op_data);
  44822. }
  44823. } else if (IS_TMP_VAR == IS_CONST) {
  44824. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  44825. Z_ADDREF_P(value);
  44826. }
  44827. }
  44828. } else {
  44829. dim = EX_VAR(opline->op2.var);
  44830. if (IS_CV == IS_CONST) {
  44831. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  44832. } else {
  44833. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  44834. }
  44835. if (UNEXPECTED(variable_ptr == NULL)) {
  44836. goto assign_dim_error;
  44837. }
  44838. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  44839. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
  44840. }
  44841. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44842. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44843. }
  44844. } else {
  44845. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  44846. object_ptr = Z_REFVAL_P(object_ptr);
  44847. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  44848. goto try_assign_dim_array;
  44849. }
  44850. }
  44851. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  44852. zend_object *obj = Z_OBJ_P(object_ptr);
  44853. GC_ADDREF(obj);
  44854. dim = EX_VAR(opline->op2.var);
  44855. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  44856. dim = ZVAL_UNDEFINED_OP2();
  44857. } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  44858. dim++;
  44859. }
  44860. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  44861. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  44862. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  44863. } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
  44864. ZVAL_DEREF(value);
  44865. }
  44866. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  44867. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44868. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  44869. zend_objects_store_del(obj);
  44870. }
  44871. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  44872. if (IS_CV == IS_UNUSED) {
  44873. zend_use_new_element_for_string();
  44874. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44875. UNDEF_RESULT();
  44876. } else {
  44877. dim = EX_VAR(opline->op2.var);
  44878. value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
  44879. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  44880. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44881. }
  44882. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  44883. if (Z_ISREF_P(orig_object_ptr)
  44884. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  44885. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  44886. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  44887. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44888. UNDEF_RESULT();
  44889. } else {
  44890. HashTable *ht = zend_new_array(8);
  44891. zend_uchar old_type = Z_TYPE_P(object_ptr);
  44892. ZVAL_ARR(object_ptr, ht);
  44893. if (UNEXPECTED(old_type == IS_FALSE)) {
  44894. GC_ADDREF(ht);
  44895. zend_false_to_array_deprecated();
  44896. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  44897. zend_array_destroy(ht);
  44898. goto assign_dim_error;
  44899. }
  44900. }
  44901. goto try_assign_dim_array;
  44902. }
  44903. } else {
  44904. zend_use_scalar_as_array();
  44905. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  44906. assign_dim_error:
  44907. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  44908. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44909. ZVAL_NULL(EX_VAR(opline->result.var));
  44910. }
  44911. }
  44912. }
  44913. if (IS_CV != IS_UNUSED) {
  44914. }
  44915. /* assign_dim has two opcodes! */
  44916. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  44917. }
  44918. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44919. {
  44920. USE_OPLINE
  44921. zval *object_ptr, *orig_object_ptr;
  44922. zval *value;
  44923. zval *variable_ptr;
  44924. zval *dim;
  44925. SAVE_OPLINE();
  44926. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  44927. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  44928. try_assign_dim_array:
  44929. SEPARATE_ARRAY(object_ptr);
  44930. if (IS_CV == IS_UNUSED) {
  44931. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  44932. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  44933. HashTable *ht = Z_ARRVAL_P(object_ptr);
  44934. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  44935. GC_ADDREF(ht);
  44936. }
  44937. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  44938. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  44939. zend_array_destroy(ht);
  44940. goto assign_dim_error;
  44941. }
  44942. }
  44943. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  44944. ZVAL_DEREF(value);
  44945. }
  44946. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  44947. if (UNEXPECTED(value == NULL)) {
  44948. zend_cannot_add_element();
  44949. goto assign_dim_error;
  44950. } else if (IS_VAR == IS_CV) {
  44951. if (Z_REFCOUNTED_P(value)) {
  44952. Z_ADDREF_P(value);
  44953. }
  44954. } else if (IS_VAR == IS_VAR) {
  44955. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  44956. if (Z_ISREF_P(free_op_data)) {
  44957. if (Z_REFCOUNTED_P(value)) {
  44958. Z_ADDREF_P(value);
  44959. }
  44960. zval_ptr_dtor_nogc(free_op_data);
  44961. }
  44962. } else if (IS_VAR == IS_CONST) {
  44963. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  44964. Z_ADDREF_P(value);
  44965. }
  44966. }
  44967. } else {
  44968. dim = EX_VAR(opline->op2.var);
  44969. if (IS_CV == IS_CONST) {
  44970. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  44971. } else {
  44972. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  44973. }
  44974. if (UNEXPECTED(variable_ptr == NULL)) {
  44975. goto assign_dim_error;
  44976. }
  44977. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  44978. value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
  44979. }
  44980. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  44981. ZVAL_COPY(EX_VAR(opline->result.var), value);
  44982. }
  44983. } else {
  44984. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  44985. object_ptr = Z_REFVAL_P(object_ptr);
  44986. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  44987. goto try_assign_dim_array;
  44988. }
  44989. }
  44990. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  44991. zend_object *obj = Z_OBJ_P(object_ptr);
  44992. GC_ADDREF(obj);
  44993. dim = EX_VAR(opline->op2.var);
  44994. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  44995. dim = ZVAL_UNDEFINED_OP2();
  44996. } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  44997. dim++;
  44998. }
  44999. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  45000. if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  45001. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  45002. } else if (IS_VAR & (IS_CV|IS_VAR)) {
  45003. ZVAL_DEREF(value);
  45004. }
  45005. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  45006. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  45007. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  45008. zend_objects_store_del(obj);
  45009. }
  45010. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  45011. if (IS_CV == IS_UNUSED) {
  45012. zend_use_new_element_for_string();
  45013. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  45014. UNDEF_RESULT();
  45015. } else {
  45016. dim = EX_VAR(opline->op2.var);
  45017. value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  45018. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  45019. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  45020. }
  45021. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  45022. if (Z_ISREF_P(orig_object_ptr)
  45023. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  45024. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  45025. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45026. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  45027. UNDEF_RESULT();
  45028. } else {
  45029. HashTable *ht = zend_new_array(8);
  45030. zend_uchar old_type = Z_TYPE_P(object_ptr);
  45031. ZVAL_ARR(object_ptr, ht);
  45032. if (UNEXPECTED(old_type == IS_FALSE)) {
  45033. GC_ADDREF(ht);
  45034. zend_false_to_array_deprecated();
  45035. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  45036. zend_array_destroy(ht);
  45037. goto assign_dim_error;
  45038. }
  45039. }
  45040. goto try_assign_dim_array;
  45041. }
  45042. } else {
  45043. zend_use_scalar_as_array();
  45044. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45045. assign_dim_error:
  45046. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  45047. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  45048. ZVAL_NULL(EX_VAR(opline->result.var));
  45049. }
  45050. }
  45051. }
  45052. if (IS_CV != IS_UNUSED) {
  45053. }
  45054. /* assign_dim has two opcodes! */
  45055. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  45056. }
  45057. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45058. {
  45059. USE_OPLINE
  45060. zval *object_ptr, *orig_object_ptr;
  45061. zval *value;
  45062. zval *variable_ptr;
  45063. zval *dim;
  45064. SAVE_OPLINE();
  45065. orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
  45066. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  45067. try_assign_dim_array:
  45068. SEPARATE_ARRAY(object_ptr);
  45069. if (IS_CV == IS_UNUSED) {
  45070. value = EX_VAR((opline+1)->op1.var);
  45071. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  45072. HashTable *ht = Z_ARRVAL_P(object_ptr);
  45073. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  45074. GC_ADDREF(ht);
  45075. }
  45076. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  45077. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
  45078. zend_array_destroy(ht);
  45079. goto assign_dim_error;
  45080. }
  45081. }
  45082. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  45083. ZVAL_DEREF(value);
  45084. }
  45085. value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  45086. if (UNEXPECTED(value == NULL)) {
  45087. zend_cannot_add_element();
  45088. goto assign_dim_error;
  45089. } else if (IS_CV == IS_CV) {
  45090. if (Z_REFCOUNTED_P(value)) {
  45091. Z_ADDREF_P(value);
  45092. }
  45093. } else if (IS_CV == IS_VAR) {
  45094. zval *free_op_data = EX_VAR((opline+1)->op1.var);
  45095. if (Z_ISREF_P(free_op_data)) {
  45096. if (Z_REFCOUNTED_P(value)) {
  45097. Z_ADDREF_P(value);
  45098. }
  45099. zval_ptr_dtor_nogc(free_op_data);
  45100. }
  45101. } else if (IS_CV == IS_CONST) {
  45102. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  45103. Z_ADDREF_P(value);
  45104. }
  45105. }
  45106. } else {
  45107. dim = EX_VAR(opline->op2.var);
  45108. if (IS_CV == IS_CONST) {
  45109. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  45110. } else {
  45111. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  45112. }
  45113. if (UNEXPECTED(variable_ptr == NULL)) {
  45114. goto assign_dim_error;
  45115. }
  45116. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  45117. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  45118. }
  45119. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  45120. ZVAL_COPY(EX_VAR(opline->result.var), value);
  45121. }
  45122. } else {
  45123. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  45124. object_ptr = Z_REFVAL_P(object_ptr);
  45125. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  45126. goto try_assign_dim_array;
  45127. }
  45128. }
  45129. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  45130. zend_object *obj = Z_OBJ_P(object_ptr);
  45131. GC_ADDREF(obj);
  45132. dim = EX_VAR(opline->op2.var);
  45133. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
  45134. dim = ZVAL_UNDEFINED_OP2();
  45135. } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  45136. dim++;
  45137. }
  45138. value = EX_VAR((opline+1)->op1.var);
  45139. if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
  45140. value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
  45141. } else if (IS_CV & (IS_CV|IS_VAR)) {
  45142. ZVAL_DEREF(value);
  45143. }
  45144. zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
  45145. if (UNEXPECTED(GC_DELREF(obj) == 0)) {
  45146. zend_objects_store_del(obj);
  45147. }
  45148. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  45149. if (IS_CV == IS_UNUSED) {
  45150. zend_use_new_element_for_string();
  45151. UNDEF_RESULT();
  45152. } else {
  45153. dim = EX_VAR(opline->op2.var);
  45154. value = EX_VAR((opline+1)->op1.var);
  45155. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  45156. }
  45157. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  45158. if (Z_ISREF_P(orig_object_ptr)
  45159. && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
  45160. && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
  45161. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45162. UNDEF_RESULT();
  45163. } else {
  45164. HashTable *ht = zend_new_array(8);
  45165. zend_uchar old_type = Z_TYPE_P(object_ptr);
  45166. ZVAL_ARR(object_ptr, ht);
  45167. if (UNEXPECTED(old_type == IS_FALSE)) {
  45168. GC_ADDREF(ht);
  45169. zend_false_to_array_deprecated();
  45170. if (UNEXPECTED(GC_DELREF(ht) == 0)) {
  45171. zend_array_destroy(ht);
  45172. goto assign_dim_error;
  45173. }
  45174. }
  45175. goto try_assign_dim_array;
  45176. }
  45177. } else {
  45178. zend_use_scalar_as_array();
  45179. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45180. assign_dim_error:
  45181. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  45182. ZVAL_NULL(EX_VAR(opline->result.var));
  45183. }
  45184. }
  45185. }
  45186. if (IS_CV != IS_UNUSED) {
  45187. }
  45188. /* assign_dim has two opcodes! */
  45189. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  45190. }
  45191. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45192. {
  45193. USE_OPLINE
  45194. zval *value;
  45195. zval *variable_ptr;
  45196. SAVE_OPLINE();
  45197. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45198. variable_ptr = EX_VAR(opline->op1.var);
  45199. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  45200. if (UNEXPECTED(0)) {
  45201. ZVAL_COPY(EX_VAR(opline->result.var), value);
  45202. }
  45203. /* zend_assign_to_variable() always takes care of op2, never free it! */
  45204. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  45205. }
  45206. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45207. {
  45208. USE_OPLINE
  45209. zval *value;
  45210. zval *variable_ptr;
  45211. SAVE_OPLINE();
  45212. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45213. variable_ptr = EX_VAR(opline->op1.var);
  45214. value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
  45215. if (UNEXPECTED(1)) {
  45216. ZVAL_COPY(EX_VAR(opline->result.var), value);
  45217. }
  45218. /* zend_assign_to_variable() always takes care of op2, never free it! */
  45219. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  45220. }
  45221. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45222. {
  45223. USE_OPLINE
  45224. zval *variable_ptr;
  45225. zval *value_ptr;
  45226. SAVE_OPLINE();
  45227. value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
  45228. variable_ptr = EX_VAR(opline->op1.var);
  45229. if (IS_CV == IS_VAR &&
  45230. UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
  45231. zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
  45232. variable_ptr = &EG(uninitialized_zval);
  45233. } else if (IS_CV == IS_VAR &&
  45234. opline->extended_value == ZEND_RETURNS_FUNCTION &&
  45235. UNEXPECTED(!Z_ISREF_P(value_ptr))) {
  45236. variable_ptr = zend_wrong_assign_to_variable_reference(
  45237. variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45238. } else {
  45239. zend_assign_to_variable_reference(variable_ptr, value_ptr);
  45240. }
  45241. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  45242. ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
  45243. }
  45244. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  45245. }
  45246. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45247. {
  45248. USE_OPLINE
  45249. zval *property, *container, *value_ptr;
  45250. SAVE_OPLINE();
  45251. container = EX_VAR(opline->op1.var);
  45252. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45253. value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
  45254. if (1) {
  45255. if (IS_CV == IS_UNUSED) {
  45256. if (IS_CV == IS_CONST) {
  45257. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45258. } else {
  45259. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45260. }
  45261. } else {
  45262. if (IS_CV == IS_CONST) {
  45263. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45264. } else {
  45265. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45266. }
  45267. }
  45268. } else {
  45269. zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45270. }
  45271. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
  45272. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  45273. }
  45274. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  45275. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45276. {
  45277. USE_OPLINE
  45278. zval *property, *container, *value_ptr;
  45279. SAVE_OPLINE();
  45280. container = EX_VAR(opline->op1.var);
  45281. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45282. value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
  45283. if (1) {
  45284. if (IS_CV == IS_UNUSED) {
  45285. if (IS_CV == IS_CONST) {
  45286. zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45287. } else {
  45288. zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45289. }
  45290. } else {
  45291. if (IS_CV == IS_CONST) {
  45292. zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45293. } else {
  45294. zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45295. }
  45296. }
  45297. } else {
  45298. zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
  45299. }
  45300. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  45301. }
  45302. /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
  45303. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45304. {
  45305. USE_OPLINE
  45306. zval *op1, *op2;
  45307. zend_string *op1_str, *op2_str, *str;
  45308. op1 = EX_VAR(opline->op1.var);
  45309. op2 = EX_VAR(opline->op2.var);
  45310. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  45311. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  45312. zend_string *op1_str = Z_STR_P(op1);
  45313. zend_string *op2_str = Z_STR_P(op2);
  45314. zend_string *str;
  45315. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  45316. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  45317. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  45318. } else {
  45319. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  45320. }
  45321. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  45322. zend_string_release_ex(op1_str, 0);
  45323. }
  45324. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  45325. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  45326. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  45327. } else {
  45328. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  45329. }
  45330. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  45331. zend_string_release_ex(op2_str, 0);
  45332. }
  45333. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  45334. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  45335. size_t len = ZSTR_LEN(op1_str);
  45336. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  45337. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  45338. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  45339. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  45340. zend_string_release_ex(op2_str, 0);
  45341. }
  45342. } else {
  45343. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  45344. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  45345. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  45346. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  45347. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  45348. zend_string_release_ex(op1_str, 0);
  45349. }
  45350. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  45351. zend_string_release_ex(op2_str, 0);
  45352. }
  45353. }
  45354. ZEND_VM_NEXT_OPCODE();
  45355. }
  45356. SAVE_OPLINE();
  45357. if (IS_CV == IS_CONST) {
  45358. op1_str = Z_STR_P(op1);
  45359. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  45360. op1_str = zend_string_copy(Z_STR_P(op1));
  45361. } else {
  45362. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  45363. ZVAL_UNDEFINED_OP1();
  45364. }
  45365. op1_str = zval_get_string_func(op1);
  45366. }
  45367. if (IS_CV == IS_CONST) {
  45368. op2_str = Z_STR_P(op2);
  45369. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  45370. op2_str = zend_string_copy(Z_STR_P(op2));
  45371. } else {
  45372. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  45373. ZVAL_UNDEFINED_OP2();
  45374. }
  45375. op2_str = zval_get_string_func(op2);
  45376. }
  45377. do {
  45378. if (IS_CV != IS_CONST) {
  45379. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  45380. if (IS_CV == IS_CONST) {
  45381. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  45382. GC_ADDREF(op2_str);
  45383. }
  45384. }
  45385. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  45386. zend_string_release_ex(op1_str, 0);
  45387. break;
  45388. }
  45389. }
  45390. if (IS_CV != IS_CONST) {
  45391. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  45392. if (IS_CV == IS_CONST) {
  45393. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  45394. GC_ADDREF(op1_str);
  45395. }
  45396. }
  45397. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  45398. zend_string_release_ex(op2_str, 0);
  45399. break;
  45400. }
  45401. }
  45402. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  45403. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  45404. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  45405. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  45406. if (IS_CV != IS_CONST) {
  45407. zend_string_release_ex(op1_str, 0);
  45408. }
  45409. if (IS_CV != IS_CONST) {
  45410. zend_string_release_ex(op2_str, 0);
  45411. }
  45412. } while (0);
  45413. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  45414. }
  45415. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45416. {
  45417. USE_OPLINE
  45418. zval *function_name;
  45419. zval *object;
  45420. zend_function *fbc;
  45421. zend_class_entry *called_scope;
  45422. zend_object *obj;
  45423. zend_execute_data *call;
  45424. uint32_t call_info;
  45425. SAVE_OPLINE();
  45426. object = EX_VAR(opline->op1.var);
  45427. if (IS_CV != IS_CONST) {
  45428. function_name = EX_VAR(opline->op2.var);
  45429. }
  45430. if (IS_CV != IS_CONST &&
  45431. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  45432. do {
  45433. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  45434. function_name = Z_REFVAL_P(function_name);
  45435. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  45436. break;
  45437. }
  45438. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  45439. ZVAL_UNDEFINED_OP2();
  45440. if (UNEXPECTED(EG(exception) != NULL)) {
  45441. HANDLE_EXCEPTION();
  45442. }
  45443. }
  45444. zend_throw_error(NULL, "Method name must be a string");
  45445. HANDLE_EXCEPTION();
  45446. } while (0);
  45447. }
  45448. if (IS_CV == IS_UNUSED) {
  45449. obj = Z_OBJ_P(object);
  45450. } else {
  45451. do {
  45452. if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  45453. obj = Z_OBJ_P(object);
  45454. } else {
  45455. if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  45456. zend_reference *ref = Z_REF_P(object);
  45457. object = &ref->val;
  45458. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  45459. obj = Z_OBJ_P(object);
  45460. if (IS_CV & IS_VAR) {
  45461. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  45462. efree_size(ref, sizeof(zend_reference));
  45463. } else {
  45464. Z_ADDREF_P(object);
  45465. }
  45466. }
  45467. break;
  45468. }
  45469. }
  45470. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  45471. object = ZVAL_UNDEFINED_OP1();
  45472. if (UNEXPECTED(EG(exception) != NULL)) {
  45473. if (IS_CV != IS_CONST) {
  45474. }
  45475. HANDLE_EXCEPTION();
  45476. }
  45477. }
  45478. if (IS_CV == IS_CONST) {
  45479. function_name = EX_VAR(opline->op2.var);
  45480. }
  45481. zend_invalid_method_call(object, function_name);
  45482. HANDLE_EXCEPTION();
  45483. }
  45484. } while (0);
  45485. }
  45486. called_scope = obj->ce;
  45487. if (IS_CV == IS_CONST &&
  45488. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  45489. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  45490. } else {
  45491. zend_object *orig_obj = obj;
  45492. if (IS_CV == IS_CONST) {
  45493. function_name = EX_VAR(opline->op2.var);
  45494. }
  45495. /* First, locate the function. */
  45496. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  45497. if (UNEXPECTED(fbc == NULL)) {
  45498. if (EXPECTED(!EG(exception))) {
  45499. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  45500. }
  45501. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
  45502. zend_objects_store_del(orig_obj);
  45503. }
  45504. HANDLE_EXCEPTION();
  45505. }
  45506. if (IS_CV == IS_CONST &&
  45507. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  45508. EXPECTED(obj == orig_obj)) {
  45509. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  45510. }
  45511. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  45512. GC_ADDREF(obj); /* For $this pointer */
  45513. if (GC_DELREF(orig_obj) == 0) {
  45514. zend_objects_store_del(orig_obj);
  45515. }
  45516. }
  45517. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
  45518. init_func_run_time_cache(&fbc->op_array);
  45519. }
  45520. }
  45521. if (IS_CV != IS_CONST) {
  45522. }
  45523. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
  45524. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  45525. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
  45526. zend_objects_store_del(obj);
  45527. if (UNEXPECTED(EG(exception))) {
  45528. HANDLE_EXCEPTION();
  45529. }
  45530. }
  45531. /* call static method */
  45532. obj = (zend_object*)called_scope;
  45533. call_info = ZEND_CALL_NESTED_FUNCTION;
  45534. } else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  45535. if (IS_CV == IS_CV) {
  45536. GC_ADDREF(obj); /* For $this pointer */
  45537. }
  45538. /* CV may be changed indirectly (e.g. when it's a reference) */
  45539. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
  45540. }
  45541. call = zend_vm_stack_push_call_frame(call_info,
  45542. fbc, opline->extended_value, obj);
  45543. call->prev_execute_data = EX(call);
  45544. EX(call) = call;
  45545. ZEND_VM_NEXT_OPCODE();
  45546. }
  45547. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45548. {
  45549. USE_OPLINE
  45550. zval *expr_ptr, new_expr;
  45551. SAVE_OPLINE();
  45552. if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
  45553. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  45554. expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  45555. if (Z_ISREF_P(expr_ptr)) {
  45556. Z_ADDREF_P(expr_ptr);
  45557. } else {
  45558. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  45559. }
  45560. } else {
  45561. expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  45562. if (IS_CV == IS_TMP_VAR) {
  45563. /* pass */
  45564. } else if (IS_CV == IS_CONST) {
  45565. Z_TRY_ADDREF_P(expr_ptr);
  45566. } else if (IS_CV == IS_CV) {
  45567. ZVAL_DEREF(expr_ptr);
  45568. Z_TRY_ADDREF_P(expr_ptr);
  45569. } else /* if (IS_CV == IS_VAR) */ {
  45570. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  45571. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  45572. expr_ptr = Z_REFVAL_P(expr_ptr);
  45573. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  45574. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  45575. expr_ptr = &new_expr;
  45576. efree_size(ref, sizeof(zend_reference));
  45577. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  45578. Z_ADDREF_P(expr_ptr);
  45579. }
  45580. }
  45581. }
  45582. }
  45583. if (IS_CV != IS_UNUSED) {
  45584. zval *offset = EX_VAR(opline->op2.var);
  45585. zend_string *str;
  45586. zend_ulong hval;
  45587. add_again:
  45588. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  45589. str = Z_STR_P(offset);
  45590. if (IS_CV != IS_CONST) {
  45591. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  45592. goto num_index;
  45593. }
  45594. }
  45595. str_index:
  45596. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  45597. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  45598. hval = Z_LVAL_P(offset);
  45599. num_index:
  45600. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  45601. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  45602. offset = Z_REFVAL_P(offset);
  45603. goto add_again;
  45604. } else if (Z_TYPE_P(offset) == IS_NULL) {
  45605. str = ZSTR_EMPTY_ALLOC();
  45606. goto str_index;
  45607. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  45608. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  45609. goto num_index;
  45610. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  45611. hval = 0;
  45612. goto num_index;
  45613. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  45614. hval = 1;
  45615. goto num_index;
  45616. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  45617. zend_use_resource_as_offset(offset);
  45618. hval = Z_RES_HANDLE_P(offset);
  45619. goto num_index;
  45620. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  45621. ZVAL_UNDEFINED_OP2();
  45622. str = ZSTR_EMPTY_ALLOC();
  45623. goto str_index;
  45624. } else {
  45625. zend_illegal_offset();
  45626. zval_ptr_dtor_nogc(expr_ptr);
  45627. }
  45628. } else {
  45629. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  45630. zend_cannot_add_element();
  45631. zval_ptr_dtor_nogc(expr_ptr);
  45632. }
  45633. }
  45634. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  45635. }
  45636. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45637. {
  45638. zval *array;
  45639. uint32_t size;
  45640. USE_OPLINE
  45641. array = EX_VAR(opline->result.var);
  45642. if (IS_CV != IS_UNUSED) {
  45643. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  45644. ZVAL_ARR(array, zend_new_array(size));
  45645. /* Explicitly initialize array as not-packed if flag is set */
  45646. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  45647. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  45648. }
  45649. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  45650. } else {
  45651. ZVAL_ARR(array, zend_new_array(0));
  45652. ZEND_VM_NEXT_OPCODE();
  45653. }
  45654. }
  45655. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45656. {
  45657. USE_OPLINE
  45658. zval *container;
  45659. zval *offset;
  45660. zend_ulong hval;
  45661. zend_string *key;
  45662. SAVE_OPLINE();
  45663. container = EX_VAR(opline->op1.var);
  45664. offset = EX_VAR(opline->op2.var);
  45665. do {
  45666. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  45667. HashTable *ht;
  45668. unset_dim_array:
  45669. SEPARATE_ARRAY(container);
  45670. ht = Z_ARRVAL_P(container);
  45671. offset_again:
  45672. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  45673. key = Z_STR_P(offset);
  45674. if (IS_CV != IS_CONST) {
  45675. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  45676. goto num_index_dim;
  45677. }
  45678. }
  45679. str_index_dim:
  45680. ZEND_ASSERT(ht != &EG(symbol_table));
  45681. zend_hash_del(ht, key);
  45682. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  45683. hval = Z_LVAL_P(offset);
  45684. num_index_dim:
  45685. zend_hash_index_del(ht, hval);
  45686. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  45687. offset = Z_REFVAL_P(offset);
  45688. goto offset_again;
  45689. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  45690. hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
  45691. goto num_index_dim;
  45692. } else if (Z_TYPE_P(offset) == IS_NULL) {
  45693. key = ZSTR_EMPTY_ALLOC();
  45694. goto str_index_dim;
  45695. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  45696. hval = 0;
  45697. goto num_index_dim;
  45698. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  45699. hval = 1;
  45700. goto num_index_dim;
  45701. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  45702. zend_use_resource_as_offset(offset);
  45703. hval = Z_RES_HANDLE_P(offset);
  45704. goto num_index_dim;
  45705. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  45706. ZVAL_UNDEFINED_OP2();
  45707. key = ZSTR_EMPTY_ALLOC();
  45708. goto str_index_dim;
  45709. } else {
  45710. zend_type_error("Illegal offset type in unset");
  45711. }
  45712. break;
  45713. } else if (Z_ISREF_P(container)) {
  45714. container = Z_REFVAL_P(container);
  45715. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  45716. goto unset_dim_array;
  45717. }
  45718. }
  45719. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  45720. container = ZVAL_UNDEFINED_OP1();
  45721. }
  45722. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  45723. offset = ZVAL_UNDEFINED_OP2();
  45724. }
  45725. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  45726. if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  45727. offset++;
  45728. }
  45729. Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
  45730. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  45731. zend_throw_error(NULL, "Cannot unset string offsets");
  45732. } else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
  45733. zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
  45734. } else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
  45735. zend_false_to_array_deprecated();
  45736. }
  45737. } while (0);
  45738. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  45739. }
  45740. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45741. {
  45742. USE_OPLINE
  45743. zval *container;
  45744. zval *offset;
  45745. zend_string *name, *tmp_name;
  45746. SAVE_OPLINE();
  45747. container = EX_VAR(opline->op1.var);
  45748. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45749. do {
  45750. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  45751. if (Z_ISREF_P(container)) {
  45752. container = Z_REFVAL_P(container);
  45753. if (Z_TYPE_P(container) != IS_OBJECT) {
  45754. if (IS_CV == IS_CV
  45755. && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  45756. ZVAL_UNDEFINED_OP1();
  45757. }
  45758. break;
  45759. }
  45760. } else {
  45761. break;
  45762. }
  45763. }
  45764. if (IS_CV == IS_CONST) {
  45765. name = Z_STR_P(offset);
  45766. } else {
  45767. name = zval_try_get_tmp_string(offset, &tmp_name);
  45768. if (UNEXPECTED(!name)) {
  45769. break;
  45770. }
  45771. }
  45772. Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  45773. if (IS_CV != IS_CONST) {
  45774. zend_tmp_string_release(tmp_name);
  45775. }
  45776. } while (0);
  45777. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  45778. }
  45779. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45780. {
  45781. USE_OPLINE
  45782. zval *container;
  45783. bool result;
  45784. zend_ulong hval;
  45785. zval *offset;
  45786. SAVE_OPLINE();
  45787. container = EX_VAR(opline->op1.var);
  45788. offset = EX_VAR(opline->op2.var);
  45789. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  45790. HashTable *ht;
  45791. zval *value;
  45792. zend_string *str;
  45793. isset_dim_obj_array:
  45794. ht = Z_ARRVAL_P(container);
  45795. isset_again:
  45796. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  45797. str = Z_STR_P(offset);
  45798. if (IS_CV != IS_CONST) {
  45799. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  45800. goto num_index_prop;
  45801. }
  45802. }
  45803. value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
  45804. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  45805. hval = Z_LVAL_P(offset);
  45806. num_index_prop:
  45807. value = zend_hash_index_find(ht, hval);
  45808. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  45809. offset = Z_REFVAL_P(offset);
  45810. goto isset_again;
  45811. } else {
  45812. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  45813. if (UNEXPECTED(EG(exception))) {
  45814. result = 0;
  45815. goto isset_dim_obj_exit;
  45816. }
  45817. }
  45818. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  45819. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  45820. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  45821. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  45822. if (IS_CV & (IS_CONST|IS_CV)) {
  45823. /* avoid exception check */
  45824. ZEND_VM_SMART_BRANCH(result, 0);
  45825. }
  45826. } else {
  45827. result = (value == NULL || !i_zend_is_true(value));
  45828. }
  45829. goto isset_dim_obj_exit;
  45830. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  45831. container = Z_REFVAL_P(container);
  45832. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  45833. goto isset_dim_obj_array;
  45834. }
  45835. }
  45836. if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  45837. offset++;
  45838. }
  45839. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  45840. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  45841. } else {
  45842. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  45843. }
  45844. isset_dim_obj_exit:
  45845. ZEND_VM_SMART_BRANCH(result, 1);
  45846. }
  45847. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45848. {
  45849. USE_OPLINE
  45850. zval *container;
  45851. int result;
  45852. zval *offset;
  45853. zend_string *name, *tmp_name;
  45854. SAVE_OPLINE();
  45855. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  45856. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45857. if (IS_CV == IS_CONST ||
  45858. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  45859. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  45860. container = Z_REFVAL_P(container);
  45861. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  45862. result = (opline->extended_value & ZEND_ISEMPTY);
  45863. goto isset_object_finish;
  45864. }
  45865. } else {
  45866. result = (opline->extended_value & ZEND_ISEMPTY);
  45867. goto isset_object_finish;
  45868. }
  45869. }
  45870. if (IS_CV == IS_CONST) {
  45871. name = Z_STR_P(offset);
  45872. } else {
  45873. name = zval_try_get_tmp_string(offset, &tmp_name);
  45874. if (UNEXPECTED(!name)) {
  45875. result = 0;
  45876. goto isset_object_finish;
  45877. }
  45878. }
  45879. result =
  45880. (opline->extended_value & ZEND_ISEMPTY) ^
  45881. 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));
  45882. if (IS_CV != IS_CONST) {
  45883. zend_tmp_string_release(tmp_name);
  45884. }
  45885. isset_object_finish:
  45886. ZEND_VM_SMART_BRANCH(result, 1);
  45887. }
  45888. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45889. {
  45890. USE_OPLINE
  45891. zval *key, *subject;
  45892. HashTable *ht;
  45893. bool result;
  45894. SAVE_OPLINE();
  45895. key = EX_VAR(opline->op1.var);
  45896. subject = EX_VAR(opline->op2.var);
  45897. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  45898. array_key_exists_array:
  45899. ht = Z_ARRVAL_P(subject);
  45900. result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
  45901. } else {
  45902. if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
  45903. subject = Z_REFVAL_P(subject);
  45904. if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
  45905. goto array_key_exists_array;
  45906. }
  45907. }
  45908. zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
  45909. result = 0;
  45910. }
  45911. ZEND_VM_SMART_BRANCH(result, 1);
  45912. }
  45913. /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
  45914. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  45915. {
  45916. USE_OPLINE
  45917. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  45918. SAVE_OPLINE();
  45919. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  45920. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  45921. }
  45922. /* Destroy the previously yielded value */
  45923. zval_ptr_dtor(&generator->value);
  45924. /* Destroy the previously yielded key */
  45925. zval_ptr_dtor(&generator->key);
  45926. /* Set the new yielded value */
  45927. if (IS_CV != IS_UNUSED) {
  45928. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  45929. /* Constants and temporary variables aren't yieldable by reference,
  45930. * but we still allow them with a notice. */
  45931. if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
  45932. zval *value;
  45933. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  45934. value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  45935. ZVAL_COPY_VALUE(&generator->value, value);
  45936. if (IS_CV == IS_CONST) {
  45937. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  45938. Z_ADDREF(generator->value);
  45939. }
  45940. }
  45941. } else {
  45942. zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  45943. /* If a function call result is yielded and the function did
  45944. * not return by reference we throw a notice. */
  45945. do {
  45946. if (IS_CV == IS_VAR) {
  45947. ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
  45948. if (opline->extended_value == ZEND_RETURNS_FUNCTION
  45949. && !Z_ISREF_P(value_ptr)) {
  45950. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  45951. ZVAL_COPY(&generator->value, value_ptr);
  45952. break;
  45953. }
  45954. }
  45955. if (Z_ISREF_P(value_ptr)) {
  45956. Z_ADDREF_P(value_ptr);
  45957. } else {
  45958. ZVAL_MAKE_REF_EX(value_ptr, 2);
  45959. }
  45960. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  45961. } while (0);
  45962. }
  45963. } else {
  45964. zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  45965. /* Consts, temporary variables and references need copying */
  45966. if (IS_CV == IS_CONST) {
  45967. ZVAL_COPY_VALUE(&generator->value, value);
  45968. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  45969. Z_ADDREF(generator->value);
  45970. }
  45971. } else if (IS_CV == IS_TMP_VAR) {
  45972. ZVAL_COPY_VALUE(&generator->value, value);
  45973. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  45974. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  45975. } else {
  45976. ZVAL_COPY_VALUE(&generator->value, value);
  45977. if (IS_CV == IS_CV) {
  45978. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  45979. }
  45980. }
  45981. }
  45982. } else {
  45983. /* If no value was specified yield null */
  45984. ZVAL_NULL(&generator->value);
  45985. }
  45986. /* Set the new yielded key */
  45987. if (IS_CV != IS_UNUSED) {
  45988. zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  45989. if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
  45990. key = Z_REFVAL_P(key);
  45991. }
  45992. ZVAL_COPY(&generator->key, key);
  45993. if (Z_TYPE(generator->key) == IS_LONG
  45994. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  45995. ) {
  45996. generator->largest_used_integer_key = Z_LVAL(generator->key);
  45997. }
  45998. } else {
  45999. /* If no key was specified we use auto-increment keys */
  46000. generator->largest_used_integer_key++;
  46001. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  46002. }
  46003. if (RETURN_VALUE_USED(opline)) {
  46004. /* If the return value of yield is used set the send
  46005. * target and initialize it to NULL */
  46006. generator->send_target = EX_VAR(opline->result.var);
  46007. ZVAL_NULL(generator->send_target);
  46008. } else {
  46009. generator->send_target = NULL;
  46010. }
  46011. /* We increment to the next op, so we are at the correct position when the
  46012. * generator is resumed. */
  46013. ZEND_VM_INC_OPCODE();
  46014. /* The GOTO VM uses a local opline variable. We need to set the opline
  46015. * variable in execute_data so we don't resume at an old position. */
  46016. SAVE_OPLINE();
  46017. ZEND_VM_RETURN();
  46018. }
  46019. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  46020. {
  46021. /* This is declared below the specializations for MAY_BE_LONG/MAY_BE_DOUBLE so those will be used instead if possible. */
  46022. /* This optimizes $x === SOME_CONST_EXPR and $x === $y for non-refs and non-undef, which can't throw. */
  46023. /* (Infinite recursion when comparing arrays is an uncatchable fatal error) */
  46024. USE_OPLINE
  46025. zval *op1, *op2;
  46026. bool result;
  46027. op1 = EX_VAR(opline->op1.var);
  46028. op2 = EX_VAR(opline->op2.var);
  46029. result = fast_is_identical_function(op1, op2);
  46030. /* Free is a no-op for const/cv */
  46031. ZEND_VM_SMART_BRANCH(result, 0);
  46032. }
  46033. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  46034. {
  46035. USE_OPLINE
  46036. zval *op1, *op2;
  46037. bool result;
  46038. op1 = EX_VAR(opline->op1.var);
  46039. op2 = EX_VAR(opline->op2.var);
  46040. result = fast_is_identical_function(op1, op2);
  46041. /* Free is a no-op for const/cv */
  46042. ZEND_VM_SMART_BRANCH(!result, 0);
  46043. }
  46044. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  46045. {
  46046. USE_OPLINE
  46047. SAVE_OPLINE();
  46048. zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);
  46049. ZEND_VM_NEXT_OPCODE(); /* Never reached */
  46050. }
  46051. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  46052. # undef ZEND_VM_TAIL_CALL
  46053. # undef ZEND_VM_CONTINUE
  46054. # undef ZEND_VM_RETURN
  46055. # define ZEND_VM_TAIL_CALL(call) call; ZEND_VM_CONTINUE()
  46056. # define ZEND_VM_CONTINUE() HYBRID_NEXT()
  46057. # define ZEND_VM_RETURN() goto HYBRID_HALT_LABEL
  46058. #endif
  46059. #if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__)
  46060. # pragma GCC push_options
  46061. # pragma GCC optimize("no-gcse")
  46062. # pragma GCC optimize("no-ivopts")
  46063. #endif
  46064. ZEND_API void execute_ex(zend_execute_data *ex)
  46065. {
  46066. DCL_OPLINE
  46067. #if defined(ZEND_VM_IP_GLOBAL_REG) || defined(ZEND_VM_FP_GLOBAL_REG)
  46068. struct {
  46069. #ifdef ZEND_VM_IP_GLOBAL_REG
  46070. const zend_op *orig_opline;
  46071. #endif
  46072. #ifdef ZEND_VM_FP_GLOBAL_REG
  46073. zend_execute_data *orig_execute_data;
  46074. #ifdef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE
  46075. char hybrid_jit_red_zone[ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE];
  46076. #endif
  46077. #endif
  46078. } vm_stack_data;
  46079. #endif
  46080. #ifdef ZEND_VM_IP_GLOBAL_REG
  46081. vm_stack_data.orig_opline = opline;
  46082. #endif
  46083. #ifdef ZEND_VM_FP_GLOBAL_REG
  46084. vm_stack_data.orig_execute_data = execute_data;
  46085. execute_data = ex;
  46086. #else
  46087. zend_execute_data *execute_data = ex;
  46088. #endif
  46089. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  46090. if (UNEXPECTED(execute_data == NULL)) {
  46091. static const void * const labels[] = {
  46092. (void*)&&ZEND_NOP_SPEC_LABEL,
  46093. (void*)&&ZEND_ADD_SPEC_CONST_CONST_LABEL,
  46094. (void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
  46095. (void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
  46096. (void*)&&ZEND_NULL_LABEL,
  46097. (void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
  46098. (void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
  46099. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46100. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46101. (void*)&&ZEND_NULL_LABEL,
  46102. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46103. (void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
  46104. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46105. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46106. (void*)&&ZEND_NULL_LABEL,
  46107. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46108. (void*)&&ZEND_NULL_LABEL,
  46109. (void*)&&ZEND_NULL_LABEL,
  46110. (void*)&&ZEND_NULL_LABEL,
  46111. (void*)&&ZEND_NULL_LABEL,
  46112. (void*)&&ZEND_NULL_LABEL,
  46113. (void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
  46114. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46115. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46116. (void*)&&ZEND_NULL_LABEL,
  46117. (void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46118. (void*)&&ZEND_SUB_SPEC_CONST_CONST_LABEL,
  46119. (void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
  46120. (void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
  46121. (void*)&&ZEND_NULL_LABEL,
  46122. (void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
  46123. (void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
  46124. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46125. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46126. (void*)&&ZEND_NULL_LABEL,
  46127. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46128. (void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
  46129. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46130. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46131. (void*)&&ZEND_NULL_LABEL,
  46132. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46133. (void*)&&ZEND_NULL_LABEL,
  46134. (void*)&&ZEND_NULL_LABEL,
  46135. (void*)&&ZEND_NULL_LABEL,
  46136. (void*)&&ZEND_NULL_LABEL,
  46137. (void*)&&ZEND_NULL_LABEL,
  46138. (void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
  46139. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46140. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46141. (void*)&&ZEND_NULL_LABEL,
  46142. (void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46143. (void*)&&ZEND_MUL_SPEC_CONST_CONST_LABEL,
  46144. (void*)&&ZEND_NULL_LABEL,
  46145. (void*)&&ZEND_NULL_LABEL,
  46146. (void*)&&ZEND_NULL_LABEL,
  46147. (void*)&&ZEND_NULL_LABEL,
  46148. (void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
  46149. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46150. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46151. (void*)&&ZEND_NULL_LABEL,
  46152. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46153. (void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
  46154. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46155. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46156. (void*)&&ZEND_NULL_LABEL,
  46157. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46158. (void*)&&ZEND_NULL_LABEL,
  46159. (void*)&&ZEND_NULL_LABEL,
  46160. (void*)&&ZEND_NULL_LABEL,
  46161. (void*)&&ZEND_NULL_LABEL,
  46162. (void*)&&ZEND_NULL_LABEL,
  46163. (void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
  46164. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46165. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46166. (void*)&&ZEND_NULL_LABEL,
  46167. (void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46168. (void*)&&ZEND_DIV_SPEC_CONST_CONST_LABEL,
  46169. (void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
  46170. (void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
  46171. (void*)&&ZEND_NULL_LABEL,
  46172. (void*)&&ZEND_DIV_SPEC_CONST_CV_LABEL,
  46173. (void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
  46174. (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
  46175. (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
  46176. (void*)&&ZEND_NULL_LABEL,
  46177. (void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
  46178. (void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
  46179. (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
  46180. (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
  46181. (void*)&&ZEND_NULL_LABEL,
  46182. (void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
  46183. (void*)&&ZEND_NULL_LABEL,
  46184. (void*)&&ZEND_NULL_LABEL,
  46185. (void*)&&ZEND_NULL_LABEL,
  46186. (void*)&&ZEND_NULL_LABEL,
  46187. (void*)&&ZEND_NULL_LABEL,
  46188. (void*)&&ZEND_DIV_SPEC_CV_CONST_LABEL,
  46189. (void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
  46190. (void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
  46191. (void*)&&ZEND_NULL_LABEL,
  46192. (void*)&&ZEND_DIV_SPEC_CV_CV_LABEL,
  46193. (void*)&&ZEND_MOD_SPEC_CONST_CONST_LABEL,
  46194. (void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
  46195. (void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
  46196. (void*)&&ZEND_NULL_LABEL,
  46197. (void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
  46198. (void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
  46199. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46200. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46201. (void*)&&ZEND_NULL_LABEL,
  46202. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46203. (void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
  46204. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46205. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46206. (void*)&&ZEND_NULL_LABEL,
  46207. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46208. (void*)&&ZEND_NULL_LABEL,
  46209. (void*)&&ZEND_NULL_LABEL,
  46210. (void*)&&ZEND_NULL_LABEL,
  46211. (void*)&&ZEND_NULL_LABEL,
  46212. (void*)&&ZEND_NULL_LABEL,
  46213. (void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
  46214. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46215. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46216. (void*)&&ZEND_NULL_LABEL,
  46217. (void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46218. (void*)&&ZEND_SL_SPEC_CONST_CONST_LABEL,
  46219. (void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
  46220. (void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
  46221. (void*)&&ZEND_NULL_LABEL,
  46222. (void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
  46223. (void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
  46224. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46225. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46226. (void*)&&ZEND_NULL_LABEL,
  46227. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46228. (void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
  46229. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46230. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46231. (void*)&&ZEND_NULL_LABEL,
  46232. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46233. (void*)&&ZEND_NULL_LABEL,
  46234. (void*)&&ZEND_NULL_LABEL,
  46235. (void*)&&ZEND_NULL_LABEL,
  46236. (void*)&&ZEND_NULL_LABEL,
  46237. (void*)&&ZEND_NULL_LABEL,
  46238. (void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
  46239. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46240. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46241. (void*)&&ZEND_NULL_LABEL,
  46242. (void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46243. (void*)&&ZEND_SR_SPEC_CONST_CONST_LABEL,
  46244. (void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
  46245. (void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
  46246. (void*)&&ZEND_NULL_LABEL,
  46247. (void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
  46248. (void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
  46249. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46250. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46251. (void*)&&ZEND_NULL_LABEL,
  46252. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46253. (void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
  46254. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46255. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46256. (void*)&&ZEND_NULL_LABEL,
  46257. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46258. (void*)&&ZEND_NULL_LABEL,
  46259. (void*)&&ZEND_NULL_LABEL,
  46260. (void*)&&ZEND_NULL_LABEL,
  46261. (void*)&&ZEND_NULL_LABEL,
  46262. (void*)&&ZEND_NULL_LABEL,
  46263. (void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
  46264. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46265. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46266. (void*)&&ZEND_NULL_LABEL,
  46267. (void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46268. (void*)&&ZEND_NULL_LABEL,
  46269. (void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
  46270. (void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
  46271. (void*)&&ZEND_NULL_LABEL,
  46272. (void*)&&ZEND_CONCAT_SPEC_CONST_CV_LABEL,
  46273. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
  46274. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  46275. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  46276. (void*)&&ZEND_NULL_LABEL,
  46277. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
  46278. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
  46279. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  46280. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  46281. (void*)&&ZEND_NULL_LABEL,
  46282. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
  46283. (void*)&&ZEND_NULL_LABEL,
  46284. (void*)&&ZEND_NULL_LABEL,
  46285. (void*)&&ZEND_NULL_LABEL,
  46286. (void*)&&ZEND_NULL_LABEL,
  46287. (void*)&&ZEND_NULL_LABEL,
  46288. (void*)&&ZEND_CONCAT_SPEC_CV_CONST_LABEL,
  46289. (void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
  46290. (void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
  46291. (void*)&&ZEND_NULL_LABEL,
  46292. (void*)&&ZEND_CONCAT_SPEC_CV_CV_LABEL,
  46293. (void*)&&ZEND_BW_OR_SPEC_CONST_CONST_LABEL,
  46294. (void*)&&ZEND_NULL_LABEL,
  46295. (void*)&&ZEND_NULL_LABEL,
  46296. (void*)&&ZEND_NULL_LABEL,
  46297. (void*)&&ZEND_NULL_LABEL,
  46298. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
  46299. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46300. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46301. (void*)&&ZEND_NULL_LABEL,
  46302. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46303. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
  46304. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46305. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46306. (void*)&&ZEND_NULL_LABEL,
  46307. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46308. (void*)&&ZEND_NULL_LABEL,
  46309. (void*)&&ZEND_NULL_LABEL,
  46310. (void*)&&ZEND_NULL_LABEL,
  46311. (void*)&&ZEND_NULL_LABEL,
  46312. (void*)&&ZEND_NULL_LABEL,
  46313. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
  46314. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46315. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46316. (void*)&&ZEND_NULL_LABEL,
  46317. (void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46318. (void*)&&ZEND_BW_AND_SPEC_CONST_CONST_LABEL,
  46319. (void*)&&ZEND_NULL_LABEL,
  46320. (void*)&&ZEND_NULL_LABEL,
  46321. (void*)&&ZEND_NULL_LABEL,
  46322. (void*)&&ZEND_NULL_LABEL,
  46323. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
  46324. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46325. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46326. (void*)&&ZEND_NULL_LABEL,
  46327. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46328. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
  46329. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46330. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46331. (void*)&&ZEND_NULL_LABEL,
  46332. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46333. (void*)&&ZEND_NULL_LABEL,
  46334. (void*)&&ZEND_NULL_LABEL,
  46335. (void*)&&ZEND_NULL_LABEL,
  46336. (void*)&&ZEND_NULL_LABEL,
  46337. (void*)&&ZEND_NULL_LABEL,
  46338. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
  46339. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46340. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46341. (void*)&&ZEND_NULL_LABEL,
  46342. (void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46343. (void*)&&ZEND_BW_XOR_SPEC_CONST_CONST_LABEL,
  46344. (void*)&&ZEND_NULL_LABEL,
  46345. (void*)&&ZEND_NULL_LABEL,
  46346. (void*)&&ZEND_NULL_LABEL,
  46347. (void*)&&ZEND_NULL_LABEL,
  46348. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
  46349. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46350. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46351. (void*)&&ZEND_NULL_LABEL,
  46352. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46353. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
  46354. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46355. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46356. (void*)&&ZEND_NULL_LABEL,
  46357. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46358. (void*)&&ZEND_NULL_LABEL,
  46359. (void*)&&ZEND_NULL_LABEL,
  46360. (void*)&&ZEND_NULL_LABEL,
  46361. (void*)&&ZEND_NULL_LABEL,
  46362. (void*)&&ZEND_NULL_LABEL,
  46363. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
  46364. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46365. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46366. (void*)&&ZEND_NULL_LABEL,
  46367. (void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46368. (void*)&&ZEND_POW_SPEC_CONST_CONST_LABEL,
  46369. (void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
  46370. (void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
  46371. (void*)&&ZEND_NULL_LABEL,
  46372. (void*)&&ZEND_POW_SPEC_CONST_CV_LABEL,
  46373. (void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
  46374. (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
  46375. (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
  46376. (void*)&&ZEND_NULL_LABEL,
  46377. (void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
  46378. (void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
  46379. (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
  46380. (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
  46381. (void*)&&ZEND_NULL_LABEL,
  46382. (void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
  46383. (void*)&&ZEND_NULL_LABEL,
  46384. (void*)&&ZEND_NULL_LABEL,
  46385. (void*)&&ZEND_NULL_LABEL,
  46386. (void*)&&ZEND_NULL_LABEL,
  46387. (void*)&&ZEND_NULL_LABEL,
  46388. (void*)&&ZEND_POW_SPEC_CV_CONST_LABEL,
  46389. (void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
  46390. (void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
  46391. (void*)&&ZEND_NULL_LABEL,
  46392. (void*)&&ZEND_POW_SPEC_CV_CV_LABEL,
  46393. (void*)&&ZEND_BW_NOT_SPEC_CONST_LABEL,
  46394. (void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
  46395. (void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
  46396. (void*)&&ZEND_NULL_LABEL,
  46397. (void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
  46398. (void*)&&ZEND_BOOL_NOT_SPEC_CONST_LABEL,
  46399. (void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
  46400. (void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
  46401. (void*)&&ZEND_NULL_LABEL,
  46402. (void*)&&ZEND_BOOL_NOT_SPEC_CV_LABEL,
  46403. (void*)&&ZEND_BOOL_XOR_SPEC_CONST_CONST_LABEL,
  46404. (void*)&&ZEND_NULL_LABEL,
  46405. (void*)&&ZEND_NULL_LABEL,
  46406. (void*)&&ZEND_NULL_LABEL,
  46407. (void*)&&ZEND_NULL_LABEL,
  46408. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
  46409. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
  46410. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
  46411. (void*)&&ZEND_NULL_LABEL,
  46412. (void*)&&ZEND_NULL_LABEL,
  46413. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
  46414. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
  46415. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
  46416. (void*)&&ZEND_NULL_LABEL,
  46417. (void*)&&ZEND_NULL_LABEL,
  46418. (void*)&&ZEND_NULL_LABEL,
  46419. (void*)&&ZEND_NULL_LABEL,
  46420. (void*)&&ZEND_NULL_LABEL,
  46421. (void*)&&ZEND_NULL_LABEL,
  46422. (void*)&&ZEND_NULL_LABEL,
  46423. (void*)&&ZEND_BOOL_XOR_SPEC_CV_CONST_LABEL,
  46424. (void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
  46425. (void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
  46426. (void*)&&ZEND_NULL_LABEL,
  46427. (void*)&&ZEND_BOOL_XOR_SPEC_CV_CV_LABEL,
  46428. (void*)&&ZEND_IS_IDENTICAL_SPEC_CONST_CONST_LABEL,
  46429. (void*)&&ZEND_NULL_LABEL,
  46430. (void*)&&ZEND_NULL_LABEL,
  46431. (void*)&&ZEND_NULL_LABEL,
  46432. (void*)&&ZEND_NULL_LABEL,
  46433. (void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_CONST_LABEL,
  46434. (void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_TMP_LABEL,
  46435. (void*)&&ZEND_NULL_LABEL,
  46436. (void*)&&ZEND_NULL_LABEL,
  46437. (void*)&&ZEND_NULL_LABEL,
  46438. (void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_CONST_LABEL,
  46439. (void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_TMP_LABEL,
  46440. (void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_VAR_LABEL,
  46441. (void*)&&ZEND_NULL_LABEL,
  46442. (void*)&&ZEND_NULL_LABEL,
  46443. (void*)&&ZEND_NULL_LABEL,
  46444. (void*)&&ZEND_NULL_LABEL,
  46445. (void*)&&ZEND_NULL_LABEL,
  46446. (void*)&&ZEND_NULL_LABEL,
  46447. (void*)&&ZEND_NULL_LABEL,
  46448. (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CONST_LABEL,
  46449. (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_TMP_LABEL,
  46450. (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_VAR_LABEL,
  46451. (void*)&&ZEND_NULL_LABEL,
  46452. (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CV_LABEL,
  46453. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_LABEL,
  46454. (void*)&&ZEND_NULL_LABEL,
  46455. (void*)&&ZEND_NULL_LABEL,
  46456. (void*)&&ZEND_NULL_LABEL,
  46457. (void*)&&ZEND_NULL_LABEL,
  46458. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_LABEL,
  46459. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_LABEL,
  46460. (void*)&&ZEND_NULL_LABEL,
  46461. (void*)&&ZEND_NULL_LABEL,
  46462. (void*)&&ZEND_NULL_LABEL,
  46463. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_LABEL,
  46464. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_LABEL,
  46465. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_LABEL,
  46466. (void*)&&ZEND_NULL_LABEL,
  46467. (void*)&&ZEND_NULL_LABEL,
  46468. (void*)&&ZEND_NULL_LABEL,
  46469. (void*)&&ZEND_NULL_LABEL,
  46470. (void*)&&ZEND_NULL_LABEL,
  46471. (void*)&&ZEND_NULL_LABEL,
  46472. (void*)&&ZEND_NULL_LABEL,
  46473. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_LABEL,
  46474. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_LABEL,
  46475. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_LABEL,
  46476. (void*)&&ZEND_NULL_LABEL,
  46477. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_LABEL,
  46478. (void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
  46479. (void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
  46480. (void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
  46481. (void*)&&ZEND_NULL_LABEL,
  46482. (void*)&&ZEND_NULL_LABEL,
  46483. (void*)&&ZEND_NULL_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_NULL_LABEL,
  46492. (void*)&&ZEND_NULL_LABEL,
  46493. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
  46494. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
  46495. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
  46496. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  46497. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
  46498. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
  46499. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  46500. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
  46501. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_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_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
  46509. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
  46510. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
  46511. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  46512. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
  46513. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_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_NULL_LABEL,
  46518. (void*)&&ZEND_NULL_LABEL,
  46519. (void*)&&ZEND_NULL_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_NULL_LABEL,
  46527. (void*)&&ZEND_NULL_LABEL,
  46528. (void*)&&ZEND_NULL_LABEL,
  46529. (void*)&&ZEND_NULL_LABEL,
  46530. (void*)&&ZEND_NULL_LABEL,
  46531. (void*)&&ZEND_NULL_LABEL,
  46532. (void*)&&ZEND_NULL_LABEL,
  46533. (void*)&&ZEND_NULL_LABEL,
  46534. (void*)&&ZEND_NULL_LABEL,
  46535. (void*)&&ZEND_NULL_LABEL,
  46536. (void*)&&ZEND_NULL_LABEL,
  46537. (void*)&&ZEND_NULL_LABEL,
  46538. (void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_LABEL,
  46539. (void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_LABEL,
  46540. (void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_LABEL,
  46541. (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
  46542. (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
  46543. (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
  46544. (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
  46545. (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
  46546. (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
  46547. (void*)&&ZEND_NULL_LABEL,
  46548. (void*)&&ZEND_NULL_LABEL,
  46549. (void*)&&ZEND_NULL_LABEL,
  46550. (void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_LABEL,
  46551. (void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_LABEL,
  46552. (void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_LABEL,
  46553. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
  46554. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
  46555. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
  46556. (void*)&&ZEND_NULL_LABEL,
  46557. (void*)&&ZEND_NULL_LABEL,
  46558. (void*)&&ZEND_NULL_LABEL,
  46559. (void*)&&ZEND_NULL_LABEL,
  46560. (void*)&&ZEND_NULL_LABEL,
  46561. (void*)&&ZEND_NULL_LABEL,
  46562. (void*)&&ZEND_NULL_LABEL,
  46563. (void*)&&ZEND_NULL_LABEL,
  46564. (void*)&&ZEND_NULL_LABEL,
  46565. (void*)&&ZEND_NULL_LABEL,
  46566. (void*)&&ZEND_NULL_LABEL,
  46567. (void*)&&ZEND_NULL_LABEL,
  46568. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
  46569. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
  46570. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
  46571. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  46572. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
  46573. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
  46574. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  46575. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
  46576. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_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_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
  46584. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
  46585. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
  46586. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  46587. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
  46588. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_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_NULL_LABEL,
  46593. (void*)&&ZEND_NULL_LABEL,
  46594. (void*)&&ZEND_NULL_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_NULL_LABEL,
  46602. (void*)&&ZEND_NULL_LABEL,
  46603. (void*)&&ZEND_NULL_LABEL,
  46604. (void*)&&ZEND_NULL_LABEL,
  46605. (void*)&&ZEND_NULL_LABEL,
  46606. (void*)&&ZEND_NULL_LABEL,
  46607. (void*)&&ZEND_NULL_LABEL,
  46608. (void*)&&ZEND_NULL_LABEL,
  46609. (void*)&&ZEND_NULL_LABEL,
  46610. (void*)&&ZEND_NULL_LABEL,
  46611. (void*)&&ZEND_NULL_LABEL,
  46612. (void*)&&ZEND_NULL_LABEL,
  46613. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_LABEL,
  46614. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_LABEL,
  46615. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_LABEL,
  46616. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
  46617. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
  46618. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
  46619. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
  46620. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
  46621. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
  46622. (void*)&&ZEND_NULL_LABEL,
  46623. (void*)&&ZEND_NULL_LABEL,
  46624. (void*)&&ZEND_NULL_LABEL,
  46625. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_LABEL,
  46626. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_LABEL,
  46627. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_LABEL,
  46628. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
  46629. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
  46630. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
  46631. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
  46632. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  46633. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  46634. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
  46635. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  46636. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  46637. (void*)&&ZEND_NULL_LABEL,
  46638. (void*)&&ZEND_NULL_LABEL,
  46639. (void*)&&ZEND_NULL_LABEL,
  46640. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
  46641. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  46642. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  46643. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
  46644. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  46645. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  46646. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46647. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46648. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46649. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46650. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46651. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46652. (void*)&&ZEND_NULL_LABEL,
  46653. (void*)&&ZEND_NULL_LABEL,
  46654. (void*)&&ZEND_NULL_LABEL,
  46655. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46656. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46657. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46658. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
  46659. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  46660. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  46661. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46662. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46663. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_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_NULL_LABEL,
  46668. (void*)&&ZEND_NULL_LABEL,
  46669. (void*)&&ZEND_NULL_LABEL,
  46670. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46671. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46672. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46673. (void*)&&ZEND_NULL_LABEL,
  46674. (void*)&&ZEND_NULL_LABEL,
  46675. (void*)&&ZEND_NULL_LABEL,
  46676. (void*)&&ZEND_NULL_LABEL,
  46677. (void*)&&ZEND_NULL_LABEL,
  46678. (void*)&&ZEND_NULL_LABEL,
  46679. (void*)&&ZEND_NULL_LABEL,
  46680. (void*)&&ZEND_NULL_LABEL,
  46681. (void*)&&ZEND_NULL_LABEL,
  46682. (void*)&&ZEND_NULL_LABEL,
  46683. (void*)&&ZEND_NULL_LABEL,
  46684. (void*)&&ZEND_NULL_LABEL,
  46685. (void*)&&ZEND_NULL_LABEL,
  46686. (void*)&&ZEND_NULL_LABEL,
  46687. (void*)&&ZEND_NULL_LABEL,
  46688. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
  46689. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  46690. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  46691. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46692. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46693. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46694. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46695. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46696. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46697. (void*)&&ZEND_NULL_LABEL,
  46698. (void*)&&ZEND_NULL_LABEL,
  46699. (void*)&&ZEND_NULL_LABEL,
  46700. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46701. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46702. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46703. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
  46704. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
  46705. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
  46706. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
  46707. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  46708. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  46709. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
  46710. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  46711. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  46712. (void*)&&ZEND_NULL_LABEL,
  46713. (void*)&&ZEND_NULL_LABEL,
  46714. (void*)&&ZEND_NULL_LABEL,
  46715. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
  46716. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  46717. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  46718. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
  46719. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  46720. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  46721. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46722. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46723. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46724. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46725. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46726. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46727. (void*)&&ZEND_NULL_LABEL,
  46728. (void*)&&ZEND_NULL_LABEL,
  46729. (void*)&&ZEND_NULL_LABEL,
  46730. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46731. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46732. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46733. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
  46734. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  46735. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  46736. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46737. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46738. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_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_NULL_LABEL,
  46743. (void*)&&ZEND_NULL_LABEL,
  46744. (void*)&&ZEND_NULL_LABEL,
  46745. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46746. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46747. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46748. (void*)&&ZEND_NULL_LABEL,
  46749. (void*)&&ZEND_NULL_LABEL,
  46750. (void*)&&ZEND_NULL_LABEL,
  46751. (void*)&&ZEND_NULL_LABEL,
  46752. (void*)&&ZEND_NULL_LABEL,
  46753. (void*)&&ZEND_NULL_LABEL,
  46754. (void*)&&ZEND_NULL_LABEL,
  46755. (void*)&&ZEND_NULL_LABEL,
  46756. (void*)&&ZEND_NULL_LABEL,
  46757. (void*)&&ZEND_NULL_LABEL,
  46758. (void*)&&ZEND_NULL_LABEL,
  46759. (void*)&&ZEND_NULL_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_CONST_LABEL,
  46764. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  46765. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  46766. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46767. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46768. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46769. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46770. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46771. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46772. (void*)&&ZEND_NULL_LABEL,
  46773. (void*)&&ZEND_NULL_LABEL,
  46774. (void*)&&ZEND_NULL_LABEL,
  46775. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
  46776. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  46777. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  46778. (void*)&&ZEND_NULL_LABEL,
  46779. (void*)&&ZEND_NULL_LABEL,
  46780. (void*)&&ZEND_NULL_LABEL,
  46781. (void*)&&ZEND_NULL_LABEL,
  46782. (void*)&&ZEND_NULL_LABEL,
  46783. (void*)&&ZEND_NULL_LABEL,
  46784. (void*)&&ZEND_NULL_LABEL,
  46785. (void*)&&ZEND_NULL_LABEL,
  46786. (void*)&&ZEND_NULL_LABEL,
  46787. (void*)&&ZEND_NULL_LABEL,
  46788. (void*)&&ZEND_NULL_LABEL,
  46789. (void*)&&ZEND_NULL_LABEL,
  46790. (void*)&&ZEND_NULL_LABEL,
  46791. (void*)&&ZEND_NULL_LABEL,
  46792. (void*)&&ZEND_NULL_LABEL,
  46793. (void*)&&ZEND_NULL_LABEL,
  46794. (void*)&&ZEND_NULL_LABEL,
  46795. (void*)&&ZEND_NULL_LABEL,
  46796. (void*)&&ZEND_NULL_LABEL,
  46797. (void*)&&ZEND_NULL_LABEL,
  46798. (void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_LABEL,
  46799. (void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_LABEL,
  46800. (void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_LABEL,
  46801. (void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_LABEL,
  46802. (void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_LABEL,
  46803. (void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_LABEL,
  46804. (void*)&&ZEND_NULL_LABEL,
  46805. (void*)&&ZEND_NULL_LABEL,
  46806. (void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
  46807. (void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_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_NULL_LABEL,
  46817. (void*)&&ZEND_NULL_LABEL,
  46818. (void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_LABEL,
  46819. (void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_LABEL,
  46820. (void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_LABEL,
  46821. (void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_LABEL,
  46822. (void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_LABEL,
  46823. (void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_LABEL,
  46824. (void*)&&ZEND_NULL_LABEL,
  46825. (void*)&&ZEND_NULL_LABEL,
  46826. (void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_LABEL,
  46827. (void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_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_NULL_LABEL,
  46837. (void*)&&ZEND_NULL_LABEL,
  46838. (void*)&&ZEND_NULL_LABEL,
  46839. (void*)&&ZEND_NULL_LABEL,
  46840. (void*)&&ZEND_NULL_LABEL,
  46841. (void*)&&ZEND_NULL_LABEL,
  46842. (void*)&&ZEND_NULL_LABEL,
  46843. (void*)&&ZEND_NULL_LABEL,
  46844. (void*)&&ZEND_NULL_LABEL,
  46845. (void*)&&ZEND_NULL_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_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
  46879. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
  46880. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
  46881. (void*)&&ZEND_NULL_LABEL,
  46882. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
  46883. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
  46884. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
  46885. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
  46886. (void*)&&ZEND_NULL_LABEL,
  46887. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
  46888. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
  46889. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
  46890. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
  46891. (void*)&&ZEND_NULL_LABEL,
  46892. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
  46893. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_LABEL,
  46894. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_LABEL,
  46895. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_LABEL,
  46896. (void*)&&ZEND_NULL_LABEL,
  46897. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_LABEL,
  46898. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
  46899. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
  46900. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
  46901. (void*)&&ZEND_NULL_LABEL,
  46902. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_LABEL,
  46903. (void*)&&ZEND_NULL_LABEL,
  46904. (void*)&&ZEND_NULL_LABEL,
  46905. (void*)&&ZEND_NULL_LABEL,
  46906. (void*)&&ZEND_NULL_LABEL,
  46907. (void*)&&ZEND_NULL_LABEL,
  46908. (void*)&&ZEND_NULL_LABEL,
  46909. (void*)&&ZEND_NULL_LABEL,
  46910. (void*)&&ZEND_NULL_LABEL,
  46911. (void*)&&ZEND_NULL_LABEL,
  46912. (void*)&&ZEND_NULL_LABEL,
  46913. (void*)&&ZEND_NULL_LABEL,
  46914. (void*)&&ZEND_NULL_LABEL,
  46915. (void*)&&ZEND_NULL_LABEL,
  46916. (void*)&&ZEND_NULL_LABEL,
  46917. (void*)&&ZEND_NULL_LABEL,
  46918. (void*)&&ZEND_NULL_LABEL,
  46919. (void*)&&ZEND_NULL_LABEL,
  46920. (void*)&&ZEND_NULL_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_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
  46929. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
  46930. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
  46931. (void*)&&ZEND_NULL_LABEL,
  46932. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_LABEL,
  46933. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
  46934. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
  46935. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
  46936. (void*)&&ZEND_NULL_LABEL,
  46937. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
  46938. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
  46939. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
  46940. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
  46941. (void*)&&ZEND_NULL_LABEL,
  46942. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
  46943. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_LABEL,
  46944. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_LABEL,
  46945. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_LABEL,
  46946. (void*)&&ZEND_NULL_LABEL,
  46947. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_LABEL,
  46948. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_LABEL,
  46949. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_LABEL,
  46950. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_LABEL,
  46951. (void*)&&ZEND_NULL_LABEL,
  46952. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_LABEL,
  46953. (void*)&&ZEND_NULL_LABEL,
  46954. (void*)&&ZEND_NULL_LABEL,
  46955. (void*)&&ZEND_NULL_LABEL,
  46956. (void*)&&ZEND_NULL_LABEL,
  46957. (void*)&&ZEND_NULL_LABEL,
  46958. (void*)&&ZEND_NULL_LABEL,
  46959. (void*)&&ZEND_NULL_LABEL,
  46960. (void*)&&ZEND_NULL_LABEL,
  46961. (void*)&&ZEND_NULL_LABEL,
  46962. (void*)&&ZEND_NULL_LABEL,
  46963. (void*)&&ZEND_NULL_LABEL,
  46964. (void*)&&ZEND_NULL_LABEL,
  46965. (void*)&&ZEND_NULL_LABEL,
  46966. (void*)&&ZEND_NULL_LABEL,
  46967. (void*)&&ZEND_NULL_LABEL,
  46968. (void*)&&ZEND_NULL_LABEL,
  46969. (void*)&&ZEND_NULL_LABEL,
  46970. (void*)&&ZEND_NULL_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_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
  47004. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
  47005. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
  47006. (void*)&&ZEND_NULL_LABEL,
  47007. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
  47008. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
  47009. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
  47010. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
  47011. (void*)&&ZEND_NULL_LABEL,
  47012. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
  47013. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
  47014. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
  47015. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
  47016. (void*)&&ZEND_NULL_LABEL,
  47017. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
  47018. (void*)&&ZEND_NULL_LABEL,
  47019. (void*)&&ZEND_NULL_LABEL,
  47020. (void*)&&ZEND_NULL_LABEL,
  47021. (void*)&&ZEND_NULL_LABEL,
  47022. (void*)&&ZEND_NULL_LABEL,
  47023. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
  47024. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
  47025. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
  47026. (void*)&&ZEND_NULL_LABEL,
  47027. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_LABEL,
  47028. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_LABEL,
  47029. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_LABEL,
  47030. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
  47031. (void*)&&ZEND_NULL_LABEL,
  47032. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
  47033. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
  47034. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
  47035. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
  47036. (void*)&&ZEND_NULL_LABEL,
  47037. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
  47038. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
  47039. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
  47040. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
  47041. (void*)&&ZEND_NULL_LABEL,
  47042. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
  47043. (void*)&&ZEND_NULL_LABEL,
  47044. (void*)&&ZEND_NULL_LABEL,
  47045. (void*)&&ZEND_NULL_LABEL,
  47046. (void*)&&ZEND_NULL_LABEL,
  47047. (void*)&&ZEND_NULL_LABEL,
  47048. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_LABEL,
  47049. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_LABEL,
  47050. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
  47051. (void*)&&ZEND_NULL_LABEL,
  47052. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
  47053. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
  47054. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
  47055. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
  47056. (void*)&&ZEND_NULL_LABEL,
  47057. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_LABEL,
  47058. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
  47059. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
  47060. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
  47061. (void*)&&ZEND_NULL_LABEL,
  47062. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
  47063. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
  47064. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
  47065. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
  47066. (void*)&&ZEND_NULL_LABEL,
  47067. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
  47068. (void*)&&ZEND_NULL_LABEL,
  47069. (void*)&&ZEND_NULL_LABEL,
  47070. (void*)&&ZEND_NULL_LABEL,
  47071. (void*)&&ZEND_NULL_LABEL,
  47072. (void*)&&ZEND_NULL_LABEL,
  47073. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_LABEL,
  47074. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_LABEL,
  47075. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_LABEL,
  47076. (void*)&&ZEND_NULL_LABEL,
  47077. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_LABEL,
  47078. (void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_LABEL,
  47079. (void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_LABEL,
  47080. (void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_LABEL,
  47081. (void*)&&ZEND_NULL_LABEL,
  47082. (void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_LABEL,
  47083. (void*)&&ZEND_NULL_LABEL,
  47084. (void*)&&ZEND_NULL_LABEL,
  47085. (void*)&&ZEND_NULL_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_NULL_LABEL,
  47092. (void*)&&ZEND_NULL_LABEL,
  47093. (void*)&&ZEND_ASSIGN_OP_SPEC_VAR_CONST_LABEL,
  47094. (void*)&&ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_LABEL,
  47095. (void*)&&ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_LABEL,
  47096. (void*)&&ZEND_NULL_LABEL,
  47097. (void*)&&ZEND_ASSIGN_OP_SPEC_VAR_CV_LABEL,
  47098. (void*)&&ZEND_NULL_LABEL,
  47099. (void*)&&ZEND_NULL_LABEL,
  47100. (void*)&&ZEND_NULL_LABEL,
  47101. (void*)&&ZEND_NULL_LABEL,
  47102. (void*)&&ZEND_NULL_LABEL,
  47103. (void*)&&ZEND_ASSIGN_OP_SPEC_CV_CONST_LABEL,
  47104. (void*)&&ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_LABEL,
  47105. (void*)&&ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_LABEL,
  47106. (void*)&&ZEND_NULL_LABEL,
  47107. (void*)&&ZEND_ASSIGN_OP_SPEC_CV_CV_LABEL,
  47108. (void*)&&ZEND_NULL_LABEL,
  47109. (void*)&&ZEND_NULL_LABEL,
  47110. (void*)&&ZEND_NULL_LABEL,
  47111. (void*)&&ZEND_NULL_LABEL,
  47112. (void*)&&ZEND_NULL_LABEL,
  47113. (void*)&&ZEND_NULL_LABEL,
  47114. (void*)&&ZEND_NULL_LABEL,
  47115. (void*)&&ZEND_NULL_LABEL,
  47116. (void*)&&ZEND_NULL_LABEL,
  47117. (void*)&&ZEND_NULL_LABEL,
  47118. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_LABEL,
  47119. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_LABEL,
  47120. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_LABEL,
  47121. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_LABEL,
  47122. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_LABEL,
  47123. (void*)&&ZEND_NULL_LABEL,
  47124. (void*)&&ZEND_NULL_LABEL,
  47125. (void*)&&ZEND_NULL_LABEL,
  47126. (void*)&&ZEND_NULL_LABEL,
  47127. (void*)&&ZEND_NULL_LABEL,
  47128. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_LABEL,
  47129. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_LABEL,
  47130. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_LABEL,
  47131. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_LABEL,
  47132. (void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_LABEL,
  47133. (void*)&&ZEND_NULL_LABEL,
  47134. (void*)&&ZEND_NULL_LABEL,
  47135. (void*)&&ZEND_NULL_LABEL,
  47136. (void*)&&ZEND_NULL_LABEL,
  47137. (void*)&&ZEND_NULL_LABEL,
  47138. (void*)&&ZEND_NULL_LABEL,
  47139. (void*)&&ZEND_NULL_LABEL,
  47140. (void*)&&ZEND_NULL_LABEL,
  47141. (void*)&&ZEND_NULL_LABEL,
  47142. (void*)&&ZEND_NULL_LABEL,
  47143. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_LABEL,
  47144. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
  47145. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
  47146. (void*)&&ZEND_NULL_LABEL,
  47147. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_LABEL,
  47148. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_LABEL,
  47149. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
  47150. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
  47151. (void*)&&ZEND_NULL_LABEL,
  47152. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_LABEL,
  47153. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_LABEL,
  47154. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_LABEL,
  47155. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_LABEL,
  47156. (void*)&&ZEND_NULL_LABEL,
  47157. (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_LABEL,
  47158. (void*)&&ZEND_ASSIGN_STATIC_PROP_OP_SPEC_LABEL,
  47159. (void*)&&ZEND_NULL_LABEL,
  47160. (void*)&&ZEND_NULL_LABEL,
  47161. (void*)&&ZEND_NULL_LABEL,
  47162. (void*)&&ZEND_NULL_LABEL,
  47163. (void*)&&ZEND_NULL_LABEL,
  47164. (void*)&&ZEND_NULL_LABEL,
  47165. (void*)&&ZEND_NULL_LABEL,
  47166. (void*)&&ZEND_NULL_LABEL,
  47167. (void*)&&ZEND_NULL_LABEL,
  47168. (void*)&&ZEND_NULL_LABEL,
  47169. (void*)&&ZEND_NULL_LABEL,
  47170. (void*)&&ZEND_NULL_LABEL,
  47171. (void*)&&ZEND_ASSIGN_REF_SPEC_VAR_VAR_LABEL,
  47172. (void*)&&ZEND_NULL_LABEL,
  47173. (void*)&&ZEND_ASSIGN_REF_SPEC_VAR_CV_LABEL,
  47174. (void*)&&ZEND_NULL_LABEL,
  47175. (void*)&&ZEND_NULL_LABEL,
  47176. (void*)&&ZEND_NULL_LABEL,
  47177. (void*)&&ZEND_NULL_LABEL,
  47178. (void*)&&ZEND_NULL_LABEL,
  47179. (void*)&&ZEND_NULL_LABEL,
  47180. (void*)&&ZEND_NULL_LABEL,
  47181. (void*)&&ZEND_ASSIGN_REF_SPEC_CV_VAR_LABEL,
  47182. (void*)&&ZEND_NULL_LABEL,
  47183. (void*)&&ZEND_ASSIGN_REF_SPEC_CV_CV_LABEL,
  47184. (void*)&&ZEND_QM_ASSIGN_SPEC_CONST_LABEL,
  47185. (void*)&&ZEND_QM_ASSIGN_SPEC_TMP_LABEL,
  47186. (void*)&&ZEND_QM_ASSIGN_SPEC_VAR_LABEL,
  47187. (void*)&&ZEND_NULL_LABEL,
  47188. (void*)&&ZEND_QM_ASSIGN_SPEC_CV_LABEL,
  47189. (void*)&&ZEND_NULL_LABEL,
  47190. (void*)&&ZEND_NULL_LABEL,
  47191. (void*)&&ZEND_NULL_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_NULL_LABEL,
  47200. (void*)&&ZEND_NULL_LABEL,
  47201. (void*)&&ZEND_NULL_LABEL,
  47202. (void*)&&ZEND_NULL_LABEL,
  47203. (void*)&&ZEND_NULL_LABEL,
  47204. (void*)&&ZEND_NULL_LABEL,
  47205. (void*)&&ZEND_NULL_LABEL,
  47206. (void*)&&ZEND_NULL_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_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
  47242. (void*)&&ZEND_NULL_LABEL,
  47243. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
  47244. (void*)&&ZEND_NULL_LABEL,
  47245. (void*)&&ZEND_NULL_LABEL,
  47246. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
  47247. (void*)&&ZEND_NULL_LABEL,
  47248. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
  47249. (void*)&&ZEND_NULL_LABEL,
  47250. (void*)&&ZEND_NULL_LABEL,
  47251. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
  47252. (void*)&&ZEND_NULL_LABEL,
  47253. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_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_NULL_LABEL,
  47260. (void*)&&ZEND_NULL_LABEL,
  47261. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
  47262. (void*)&&ZEND_NULL_LABEL,
  47263. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_LABEL,
  47264. (void*)&&ZEND_NULL_LABEL,
  47265. (void*)&&ZEND_NULL_LABEL,
  47266. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
  47267. (void*)&&ZEND_NULL_LABEL,
  47268. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
  47269. (void*)&&ZEND_NULL_LABEL,
  47270. (void*)&&ZEND_NULL_LABEL,
  47271. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
  47272. (void*)&&ZEND_NULL_LABEL,
  47273. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
  47274. (void*)&&ZEND_NULL_LABEL,
  47275. (void*)&&ZEND_NULL_LABEL,
  47276. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
  47277. (void*)&&ZEND_NULL_LABEL,
  47278. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
  47279. (void*)&&ZEND_NULL_LABEL,
  47280. (void*)&&ZEND_NULL_LABEL,
  47281. (void*)&&ZEND_NULL_LABEL,
  47282. (void*)&&ZEND_NULL_LABEL,
  47283. (void*)&&ZEND_NULL_LABEL,
  47284. (void*)&&ZEND_NULL_LABEL,
  47285. (void*)&&ZEND_NULL_LABEL,
  47286. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
  47287. (void*)&&ZEND_NULL_LABEL,
  47288. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
  47289. (void*)&&ZEND_NULL_LABEL,
  47290. (void*)&&ZEND_NULL_LABEL,
  47291. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
  47292. (void*)&&ZEND_NULL_LABEL,
  47293. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_LABEL,
  47294. (void*)&&ZEND_NULL_LABEL,
  47295. (void*)&&ZEND_NULL_LABEL,
  47296. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
  47297. (void*)&&ZEND_NULL_LABEL,
  47298. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
  47299. (void*)&&ZEND_NULL_LABEL,
  47300. (void*)&&ZEND_NULL_LABEL,
  47301. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
  47302. (void*)&&ZEND_NULL_LABEL,
  47303. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
  47304. (void*)&&ZEND_NULL_LABEL,
  47305. (void*)&&ZEND_NULL_LABEL,
  47306. (void*)&&ZEND_NULL_LABEL,
  47307. (void*)&&ZEND_NULL_LABEL,
  47308. (void*)&&ZEND_NULL_LABEL,
  47309. (void*)&&ZEND_NULL_LABEL,
  47310. (void*)&&ZEND_NULL_LABEL,
  47311. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_LABEL,
  47312. (void*)&&ZEND_NULL_LABEL,
  47313. (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_LABEL,
  47314. (void*)&&ZEND_ASSIGN_STATIC_PROP_REF_SPEC_LABEL,
  47315. (void*)&&ZEND_NULL_LABEL,
  47316. (void*)&&ZEND_NULL_LABEL,
  47317. (void*)&&ZEND_NULL_LABEL,
  47318. (void*)&&ZEND_NULL_LABEL,
  47319. (void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_LABEL,
  47320. (void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_LABEL,
  47321. (void*)&&ZEND_NULL_LABEL,
  47322. (void*)&&ZEND_NULL_LABEL,
  47323. (void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_LABEL,
  47324. (void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_USED_LABEL,
  47325. (void*)&&ZEND_NULL_LABEL,
  47326. (void*)&&ZEND_NULL_LABEL,
  47327. (void*)&&ZEND_NULL_LABEL,
  47328. (void*)&&ZEND_NULL_LABEL,
  47329. (void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_LABEL,
  47330. (void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_LABEL,
  47331. (void*)&&ZEND_NULL_LABEL,
  47332. (void*)&&ZEND_NULL_LABEL,
  47333. (void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_LABEL,
  47334. (void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_LABEL,
  47335. (void*)&&ZEND_NULL_LABEL,
  47336. (void*)&&ZEND_NULL_LABEL,
  47337. (void*)&&ZEND_POST_INC_SPEC_VAR_LABEL,
  47338. (void*)&&ZEND_NULL_LABEL,
  47339. (void*)&&ZEND_POST_INC_SPEC_CV_LABEL,
  47340. (void*)&&ZEND_NULL_LABEL,
  47341. (void*)&&ZEND_NULL_LABEL,
  47342. (void*)&&ZEND_POST_DEC_SPEC_VAR_LABEL,
  47343. (void*)&&ZEND_NULL_LABEL,
  47344. (void*)&&ZEND_POST_DEC_SPEC_CV_LABEL,
  47345. (void*)&&ZEND_PRE_INC_STATIC_PROP_SPEC_LABEL,
  47346. (void*)&&ZEND_POST_INC_STATIC_PROP_SPEC_LABEL,
  47347. (void*)&&ZEND_JMP_SPEC_LABEL,
  47348. (void*)&&ZEND_JMPZ_SPEC_CONST_LABEL,
  47349. (void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
  47350. (void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
  47351. (void*)&&ZEND_NULL_LABEL,
  47352. (void*)&&ZEND_JMPZ_SPEC_CV_LABEL,
  47353. (void*)&&ZEND_JMPNZ_SPEC_CONST_LABEL,
  47354. (void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
  47355. (void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
  47356. (void*)&&ZEND_NULL_LABEL,
  47357. (void*)&&ZEND_JMPNZ_SPEC_CV_LABEL,
  47358. (void*)&&ZEND_JMPZNZ_SPEC_CONST_LABEL,
  47359. (void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL,
  47360. (void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL,
  47361. (void*)&&ZEND_NULL_LABEL,
  47362. (void*)&&ZEND_JMPZNZ_SPEC_CV_LABEL,
  47363. (void*)&&ZEND_JMPZ_EX_SPEC_CONST_LABEL,
  47364. (void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
  47365. (void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
  47366. (void*)&&ZEND_NULL_LABEL,
  47367. (void*)&&ZEND_JMPZ_EX_SPEC_CV_LABEL,
  47368. (void*)&&ZEND_JMPNZ_EX_SPEC_CONST_LABEL,
  47369. (void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
  47370. (void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
  47371. (void*)&&ZEND_NULL_LABEL,
  47372. (void*)&&ZEND_JMPNZ_EX_SPEC_CV_LABEL,
  47373. (void*)&&ZEND_CASE_SPEC_TMPVAR_CONST_LABEL,
  47374. (void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
  47375. (void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
  47376. (void*)&&ZEND_NULL_LABEL,
  47377. (void*)&&ZEND_CASE_SPEC_TMPVAR_CV_LABEL,
  47378. (void*)&&ZEND_CHECK_VAR_SPEC_CV_UNUSED_LABEL,
  47379. (void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_LABEL,
  47380. (void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_LABEL,
  47381. (void*)&&ZEND_NULL_LABEL,
  47382. (void*)&&ZEND_NULL_LABEL,
  47383. (void*)&&ZEND_NULL_LABEL,
  47384. (void*)&&ZEND_NULL_LABEL,
  47385. (void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_LABEL,
  47386. (void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_LABEL,
  47387. (void*)&&ZEND_NULL_LABEL,
  47388. (void*)&&ZEND_NULL_LABEL,
  47389. (void*)&&ZEND_CAST_SPEC_CONST_LABEL,
  47390. (void*)&&ZEND_CAST_SPEC_TMP_LABEL,
  47391. (void*)&&ZEND_CAST_SPEC_VAR_LABEL,
  47392. (void*)&&ZEND_NULL_LABEL,
  47393. (void*)&&ZEND_CAST_SPEC_CV_LABEL,
  47394. (void*)&&ZEND_BOOL_SPEC_CONST_LABEL,
  47395. (void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
  47396. (void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
  47397. (void*)&&ZEND_NULL_LABEL,
  47398. (void*)&&ZEND_BOOL_SPEC_CV_LABEL,
  47399. (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CONST_LABEL,
  47400. (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
  47401. (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
  47402. (void*)&&ZEND_NULL_LABEL,
  47403. (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CV_LABEL,
  47404. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
  47405. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  47406. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  47407. (void*)&&ZEND_NULL_LABEL,
  47408. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
  47409. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
  47410. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  47411. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  47412. (void*)&&ZEND_NULL_LABEL,
  47413. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
  47414. (void*)&&ZEND_NULL_LABEL,
  47415. (void*)&&ZEND_NULL_LABEL,
  47416. (void*)&&ZEND_NULL_LABEL,
  47417. (void*)&&ZEND_NULL_LABEL,
  47418. (void*)&&ZEND_NULL_LABEL,
  47419. (void*)&&ZEND_FAST_CONCAT_SPEC_CV_CONST_LABEL,
  47420. (void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
  47421. (void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
  47422. (void*)&&ZEND_NULL_LABEL,
  47423. (void*)&&ZEND_FAST_CONCAT_SPEC_CV_CV_LABEL,
  47424. (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CONST_LABEL,
  47425. (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
  47426. (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
  47427. (void*)&&ZEND_NULL_LABEL,
  47428. (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CV_LABEL,
  47429. (void*)&&ZEND_ROPE_ADD_SPEC_TMP_CONST_LABEL,
  47430. (void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
  47431. (void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
  47432. (void*)&&ZEND_NULL_LABEL,
  47433. (void*)&&ZEND_ROPE_ADD_SPEC_TMP_CV_LABEL,
  47434. (void*)&&ZEND_ROPE_END_SPEC_TMP_CONST_LABEL,
  47435. (void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
  47436. (void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
  47437. (void*)&&ZEND_NULL_LABEL,
  47438. (void*)&&ZEND_ROPE_END_SPEC_TMP_CV_LABEL,
  47439. (void*)&&ZEND_BEGIN_SILENCE_SPEC_LABEL,
  47440. (void*)&&ZEND_END_SILENCE_SPEC_TMP_LABEL,
  47441. (void*)&&ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_LABEL,
  47442. (void*)&&ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_LABEL,
  47443. (void*)&&ZEND_DO_FCALL_SPEC_RETVAL_USED_LABEL,
  47444. (void*)&&ZEND_DO_FCALL_SPEC_OBSERVER_LABEL,
  47445. (void*)&&ZEND_DO_FCALL_SPEC_OBSERVER_LABEL,
  47446. (void*)&&ZEND_INIT_FCALL_SPEC_CONST_LABEL,
  47447. (void*)&&ZEND_RETURN_SPEC_CONST_LABEL,
  47448. (void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
  47449. (void*)&&ZEND_RETURN_SPEC_TMP_LABEL,
  47450. (void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
  47451. (void*)&&ZEND_RETURN_SPEC_VAR_LABEL,
  47452. (void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
  47453. (void*)&&ZEND_NULL_LABEL,
  47454. (void*)&&ZEND_NULL_LABEL,
  47455. (void*)&&ZEND_RETURN_SPEC_CV_LABEL,
  47456. (void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
  47457. (void*)&&ZEND_RECV_SPEC_UNUSED_LABEL,
  47458. (void*)&&ZEND_RECV_INIT_SPEC_CONST_LABEL,
  47459. (void*)&&ZEND_SEND_VAL_SPEC_CONST_CONST_LABEL,
  47460. (void*)&&ZEND_NULL_LABEL,
  47461. (void*)&&ZEND_NULL_LABEL,
  47462. (void*)&&ZEND_SEND_VAL_SPEC_CONST_UNUSED_LABEL,
  47463. (void*)&&ZEND_NULL_LABEL,
  47464. (void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_CONST_LABEL,
  47465. (void*)&&ZEND_NULL_LABEL,
  47466. (void*)&&ZEND_NULL_LABEL,
  47467. (void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_LABEL,
  47468. (void*)&&ZEND_NULL_LABEL,
  47469. (void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_CONST_LABEL,
  47470. (void*)&&ZEND_NULL_LABEL,
  47471. (void*)&&ZEND_NULL_LABEL,
  47472. (void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_LABEL,
  47473. (void*)&&ZEND_NULL_LABEL,
  47474. (void*)&&ZEND_NULL_LABEL,
  47475. (void*)&&ZEND_NULL_LABEL,
  47476. (void*)&&ZEND_NULL_LABEL,
  47477. (void*)&&ZEND_NULL_LABEL,
  47478. (void*)&&ZEND_NULL_LABEL,
  47479. (void*)&&ZEND_NULL_LABEL,
  47480. (void*)&&ZEND_NULL_LABEL,
  47481. (void*)&&ZEND_NULL_LABEL,
  47482. (void*)&&ZEND_NULL_LABEL,
  47483. (void*)&&ZEND_NULL_LABEL,
  47484. (void*)&&ZEND_NULL_LABEL,
  47485. (void*)&&ZEND_NULL_LABEL,
  47486. (void*)&&ZEND_NULL_LABEL,
  47487. (void*)&&ZEND_NULL_LABEL,
  47488. (void*)&&ZEND_NULL_LABEL,
  47489. (void*)&&ZEND_NULL_LABEL,
  47490. (void*)&&ZEND_NULL_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_SEND_VAR_EX_SPEC_VAR_CONST_LABEL,
  47505. (void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_CONST_LABEL,
  47506. (void*)&&ZEND_NULL_LABEL,
  47507. (void*)&&ZEND_NULL_LABEL,
  47508. (void*)&&ZEND_NULL_LABEL,
  47509. (void*)&&ZEND_NULL_LABEL,
  47510. (void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_LABEL,
  47511. (void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_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_NULL_LABEL,
  47523. (void*)&&ZEND_NULL_LABEL,
  47524. (void*)&&ZEND_SEND_VAR_EX_SPEC_CV_CONST_LABEL,
  47525. (void*)&&ZEND_SEND_VAR_EX_SPEC_CV_CONST_LABEL,
  47526. (void*)&&ZEND_NULL_LABEL,
  47527. (void*)&&ZEND_NULL_LABEL,
  47528. (void*)&&ZEND_NULL_LABEL,
  47529. (void*)&&ZEND_NULL_LABEL,
  47530. (void*)&&ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_LABEL,
  47531. (void*)&&ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_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_NULL_LABEL,
  47543. (void*)&&ZEND_NULL_LABEL,
  47544. (void*)&&ZEND_SEND_REF_SPEC_VAR_CONST_LABEL,
  47545. (void*)&&ZEND_NULL_LABEL,
  47546. (void*)&&ZEND_NULL_LABEL,
  47547. (void*)&&ZEND_SEND_REF_SPEC_VAR_UNUSED_LABEL,
  47548. (void*)&&ZEND_NULL_LABEL,
  47549. (void*)&&ZEND_NULL_LABEL,
  47550. (void*)&&ZEND_NULL_LABEL,
  47551. (void*)&&ZEND_NULL_LABEL,
  47552. (void*)&&ZEND_NULL_LABEL,
  47553. (void*)&&ZEND_NULL_LABEL,
  47554. (void*)&&ZEND_SEND_REF_SPEC_CV_CONST_LABEL,
  47555. (void*)&&ZEND_NULL_LABEL,
  47556. (void*)&&ZEND_NULL_LABEL,
  47557. (void*)&&ZEND_SEND_REF_SPEC_CV_UNUSED_LABEL,
  47558. (void*)&&ZEND_NULL_LABEL,
  47559. (void*)&&ZEND_NEW_SPEC_CONST_UNUSED_LABEL,
  47560. (void*)&&ZEND_NULL_LABEL,
  47561. (void*)&&ZEND_NEW_SPEC_VAR_UNUSED_LABEL,
  47562. (void*)&&ZEND_NEW_SPEC_UNUSED_UNUSED_LABEL,
  47563. (void*)&&ZEND_NULL_LABEL,
  47564. (void*)&&ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_LABEL,
  47565. (void*)&&ZEND_FREE_SPEC_TMPVAR_LABEL,
  47566. (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CONST_LABEL,
  47567. (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
  47568. (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
  47569. (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_LABEL,
  47570. (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CV_LABEL,
  47571. (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CONST_LABEL,
  47572. (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
  47573. (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
  47574. (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_LABEL,
  47575. (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CV_LABEL,
  47576. (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CONST_LABEL,
  47577. (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
  47578. (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
  47579. (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_LABEL,
  47580. (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CV_LABEL,
  47581. (void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_LABEL,
  47582. (void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
  47583. (void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
  47584. (void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_LABEL,
  47585. (void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CV_LABEL,
  47586. (void*)&&ZEND_INIT_ARRAY_SPEC_CV_CONST_LABEL,
  47587. (void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
  47588. (void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
  47589. (void*)&&ZEND_INIT_ARRAY_SPEC_CV_UNUSED_LABEL,
  47590. (void*)&&ZEND_INIT_ARRAY_SPEC_CV_CV_LABEL,
  47591. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_LABEL,
  47592. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
  47593. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
  47594. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_LABEL,
  47595. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_LABEL,
  47596. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_LABEL,
  47597. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
  47598. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
  47599. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_LABEL,
  47600. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_LABEL,
  47601. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_LABEL,
  47602. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
  47603. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
  47604. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_LABEL,
  47605. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_LABEL,
  47606. (void*)&&ZEND_NULL_LABEL,
  47607. (void*)&&ZEND_NULL_LABEL,
  47608. (void*)&&ZEND_NULL_LABEL,
  47609. (void*)&&ZEND_NULL_LABEL,
  47610. (void*)&&ZEND_NULL_LABEL,
  47611. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_LABEL,
  47612. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
  47613. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
  47614. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_LABEL,
  47615. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_LABEL,
  47616. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CONST_LABEL,
  47617. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
  47618. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
  47619. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
  47620. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
  47621. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
  47622. (void*)&&ZEND_NULL_LABEL,
  47623. (void*)&&ZEND_NULL_LABEL,
  47624. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CV_LABEL,
  47625. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
  47626. (void*)&&ZEND_UNSET_VAR_SPEC_CONST_UNUSED_LABEL,
  47627. (void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
  47628. (void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
  47629. (void*)&&ZEND_NULL_LABEL,
  47630. (void*)&&ZEND_UNSET_VAR_SPEC_CV_UNUSED_LABEL,
  47631. (void*)&&ZEND_NULL_LABEL,
  47632. (void*)&&ZEND_NULL_LABEL,
  47633. (void*)&&ZEND_NULL_LABEL,
  47634. (void*)&&ZEND_NULL_LABEL,
  47635. (void*)&&ZEND_NULL_LABEL,
  47636. (void*)&&ZEND_NULL_LABEL,
  47637. (void*)&&ZEND_NULL_LABEL,
  47638. (void*)&&ZEND_NULL_LABEL,
  47639. (void*)&&ZEND_NULL_LABEL,
  47640. (void*)&&ZEND_NULL_LABEL,
  47641. (void*)&&ZEND_UNSET_DIM_SPEC_VAR_CONST_LABEL,
  47642. (void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
  47643. (void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
  47644. (void*)&&ZEND_NULL_LABEL,
  47645. (void*)&&ZEND_UNSET_DIM_SPEC_VAR_CV_LABEL,
  47646. (void*)&&ZEND_NULL_LABEL,
  47647. (void*)&&ZEND_NULL_LABEL,
  47648. (void*)&&ZEND_NULL_LABEL,
  47649. (void*)&&ZEND_NULL_LABEL,
  47650. (void*)&&ZEND_NULL_LABEL,
  47651. (void*)&&ZEND_UNSET_DIM_SPEC_CV_CONST_LABEL,
  47652. (void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
  47653. (void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
  47654. (void*)&&ZEND_NULL_LABEL,
  47655. (void*)&&ZEND_UNSET_DIM_SPEC_CV_CV_LABEL,
  47656. (void*)&&ZEND_NULL_LABEL,
  47657. (void*)&&ZEND_NULL_LABEL,
  47658. (void*)&&ZEND_NULL_LABEL,
  47659. (void*)&&ZEND_NULL_LABEL,
  47660. (void*)&&ZEND_NULL_LABEL,
  47661. (void*)&&ZEND_NULL_LABEL,
  47662. (void*)&&ZEND_NULL_LABEL,
  47663. (void*)&&ZEND_NULL_LABEL,
  47664. (void*)&&ZEND_NULL_LABEL,
  47665. (void*)&&ZEND_NULL_LABEL,
  47666. (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CONST_LABEL,
  47667. (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
  47668. (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
  47669. (void*)&&ZEND_NULL_LABEL,
  47670. (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CV_LABEL,
  47671. (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_LABEL,
  47672. (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  47673. (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  47674. (void*)&&ZEND_NULL_LABEL,
  47675. (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CV_LABEL,
  47676. (void*)&&ZEND_UNSET_OBJ_SPEC_CV_CONST_LABEL,
  47677. (void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
  47678. (void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
  47679. (void*)&&ZEND_NULL_LABEL,
  47680. (void*)&&ZEND_UNSET_OBJ_SPEC_CV_CV_LABEL,
  47681. (void*)&&ZEND_FE_RESET_R_SPEC_CONST_LABEL,
  47682. (void*)&&ZEND_FE_RESET_R_SPEC_TMP_LABEL,
  47683. (void*)&&ZEND_FE_RESET_R_SPEC_VAR_LABEL,
  47684. (void*)&&ZEND_NULL_LABEL,
  47685. (void*)&&ZEND_FE_RESET_R_SPEC_CV_LABEL,
  47686. (void*)&&ZEND_FE_FETCH_R_SPEC_VAR_LABEL,
  47687. (void*)&&ZEND_EXIT_SPEC_LABEL,
  47688. (void*)&&ZEND_FETCH_R_SPEC_CONST_UNUSED_LABEL,
  47689. (void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
  47690. (void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
  47691. (void*)&&ZEND_NULL_LABEL,
  47692. (void*)&&ZEND_FETCH_R_SPEC_CV_UNUSED_LABEL,
  47693. (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CONST_LABEL,
  47694. (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
  47695. (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
  47696. (void*)&&ZEND_NULL_LABEL,
  47697. (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CV_LABEL,
  47698. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
  47699. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
  47700. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
  47701. (void*)&&ZEND_NULL_LABEL,
  47702. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
  47703. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
  47704. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
  47705. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
  47706. (void*)&&ZEND_NULL_LABEL,
  47707. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
  47708. (void*)&&ZEND_NULL_LABEL,
  47709. (void*)&&ZEND_NULL_LABEL,
  47710. (void*)&&ZEND_NULL_LABEL,
  47711. (void*)&&ZEND_NULL_LABEL,
  47712. (void*)&&ZEND_NULL_LABEL,
  47713. (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CONST_LABEL,
  47714. (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
  47715. (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
  47716. (void*)&&ZEND_NULL_LABEL,
  47717. (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CV_LABEL,
  47718. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_LABEL,
  47719. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
  47720. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
  47721. (void*)&&ZEND_NULL_LABEL,
  47722. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CV_LABEL,
  47723. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
  47724. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
  47725. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
  47726. (void*)&&ZEND_NULL_LABEL,
  47727. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
  47728. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
  47729. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
  47730. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
  47731. (void*)&&ZEND_NULL_LABEL,
  47732. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
  47733. (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_LABEL,
  47734. (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
  47735. (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
  47736. (void*)&&ZEND_NULL_LABEL,
  47737. (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_LABEL,
  47738. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CONST_LABEL,
  47739. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
  47740. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
  47741. (void*)&&ZEND_NULL_LABEL,
  47742. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CV_LABEL,
  47743. (void*)&&ZEND_FETCH_W_SPEC_CONST_UNUSED_LABEL,
  47744. (void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
  47745. (void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
  47746. (void*)&&ZEND_NULL_LABEL,
  47747. (void*)&&ZEND_FETCH_W_SPEC_CV_UNUSED_LABEL,
  47748. (void*)&&ZEND_NULL_LABEL,
  47749. (void*)&&ZEND_NULL_LABEL,
  47750. (void*)&&ZEND_NULL_LABEL,
  47751. (void*)&&ZEND_NULL_LABEL,
  47752. (void*)&&ZEND_NULL_LABEL,
  47753. (void*)&&ZEND_NULL_LABEL,
  47754. (void*)&&ZEND_NULL_LABEL,
  47755. (void*)&&ZEND_NULL_LABEL,
  47756. (void*)&&ZEND_NULL_LABEL,
  47757. (void*)&&ZEND_NULL_LABEL,
  47758. (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CONST_LABEL,
  47759. (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
  47760. (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
  47761. (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_LABEL,
  47762. (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CV_LABEL,
  47763. (void*)&&ZEND_NULL_LABEL,
  47764. (void*)&&ZEND_NULL_LABEL,
  47765. (void*)&&ZEND_NULL_LABEL,
  47766. (void*)&&ZEND_NULL_LABEL,
  47767. (void*)&&ZEND_NULL_LABEL,
  47768. (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CONST_LABEL,
  47769. (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
  47770. (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
  47771. (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_LABEL,
  47772. (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CV_LABEL,
  47773. (void*)&&ZEND_NULL_LABEL,
  47774. (void*)&&ZEND_NULL_LABEL,
  47775. (void*)&&ZEND_NULL_LABEL,
  47776. (void*)&&ZEND_NULL_LABEL,
  47777. (void*)&&ZEND_NULL_LABEL,
  47778. (void*)&&ZEND_NULL_LABEL,
  47779. (void*)&&ZEND_NULL_LABEL,
  47780. (void*)&&ZEND_NULL_LABEL,
  47781. (void*)&&ZEND_NULL_LABEL,
  47782. (void*)&&ZEND_NULL_LABEL,
  47783. (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_LABEL,
  47784. (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
  47785. (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
  47786. (void*)&&ZEND_NULL_LABEL,
  47787. (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CV_LABEL,
  47788. (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_LABEL,
  47789. (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
  47790. (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
  47791. (void*)&&ZEND_NULL_LABEL,
  47792. (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_LABEL,
  47793. (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CONST_LABEL,
  47794. (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
  47795. (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
  47796. (void*)&&ZEND_NULL_LABEL,
  47797. (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CV_LABEL,
  47798. (void*)&&ZEND_FETCH_RW_SPEC_CONST_UNUSED_LABEL,
  47799. (void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
  47800. (void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
  47801. (void*)&&ZEND_NULL_LABEL,
  47802. (void*)&&ZEND_FETCH_RW_SPEC_CV_UNUSED_LABEL,
  47803. (void*)&&ZEND_NULL_LABEL,
  47804. (void*)&&ZEND_NULL_LABEL,
  47805. (void*)&&ZEND_NULL_LABEL,
  47806. (void*)&&ZEND_NULL_LABEL,
  47807. (void*)&&ZEND_NULL_LABEL,
  47808. (void*)&&ZEND_NULL_LABEL,
  47809. (void*)&&ZEND_NULL_LABEL,
  47810. (void*)&&ZEND_NULL_LABEL,
  47811. (void*)&&ZEND_NULL_LABEL,
  47812. (void*)&&ZEND_NULL_LABEL,
  47813. (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_LABEL,
  47814. (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
  47815. (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
  47816. (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_LABEL,
  47817. (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CV_LABEL,
  47818. (void*)&&ZEND_NULL_LABEL,
  47819. (void*)&&ZEND_NULL_LABEL,
  47820. (void*)&&ZEND_NULL_LABEL,
  47821. (void*)&&ZEND_NULL_LABEL,
  47822. (void*)&&ZEND_NULL_LABEL,
  47823. (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CONST_LABEL,
  47824. (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
  47825. (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
  47826. (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_LABEL,
  47827. (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CV_LABEL,
  47828. (void*)&&ZEND_NULL_LABEL,
  47829. (void*)&&ZEND_NULL_LABEL,
  47830. (void*)&&ZEND_NULL_LABEL,
  47831. (void*)&&ZEND_NULL_LABEL,
  47832. (void*)&&ZEND_NULL_LABEL,
  47833. (void*)&&ZEND_NULL_LABEL,
  47834. (void*)&&ZEND_NULL_LABEL,
  47835. (void*)&&ZEND_NULL_LABEL,
  47836. (void*)&&ZEND_NULL_LABEL,
  47837. (void*)&&ZEND_NULL_LABEL,
  47838. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_LABEL,
  47839. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
  47840. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
  47841. (void*)&&ZEND_NULL_LABEL,
  47842. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_LABEL,
  47843. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_LABEL,
  47844. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
  47845. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
  47846. (void*)&&ZEND_NULL_LABEL,
  47847. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_LABEL,
  47848. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_LABEL,
  47849. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
  47850. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
  47851. (void*)&&ZEND_NULL_LABEL,
  47852. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CV_LABEL,
  47853. (void*)&&ZEND_FETCH_IS_SPEC_CONST_UNUSED_LABEL,
  47854. (void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
  47855. (void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
  47856. (void*)&&ZEND_NULL_LABEL,
  47857. (void*)&&ZEND_FETCH_IS_SPEC_CV_UNUSED_LABEL,
  47858. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_LABEL,
  47859. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
  47860. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
  47861. (void*)&&ZEND_NULL_LABEL,
  47862. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CV_LABEL,
  47863. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
  47864. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  47865. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  47866. (void*)&&ZEND_NULL_LABEL,
  47867. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
  47868. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
  47869. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  47870. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  47871. (void*)&&ZEND_NULL_LABEL,
  47872. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
  47873. (void*)&&ZEND_NULL_LABEL,
  47874. (void*)&&ZEND_NULL_LABEL,
  47875. (void*)&&ZEND_NULL_LABEL,
  47876. (void*)&&ZEND_NULL_LABEL,
  47877. (void*)&&ZEND_NULL_LABEL,
  47878. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CONST_LABEL,
  47879. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
  47880. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
  47881. (void*)&&ZEND_NULL_LABEL,
  47882. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CV_LABEL,
  47883. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_LABEL,
  47884. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
  47885. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
  47886. (void*)&&ZEND_NULL_LABEL,
  47887. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_LABEL,
  47888. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
  47889. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  47890. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  47891. (void*)&&ZEND_NULL_LABEL,
  47892. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
  47893. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
  47894. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  47895. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  47896. (void*)&&ZEND_NULL_LABEL,
  47897. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
  47898. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_LABEL,
  47899. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
  47900. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
  47901. (void*)&&ZEND_NULL_LABEL,
  47902. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_LABEL,
  47903. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_LABEL,
  47904. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
  47905. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
  47906. (void*)&&ZEND_NULL_LABEL,
  47907. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CV_LABEL,
  47908. (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
  47909. (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
  47910. (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
  47911. (void*)&&ZEND_NULL_LABEL,
  47912. (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
  47913. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_LABEL,
  47914. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
  47915. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
  47916. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
  47917. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_LABEL,
  47918. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_LABEL,
  47919. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
  47920. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
  47921. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_LABEL,
  47922. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_LABEL,
  47923. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_LABEL,
  47924. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
  47925. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
  47926. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_LABEL,
  47927. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_LABEL,
  47928. (void*)&&ZEND_NULL_LABEL,
  47929. (void*)&&ZEND_NULL_LABEL,
  47930. (void*)&&ZEND_NULL_LABEL,
  47931. (void*)&&ZEND_NULL_LABEL,
  47932. (void*)&&ZEND_NULL_LABEL,
  47933. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_LABEL,
  47934. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
  47935. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
  47936. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
  47937. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_LABEL,
  47938. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_LABEL,
  47939. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
  47940. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
  47941. (void*)&&ZEND_NULL_LABEL,
  47942. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_LABEL,
  47943. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_LABEL,
  47944. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
  47945. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
  47946. (void*)&&ZEND_NULL_LABEL,
  47947. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_LABEL,
  47948. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_LABEL,
  47949. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
  47950. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
  47951. (void*)&&ZEND_NULL_LABEL,
  47952. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_LABEL,
  47953. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
  47954. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
  47955. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
  47956. (void*)&&ZEND_NULL_LABEL,
  47957. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_LABEL,
  47958. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_LABEL,
  47959. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
  47960. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
  47961. (void*)&&ZEND_NULL_LABEL,
  47962. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_LABEL,
  47963. (void*)&&ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_LABEL,
  47964. (void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
  47965. (void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
  47966. (void*)&&ZEND_NULL_LABEL,
  47967. (void*)&&ZEND_FETCH_UNSET_SPEC_CV_UNUSED_LABEL,
  47968. (void*)&&ZEND_NULL_LABEL,
  47969. (void*)&&ZEND_NULL_LABEL,
  47970. (void*)&&ZEND_NULL_LABEL,
  47971. (void*)&&ZEND_NULL_LABEL,
  47972. (void*)&&ZEND_NULL_LABEL,
  47973. (void*)&&ZEND_NULL_LABEL,
  47974. (void*)&&ZEND_NULL_LABEL,
  47975. (void*)&&ZEND_NULL_LABEL,
  47976. (void*)&&ZEND_NULL_LABEL,
  47977. (void*)&&ZEND_NULL_LABEL,
  47978. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_LABEL,
  47979. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
  47980. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
  47981. (void*)&&ZEND_NULL_LABEL,
  47982. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_LABEL,
  47983. (void*)&&ZEND_NULL_LABEL,
  47984. (void*)&&ZEND_NULL_LABEL,
  47985. (void*)&&ZEND_NULL_LABEL,
  47986. (void*)&&ZEND_NULL_LABEL,
  47987. (void*)&&ZEND_NULL_LABEL,
  47988. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_LABEL,
  47989. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
  47990. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
  47991. (void*)&&ZEND_NULL_LABEL,
  47992. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_LABEL,
  47993. (void*)&&ZEND_NULL_LABEL,
  47994. (void*)&&ZEND_NULL_LABEL,
  47995. (void*)&&ZEND_NULL_LABEL,
  47996. (void*)&&ZEND_NULL_LABEL,
  47997. (void*)&&ZEND_NULL_LABEL,
  47998. (void*)&&ZEND_NULL_LABEL,
  47999. (void*)&&ZEND_NULL_LABEL,
  48000. (void*)&&ZEND_NULL_LABEL,
  48001. (void*)&&ZEND_NULL_LABEL,
  48002. (void*)&&ZEND_NULL_LABEL,
  48003. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_LABEL,
  48004. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
  48005. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
  48006. (void*)&&ZEND_NULL_LABEL,
  48007. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_LABEL,
  48008. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_LABEL,
  48009. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
  48010. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
  48011. (void*)&&ZEND_NULL_LABEL,
  48012. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_LABEL,
  48013. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_LABEL,
  48014. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
  48015. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
  48016. (void*)&&ZEND_NULL_LABEL,
  48017. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_LABEL,
  48018. (void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CONST_LABEL,
  48019. (void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
  48020. (void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
  48021. (void*)&&ZEND_NULL_LABEL,
  48022. (void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CV_LABEL,
  48023. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
  48024. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  48025. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  48026. (void*)&&ZEND_NULL_LABEL,
  48027. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
  48028. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
  48029. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  48030. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  48031. (void*)&&ZEND_NULL_LABEL,
  48032. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
  48033. (void*)&&ZEND_NULL_LABEL,
  48034. (void*)&&ZEND_NULL_LABEL,
  48035. (void*)&&ZEND_NULL_LABEL,
  48036. (void*)&&ZEND_NULL_LABEL,
  48037. (void*)&&ZEND_NULL_LABEL,
  48038. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
  48039. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  48040. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  48041. (void*)&&ZEND_NULL_LABEL,
  48042. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
  48043. (void*)&&ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_LABEL,
  48044. (void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
  48045. (void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
  48046. (void*)&&ZEND_NULL_LABEL,
  48047. (void*)&&ZEND_NULL_LABEL,
  48048. (void*)&&ZEND_NULL_LABEL,
  48049. (void*)&&ZEND_NULL_LABEL,
  48050. (void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_LABEL,
  48051. (void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_LABEL,
  48052. (void*)&&ZEND_NULL_LABEL,
  48053. (void*)&&ZEND_NULL_LABEL,
  48054. (void*)&&ZEND_EXT_STMT_SPEC_LABEL,
  48055. (void*)&&ZEND_EXT_FCALL_BEGIN_SPEC_LABEL,
  48056. (void*)&&ZEND_EXT_FCALL_END_SPEC_LABEL,
  48057. (void*)&&ZEND_EXT_NOP_SPEC_LABEL,
  48058. (void*)&&ZEND_TICKS_SPEC_LABEL,
  48059. (void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_LABEL,
  48060. (void*)&&ZEND_NULL_LABEL,
  48061. (void*)&&ZEND_NULL_LABEL,
  48062. (void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_LABEL,
  48063. (void*)&&ZEND_NULL_LABEL,
  48064. (void*)&&ZEND_CATCH_SPEC_CONST_LABEL,
  48065. (void*)&&ZEND_THROW_SPEC_CONST_LABEL,
  48066. (void*)&&ZEND_THROW_SPEC_TMPVAR_LABEL,
  48067. (void*)&&ZEND_THROW_SPEC_TMPVAR_LABEL,
  48068. (void*)&&ZEND_NULL_LABEL,
  48069. (void*)&&ZEND_THROW_SPEC_CV_LABEL,
  48070. (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_LABEL,
  48071. (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
  48072. (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
  48073. (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_LABEL,
  48074. (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CV_LABEL,
  48075. (void*)&&ZEND_CLONE_SPEC_CONST_LABEL,
  48076. (void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
  48077. (void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
  48078. (void*)&&ZEND_CLONE_SPEC_UNUSED_LABEL,
  48079. (void*)&&ZEND_CLONE_SPEC_CV_LABEL,
  48080. (void*)&&ZEND_RETURN_BY_REF_SPEC_CONST_LABEL,
  48081. (void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
  48082. (void*)&&ZEND_RETURN_BY_REF_SPEC_TMP_LABEL,
  48083. (void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
  48084. (void*)&&ZEND_RETURN_BY_REF_SPEC_VAR_LABEL,
  48085. (void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
  48086. (void*)&&ZEND_NULL_LABEL,
  48087. (void*)&&ZEND_NULL_LABEL,
  48088. (void*)&&ZEND_RETURN_BY_REF_SPEC_CV_LABEL,
  48089. (void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
  48090. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_LABEL,
  48091. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
  48092. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
  48093. (void*)&&ZEND_NULL_LABEL,
  48094. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_LABEL,
  48095. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
  48096. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
  48097. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
  48098. (void*)&&ZEND_NULL_LABEL,
  48099. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
  48100. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
  48101. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
  48102. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
  48103. (void*)&&ZEND_NULL_LABEL,
  48104. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
  48105. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
  48106. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
  48107. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
  48108. (void*)&&ZEND_NULL_LABEL,
  48109. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
  48110. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_LABEL,
  48111. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
  48112. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
  48113. (void*)&&ZEND_NULL_LABEL,
  48114. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CV_LABEL,
  48115. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_LABEL,
  48116. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
  48117. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
  48118. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_LABEL,
  48119. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_LABEL,
  48120. (void*)&&ZEND_NULL_LABEL,
  48121. (void*)&&ZEND_NULL_LABEL,
  48122. (void*)&&ZEND_NULL_LABEL,
  48123. (void*)&&ZEND_NULL_LABEL,
  48124. (void*)&&ZEND_NULL_LABEL,
  48125. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_LABEL,
  48126. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
  48127. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
  48128. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_LABEL,
  48129. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_LABEL,
  48130. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
  48131. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
  48132. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
  48133. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_LABEL,
  48134. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
  48135. (void*)&&ZEND_NULL_LABEL,
  48136. (void*)&&ZEND_NULL_LABEL,
  48137. (void*)&&ZEND_NULL_LABEL,
  48138. (void*)&&ZEND_NULL_LABEL,
  48139. (void*)&&ZEND_NULL_LABEL,
  48140. (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_LABEL,
  48141. (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
  48142. (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
  48143. (void*)&&ZEND_NULL_LABEL,
  48144. (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_LABEL,
  48145. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_LABEL,
  48146. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
  48147. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
  48148. (void*)&&ZEND_NULL_LABEL,
  48149. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_LABEL,
  48150. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
  48151. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  48152. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  48153. (void*)&&ZEND_NULL_LABEL,
  48154. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
  48155. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
  48156. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  48157. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  48158. (void*)&&ZEND_NULL_LABEL,
  48159. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
  48160. (void*)&&ZEND_NULL_LABEL,
  48161. (void*)&&ZEND_NULL_LABEL,
  48162. (void*)&&ZEND_NULL_LABEL,
  48163. (void*)&&ZEND_NULL_LABEL,
  48164. (void*)&&ZEND_NULL_LABEL,
  48165. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_LABEL,
  48166. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
  48167. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
  48168. (void*)&&ZEND_NULL_LABEL,
  48169. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_LABEL,
  48170. (void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_CONST_LABEL,
  48171. (void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_CONST_LABEL,
  48172. (void*)&&ZEND_NULL_LABEL,
  48173. (void*)&&ZEND_NULL_LABEL,
  48174. (void*)&&ZEND_NULL_LABEL,
  48175. (void*)&&ZEND_NULL_LABEL,
  48176. (void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_LABEL,
  48177. (void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_LABEL,
  48178. (void*)&&ZEND_NULL_LABEL,
  48179. (void*)&&ZEND_NULL_LABEL,
  48180. (void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_CONST_LABEL,
  48181. (void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_CONST_LABEL,
  48182. (void*)&&ZEND_NULL_LABEL,
  48183. (void*)&&ZEND_NULL_LABEL,
  48184. (void*)&&ZEND_NULL_LABEL,
  48185. (void*)&&ZEND_NULL_LABEL,
  48186. (void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_LABEL,
  48187. (void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_LABEL,
  48188. (void*)&&ZEND_NULL_LABEL,
  48189. (void*)&&ZEND_NULL_LABEL,
  48190. (void*)&&ZEND_NULL_LABEL,
  48191. (void*)&&ZEND_NULL_LABEL,
  48192. (void*)&&ZEND_NULL_LABEL,
  48193. (void*)&&ZEND_NULL_LABEL,
  48194. (void*)&&ZEND_NULL_LABEL,
  48195. (void*)&&ZEND_NULL_LABEL,
  48196. (void*)&&ZEND_NULL_LABEL,
  48197. (void*)&&ZEND_NULL_LABEL,
  48198. (void*)&&ZEND_NULL_LABEL,
  48199. (void*)&&ZEND_NULL_LABEL,
  48200. (void*)&&ZEND_NULL_LABEL,
  48201. (void*)&&ZEND_NULL_LABEL,
  48202. (void*)&&ZEND_NULL_LABEL,
  48203. (void*)&&ZEND_NULL_LABEL,
  48204. (void*)&&ZEND_NULL_LABEL,
  48205. (void*)&&ZEND_NULL_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_SEND_VAR_SPEC_VAR_CONST_LABEL,
  48231. (void*)&&ZEND_NULL_LABEL,
  48232. (void*)&&ZEND_NULL_LABEL,
  48233. (void*)&&ZEND_SEND_VAR_SPEC_VAR_UNUSED_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_SEND_VAR_SPEC_CV_CONST_LABEL,
  48241. (void*)&&ZEND_NULL_LABEL,
  48242. (void*)&&ZEND_NULL_LABEL,
  48243. (void*)&&ZEND_SEND_VAR_SPEC_CV_UNUSED_LABEL,
  48244. (void*)&&ZEND_NULL_LABEL,
  48245. (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CONST_LABEL,
  48246. (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
  48247. (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
  48248. (void*)&&ZEND_NULL_LABEL,
  48249. (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CV_LABEL,
  48250. (void*)&&ZEND_SEND_ARRAY_SPEC_LABEL,
  48251. (void*)&&ZEND_SEND_USER_SPEC_CONST_LABEL,
  48252. (void*)&&ZEND_SEND_USER_SPEC_TMP_LABEL,
  48253. (void*)&&ZEND_SEND_USER_SPEC_VAR_LABEL,
  48254. (void*)&&ZEND_NULL_LABEL,
  48255. (void*)&&ZEND_SEND_USER_SPEC_CV_LABEL,
  48256. (void*)&&ZEND_STRLEN_SPEC_CONST_LABEL,
  48257. (void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
  48258. (void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
  48259. (void*)&&ZEND_NULL_LABEL,
  48260. (void*)&&ZEND_STRLEN_SPEC_CV_LABEL,
  48261. (void*)&&ZEND_DEFINED_SPEC_CONST_LABEL,
  48262. (void*)&&ZEND_TYPE_CHECK_SPEC_CONST_LABEL,
  48263. (void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
  48264. (void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
  48265. (void*)&&ZEND_NULL_LABEL,
  48266. (void*)&&ZEND_TYPE_CHECK_SPEC_CV_LABEL,
  48267. (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_LABEL,
  48268. (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_LABEL,
  48269. (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_LABEL,
  48270. (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_LABEL,
  48271. (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_LABEL,
  48272. (void*)&&ZEND_FE_RESET_RW_SPEC_CONST_LABEL,
  48273. (void*)&&ZEND_FE_RESET_RW_SPEC_TMP_LABEL,
  48274. (void*)&&ZEND_FE_RESET_RW_SPEC_VAR_LABEL,
  48275. (void*)&&ZEND_NULL_LABEL,
  48276. (void*)&&ZEND_FE_RESET_RW_SPEC_CV_LABEL,
  48277. (void*)&&ZEND_FE_FETCH_RW_SPEC_VAR_LABEL,
  48278. (void*)&&ZEND_FE_FREE_SPEC_TMPVAR_LABEL,
  48279. (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_LABEL,
  48280. (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
  48281. (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
  48282. (void*)&&ZEND_NULL_LABEL,
  48283. (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CV_LABEL,
  48284. (void*)&&ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_LABEL,
  48285. (void*)&&ZEND_DO_ICALL_SPEC_RETVAL_USED_LABEL,
  48286. (void*)&&ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_LABEL,
  48287. (void*)&&ZEND_DO_UCALL_SPEC_RETVAL_USED_LABEL,
  48288. (void*)&&ZEND_DO_UCALL_SPEC_OBSERVER_LABEL,
  48289. (void*)&&ZEND_DO_UCALL_SPEC_OBSERVER_LABEL,
  48290. (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_LABEL,
  48291. (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_LABEL,
  48292. (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_LABEL,
  48293. (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_LABEL,
  48294. (void*)&&ZEND_NULL_LABEL,
  48295. (void*)&&ZEND_NULL_LABEL,
  48296. (void*)&&ZEND_NULL_LABEL,
  48297. (void*)&&ZEND_NULL_LABEL,
  48298. (void*)&&ZEND_NULL_LABEL,
  48299. (void*)&&ZEND_NULL_LABEL,
  48300. (void*)&&ZEND_NULL_LABEL,
  48301. (void*)&&ZEND_NULL_LABEL,
  48302. (void*)&&ZEND_NULL_LABEL,
  48303. (void*)&&ZEND_NULL_LABEL,
  48304. (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_LABEL,
  48305. (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
  48306. (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
  48307. (void*)&&ZEND_NULL_LABEL,
  48308. (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CV_LABEL,
  48309. (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
  48310. (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  48311. (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  48312. (void*)&&ZEND_NULL_LABEL,
  48313. (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_LABEL,
  48314. (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CONST_LABEL,
  48315. (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
  48316. (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
  48317. (void*)&&ZEND_NULL_LABEL,
  48318. (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CV_LABEL,
  48319. (void*)&&ZEND_NULL_LABEL,
  48320. (void*)&&ZEND_NULL_LABEL,
  48321. (void*)&&ZEND_NULL_LABEL,
  48322. (void*)&&ZEND_NULL_LABEL,
  48323. (void*)&&ZEND_NULL_LABEL,
  48324. (void*)&&ZEND_NULL_LABEL,
  48325. (void*)&&ZEND_NULL_LABEL,
  48326. (void*)&&ZEND_NULL_LABEL,
  48327. (void*)&&ZEND_NULL_LABEL,
  48328. (void*)&&ZEND_NULL_LABEL,
  48329. (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CONST_LABEL,
  48330. (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
  48331. (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
  48332. (void*)&&ZEND_NULL_LABEL,
  48333. (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CV_LABEL,
  48334. (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
  48335. (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  48336. (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  48337. (void*)&&ZEND_NULL_LABEL,
  48338. (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_LABEL,
  48339. (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CONST_LABEL,
  48340. (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
  48341. (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
  48342. (void*)&&ZEND_NULL_LABEL,
  48343. (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CV_LABEL,
  48344. (void*)&&ZEND_ECHO_SPEC_CONST_LABEL,
  48345. (void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
  48346. (void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
  48347. (void*)&&ZEND_NULL_LABEL,
  48348. (void*)&&ZEND_ECHO_SPEC_CV_LABEL,
  48349. (void*)&&ZEND_NULL_LABEL,
  48350. (void*)&&ZEND_NULL_LABEL,
  48351. (void*)&&ZEND_NULL_LABEL,
  48352. (void*)&&ZEND_NULL_LABEL,
  48353. (void*)&&ZEND_NULL_LABEL,
  48354. (void*)&&ZEND_NULL_LABEL,
  48355. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
  48356. (void*)&&ZEND_NULL_LABEL,
  48357. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
  48358. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
  48359. (void*)&&ZEND_NULL_LABEL,
  48360. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
  48361. (void*)&&ZEND_NULL_LABEL,
  48362. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
  48363. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
  48364. (void*)&&ZEND_NULL_LABEL,
  48365. (void*)&&ZEND_NULL_LABEL,
  48366. (void*)&&ZEND_NULL_LABEL,
  48367. (void*)&&ZEND_NULL_LABEL,
  48368. (void*)&&ZEND_NULL_LABEL,
  48369. (void*)&&ZEND_NULL_LABEL,
  48370. (void*)&&ZEND_INSTANCEOF_SPEC_CV_CONST_LABEL,
  48371. (void*)&&ZEND_NULL_LABEL,
  48372. (void*)&&ZEND_INSTANCEOF_SPEC_CV_VAR_LABEL,
  48373. (void*)&&ZEND_INSTANCEOF_SPEC_CV_UNUSED_LABEL,
  48374. (void*)&&ZEND_NULL_LABEL,
  48375. (void*)&&ZEND_GENERATOR_CREATE_SPEC_LABEL,
  48376. (void*)&&ZEND_NULL_LABEL,
  48377. (void*)&&ZEND_NULL_LABEL,
  48378. (void*)&&ZEND_MAKE_REF_SPEC_VAR_UNUSED_LABEL,
  48379. (void*)&&ZEND_NULL_LABEL,
  48380. (void*)&&ZEND_MAKE_REF_SPEC_CV_UNUSED_LABEL,
  48381. (void*)&&ZEND_DECLARE_FUNCTION_SPEC_LABEL,
  48382. (void*)&&ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_LABEL,
  48383. (void*)&&ZEND_DECLARE_CONST_SPEC_CONST_CONST_LABEL,
  48384. (void*)&&ZEND_DECLARE_CLASS_SPEC_CONST_LABEL,
  48385. (void*)&&ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_LABEL,
  48386. (void*)&&ZEND_DECLARE_ANON_CLASS_SPEC_LABEL,
  48387. (void*)&&ZEND_ADD_ARRAY_UNPACK_SPEC_LABEL,
  48388. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_LABEL,
  48389. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
  48390. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
  48391. (void*)&&ZEND_NULL_LABEL,
  48392. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_LABEL,
  48393. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
  48394. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  48395. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  48396. (void*)&&ZEND_NULL_LABEL,
  48397. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
  48398. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
  48399. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  48400. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  48401. (void*)&&ZEND_NULL_LABEL,
  48402. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
  48403. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_LABEL,
  48404. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  48405. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  48406. (void*)&&ZEND_NULL_LABEL,
  48407. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_LABEL,
  48408. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_LABEL,
  48409. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
  48410. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
  48411. (void*)&&ZEND_NULL_LABEL,
  48412. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_LABEL,
  48413. (void*)&&ZEND_HANDLE_EXCEPTION_SPEC_LABEL,
  48414. (void*)&&ZEND_USER_OPCODE_SPEC_LABEL,
  48415. (void*)&&ZEND_ASSERT_CHECK_SPEC_LABEL,
  48416. (void*)&&ZEND_JMP_SET_SPEC_CONST_LABEL,
  48417. (void*)&&ZEND_JMP_SET_SPEC_TMP_LABEL,
  48418. (void*)&&ZEND_JMP_SET_SPEC_VAR_LABEL,
  48419. (void*)&&ZEND_NULL_LABEL,
  48420. (void*)&&ZEND_JMP_SET_SPEC_CV_LABEL,
  48421. (void*)&&ZEND_UNSET_CV_SPEC_CV_UNUSED_LABEL,
  48422. (void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_LABEL,
  48423. (void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_LABEL,
  48424. (void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CONST_LABEL,
  48425. (void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
  48426. (void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
  48427. (void*)&&ZEND_NULL_LABEL,
  48428. (void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CV_LABEL,
  48429. (void*)&&ZEND_SEPARATE_SPEC_VAR_UNUSED_LABEL,
  48430. (void*)&&ZEND_NULL_LABEL,
  48431. (void*)&&ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_LABEL,
  48432. (void*)&&ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_LABEL,
  48433. (void*)&&ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_LABEL,
  48434. (void*)&&ZEND_FETCH_CLASS_NAME_SPEC_CV_LABEL,
  48435. (void*)&&ZEND_CALL_TRAMPOLINE_SPEC_LABEL,
  48436. (void*)&&ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_LABEL,
  48437. (void*)&&ZEND_DISCARD_EXCEPTION_SPEC_LABEL,
  48438. (void*)&&ZEND_YIELD_SPEC_CONST_CONST_LABEL,
  48439. (void*)&&ZEND_YIELD_SPEC_CONST_TMPVAR_LABEL,
  48440. (void*)&&ZEND_YIELD_SPEC_CONST_TMPVAR_LABEL,
  48441. (void*)&&ZEND_YIELD_SPEC_CONST_UNUSED_LABEL,
  48442. (void*)&&ZEND_YIELD_SPEC_CONST_CV_LABEL,
  48443. (void*)&&ZEND_YIELD_SPEC_TMP_CONST_LABEL,
  48444. (void*)&&ZEND_YIELD_SPEC_TMP_TMPVAR_LABEL,
  48445. (void*)&&ZEND_YIELD_SPEC_TMP_TMPVAR_LABEL,
  48446. (void*)&&ZEND_YIELD_SPEC_TMP_UNUSED_LABEL,
  48447. (void*)&&ZEND_YIELD_SPEC_TMP_CV_LABEL,
  48448. (void*)&&ZEND_YIELD_SPEC_VAR_CONST_LABEL,
  48449. (void*)&&ZEND_YIELD_SPEC_VAR_TMPVAR_LABEL,
  48450. (void*)&&ZEND_YIELD_SPEC_VAR_TMPVAR_LABEL,
  48451. (void*)&&ZEND_YIELD_SPEC_VAR_UNUSED_LABEL,
  48452. (void*)&&ZEND_YIELD_SPEC_VAR_CV_LABEL,
  48453. (void*)&&ZEND_YIELD_SPEC_UNUSED_CONST_LABEL,
  48454. (void*)&&ZEND_YIELD_SPEC_UNUSED_TMPVAR_LABEL,
  48455. (void*)&&ZEND_YIELD_SPEC_UNUSED_TMPVAR_LABEL,
  48456. (void*)&&ZEND_YIELD_SPEC_UNUSED_UNUSED_LABEL,
  48457. (void*)&&ZEND_YIELD_SPEC_UNUSED_CV_LABEL,
  48458. (void*)&&ZEND_YIELD_SPEC_CV_CONST_LABEL,
  48459. (void*)&&ZEND_YIELD_SPEC_CV_TMPVAR_LABEL,
  48460. (void*)&&ZEND_YIELD_SPEC_CV_TMPVAR_LABEL,
  48461. (void*)&&ZEND_YIELD_SPEC_CV_UNUSED_LABEL,
  48462. (void*)&&ZEND_YIELD_SPEC_CV_CV_LABEL,
  48463. (void*)&&ZEND_GENERATOR_RETURN_SPEC_CONST_LABEL,
  48464. (void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
  48465. (void*)&&ZEND_GENERATOR_RETURN_SPEC_TMP_LABEL,
  48466. (void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
  48467. (void*)&&ZEND_GENERATOR_RETURN_SPEC_VAR_LABEL,
  48468. (void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
  48469. (void*)&&ZEND_NULL_LABEL,
  48470. (void*)&&ZEND_NULL_LABEL,
  48471. (void*)&&ZEND_GENERATOR_RETURN_SPEC_CV_LABEL,
  48472. (void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
  48473. (void*)&&ZEND_FAST_CALL_SPEC_LABEL,
  48474. (void*)&&ZEND_FAST_RET_SPEC_LABEL,
  48475. (void*)&&ZEND_RECV_VARIADIC_SPEC_UNUSED_LABEL,
  48476. (void*)&&ZEND_SEND_UNPACK_SPEC_LABEL,
  48477. (void*)&&ZEND_YIELD_FROM_SPEC_CONST_LABEL,
  48478. (void*)&&ZEND_YIELD_FROM_SPEC_TMPVAR_LABEL,
  48479. (void*)&&ZEND_YIELD_FROM_SPEC_TMPVAR_LABEL,
  48480. (void*)&&ZEND_NULL_LABEL,
  48481. (void*)&&ZEND_YIELD_FROM_SPEC_CV_LABEL,
  48482. (void*)&&ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_LABEL,
  48483. (void*)&&ZEND_BIND_GLOBAL_SPEC_CV_CONST_LABEL,
  48484. (void*)&&ZEND_COALESCE_SPEC_CONST_LABEL,
  48485. (void*)&&ZEND_COALESCE_SPEC_TMP_LABEL,
  48486. (void*)&&ZEND_COALESCE_SPEC_VAR_LABEL,
  48487. (void*)&&ZEND_NULL_LABEL,
  48488. (void*)&&ZEND_COALESCE_SPEC_CV_LABEL,
  48489. (void*)&&ZEND_SPACESHIP_SPEC_CONST_CONST_LABEL,
  48490. (void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
  48491. (void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
  48492. (void*)&&ZEND_NULL_LABEL,
  48493. (void*)&&ZEND_SPACESHIP_SPEC_CONST_CV_LABEL,
  48494. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
  48495. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
  48496. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
  48497. (void*)&&ZEND_NULL_LABEL,
  48498. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
  48499. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
  48500. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
  48501. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
  48502. (void*)&&ZEND_NULL_LABEL,
  48503. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
  48504. (void*)&&ZEND_NULL_LABEL,
  48505. (void*)&&ZEND_NULL_LABEL,
  48506. (void*)&&ZEND_NULL_LABEL,
  48507. (void*)&&ZEND_NULL_LABEL,
  48508. (void*)&&ZEND_NULL_LABEL,
  48509. (void*)&&ZEND_SPACESHIP_SPEC_CV_CONST_LABEL,
  48510. (void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
  48511. (void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
  48512. (void*)&&ZEND_NULL_LABEL,
  48513. (void*)&&ZEND_SPACESHIP_SPEC_CV_CV_LABEL,
  48514. (void*)&&ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_LABEL,
  48515. (void*)&&ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_LABEL,
  48516. (void*)&&ZEND_NULL_LABEL,
  48517. (void*)&&ZEND_NULL_LABEL,
  48518. (void*)&&ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_LABEL,
  48519. (void*)&&ZEND_NULL_LABEL,
  48520. (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_LABEL,
  48521. (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_LABEL,
  48522. (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_LABEL,
  48523. (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_LABEL,
  48524. (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_LABEL,
  48525. (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_LABEL,
  48526. (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_LABEL,
  48527. (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_LABEL,
  48528. (void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_LABEL,
  48529. (void*)&&ZEND_NULL_LABEL,
  48530. (void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_LABEL,
  48531. (void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_LABEL,
  48532. (void*)&&ZEND_NULL_LABEL,
  48533. (void*)&&ZEND_BIND_LEXICAL_SPEC_TMP_CV_LABEL,
  48534. (void*)&&ZEND_BIND_STATIC_SPEC_CV_UNUSED_LABEL,
  48535. (void*)&&ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_LABEL,
  48536. (void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_LABEL,
  48537. (void*)&&ZEND_NULL_LABEL,
  48538. (void*)&&ZEND_NULL_LABEL,
  48539. (void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_LABEL,
  48540. (void*)&&ZEND_NULL_LABEL,
  48541. (void*)&&ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_LABEL,
  48542. (void*)&&ZEND_SWITCH_LONG_SPEC_CONST_CONST_LABEL,
  48543. (void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48544. (void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48545. (void*)&&ZEND_NULL_LABEL,
  48546. (void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48547. (void*)&&ZEND_SWITCH_STRING_SPEC_CONST_CONST_LABEL,
  48548. (void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
  48549. (void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
  48550. (void*)&&ZEND_NULL_LABEL,
  48551. (void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
  48552. (void*)&&ZEND_IN_ARRAY_SPEC_CONST_CONST_LABEL,
  48553. (void*)&&ZEND_IN_ARRAY_SPEC_TMP_CONST_LABEL,
  48554. (void*)&&ZEND_IN_ARRAY_SPEC_VAR_CONST_LABEL,
  48555. (void*)&&ZEND_NULL_LABEL,
  48556. (void*)&&ZEND_IN_ARRAY_SPEC_CV_CONST_LABEL,
  48557. (void*)&&ZEND_COUNT_SPEC_CONST_UNUSED_LABEL,
  48558. (void*)&&ZEND_COUNT_SPEC_TMPVAR_UNUSED_LABEL,
  48559. (void*)&&ZEND_COUNT_SPEC_TMPVAR_UNUSED_LABEL,
  48560. (void*)&&ZEND_NULL_LABEL,
  48561. (void*)&&ZEND_COUNT_SPEC_CV_UNUSED_LABEL,
  48562. (void*)&&ZEND_GET_CLASS_SPEC_CONST_UNUSED_LABEL,
  48563. (void*)&&ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_LABEL,
  48564. (void*)&&ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_LABEL,
  48565. (void*)&&ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_LABEL,
  48566. (void*)&&ZEND_GET_CLASS_SPEC_CV_UNUSED_LABEL,
  48567. (void*)&&ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_LABEL,
  48568. (void*)&&ZEND_GET_TYPE_SPEC_CONST_UNUSED_LABEL,
  48569. (void*)&&ZEND_GET_TYPE_SPEC_TMP_UNUSED_LABEL,
  48570. (void*)&&ZEND_GET_TYPE_SPEC_VAR_UNUSED_LABEL,
  48571. (void*)&&ZEND_NULL_LABEL,
  48572. (void*)&&ZEND_GET_TYPE_SPEC_CV_UNUSED_LABEL,
  48573. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_LABEL,
  48574. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_LABEL,
  48575. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_LABEL,
  48576. (void*)&&ZEND_NULL_LABEL,
  48577. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_LABEL,
  48578. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_LABEL,
  48579. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
  48580. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
  48581. (void*)&&ZEND_NULL_LABEL,
  48582. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_LABEL,
  48583. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_LABEL,
  48584. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
  48585. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
  48586. (void*)&&ZEND_NULL_LABEL,
  48587. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_LABEL,
  48588. (void*)&&ZEND_NULL_LABEL,
  48589. (void*)&&ZEND_NULL_LABEL,
  48590. (void*)&&ZEND_NULL_LABEL,
  48591. (void*)&&ZEND_NULL_LABEL,
  48592. (void*)&&ZEND_NULL_LABEL,
  48593. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_LABEL,
  48594. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_LABEL,
  48595. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_LABEL,
  48596. (void*)&&ZEND_NULL_LABEL,
  48597. (void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_LABEL,
  48598. (void*)&&ZEND_MATCH_SPEC_CONST_CONST_LABEL,
  48599. (void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
  48600. (void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
  48601. (void*)&&ZEND_NULL_LABEL,
  48602. (void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
  48603. (void*)&&ZEND_NULL_LABEL,
  48604. (void*)&&ZEND_NULL_LABEL,
  48605. (void*)&&ZEND_NULL_LABEL,
  48606. (void*)&&ZEND_NULL_LABEL,
  48607. (void*)&&ZEND_NULL_LABEL,
  48608. (void*)&&ZEND_CASE_STRICT_SPEC_TMP_CONST_LABEL,
  48609. (void*)&&ZEND_CASE_STRICT_SPEC_TMP_TMP_LABEL,
  48610. (void*)&&ZEND_CASE_STRICT_SPEC_TMP_VAR_LABEL,
  48611. (void*)&&ZEND_NULL_LABEL,
  48612. (void*)&&ZEND_CASE_STRICT_SPEC_TMP_CV_LABEL,
  48613. (void*)&&ZEND_CASE_STRICT_SPEC_VAR_CONST_LABEL,
  48614. (void*)&&ZEND_CASE_STRICT_SPEC_VAR_TMP_LABEL,
  48615. (void*)&&ZEND_CASE_STRICT_SPEC_VAR_VAR_LABEL,
  48616. (void*)&&ZEND_NULL_LABEL,
  48617. (void*)&&ZEND_CASE_STRICT_SPEC_VAR_CV_LABEL,
  48618. (void*)&&ZEND_NULL_LABEL,
  48619. (void*)&&ZEND_NULL_LABEL,
  48620. (void*)&&ZEND_NULL_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_NULL_LABEL,
  48627. (void*)&&ZEND_NULL_LABEL,
  48628. (void*)&&ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_LABEL,
  48629. (void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
  48630. (void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
  48631. (void*)&&ZEND_NULL_LABEL,
  48632. (void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
  48633. (void*)&&ZEND_JMP_NULL_SPEC_CONST_LABEL,
  48634. (void*)&&ZEND_JMP_NULL_SPEC_TMP_LABEL,
  48635. (void*)&&ZEND_JMP_NULL_SPEC_VAR_LABEL,
  48636. (void*)&&ZEND_NULL_LABEL,
  48637. (void*)&&ZEND_JMP_NULL_SPEC_CV_LABEL,
  48638. (void*)&&ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_LABEL,
  48639. (void*)&&ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_LABEL,
  48640. (void*)&&ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_LABEL,
  48641. (void*)&&ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_LABEL,
  48642. (void*)&&ZEND_RECV_NOTYPE_SPEC_LABEL,
  48643. (void*)&&ZEND_JMP_FORWARD_SPEC_LABEL,
  48644. (void*)&&ZEND_NULL_LABEL,
  48645. (void*)&&ZEND_NULL_LABEL,
  48646. (void*)&&ZEND_NULL_LABEL,
  48647. (void*)&&ZEND_NULL_LABEL,
  48648. (void*)&&ZEND_NULL_LABEL,
  48649. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48650. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48651. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48652. (void*)&&ZEND_NULL_LABEL,
  48653. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48654. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48655. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48656. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48657. (void*)&&ZEND_NULL_LABEL,
  48658. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48659. (void*)&&ZEND_NULL_LABEL,
  48660. (void*)&&ZEND_NULL_LABEL,
  48661. (void*)&&ZEND_NULL_LABEL,
  48662. (void*)&&ZEND_NULL_LABEL,
  48663. (void*)&&ZEND_NULL_LABEL,
  48664. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48665. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48666. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48667. (void*)&&ZEND_NULL_LABEL,
  48668. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48669. (void*)&&ZEND_NULL_LABEL,
  48670. (void*)&&ZEND_NULL_LABEL,
  48671. (void*)&&ZEND_NULL_LABEL,
  48672. (void*)&&ZEND_NULL_LABEL,
  48673. (void*)&&ZEND_NULL_LABEL,
  48674. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48675. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48676. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48677. (void*)&&ZEND_NULL_LABEL,
  48678. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48679. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48680. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48681. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48682. (void*)&&ZEND_NULL_LABEL,
  48683. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48684. (void*)&&ZEND_NULL_LABEL,
  48685. (void*)&&ZEND_NULL_LABEL,
  48686. (void*)&&ZEND_NULL_LABEL,
  48687. (void*)&&ZEND_NULL_LABEL,
  48688. (void*)&&ZEND_NULL_LABEL,
  48689. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48690. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48691. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48692. (void*)&&ZEND_NULL_LABEL,
  48693. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48694. (void*)&&ZEND_NULL_LABEL,
  48695. (void*)&&ZEND_NULL_LABEL,
  48696. (void*)&&ZEND_NULL_LABEL,
  48697. (void*)&&ZEND_NULL_LABEL,
  48698. (void*)&&ZEND_NULL_LABEL,
  48699. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48700. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48701. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48702. (void*)&&ZEND_NULL_LABEL,
  48703. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48704. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48705. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48706. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48707. (void*)&&ZEND_NULL_LABEL,
  48708. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48709. (void*)&&ZEND_NULL_LABEL,
  48710. (void*)&&ZEND_NULL_LABEL,
  48711. (void*)&&ZEND_NULL_LABEL,
  48712. (void*)&&ZEND_NULL_LABEL,
  48713. (void*)&&ZEND_NULL_LABEL,
  48714. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48715. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48716. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48717. (void*)&&ZEND_NULL_LABEL,
  48718. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48719. (void*)&&ZEND_NULL_LABEL,
  48720. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
  48721. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
  48722. (void*)&&ZEND_NULL_LABEL,
  48723. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
  48724. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48725. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48726. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48727. (void*)&&ZEND_NULL_LABEL,
  48728. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48729. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48730. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48731. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48732. (void*)&&ZEND_NULL_LABEL,
  48733. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48734. (void*)&&ZEND_NULL_LABEL,
  48735. (void*)&&ZEND_NULL_LABEL,
  48736. (void*)&&ZEND_NULL_LABEL,
  48737. (void*)&&ZEND_NULL_LABEL,
  48738. (void*)&&ZEND_NULL_LABEL,
  48739. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48740. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48741. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48742. (void*)&&ZEND_NULL_LABEL,
  48743. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48744. (void*)&&ZEND_NULL_LABEL,
  48745. (void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
  48746. (void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
  48747. (void*)&&ZEND_NULL_LABEL,
  48748. (void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
  48749. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48750. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48751. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48752. (void*)&&ZEND_NULL_LABEL,
  48753. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48754. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48755. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48756. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48757. (void*)&&ZEND_NULL_LABEL,
  48758. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48759. (void*)&&ZEND_NULL_LABEL,
  48760. (void*)&&ZEND_NULL_LABEL,
  48761. (void*)&&ZEND_NULL_LABEL,
  48762. (void*)&&ZEND_NULL_LABEL,
  48763. (void*)&&ZEND_NULL_LABEL,
  48764. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48765. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48766. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48767. (void*)&&ZEND_NULL_LABEL,
  48768. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48769. (void*)&&ZEND_NULL_LABEL,
  48770. (void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  48771. (void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  48772. (void*)&&ZEND_NULL_LABEL,
  48773. (void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  48774. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48775. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48776. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48777. (void*)&&ZEND_NULL_LABEL,
  48778. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48779. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48780. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48781. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48782. (void*)&&ZEND_NULL_LABEL,
  48783. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48784. (void*)&&ZEND_NULL_LABEL,
  48785. (void*)&&ZEND_NULL_LABEL,
  48786. (void*)&&ZEND_NULL_LABEL,
  48787. (void*)&&ZEND_NULL_LABEL,
  48788. (void*)&&ZEND_NULL_LABEL,
  48789. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48790. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48791. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48792. (void*)&&ZEND_NULL_LABEL,
  48793. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48794. (void*)&&ZEND_NULL_LABEL,
  48795. (void*)&&ZEND_NULL_LABEL,
  48796. (void*)&&ZEND_NULL_LABEL,
  48797. (void*)&&ZEND_NULL_LABEL,
  48798. (void*)&&ZEND_NULL_LABEL,
  48799. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48800. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48801. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48802. (void*)&&ZEND_NULL_LABEL,
  48803. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48804. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48805. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48806. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48807. (void*)&&ZEND_NULL_LABEL,
  48808. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48809. (void*)&&ZEND_NULL_LABEL,
  48810. (void*)&&ZEND_NULL_LABEL,
  48811. (void*)&&ZEND_NULL_LABEL,
  48812. (void*)&&ZEND_NULL_LABEL,
  48813. (void*)&&ZEND_NULL_LABEL,
  48814. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  48815. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48816. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48817. (void*)&&ZEND_NULL_LABEL,
  48818. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48819. (void*)&&ZEND_NULL_LABEL,
  48820. (void*)&&ZEND_NULL_LABEL,
  48821. (void*)&&ZEND_NULL_LABEL,
  48822. (void*)&&ZEND_NULL_LABEL,
  48823. (void*)&&ZEND_NULL_LABEL,
  48824. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48825. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48826. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48827. (void*)&&ZEND_NULL_LABEL,
  48828. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48829. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48830. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48831. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48832. (void*)&&ZEND_NULL_LABEL,
  48833. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48834. (void*)&&ZEND_NULL_LABEL,
  48835. (void*)&&ZEND_NULL_LABEL,
  48836. (void*)&&ZEND_NULL_LABEL,
  48837. (void*)&&ZEND_NULL_LABEL,
  48838. (void*)&&ZEND_NULL_LABEL,
  48839. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48840. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48841. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48842. (void*)&&ZEND_NULL_LABEL,
  48843. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48844. (void*)&&ZEND_NULL_LABEL,
  48845. (void*)&&ZEND_NULL_LABEL,
  48846. (void*)&&ZEND_NULL_LABEL,
  48847. (void*)&&ZEND_NULL_LABEL,
  48848. (void*)&&ZEND_NULL_LABEL,
  48849. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48850. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48851. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48852. (void*)&&ZEND_NULL_LABEL,
  48853. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48854. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48855. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48856. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48857. (void*)&&ZEND_NULL_LABEL,
  48858. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48859. (void*)&&ZEND_NULL_LABEL,
  48860. (void*)&&ZEND_NULL_LABEL,
  48861. (void*)&&ZEND_NULL_LABEL,
  48862. (void*)&&ZEND_NULL_LABEL,
  48863. (void*)&&ZEND_NULL_LABEL,
  48864. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48865. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48866. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48867. (void*)&&ZEND_NULL_LABEL,
  48868. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48869. (void*)&&ZEND_NULL_LABEL,
  48870. (void*)&&ZEND_NULL_LABEL,
  48871. (void*)&&ZEND_NULL_LABEL,
  48872. (void*)&&ZEND_NULL_LABEL,
  48873. (void*)&&ZEND_NULL_LABEL,
  48874. (void*)&&ZEND_NULL_LABEL,
  48875. (void*)&&ZEND_NULL_LABEL,
  48876. (void*)&&ZEND_NULL_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_NULL_LABEL,
  48883. (void*)&&ZEND_NULL_LABEL,
  48884. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48885. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  48886. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  48887. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48888. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48889. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48890. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48891. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48892. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48893. (void*)&&ZEND_NULL_LABEL,
  48894. (void*)&&ZEND_NULL_LABEL,
  48895. (void*)&&ZEND_NULL_LABEL,
  48896. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48897. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48898. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48899. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48900. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  48901. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  48902. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48903. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48904. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_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_NULL_LABEL,
  48909. (void*)&&ZEND_NULL_LABEL,
  48910. (void*)&&ZEND_NULL_LABEL,
  48911. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48912. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48913. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48914. (void*)&&ZEND_NULL_LABEL,
  48915. (void*)&&ZEND_NULL_LABEL,
  48916. (void*)&&ZEND_NULL_LABEL,
  48917. (void*)&&ZEND_NULL_LABEL,
  48918. (void*)&&ZEND_NULL_LABEL,
  48919. (void*)&&ZEND_NULL_LABEL,
  48920. (void*)&&ZEND_NULL_LABEL,
  48921. (void*)&&ZEND_NULL_LABEL,
  48922. (void*)&&ZEND_NULL_LABEL,
  48923. (void*)&&ZEND_NULL_LABEL,
  48924. (void*)&&ZEND_NULL_LABEL,
  48925. (void*)&&ZEND_NULL_LABEL,
  48926. (void*)&&ZEND_NULL_LABEL,
  48927. (void*)&&ZEND_NULL_LABEL,
  48928. (void*)&&ZEND_NULL_LABEL,
  48929. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48930. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  48931. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  48932. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48933. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48934. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48935. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48936. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48937. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48938. (void*)&&ZEND_NULL_LABEL,
  48939. (void*)&&ZEND_NULL_LABEL,
  48940. (void*)&&ZEND_NULL_LABEL,
  48941. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48942. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48943. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48944. (void*)&&ZEND_NULL_LABEL,
  48945. (void*)&&ZEND_NULL_LABEL,
  48946. (void*)&&ZEND_NULL_LABEL,
  48947. (void*)&&ZEND_NULL_LABEL,
  48948. (void*)&&ZEND_NULL_LABEL,
  48949. (void*)&&ZEND_NULL_LABEL,
  48950. (void*)&&ZEND_NULL_LABEL,
  48951. (void*)&&ZEND_NULL_LABEL,
  48952. (void*)&&ZEND_NULL_LABEL,
  48953. (void*)&&ZEND_NULL_LABEL,
  48954. (void*)&&ZEND_NULL_LABEL,
  48955. (void*)&&ZEND_NULL_LABEL,
  48956. (void*)&&ZEND_NULL_LABEL,
  48957. (void*)&&ZEND_NULL_LABEL,
  48958. (void*)&&ZEND_NULL_LABEL,
  48959. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48960. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  48961. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  48962. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48963. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48964. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48965. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48966. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48967. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48968. (void*)&&ZEND_NULL_LABEL,
  48969. (void*)&&ZEND_NULL_LABEL,
  48970. (void*)&&ZEND_NULL_LABEL,
  48971. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48972. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48973. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48974. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48975. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  48976. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  48977. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48978. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48979. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_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_NULL_LABEL,
  48984. (void*)&&ZEND_NULL_LABEL,
  48985. (void*)&&ZEND_NULL_LABEL,
  48986. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48987. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48988. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48989. (void*)&&ZEND_NULL_LABEL,
  48990. (void*)&&ZEND_NULL_LABEL,
  48991. (void*)&&ZEND_NULL_LABEL,
  48992. (void*)&&ZEND_NULL_LABEL,
  48993. (void*)&&ZEND_NULL_LABEL,
  48994. (void*)&&ZEND_NULL_LABEL,
  48995. (void*)&&ZEND_NULL_LABEL,
  48996. (void*)&&ZEND_NULL_LABEL,
  48997. (void*)&&ZEND_NULL_LABEL,
  48998. (void*)&&ZEND_NULL_LABEL,
  48999. (void*)&&ZEND_NULL_LABEL,
  49000. (void*)&&ZEND_NULL_LABEL,
  49001. (void*)&&ZEND_NULL_LABEL,
  49002. (void*)&&ZEND_NULL_LABEL,
  49003. (void*)&&ZEND_NULL_LABEL,
  49004. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49005. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49006. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49007. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49008. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49009. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49010. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49011. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49012. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49013. (void*)&&ZEND_NULL_LABEL,
  49014. (void*)&&ZEND_NULL_LABEL,
  49015. (void*)&&ZEND_NULL_LABEL,
  49016. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49017. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49018. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49019. (void*)&&ZEND_NULL_LABEL,
  49020. (void*)&&ZEND_NULL_LABEL,
  49021. (void*)&&ZEND_NULL_LABEL,
  49022. (void*)&&ZEND_NULL_LABEL,
  49023. (void*)&&ZEND_NULL_LABEL,
  49024. (void*)&&ZEND_NULL_LABEL,
  49025. (void*)&&ZEND_NULL_LABEL,
  49026. (void*)&&ZEND_NULL_LABEL,
  49027. (void*)&&ZEND_NULL_LABEL,
  49028. (void*)&&ZEND_NULL_LABEL,
  49029. (void*)&&ZEND_NULL_LABEL,
  49030. (void*)&&ZEND_NULL_LABEL,
  49031. (void*)&&ZEND_NULL_LABEL,
  49032. (void*)&&ZEND_NULL_LABEL,
  49033. (void*)&&ZEND_NULL_LABEL,
  49034. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  49035. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49036. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49037. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49038. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49039. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49040. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49041. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49042. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49043. (void*)&&ZEND_NULL_LABEL,
  49044. (void*)&&ZEND_NULL_LABEL,
  49045. (void*)&&ZEND_NULL_LABEL,
  49046. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49047. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49048. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49049. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  49050. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49051. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49052. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49053. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49054. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_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_NULL_LABEL,
  49059. (void*)&&ZEND_NULL_LABEL,
  49060. (void*)&&ZEND_NULL_LABEL,
  49061. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49062. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49063. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49064. (void*)&&ZEND_NULL_LABEL,
  49065. (void*)&&ZEND_NULL_LABEL,
  49066. (void*)&&ZEND_NULL_LABEL,
  49067. (void*)&&ZEND_NULL_LABEL,
  49068. (void*)&&ZEND_NULL_LABEL,
  49069. (void*)&&ZEND_NULL_LABEL,
  49070. (void*)&&ZEND_NULL_LABEL,
  49071. (void*)&&ZEND_NULL_LABEL,
  49072. (void*)&&ZEND_NULL_LABEL,
  49073. (void*)&&ZEND_NULL_LABEL,
  49074. (void*)&&ZEND_NULL_LABEL,
  49075. (void*)&&ZEND_NULL_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_CONST_LABEL,
  49080. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49081. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49082. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49083. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49084. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49085. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49086. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49087. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49088. (void*)&&ZEND_NULL_LABEL,
  49089. (void*)&&ZEND_NULL_LABEL,
  49090. (void*)&&ZEND_NULL_LABEL,
  49091. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49092. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49093. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49094. (void*)&&ZEND_NULL_LABEL,
  49095. (void*)&&ZEND_NULL_LABEL,
  49096. (void*)&&ZEND_NULL_LABEL,
  49097. (void*)&&ZEND_NULL_LABEL,
  49098. (void*)&&ZEND_NULL_LABEL,
  49099. (void*)&&ZEND_NULL_LABEL,
  49100. (void*)&&ZEND_NULL_LABEL,
  49101. (void*)&&ZEND_NULL_LABEL,
  49102. (void*)&&ZEND_NULL_LABEL,
  49103. (void*)&&ZEND_NULL_LABEL,
  49104. (void*)&&ZEND_NULL_LABEL,
  49105. (void*)&&ZEND_NULL_LABEL,
  49106. (void*)&&ZEND_NULL_LABEL,
  49107. (void*)&&ZEND_NULL_LABEL,
  49108. (void*)&&ZEND_NULL_LABEL,
  49109. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49110. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49111. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49112. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49113. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49114. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49115. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49116. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49117. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49118. (void*)&&ZEND_NULL_LABEL,
  49119. (void*)&&ZEND_NULL_LABEL,
  49120. (void*)&&ZEND_NULL_LABEL,
  49121. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49122. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49123. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49124. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49125. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49126. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49127. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49128. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49129. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_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_NULL_LABEL,
  49134. (void*)&&ZEND_NULL_LABEL,
  49135. (void*)&&ZEND_NULL_LABEL,
  49136. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49137. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49138. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49139. (void*)&&ZEND_NULL_LABEL,
  49140. (void*)&&ZEND_NULL_LABEL,
  49141. (void*)&&ZEND_NULL_LABEL,
  49142. (void*)&&ZEND_NULL_LABEL,
  49143. (void*)&&ZEND_NULL_LABEL,
  49144. (void*)&&ZEND_NULL_LABEL,
  49145. (void*)&&ZEND_NULL_LABEL,
  49146. (void*)&&ZEND_NULL_LABEL,
  49147. (void*)&&ZEND_NULL_LABEL,
  49148. (void*)&&ZEND_NULL_LABEL,
  49149. (void*)&&ZEND_NULL_LABEL,
  49150. (void*)&&ZEND_NULL_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_CONST_LABEL,
  49155. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49156. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49157. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49158. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49159. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49160. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49161. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49162. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49163. (void*)&&ZEND_NULL_LABEL,
  49164. (void*)&&ZEND_NULL_LABEL,
  49165. (void*)&&ZEND_NULL_LABEL,
  49166. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49167. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49168. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49169. (void*)&&ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_LABEL,
  49170. (void*)&&ZEND_NULL_LABEL,
  49171. (void*)&&ZEND_NULL_LABEL,
  49172. (void*)&&ZEND_NULL_LABEL,
  49173. (void*)&&ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_LABEL,
  49174. (void*)&&ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_LABEL,
  49175. (void*)&&ZEND_NULL_LABEL,
  49176. (void*)&&ZEND_NULL_LABEL,
  49177. (void*)&&ZEND_NULL_LABEL,
  49178. (void*)&&ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_LABEL,
  49179. (void*)&&ZEND_NULL_LABEL,
  49180. (void*)&&ZEND_NULL_LABEL,
  49181. (void*)&&ZEND_NULL_LABEL,
  49182. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
  49183. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49184. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49185. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
  49186. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49187. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49188. (void*)&&ZEND_NULL_LABEL,
  49189. (void*)&&ZEND_NULL_LABEL,
  49190. (void*)&&ZEND_NULL_LABEL,
  49191. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
  49192. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49193. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49194. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
  49195. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49196. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49197. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49198. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49199. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49200. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49201. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49202. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49203. (void*)&&ZEND_NULL_LABEL,
  49204. (void*)&&ZEND_NULL_LABEL,
  49205. (void*)&&ZEND_NULL_LABEL,
  49206. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49207. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49208. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49209. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
  49210. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49211. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49212. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49213. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49214. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_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_NULL_LABEL,
  49219. (void*)&&ZEND_NULL_LABEL,
  49220. (void*)&&ZEND_NULL_LABEL,
  49221. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49222. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49223. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49224. (void*)&&ZEND_NULL_LABEL,
  49225. (void*)&&ZEND_NULL_LABEL,
  49226. (void*)&&ZEND_NULL_LABEL,
  49227. (void*)&&ZEND_NULL_LABEL,
  49228. (void*)&&ZEND_NULL_LABEL,
  49229. (void*)&&ZEND_NULL_LABEL,
  49230. (void*)&&ZEND_NULL_LABEL,
  49231. (void*)&&ZEND_NULL_LABEL,
  49232. (void*)&&ZEND_NULL_LABEL,
  49233. (void*)&&ZEND_NULL_LABEL,
  49234. (void*)&&ZEND_NULL_LABEL,
  49235. (void*)&&ZEND_NULL_LABEL,
  49236. (void*)&&ZEND_NULL_LABEL,
  49237. (void*)&&ZEND_NULL_LABEL,
  49238. (void*)&&ZEND_NULL_LABEL,
  49239. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
  49240. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49241. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49242. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49243. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49244. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49245. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49246. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49247. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49248. (void*)&&ZEND_NULL_LABEL,
  49249. (void*)&&ZEND_NULL_LABEL,
  49250. (void*)&&ZEND_NULL_LABEL,
  49251. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49252. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49253. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49254. (void*)&&ZEND_NULL_LABEL,
  49255. (void*)&&ZEND_NULL_LABEL,
  49256. (void*)&&ZEND_NULL_LABEL,
  49257. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  49258. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49259. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49260. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  49261. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49262. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49263. (void*)&&ZEND_NULL_LABEL,
  49264. (void*)&&ZEND_NULL_LABEL,
  49265. (void*)&&ZEND_NULL_LABEL,
  49266. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  49267. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49268. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49269. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49270. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49271. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49272. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49273. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49274. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49275. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49276. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49277. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49278. (void*)&&ZEND_NULL_LABEL,
  49279. (void*)&&ZEND_NULL_LABEL,
  49280. (void*)&&ZEND_NULL_LABEL,
  49281. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49282. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49283. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49284. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49285. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49286. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49287. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49288. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49289. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_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_NULL_LABEL,
  49294. (void*)&&ZEND_NULL_LABEL,
  49295. (void*)&&ZEND_NULL_LABEL,
  49296. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49297. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49298. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49299. (void*)&&ZEND_NULL_LABEL,
  49300. (void*)&&ZEND_NULL_LABEL,
  49301. (void*)&&ZEND_NULL_LABEL,
  49302. (void*)&&ZEND_NULL_LABEL,
  49303. (void*)&&ZEND_NULL_LABEL,
  49304. (void*)&&ZEND_NULL_LABEL,
  49305. (void*)&&ZEND_NULL_LABEL,
  49306. (void*)&&ZEND_NULL_LABEL,
  49307. (void*)&&ZEND_NULL_LABEL,
  49308. (void*)&&ZEND_NULL_LABEL,
  49309. (void*)&&ZEND_NULL_LABEL,
  49310. (void*)&&ZEND_NULL_LABEL,
  49311. (void*)&&ZEND_NULL_LABEL,
  49312. (void*)&&ZEND_NULL_LABEL,
  49313. (void*)&&ZEND_NULL_LABEL,
  49314. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49315. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49316. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49317. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49318. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49319. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49320. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49321. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49322. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49323. (void*)&&ZEND_NULL_LABEL,
  49324. (void*)&&ZEND_NULL_LABEL,
  49325. (void*)&&ZEND_NULL_LABEL,
  49326. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49327. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49328. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49329. (void*)&&ZEND_NULL_LABEL,
  49330. (void*)&&ZEND_NULL_LABEL,
  49331. (void*)&&ZEND_NULL_LABEL,
  49332. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
  49333. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49334. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49335. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
  49336. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49337. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49338. (void*)&&ZEND_NULL_LABEL,
  49339. (void*)&&ZEND_NULL_LABEL,
  49340. (void*)&&ZEND_NULL_LABEL,
  49341. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
  49342. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49343. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49344. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  49345. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49346. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49347. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49348. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49349. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49350. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49351. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49352. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49353. (void*)&&ZEND_NULL_LABEL,
  49354. (void*)&&ZEND_NULL_LABEL,
  49355. (void*)&&ZEND_NULL_LABEL,
  49356. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49357. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49358. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49359. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  49360. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49361. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49362. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49363. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49364. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_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_NULL_LABEL,
  49369. (void*)&&ZEND_NULL_LABEL,
  49370. (void*)&&ZEND_NULL_LABEL,
  49371. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49372. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49373. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49374. (void*)&&ZEND_NULL_LABEL,
  49375. (void*)&&ZEND_NULL_LABEL,
  49376. (void*)&&ZEND_NULL_LABEL,
  49377. (void*)&&ZEND_NULL_LABEL,
  49378. (void*)&&ZEND_NULL_LABEL,
  49379. (void*)&&ZEND_NULL_LABEL,
  49380. (void*)&&ZEND_NULL_LABEL,
  49381. (void*)&&ZEND_NULL_LABEL,
  49382. (void*)&&ZEND_NULL_LABEL,
  49383. (void*)&&ZEND_NULL_LABEL,
  49384. (void*)&&ZEND_NULL_LABEL,
  49385. (void*)&&ZEND_NULL_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_CONST_LABEL,
  49390. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49391. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49392. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49393. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49394. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49395. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49396. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49397. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49398. (void*)&&ZEND_NULL_LABEL,
  49399. (void*)&&ZEND_NULL_LABEL,
  49400. (void*)&&ZEND_NULL_LABEL,
  49401. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49402. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49403. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49404. (void*)&&ZEND_NULL_LABEL,
  49405. (void*)&&ZEND_NULL_LABEL,
  49406. (void*)&&ZEND_NULL_LABEL,
  49407. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  49408. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49409. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49410. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  49411. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49412. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49413. (void*)&&ZEND_NULL_LABEL,
  49414. (void*)&&ZEND_NULL_LABEL,
  49415. (void*)&&ZEND_NULL_LABEL,
  49416. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  49417. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  49418. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  49419. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49420. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49421. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49422. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49423. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49424. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49425. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49426. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49427. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49428. (void*)&&ZEND_NULL_LABEL,
  49429. (void*)&&ZEND_NULL_LABEL,
  49430. (void*)&&ZEND_NULL_LABEL,
  49431. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49432. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49433. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49434. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  49435. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49436. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49437. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49438. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49439. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_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_NULL_LABEL,
  49444. (void*)&&ZEND_NULL_LABEL,
  49445. (void*)&&ZEND_NULL_LABEL,
  49446. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49447. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49448. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49449. (void*)&&ZEND_NULL_LABEL,
  49450. (void*)&&ZEND_NULL_LABEL,
  49451. (void*)&&ZEND_NULL_LABEL,
  49452. (void*)&&ZEND_NULL_LABEL,
  49453. (void*)&&ZEND_NULL_LABEL,
  49454. (void*)&&ZEND_NULL_LABEL,
  49455. (void*)&&ZEND_NULL_LABEL,
  49456. (void*)&&ZEND_NULL_LABEL,
  49457. (void*)&&ZEND_NULL_LABEL,
  49458. (void*)&&ZEND_NULL_LABEL,
  49459. (void*)&&ZEND_NULL_LABEL,
  49460. (void*)&&ZEND_NULL_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_CONST_LABEL,
  49465. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  49466. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  49467. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49468. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49469. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49470. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49471. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49472. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49473. (void*)&&ZEND_NULL_LABEL,
  49474. (void*)&&ZEND_NULL_LABEL,
  49475. (void*)&&ZEND_NULL_LABEL,
  49476. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  49477. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  49478. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  49479. (void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
  49480. (void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
  49481. (void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
  49482. (void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_LABEL,
  49483. (void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
  49484. (void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
  49485. (void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
  49486. (void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_LABEL,
  49487. (void*)&&ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
  49488. (void*)&&ZEND_POST_INC_LONG_SPEC_CV_LABEL,
  49489. (void*)&&ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
  49490. (void*)&&ZEND_POST_DEC_LONG_SPEC_CV_LABEL,
  49491. (void*)&&ZEND_QM_ASSIGN_LONG_SPEC_CONST_LABEL,
  49492. (void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
  49493. (void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
  49494. (void*)&&ZEND_NULL_LABEL,
  49495. (void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
  49496. (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_LABEL,
  49497. (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
  49498. (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
  49499. (void*)&&ZEND_NULL_LABEL,
  49500. (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
  49501. (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_CONST_LABEL,
  49502. (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
  49503. (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
  49504. (void*)&&ZEND_NULL_LABEL,
  49505. (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
  49506. (void*)&&ZEND_NULL_LABEL,
  49507. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
  49508. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
  49509. (void*)&&ZEND_NULL_LABEL,
  49510. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
  49511. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
  49512. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
  49513. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
  49514. (void*)&&ZEND_NULL_LABEL,
  49515. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
  49516. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
  49517. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
  49518. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
  49519. (void*)&&ZEND_NULL_LABEL,
  49520. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
  49521. (void*)&&ZEND_NULL_LABEL,
  49522. (void*)&&ZEND_NULL_LABEL,
  49523. (void*)&&ZEND_NULL_LABEL,
  49524. (void*)&&ZEND_NULL_LABEL,
  49525. (void*)&&ZEND_NULL_LABEL,
  49526. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_LABEL,
  49527. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
  49528. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
  49529. (void*)&&ZEND_NULL_LABEL,
  49530. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
  49531. (void*)&&ZEND_NULL_LABEL,
  49532. (void*)&&ZEND_NULL_LABEL,
  49533. (void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_VAR_LABEL,
  49534. (void*)&&ZEND_NULL_LABEL,
  49535. (void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_CV_LABEL,
  49536. (void*)&&ZEND_NULL_LABEL,
  49537. (void*)&&ZEND_NULL_LABEL,
  49538. (void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_LABEL,
  49539. (void*)&&ZEND_NULL_LABEL,
  49540. (void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_LABEL,
  49541. (void*)&&ZEND_SEND_VAL_SIMPLE_SPEC_CONST_LABEL,
  49542. (void*)&&ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_LABEL,
  49543. (void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
  49544. (void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_LABEL,
  49545. (void*)&&ZEND_NULL_LABEL
  49546. };
  49547. zend_opcode_handlers = (const void **) labels;
  49548. zend_handlers_count = sizeof(labels) / sizeof(void*);
  49549. memset(&hybrid_halt_op, 0, sizeof(hybrid_halt_op));
  49550. hybrid_halt_op.handler = (void*)&&HYBRID_HALT_LABEL;
  49551. #ifdef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE
  49552. memset(vm_stack_data.hybrid_jit_red_zone, 0, ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE);
  49553. #endif
  49554. if (zend_touch_vm_stack_data) {
  49555. zend_touch_vm_stack_data(&vm_stack_data);
  49556. }
  49557. goto HYBRID_HALT_LABEL;
  49558. }
  49559. #endif
  49560. LOAD_OPLINE();
  49561. ZEND_VM_LOOP_INTERRUPT_CHECK();
  49562. while (1) {
  49563. #if !defined(ZEND_VM_FP_GLOBAL_REG) || !defined(ZEND_VM_IP_GLOBAL_REG)
  49564. int ret;
  49565. #endif
  49566. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  49567. HYBRID_SWITCH() {
  49568. #else
  49569. #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
  49570. ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49571. if (UNEXPECTED(!OPLINE)) {
  49572. #else
  49573. if (UNEXPECTED((ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)) != 0)) {
  49574. #endif
  49575. #endif
  49576. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  49577. HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_OP_SPEC):
  49578. VM_TRACE(ZEND_ASSIGN_STATIC_PROP_OP_SPEC)
  49579. ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49580. HYBRID_BREAK();
  49581. HYBRID_CASE(ZEND_PRE_INC_STATIC_PROP_SPEC):
  49582. VM_TRACE(ZEND_PRE_INC_STATIC_PROP_SPEC)
  49583. ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49584. HYBRID_BREAK();
  49585. HYBRID_CASE(ZEND_POST_INC_STATIC_PROP_SPEC):
  49586. VM_TRACE(ZEND_POST_INC_STATIC_PROP_SPEC)
  49587. ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49588. HYBRID_BREAK();
  49589. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC):
  49590. VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC)
  49591. ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49592. HYBRID_BREAK();
  49593. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC):
  49594. VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC)
  49595. ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49596. HYBRID_BREAK();
  49597. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC):
  49598. VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC)
  49599. ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49600. HYBRID_BREAK();
  49601. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC):
  49602. VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC)
  49603. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49604. HYBRID_BREAK();
  49605. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC):
  49606. VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC)
  49607. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49608. HYBRID_BREAK();
  49609. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC):
  49610. VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC)
  49611. ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49612. HYBRID_BREAK();
  49613. HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST):
  49614. VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST)
  49615. ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49616. HYBRID_BREAK();
  49617. HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP):
  49618. VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP)
  49619. ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49620. HYBRID_BREAK();
  49621. HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR):
  49622. VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR)
  49623. ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49624. HYBRID_BREAK();
  49625. HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV):
  49626. VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV)
  49627. ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49628. HYBRID_BREAK();
  49629. HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_REF_SPEC):
  49630. VM_TRACE(ZEND_ASSIGN_STATIC_PROP_REF_SPEC)
  49631. ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49632. HYBRID_BREAK();
  49633. zend_leave_helper_SPEC_LABEL:
  49634. {
  49635. zend_execute_data *old_execute_data;
  49636. uint32_t call_info = EX_CALL_INFO();
  49637. SAVE_OPLINE();
  49638. 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)) {
  49639. EG(current_execute_data) = EX(prev_execute_data);
  49640. i_free_compiled_variables(execute_data);
  49641. #ifdef ZEND_PREFER_RELOAD
  49642. call_info = EX_CALL_INFO();
  49643. #endif
  49644. if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
  49645. OBJ_RELEASE(Z_OBJ(execute_data->This));
  49646. } else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
  49647. OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
  49648. }
  49649. EG(vm_stack_top) = (zval*)execute_data;
  49650. execute_data = EX(prev_execute_data);
  49651. if (UNEXPECTED(EG(exception) != NULL)) {
  49652. zend_rethrow_exception(execute_data);
  49653. HANDLE_EXCEPTION_LEAVE();
  49654. }
  49655. LOAD_NEXT_OPLINE();
  49656. ZEND_VM_LEAVE();
  49657. } else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
  49658. EG(current_execute_data) = EX(prev_execute_data);
  49659. i_free_compiled_variables(execute_data);
  49660. #ifdef ZEND_PREFER_RELOAD
  49661. call_info = EX_CALL_INFO();
  49662. #endif
  49663. if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
  49664. zend_clean_and_cache_symbol_table(EX(symbol_table));
  49665. }
  49666. if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
  49667. zend_free_extra_named_params(EX(extra_named_params));
  49668. }
  49669. /* Free extra args before releasing the closure,
  49670. * as that may free the op_array. */
  49671. zend_vm_stack_free_extra_args_ex(call_info, execute_data);
  49672. if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
  49673. OBJ_RELEASE(Z_OBJ(execute_data->This));
  49674. } else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
  49675. OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
  49676. }
  49677. old_execute_data = execute_data;
  49678. execute_data = EX(prev_execute_data);
  49679. zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
  49680. if (UNEXPECTED(EG(exception) != NULL)) {
  49681. zend_rethrow_exception(execute_data);
  49682. HANDLE_EXCEPTION_LEAVE();
  49683. }
  49684. LOAD_NEXT_OPLINE();
  49685. ZEND_VM_LEAVE();
  49686. } else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
  49687. zend_detach_symbol_table(execute_data);
  49688. zend_destroy_static_vars(&EX(func)->op_array);
  49689. destroy_op_array(&EX(func)->op_array);
  49690. efree_size(EX(func), sizeof(zend_op_array));
  49691. #ifdef ZEND_PREFER_RELOAD
  49692. call_info = EX_CALL_INFO();
  49693. #endif
  49694. old_execute_data = execute_data;
  49695. execute_data = EG(current_execute_data) = EX(prev_execute_data);
  49696. zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
  49697. zend_attach_symbol_table(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 {
  49705. if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
  49706. EG(current_execute_data) = EX(prev_execute_data);
  49707. i_free_compiled_variables(execute_data);
  49708. #ifdef ZEND_PREFER_RELOAD
  49709. call_info = EX_CALL_INFO();
  49710. #endif
  49711. if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS))) {
  49712. if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
  49713. zend_clean_and_cache_symbol_table(EX(symbol_table));
  49714. }
  49715. zend_vm_stack_free_extra_args_ex(call_info, execute_data);
  49716. if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
  49717. zend_free_extra_named_params(EX(extra_named_params));
  49718. }
  49719. }
  49720. if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
  49721. OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
  49722. }
  49723. ZEND_VM_RETURN();
  49724. } else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
  49725. zend_array *symbol_table = EX(symbol_table);
  49726. zend_detach_symbol_table(execute_data);
  49727. old_execute_data = EX(prev_execute_data);
  49728. while (old_execute_data) {
  49729. if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
  49730. if (old_execute_data->symbol_table == symbol_table) {
  49731. zend_attach_symbol_table(old_execute_data);
  49732. }
  49733. break;
  49734. }
  49735. old_execute_data = old_execute_data->prev_execute_data;
  49736. }
  49737. EG(current_execute_data) = EX(prev_execute_data);
  49738. ZEND_VM_RETURN();
  49739. }
  49740. }
  49741. }
  49742. HYBRID_CASE(ZEND_JMP_SPEC):
  49743. VM_TRACE(ZEND_JMP_SPEC)
  49744. ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49745. HYBRID_BREAK();
  49746. HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED):
  49747. VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED)
  49748. ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49749. HYBRID_BREAK();
  49750. HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_USED):
  49751. VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_USED)
  49752. ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49753. HYBRID_BREAK();
  49754. HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED):
  49755. VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED)
  49756. ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49757. HYBRID_BREAK();
  49758. HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_USED):
  49759. VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_USED)
  49760. ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49761. HYBRID_BREAK();
  49762. HYBRID_CASE(ZEND_DO_UCALL_SPEC_OBSERVER):
  49763. VM_TRACE(ZEND_DO_UCALL_SPEC_OBSERVER)
  49764. ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49765. HYBRID_BREAK();
  49766. HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED):
  49767. VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED)
  49768. ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49769. HYBRID_BREAK();
  49770. HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED):
  49771. VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED)
  49772. ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49773. HYBRID_BREAK();
  49774. HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER):
  49775. VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER)
  49776. ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49777. HYBRID_BREAK();
  49778. HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED):
  49779. VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED)
  49780. ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49781. HYBRID_BREAK();
  49782. HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_USED):
  49783. VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_USED)
  49784. ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49785. HYBRID_BREAK();
  49786. HYBRID_CASE(ZEND_DO_FCALL_SPEC_OBSERVER):
  49787. VM_TRACE(ZEND_DO_FCALL_SPEC_OBSERVER)
  49788. ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49789. HYBRID_BREAK();
  49790. HYBRID_CASE(ZEND_GENERATOR_CREATE_SPEC):
  49791. VM_TRACE(ZEND_GENERATOR_CREATE_SPEC)
  49792. ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49793. HYBRID_BREAK();
  49794. HYBRID_CASE(ZEND_SEND_UNPACK_SPEC):
  49795. VM_TRACE(ZEND_SEND_UNPACK_SPEC)
  49796. ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49797. HYBRID_BREAK();
  49798. HYBRID_CASE(ZEND_SEND_ARRAY_SPEC):
  49799. VM_TRACE(ZEND_SEND_ARRAY_SPEC)
  49800. ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49801. HYBRID_BREAK();
  49802. HYBRID_CASE(ZEND_RECV_NOTYPE_SPEC):
  49803. VM_TRACE(ZEND_RECV_NOTYPE_SPEC)
  49804. ZEND_RECV_NOTYPE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49805. HYBRID_BREAK();
  49806. HYBRID_CASE(ZEND_ADD_ARRAY_UNPACK_SPEC):
  49807. VM_TRACE(ZEND_ADD_ARRAY_UNPACK_SPEC)
  49808. ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49809. HYBRID_BREAK();
  49810. HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC):
  49811. VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC)
  49812. ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49813. HYBRID_BREAK();
  49814. HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC):
  49815. VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC)
  49816. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49817. HYBRID_BREAK();
  49818. HYBRID_CASE(ZEND_EXIT_SPEC):
  49819. VM_TRACE(ZEND_EXIT_SPEC)
  49820. ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49821. HYBRID_BREAK();
  49822. HYBRID_CASE(ZEND_BEGIN_SILENCE_SPEC):
  49823. VM_TRACE(ZEND_BEGIN_SILENCE_SPEC)
  49824. ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49825. HYBRID_BREAK();
  49826. HYBRID_CASE(ZEND_EXT_STMT_SPEC):
  49827. VM_TRACE(ZEND_EXT_STMT_SPEC)
  49828. ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49829. HYBRID_BREAK();
  49830. HYBRID_CASE(ZEND_EXT_FCALL_BEGIN_SPEC):
  49831. VM_TRACE(ZEND_EXT_FCALL_BEGIN_SPEC)
  49832. ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49833. HYBRID_BREAK();
  49834. HYBRID_CASE(ZEND_EXT_FCALL_END_SPEC):
  49835. VM_TRACE(ZEND_EXT_FCALL_END_SPEC)
  49836. ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49837. HYBRID_BREAK();
  49838. HYBRID_CASE(ZEND_DECLARE_ANON_CLASS_SPEC):
  49839. VM_TRACE(ZEND_DECLARE_ANON_CLASS_SPEC)
  49840. ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49841. HYBRID_BREAK();
  49842. HYBRID_CASE(ZEND_DECLARE_FUNCTION_SPEC):
  49843. VM_TRACE(ZEND_DECLARE_FUNCTION_SPEC)
  49844. ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49845. HYBRID_BREAK();
  49846. HYBRID_CASE(ZEND_TICKS_SPEC):
  49847. VM_TRACE(ZEND_TICKS_SPEC)
  49848. ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49849. HYBRID_BREAK();
  49850. HYBRID_CASE(ZEND_EXT_NOP_SPEC):
  49851. VM_TRACE(ZEND_EXT_NOP_SPEC)
  49852. ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49853. HYBRID_BREAK();
  49854. HYBRID_CASE(ZEND_NOP_SPEC):
  49855. VM_TRACE(ZEND_NOP_SPEC)
  49856. ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49857. HYBRID_BREAK();
  49858. HYBRID_CASE(ZEND_HANDLE_EXCEPTION_SPEC):
  49859. VM_TRACE(ZEND_HANDLE_EXCEPTION_SPEC)
  49860. ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49861. HYBRID_BREAK();
  49862. HYBRID_CASE(ZEND_USER_OPCODE_SPEC):
  49863. VM_TRACE(ZEND_USER_OPCODE_SPEC)
  49864. ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49865. HYBRID_BREAK();
  49866. HYBRID_CASE(ZEND_DISCARD_EXCEPTION_SPEC):
  49867. VM_TRACE(ZEND_DISCARD_EXCEPTION_SPEC)
  49868. ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49869. HYBRID_BREAK();
  49870. HYBRID_CASE(ZEND_FAST_CALL_SPEC):
  49871. VM_TRACE(ZEND_FAST_CALL_SPEC)
  49872. ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49873. HYBRID_BREAK();
  49874. HYBRID_CASE(ZEND_FAST_RET_SPEC):
  49875. VM_TRACE(ZEND_FAST_RET_SPEC)
  49876. ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49877. HYBRID_BREAK();
  49878. HYBRID_CASE(ZEND_ASSERT_CHECK_SPEC):
  49879. VM_TRACE(ZEND_ASSERT_CHECK_SPEC)
  49880. ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49881. HYBRID_BREAK();
  49882. HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC):
  49883. VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC)
  49884. ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49885. HYBRID_BREAK();
  49886. HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER):
  49887. VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER)
  49888. ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49889. HYBRID_BREAK();
  49890. HYBRID_CASE(ZEND_JMP_FORWARD_SPEC):
  49891. VM_TRACE(ZEND_JMP_FORWARD_SPEC)
  49892. ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49893. HYBRID_BREAK();
  49894. HYBRID_CASE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST):
  49895. VM_TRACE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST)
  49896. ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49897. HYBRID_BREAK();
  49898. HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST):
  49899. VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST)
  49900. ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49901. HYBRID_BREAK();
  49902. HYBRID_CASE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST):
  49903. VM_TRACE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST)
  49904. ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49905. HYBRID_BREAK();
  49906. HYBRID_CASE(ZEND_INIT_FCALL_SPEC_CONST):
  49907. VM_TRACE(ZEND_INIT_FCALL_SPEC_CONST)
  49908. ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49909. HYBRID_BREAK();
  49910. HYBRID_CASE(ZEND_RECV_INIT_SPEC_CONST):
  49911. VM_TRACE(ZEND_RECV_INIT_SPEC_CONST)
  49912. ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49913. HYBRID_BREAK();
  49914. HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR):
  49915. VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR)
  49916. ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49917. HYBRID_BREAK();
  49918. HYBRID_CASE(ZEND_RECV_SPEC_UNUSED):
  49919. VM_TRACE(ZEND_RECV_SPEC_UNUSED)
  49920. ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49921. HYBRID_BREAK();
  49922. HYBRID_CASE(ZEND_RECV_VARIADIC_SPEC_UNUSED):
  49923. VM_TRACE(ZEND_RECV_VARIADIC_SPEC_UNUSED)
  49924. ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49925. HYBRID_BREAK();
  49926. HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV):
  49927. VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV)
  49928. ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49929. HYBRID_BREAK();
  49930. HYBRID_CASE(ZEND_BW_NOT_SPEC_CONST):
  49931. VM_TRACE(ZEND_BW_NOT_SPEC_CONST)
  49932. ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49933. HYBRID_BREAK();
  49934. HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CONST):
  49935. VM_TRACE(ZEND_BOOL_NOT_SPEC_CONST)
  49936. ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49937. HYBRID_BREAK();
  49938. HYBRID_CASE(ZEND_ECHO_SPEC_CONST):
  49939. VM_TRACE(ZEND_ECHO_SPEC_CONST)
  49940. ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49941. HYBRID_BREAK();
  49942. HYBRID_CASE(ZEND_JMPZ_SPEC_CONST):
  49943. VM_TRACE(ZEND_JMPZ_SPEC_CONST)
  49944. ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49945. HYBRID_BREAK();
  49946. HYBRID_CASE(ZEND_JMPNZ_SPEC_CONST):
  49947. VM_TRACE(ZEND_JMPNZ_SPEC_CONST)
  49948. ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49949. HYBRID_BREAK();
  49950. HYBRID_CASE(ZEND_JMPZNZ_SPEC_CONST):
  49951. VM_TRACE(ZEND_JMPZNZ_SPEC_CONST)
  49952. ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49953. HYBRID_BREAK();
  49954. HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CONST):
  49955. VM_TRACE(ZEND_JMPZ_EX_SPEC_CONST)
  49956. ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49957. HYBRID_BREAK();
  49958. HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CONST):
  49959. VM_TRACE(ZEND_JMPNZ_EX_SPEC_CONST)
  49960. ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49961. HYBRID_BREAK();
  49962. HYBRID_CASE(ZEND_RETURN_SPEC_CONST):
  49963. VM_TRACE(ZEND_RETURN_SPEC_CONST)
  49964. {
  49965. USE_OPLINE
  49966. zval *retval_ptr;
  49967. zval *return_value;
  49968. retval_ptr = RT_CONSTANT(opline, opline->op1);
  49969. return_value = EX(return_value);
  49970. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  49971. SAVE_OPLINE();
  49972. retval_ptr = ZVAL_UNDEFINED_OP1();
  49973. if (return_value) {
  49974. ZVAL_NULL(return_value);
  49975. }
  49976. } else if (!return_value) {
  49977. if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
  49978. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  49979. SAVE_OPLINE();
  49980. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  49981. }
  49982. }
  49983. } else {
  49984. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  49985. ZVAL_COPY_VALUE(return_value, retval_ptr);
  49986. if (IS_CONST == IS_CONST) {
  49987. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  49988. Z_ADDREF_P(return_value);
  49989. }
  49990. }
  49991. } else if (IS_CONST == IS_CV) {
  49992. do {
  49993. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  49994. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  49995. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  49996. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  49997. ZVAL_COPY_VALUE(return_value, retval_ptr);
  49998. if (GC_MAY_LEAK(ref)) {
  49999. gc_possible_root(ref);
  50000. }
  50001. ZVAL_NULL(retval_ptr);
  50002. break;
  50003. } else {
  50004. Z_ADDREF_P(retval_ptr);
  50005. }
  50006. } else {
  50007. retval_ptr = Z_REFVAL_P(retval_ptr);
  50008. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  50009. Z_ADDREF_P(retval_ptr);
  50010. }
  50011. }
  50012. }
  50013. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50014. } while (0);
  50015. } else /* if (IS_CONST == IS_VAR) */ {
  50016. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  50017. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  50018. retval_ptr = Z_REFVAL_P(retval_ptr);
  50019. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50020. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  50021. efree_size(ref, sizeof(zend_reference));
  50022. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  50023. Z_ADDREF_P(retval_ptr);
  50024. }
  50025. } else {
  50026. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50027. }
  50028. }
  50029. }
  50030. goto zend_leave_helper_SPEC_LABEL;
  50031. }
  50032. HYBRID_CASE(ZEND_RETURN_SPEC_OBSERVER):
  50033. VM_TRACE(ZEND_RETURN_SPEC_OBSERVER)
  50034. {
  50035. USE_OPLINE
  50036. zval *retval_ptr;
  50037. zval *return_value;
  50038. zval observer_retval;
  50039. retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
  50040. return_value = EX(return_value);
  50041. if (!return_value) { return_value = &observer_retval; };
  50042. if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  50043. SAVE_OPLINE();
  50044. retval_ptr = ZVAL_UNDEFINED_OP1();
  50045. if (return_value) {
  50046. ZVAL_NULL(return_value);
  50047. }
  50048. } else if (!return_value) {
  50049. if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
  50050. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  50051. SAVE_OPLINE();
  50052. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  50053. }
  50054. }
  50055. } else {
  50056. if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
  50057. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50058. if (opline->op1_type == IS_CONST) {
  50059. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  50060. Z_ADDREF_P(return_value);
  50061. }
  50062. }
  50063. } else if (opline->op1_type == IS_CV) {
  50064. do {
  50065. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  50066. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  50067. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  50068. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  50069. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50070. if (GC_MAY_LEAK(ref)) {
  50071. gc_possible_root(ref);
  50072. }
  50073. ZVAL_NULL(retval_ptr);
  50074. break;
  50075. } else {
  50076. Z_ADDREF_P(retval_ptr);
  50077. }
  50078. } else {
  50079. retval_ptr = Z_REFVAL_P(retval_ptr);
  50080. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  50081. Z_ADDREF_P(retval_ptr);
  50082. }
  50083. }
  50084. }
  50085. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50086. } while (0);
  50087. } else /* if (opline->op1_type == IS_VAR) */ {
  50088. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  50089. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  50090. retval_ptr = Z_REFVAL_P(retval_ptr);
  50091. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50092. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  50093. efree_size(ref, sizeof(zend_reference));
  50094. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  50095. Z_ADDREF_P(retval_ptr);
  50096. }
  50097. } else {
  50098. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50099. }
  50100. }
  50101. }
  50102. SAVE_OPLINE();
  50103. zend_observer_fcall_end(execute_data, return_value);
  50104. if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
  50105. goto zend_leave_helper_SPEC_LABEL;
  50106. }
  50107. HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CONST):
  50108. VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CONST)
  50109. ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50110. HYBRID_BREAK();
  50111. HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_OBSERVER):
  50112. VM_TRACE(ZEND_RETURN_BY_REF_SPEC_OBSERVER)
  50113. ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50114. HYBRID_BREAK();
  50115. HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CONST):
  50116. VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CONST)
  50117. ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50118. HYBRID_BREAK();
  50119. HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_OBSERVER):
  50120. VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_OBSERVER)
  50121. ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50122. HYBRID_BREAK();
  50123. HYBRID_CASE(ZEND_THROW_SPEC_CONST):
  50124. VM_TRACE(ZEND_THROW_SPEC_CONST)
  50125. ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50126. HYBRID_BREAK();
  50127. HYBRID_CASE(ZEND_CATCH_SPEC_CONST):
  50128. VM_TRACE(ZEND_CATCH_SPEC_CONST)
  50129. ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50130. HYBRID_BREAK();
  50131. HYBRID_CASE(ZEND_SEND_USER_SPEC_CONST):
  50132. VM_TRACE(ZEND_SEND_USER_SPEC_CONST)
  50133. ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50134. HYBRID_BREAK();
  50135. HYBRID_CASE(ZEND_BOOL_SPEC_CONST):
  50136. VM_TRACE(ZEND_BOOL_SPEC_CONST)
  50137. ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50138. HYBRID_BREAK();
  50139. HYBRID_CASE(ZEND_CLONE_SPEC_CONST):
  50140. VM_TRACE(ZEND_CLONE_SPEC_CONST)
  50141. ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50142. HYBRID_BREAK();
  50143. HYBRID_CASE(ZEND_CAST_SPEC_CONST):
  50144. VM_TRACE(ZEND_CAST_SPEC_CONST)
  50145. ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50146. HYBRID_BREAK();
  50147. HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST):
  50148. VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST)
  50149. ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50150. HYBRID_BREAK();
  50151. HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER):
  50152. VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER)
  50153. ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50154. HYBRID_BREAK();
  50155. HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CONST):
  50156. VM_TRACE(ZEND_FE_RESET_R_SPEC_CONST)
  50157. ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50158. HYBRID_BREAK();
  50159. HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CONST):
  50160. VM_TRACE(ZEND_FE_RESET_RW_SPEC_CONST)
  50161. ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50162. HYBRID_BREAK();
  50163. HYBRID_CASE(ZEND_JMP_SET_SPEC_CONST):
  50164. VM_TRACE(ZEND_JMP_SET_SPEC_CONST)
  50165. ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50166. HYBRID_BREAK();
  50167. HYBRID_CASE(ZEND_COALESCE_SPEC_CONST):
  50168. VM_TRACE(ZEND_COALESCE_SPEC_CONST)
  50169. ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50170. HYBRID_BREAK();
  50171. HYBRID_CASE(ZEND_JMP_NULL_SPEC_CONST):
  50172. VM_TRACE(ZEND_JMP_NULL_SPEC_CONST)
  50173. ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50174. HYBRID_BREAK();
  50175. HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CONST):
  50176. VM_TRACE(ZEND_QM_ASSIGN_SPEC_CONST)
  50177. ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50178. HYBRID_BREAK();
  50179. HYBRID_CASE(ZEND_DECLARE_CLASS_SPEC_CONST):
  50180. VM_TRACE(ZEND_DECLARE_CLASS_SPEC_CONST)
  50181. ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50182. HYBRID_BREAK();
  50183. HYBRID_CASE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST):
  50184. VM_TRACE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST)
  50185. ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50186. HYBRID_BREAK();
  50187. HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CONST):
  50188. VM_TRACE(ZEND_YIELD_FROM_SPEC_CONST)
  50189. ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50190. HYBRID_BREAK();
  50191. HYBRID_CASE(ZEND_STRLEN_SPEC_CONST):
  50192. VM_TRACE(ZEND_STRLEN_SPEC_CONST)
  50193. ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50194. HYBRID_BREAK();
  50195. HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CONST):
  50196. VM_TRACE(ZEND_TYPE_CHECK_SPEC_CONST)
  50197. ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50198. HYBRID_BREAK();
  50199. HYBRID_CASE(ZEND_DEFINED_SPEC_CONST):
  50200. VM_TRACE(ZEND_DEFINED_SPEC_CONST)
  50201. ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50202. HYBRID_BREAK();
  50203. HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_CONST):
  50204. VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_CONST)
  50205. ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50206. HYBRID_BREAK();
  50207. HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST):
  50208. VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST)
  50209. ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50210. HYBRID_BREAK();
  50211. HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST):
  50212. VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST)
  50213. ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50214. HYBRID_BREAK();
  50215. HYBRID_CASE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST):
  50216. VM_TRACE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST)
  50217. ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50218. HYBRID_BREAK();
  50219. HYBRID_CASE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST):
  50220. VM_TRACE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST)
  50221. ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50222. HYBRID_BREAK();
  50223. HYBRID_CASE(ZEND_ADD_SPEC_CONST_CONST):
  50224. VM_TRACE(ZEND_ADD_SPEC_CONST_CONST)
  50225. ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50226. HYBRID_BREAK();
  50227. HYBRID_CASE(ZEND_SUB_SPEC_CONST_CONST):
  50228. VM_TRACE(ZEND_SUB_SPEC_CONST_CONST)
  50229. ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50230. HYBRID_BREAK();
  50231. HYBRID_CASE(ZEND_MUL_SPEC_CONST_CONST):
  50232. VM_TRACE(ZEND_MUL_SPEC_CONST_CONST)
  50233. ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50234. HYBRID_BREAK();
  50235. HYBRID_CASE(ZEND_DIV_SPEC_CONST_CONST):
  50236. VM_TRACE(ZEND_DIV_SPEC_CONST_CONST)
  50237. ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50238. HYBRID_BREAK();
  50239. HYBRID_CASE(ZEND_MOD_SPEC_CONST_CONST):
  50240. VM_TRACE(ZEND_MOD_SPEC_CONST_CONST)
  50241. ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50242. HYBRID_BREAK();
  50243. HYBRID_CASE(ZEND_SL_SPEC_CONST_CONST):
  50244. VM_TRACE(ZEND_SL_SPEC_CONST_CONST)
  50245. ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50246. HYBRID_BREAK();
  50247. HYBRID_CASE(ZEND_SR_SPEC_CONST_CONST):
  50248. VM_TRACE(ZEND_SR_SPEC_CONST_CONST)
  50249. ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50250. HYBRID_BREAK();
  50251. HYBRID_CASE(ZEND_POW_SPEC_CONST_CONST):
  50252. VM_TRACE(ZEND_POW_SPEC_CONST_CONST)
  50253. ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50254. HYBRID_BREAK();
  50255. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST):
  50256. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST)
  50257. ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50258. HYBRID_BREAK();
  50259. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST):
  50260. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST)
  50261. ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50262. HYBRID_BREAK();
  50263. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CONST_CONST):
  50264. VM_TRACE(ZEND_IS_EQUAL_SPEC_CONST_CONST)
  50265. ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50266. HYBRID_BREAK();
  50267. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST):
  50268. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST)
  50269. ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50270. HYBRID_BREAK();
  50271. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_CONST):
  50272. VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_CONST)
  50273. ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50274. HYBRID_BREAK();
  50275. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST):
  50276. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST)
  50277. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50278. HYBRID_BREAK();
  50279. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CONST):
  50280. VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CONST)
  50281. ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50282. HYBRID_BREAK();
  50283. HYBRID_CASE(ZEND_BW_OR_SPEC_CONST_CONST):
  50284. VM_TRACE(ZEND_BW_OR_SPEC_CONST_CONST)
  50285. ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50286. HYBRID_BREAK();
  50287. HYBRID_CASE(ZEND_BW_AND_SPEC_CONST_CONST):
  50288. VM_TRACE(ZEND_BW_AND_SPEC_CONST_CONST)
  50289. ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50290. HYBRID_BREAK();
  50291. HYBRID_CASE(ZEND_BW_XOR_SPEC_CONST_CONST):
  50292. VM_TRACE(ZEND_BW_XOR_SPEC_CONST_CONST)
  50293. ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50294. HYBRID_BREAK();
  50295. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CONST_CONST):
  50296. VM_TRACE(ZEND_BOOL_XOR_SPEC_CONST_CONST)
  50297. ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50298. HYBRID_BREAK();
  50299. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST):
  50300. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST)
  50301. ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50302. HYBRID_BREAK();
  50303. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST):
  50304. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST)
  50305. ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50306. HYBRID_BREAK();
  50307. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST):
  50308. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST)
  50309. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50310. HYBRID_BREAK();
  50311. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST):
  50312. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST)
  50313. ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50314. HYBRID_BREAK();
  50315. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST):
  50316. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST)
  50317. ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50318. HYBRID_BREAK();
  50319. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST):
  50320. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST)
  50321. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50322. HYBRID_BREAK();
  50323. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST):
  50324. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST)
  50325. ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50326. HYBRID_BREAK();
  50327. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CONST):
  50328. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CONST)
  50329. ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50330. HYBRID_BREAK();
  50331. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST):
  50332. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST)
  50333. ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50334. HYBRID_BREAK();
  50335. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST):
  50336. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST)
  50337. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50338. HYBRID_BREAK();
  50339. HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST):
  50340. VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST)
  50341. ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50342. HYBRID_BREAK();
  50343. HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST_CONST):
  50344. VM_TRACE(ZEND_SEND_VAL_SPEC_CONST_CONST)
  50345. ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50346. HYBRID_BREAK();
  50347. HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_CONST):
  50348. VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_CONST)
  50349. ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50350. HYBRID_BREAK();
  50351. HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST):
  50352. VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST)
  50353. ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50354. HYBRID_BREAK();
  50355. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST):
  50356. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST)
  50357. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50358. HYBRID_BREAK();
  50359. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CONST):
  50360. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CONST)
  50361. ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50362. HYBRID_BREAK();
  50363. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST):
  50364. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST)
  50365. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50366. HYBRID_BREAK();
  50367. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST):
  50368. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST)
  50369. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50370. HYBRID_BREAK();
  50371. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST):
  50372. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST)
  50373. ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50374. HYBRID_BREAK();
  50375. HYBRID_CASE(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST):
  50376. VM_TRACE(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST)
  50377. ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50378. HYBRID_BREAK();
  50379. HYBRID_CASE(ZEND_DECLARE_CONST_SPEC_CONST_CONST):
  50380. VM_TRACE(ZEND_DECLARE_CONST_SPEC_CONST_CONST)
  50381. ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50382. HYBRID_BREAK();
  50383. HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CONST):
  50384. VM_TRACE(ZEND_YIELD_SPEC_CONST_CONST)
  50385. ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50386. HYBRID_BREAK();
  50387. HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_CONST_CONST):
  50388. VM_TRACE(ZEND_SWITCH_LONG_SPEC_CONST_CONST)
  50389. ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50390. HYBRID_BREAK();
  50391. HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_CONST_CONST):
  50392. VM_TRACE(ZEND_SWITCH_STRING_SPEC_CONST_CONST)
  50393. ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50394. HYBRID_BREAK();
  50395. HYBRID_CASE(ZEND_MATCH_SPEC_CONST_CONST):
  50396. VM_TRACE(ZEND_MATCH_SPEC_CONST_CONST)
  50397. ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50398. HYBRID_BREAK();
  50399. HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CONST_CONST):
  50400. VM_TRACE(ZEND_IN_ARRAY_SPEC_CONST_CONST)
  50401. ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50402. HYBRID_BREAK();
  50403. HYBRID_CASE(ZEND_ADD_SPEC_CONST_TMPVARCV):
  50404. VM_TRACE(ZEND_ADD_SPEC_CONST_TMPVARCV)
  50405. ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50406. HYBRID_BREAK();
  50407. HYBRID_CASE(ZEND_SUB_SPEC_CONST_TMPVARCV):
  50408. VM_TRACE(ZEND_SUB_SPEC_CONST_TMPVARCV)
  50409. ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50410. HYBRID_BREAK();
  50411. HYBRID_CASE(ZEND_MOD_SPEC_CONST_TMPVARCV):
  50412. VM_TRACE(ZEND_MOD_SPEC_CONST_TMPVARCV)
  50413. ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50414. HYBRID_BREAK();
  50415. HYBRID_CASE(ZEND_SL_SPEC_CONST_TMPVARCV):
  50416. VM_TRACE(ZEND_SL_SPEC_CONST_TMPVARCV)
  50417. ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50418. HYBRID_BREAK();
  50419. HYBRID_CASE(ZEND_SR_SPEC_CONST_TMPVARCV):
  50420. VM_TRACE(ZEND_SR_SPEC_CONST_TMPVARCV)
  50421. ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50422. HYBRID_BREAK();
  50423. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV):
  50424. VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV)
  50425. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50426. HYBRID_BREAK();
  50427. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ):
  50428. VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ)
  50429. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50430. HYBRID_BREAK();
  50431. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ):
  50432. VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ)
  50433. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50434. HYBRID_BREAK();
  50435. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV):
  50436. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV)
  50437. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50438. HYBRID_BREAK();
  50439. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ):
  50440. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ)
  50441. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50442. HYBRID_BREAK();
  50443. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ):
  50444. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ)
  50445. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50446. HYBRID_BREAK();
  50447. HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV):
  50448. VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV)
  50449. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50450. HYBRID_BREAK();
  50451. HYBRID_CASE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV):
  50452. VM_TRACE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV)
  50453. ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50454. HYBRID_BREAK();
  50455. HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV):
  50456. VM_TRACE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV)
  50457. ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50458. HYBRID_BREAK();
  50459. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV):
  50460. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV)
  50461. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50462. HYBRID_BREAK();
  50463. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ):
  50464. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ)
  50465. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50466. HYBRID_BREAK();
  50467. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
  50468. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
  50469. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50470. HYBRID_BREAK();
  50471. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV):
  50472. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV)
  50473. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50474. HYBRID_BREAK();
  50475. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
  50476. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
  50477. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50478. HYBRID_BREAK();
  50479. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
  50480. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
  50481. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50482. HYBRID_BREAK();
  50483. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV):
  50484. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV)
  50485. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50486. HYBRID_BREAK();
  50487. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ):
  50488. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ)
  50489. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50490. HYBRID_BREAK();
  50491. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
  50492. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
  50493. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50494. HYBRID_BREAK();
  50495. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV):
  50496. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV)
  50497. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50498. HYBRID_BREAK();
  50499. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
  50500. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
  50501. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50502. HYBRID_BREAK();
  50503. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
  50504. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
  50505. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50506. HYBRID_BREAK();
  50507. HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV):
  50508. VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV)
  50509. ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50510. HYBRID_BREAK();
  50511. HYBRID_CASE(ZEND_DIV_SPEC_CONST_TMPVAR):
  50512. VM_TRACE(ZEND_DIV_SPEC_CONST_TMPVAR)
  50513. ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50514. HYBRID_BREAK();
  50515. HYBRID_CASE(ZEND_POW_SPEC_CONST_TMPVAR):
  50516. VM_TRACE(ZEND_POW_SPEC_CONST_TMPVAR)
  50517. ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50518. HYBRID_BREAK();
  50519. HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_TMPVAR):
  50520. VM_TRACE(ZEND_CONCAT_SPEC_CONST_TMPVAR)
  50521. ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50522. HYBRID_BREAK();
  50523. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR):
  50524. VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR)
  50525. ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50526. HYBRID_BREAK();
  50527. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR):
  50528. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR)
  50529. ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50530. HYBRID_BREAK();
  50531. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR):
  50532. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR)
  50533. ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50534. HYBRID_BREAK();
  50535. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR):
  50536. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR)
  50537. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50538. HYBRID_BREAK();
  50539. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR):
  50540. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR)
  50541. ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50542. HYBRID_BREAK();
  50543. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR):
  50544. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR)
  50545. ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50546. HYBRID_BREAK();
  50547. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR):
  50548. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR)
  50549. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50550. HYBRID_BREAK();
  50551. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR):
  50552. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR)
  50553. ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50554. HYBRID_BREAK();
  50555. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR):
  50556. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR)
  50557. ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50558. HYBRID_BREAK();
  50559. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR):
  50560. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR)
  50561. ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50562. HYBRID_BREAK();
  50563. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR):
  50564. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR)
  50565. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50566. HYBRID_BREAK();
  50567. HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR):
  50568. VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR)
  50569. ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50570. HYBRID_BREAK();
  50571. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR):
  50572. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR)
  50573. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50574. HYBRID_BREAK();
  50575. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR):
  50576. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR)
  50577. ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50578. HYBRID_BREAK();
  50579. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR):
  50580. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR)
  50581. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50582. HYBRID_BREAK();
  50583. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR):
  50584. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR)
  50585. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50586. HYBRID_BREAK();
  50587. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR):
  50588. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR)
  50589. ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50590. HYBRID_BREAK();
  50591. HYBRID_CASE(ZEND_YIELD_SPEC_CONST_TMPVAR):
  50592. VM_TRACE(ZEND_YIELD_SPEC_CONST_TMPVAR)
  50593. ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50594. HYBRID_BREAK();
  50595. HYBRID_CASE(ZEND_FETCH_R_SPEC_CONST_UNUSED):
  50596. VM_TRACE(ZEND_FETCH_R_SPEC_CONST_UNUSED)
  50597. ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50598. HYBRID_BREAK();
  50599. HYBRID_CASE(ZEND_FETCH_W_SPEC_CONST_UNUSED):
  50600. VM_TRACE(ZEND_FETCH_W_SPEC_CONST_UNUSED)
  50601. ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50602. HYBRID_BREAK();
  50603. HYBRID_CASE(ZEND_FETCH_RW_SPEC_CONST_UNUSED):
  50604. VM_TRACE(ZEND_FETCH_RW_SPEC_CONST_UNUSED)
  50605. ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50606. HYBRID_BREAK();
  50607. HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED):
  50608. VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED)
  50609. ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50610. HYBRID_BREAK();
  50611. HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED):
  50612. VM_TRACE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED)
  50613. ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50614. HYBRID_BREAK();
  50615. HYBRID_CASE(ZEND_FETCH_IS_SPEC_CONST_UNUSED):
  50616. VM_TRACE(ZEND_FETCH_IS_SPEC_CONST_UNUSED)
  50617. ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50618. HYBRID_BREAK();
  50619. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED):
  50620. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED)
  50621. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50622. HYBRID_BREAK();
  50623. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED):
  50624. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED)
  50625. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50626. HYBRID_BREAK();
  50627. HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED):
  50628. VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED)
  50629. ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50630. HYBRID_BREAK();
  50631. HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST_UNUSED):
  50632. VM_TRACE(ZEND_SEND_VAL_SPEC_CONST_UNUSED)
  50633. ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50634. HYBRID_BREAK();
  50635. HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED):
  50636. VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED)
  50637. ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50638. HYBRID_BREAK();
  50639. HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK):
  50640. VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK)
  50641. ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50642. HYBRID_BREAK();
  50643. HYBRID_CASE(ZEND_NEW_SPEC_CONST_UNUSED):
  50644. VM_TRACE(ZEND_NEW_SPEC_CONST_UNUSED)
  50645. ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50646. HYBRID_BREAK();
  50647. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED):
  50648. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED)
  50649. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50650. HYBRID_BREAK();
  50651. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED):
  50652. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED)
  50653. ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50654. HYBRID_BREAK();
  50655. HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED):
  50656. VM_TRACE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED)
  50657. ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50658. HYBRID_BREAK();
  50659. HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED):
  50660. VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED)
  50661. ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50662. HYBRID_BREAK();
  50663. HYBRID_CASE(ZEND_YIELD_SPEC_CONST_UNUSED):
  50664. VM_TRACE(ZEND_YIELD_SPEC_CONST_UNUSED)
  50665. ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50666. HYBRID_BREAK();
  50667. HYBRID_CASE(ZEND_MATCH_ERROR_SPEC_CONST_UNUSED):
  50668. VM_TRACE(ZEND_MATCH_ERROR_SPEC_CONST_UNUSED)
  50669. ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50670. HYBRID_BREAK();
  50671. HYBRID_CASE(ZEND_COUNT_SPEC_CONST_UNUSED):
  50672. VM_TRACE(ZEND_COUNT_SPEC_CONST_UNUSED)
  50673. ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50674. HYBRID_BREAK();
  50675. HYBRID_CASE(ZEND_GET_CLASS_SPEC_CONST_UNUSED):
  50676. VM_TRACE(ZEND_GET_CLASS_SPEC_CONST_UNUSED)
  50677. ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50678. HYBRID_BREAK();
  50679. HYBRID_CASE(ZEND_GET_TYPE_SPEC_CONST_UNUSED):
  50680. VM_TRACE(ZEND_GET_TYPE_SPEC_CONST_UNUSED)
  50681. ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50682. HYBRID_BREAK();
  50683. HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED):
  50684. VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED)
  50685. ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50686. HYBRID_BREAK();
  50687. HYBRID_CASE(ZEND_DIV_SPEC_CONST_CV):
  50688. VM_TRACE(ZEND_DIV_SPEC_CONST_CV)
  50689. ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50690. HYBRID_BREAK();
  50691. HYBRID_CASE(ZEND_POW_SPEC_CONST_CV):
  50692. VM_TRACE(ZEND_POW_SPEC_CONST_CV)
  50693. ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50694. HYBRID_BREAK();
  50695. HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_CV):
  50696. VM_TRACE(ZEND_CONCAT_SPEC_CONST_CV)
  50697. ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50698. HYBRID_BREAK();
  50699. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CV):
  50700. VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CV)
  50701. ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50702. HYBRID_BREAK();
  50703. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CV):
  50704. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CV)
  50705. ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50706. HYBRID_BREAK();
  50707. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV):
  50708. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV)
  50709. ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50710. HYBRID_BREAK();
  50711. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV):
  50712. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV)
  50713. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50714. HYBRID_BREAK();
  50715. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV):
  50716. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV)
  50717. ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50718. HYBRID_BREAK();
  50719. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV):
  50720. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV)
  50721. ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50722. HYBRID_BREAK();
  50723. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV):
  50724. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV)
  50725. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50726. HYBRID_BREAK();
  50727. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CV):
  50728. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CV)
  50729. ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50730. HYBRID_BREAK();
  50731. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CV):
  50732. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CV)
  50733. ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50734. HYBRID_BREAK();
  50735. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV):
  50736. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV)
  50737. ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50738. HYBRID_BREAK();
  50739. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV):
  50740. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV)
  50741. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50742. HYBRID_BREAK();
  50743. HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CV):
  50744. VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CV)
  50745. ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50746. HYBRID_BREAK();
  50747. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV):
  50748. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV)
  50749. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50750. HYBRID_BREAK();
  50751. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CV):
  50752. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CV)
  50753. ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50754. HYBRID_BREAK();
  50755. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV):
  50756. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV)
  50757. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50758. HYBRID_BREAK();
  50759. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV):
  50760. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV)
  50761. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50762. HYBRID_BREAK();
  50763. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV):
  50764. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV)
  50765. ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50766. HYBRID_BREAK();
  50767. HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CV):
  50768. VM_TRACE(ZEND_YIELD_SPEC_CONST_CV)
  50769. ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50770. HYBRID_BREAK();
  50771. HYBRID_CASE(ZEND_BW_NOT_SPEC_TMPVARCV):
  50772. VM_TRACE(ZEND_BW_NOT_SPEC_TMPVARCV)
  50773. ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50774. HYBRID_BREAK();
  50775. HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV):
  50776. VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV)
  50777. ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50778. HYBRID_BREAK();
  50779. HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV):
  50780. VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV)
  50781. ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50782. HYBRID_BREAK();
  50783. HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV):
  50784. VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV)
  50785. ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50786. HYBRID_BREAK();
  50787. HYBRID_CASE(ZEND_ADD_SPEC_TMPVARCV_CONST):
  50788. VM_TRACE(ZEND_ADD_SPEC_TMPVARCV_CONST)
  50789. ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50790. HYBRID_BREAK();
  50791. HYBRID_CASE(ZEND_SUB_SPEC_TMPVARCV_CONST):
  50792. VM_TRACE(ZEND_SUB_SPEC_TMPVARCV_CONST)
  50793. ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50794. HYBRID_BREAK();
  50795. HYBRID_CASE(ZEND_MUL_SPEC_TMPVARCV_CONST):
  50796. VM_TRACE(ZEND_MUL_SPEC_TMPVARCV_CONST)
  50797. ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50798. HYBRID_BREAK();
  50799. HYBRID_CASE(ZEND_MOD_SPEC_TMPVARCV_CONST):
  50800. VM_TRACE(ZEND_MOD_SPEC_TMPVARCV_CONST)
  50801. ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50802. HYBRID_BREAK();
  50803. HYBRID_CASE(ZEND_SL_SPEC_TMPVARCV_CONST):
  50804. VM_TRACE(ZEND_SL_SPEC_TMPVARCV_CONST)
  50805. ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50806. HYBRID_BREAK();
  50807. HYBRID_CASE(ZEND_SR_SPEC_TMPVARCV_CONST):
  50808. VM_TRACE(ZEND_SR_SPEC_TMPVARCV_CONST)
  50809. ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50810. HYBRID_BREAK();
  50811. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST):
  50812. VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST)
  50813. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50814. HYBRID_BREAK();
  50815. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ):
  50816. VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ)
  50817. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50818. HYBRID_BREAK();
  50819. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ):
  50820. VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ)
  50821. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50822. HYBRID_BREAK();
  50823. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST):
  50824. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST)
  50825. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50826. HYBRID_BREAK();
  50827. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ):
  50828. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ)
  50829. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50830. HYBRID_BREAK();
  50831. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ):
  50832. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ)
  50833. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50834. HYBRID_BREAK();
  50835. HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVARCV_CONST):
  50836. VM_TRACE(ZEND_BW_OR_SPEC_TMPVARCV_CONST)
  50837. ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50838. HYBRID_BREAK();
  50839. HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVARCV_CONST):
  50840. VM_TRACE(ZEND_BW_AND_SPEC_TMPVARCV_CONST)
  50841. ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50842. HYBRID_BREAK();
  50843. HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVARCV_CONST):
  50844. VM_TRACE(ZEND_BW_XOR_SPEC_TMPVARCV_CONST)
  50845. ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50846. HYBRID_BREAK();
  50847. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST):
  50848. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST)
  50849. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50850. HYBRID_BREAK();
  50851. HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST):
  50852. VM_TRACE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST)
  50853. ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50854. HYBRID_BREAK();
  50855. HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST):
  50856. VM_TRACE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST)
  50857. ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50858. HYBRID_BREAK();
  50859. HYBRID_CASE(ZEND_MATCH_SPEC_TMPVARCV_CONST):
  50860. VM_TRACE(ZEND_MATCH_SPEC_TMPVARCV_CONST)
  50861. ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50862. HYBRID_BREAK();
  50863. HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
  50864. VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
  50865. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50866. HYBRID_BREAK();
  50867. HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST):
  50868. VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST)
  50869. ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50870. HYBRID_BREAK();
  50871. HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST):
  50872. VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST)
  50873. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50874. HYBRID_BREAK();
  50875. HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
  50876. VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
  50877. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50878. HYBRID_BREAK();
  50879. HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST):
  50880. VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST)
  50881. ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50882. HYBRID_BREAK();
  50883. HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST):
  50884. VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST)
  50885. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50886. HYBRID_BREAK();
  50887. HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
  50888. VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
  50889. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50890. HYBRID_BREAK();
  50891. HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST):
  50892. VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST)
  50893. ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50894. HYBRID_BREAK();
  50895. HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST):
  50896. VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST)
  50897. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50898. HYBRID_BREAK();
  50899. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST):
  50900. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST)
  50901. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50902. HYBRID_BREAK();
  50903. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
  50904. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
  50905. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50906. HYBRID_BREAK();
  50907. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
  50908. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
  50909. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50910. HYBRID_BREAK();
  50911. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
  50912. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
  50913. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50914. HYBRID_BREAK();
  50915. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
  50916. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
  50917. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50918. HYBRID_BREAK();
  50919. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
  50920. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
  50921. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50922. HYBRID_BREAK();
  50923. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST):
  50924. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST)
  50925. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50926. HYBRID_BREAK();
  50927. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
  50928. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
  50929. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50930. HYBRID_BREAK();
  50931. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
  50932. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
  50933. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50934. HYBRID_BREAK();
  50935. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
  50936. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
  50937. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50938. HYBRID_BREAK();
  50939. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
  50940. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
  50941. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50942. HYBRID_BREAK();
  50943. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
  50944. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
  50945. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50946. HYBRID_BREAK();
  50947. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST):
  50948. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST)
  50949. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50950. HYBRID_BREAK();
  50951. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ):
  50952. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ)
  50953. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50954. HYBRID_BREAK();
  50955. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
  50956. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
  50957. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50958. HYBRID_BREAK();
  50959. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST):
  50960. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST)
  50961. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50962. HYBRID_BREAK();
  50963. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
  50964. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
  50965. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50966. HYBRID_BREAK();
  50967. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
  50968. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
  50969. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50970. HYBRID_BREAK();
  50971. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST):
  50972. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST)
  50973. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50974. HYBRID_BREAK();
  50975. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
  50976. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
  50977. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50978. HYBRID_BREAK();
  50979. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
  50980. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
  50981. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50982. HYBRID_BREAK();
  50983. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
  50984. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
  50985. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50986. HYBRID_BREAK();
  50987. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
  50988. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
  50989. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50990. HYBRID_BREAK();
  50991. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
  50992. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
  50993. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50994. HYBRID_BREAK();
  50995. HYBRID_CASE(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV):
  50996. VM_TRACE(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV)
  50997. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50998. HYBRID_BREAK();
  50999. HYBRID_CASE(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV):
  51000. VM_TRACE(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV)
  51001. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51002. HYBRID_BREAK();
  51003. HYBRID_CASE(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV):
  51004. VM_TRACE(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV)
  51005. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51006. HYBRID_BREAK();
  51007. HYBRID_CASE(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV):
  51008. VM_TRACE(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV)
  51009. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51010. HYBRID_BREAK();
  51011. HYBRID_CASE(ZEND_SL_SPEC_TMPVARCV_TMPVARCV):
  51012. VM_TRACE(ZEND_SL_SPEC_TMPVARCV_TMPVARCV)
  51013. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51014. HYBRID_BREAK();
  51015. HYBRID_CASE(ZEND_SR_SPEC_TMPVARCV_TMPVARCV):
  51016. VM_TRACE(ZEND_SR_SPEC_TMPVARCV_TMPVARCV)
  51017. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51018. HYBRID_BREAK();
  51019. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV):
  51020. VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV)
  51021. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51022. HYBRID_BREAK();
  51023. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51024. VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51025. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51026. HYBRID_BREAK();
  51027. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51028. VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51029. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51030. HYBRID_BREAK();
  51031. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV):
  51032. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV)
  51033. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51034. HYBRID_BREAK();
  51035. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51036. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51037. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51038. HYBRID_BREAK();
  51039. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51040. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51041. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51042. HYBRID_BREAK();
  51043. HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV):
  51044. VM_TRACE(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV)
  51045. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51046. HYBRID_BREAK();
  51047. HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV):
  51048. VM_TRACE(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV)
  51049. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51050. HYBRID_BREAK();
  51051. HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV):
  51052. VM_TRACE(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV)
  51053. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51054. HYBRID_BREAK();
  51055. HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
  51056. VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
  51057. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51058. HYBRID_BREAK();
  51059. HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV):
  51060. VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV)
  51061. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51062. HYBRID_BREAK();
  51063. HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  51064. VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  51065. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51066. HYBRID_BREAK();
  51067. HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
  51068. VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
  51069. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51070. HYBRID_BREAK();
  51071. HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV):
  51072. VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV)
  51073. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51074. HYBRID_BREAK();
  51075. HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  51076. VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  51077. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51078. HYBRID_BREAK();
  51079. HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
  51080. VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
  51081. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51082. HYBRID_BREAK();
  51083. HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV):
  51084. VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV)
  51085. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51086. HYBRID_BREAK();
  51087. HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  51088. VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  51089. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51090. HYBRID_BREAK();
  51091. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
  51092. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
  51093. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51094. HYBRID_BREAK();
  51095. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51096. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51097. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51098. HYBRID_BREAK();
  51099. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51100. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51101. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51102. HYBRID_BREAK();
  51103. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  51104. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  51105. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51106. HYBRID_BREAK();
  51107. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51108. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51109. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51110. HYBRID_BREAK();
  51111. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51112. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51113. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51114. HYBRID_BREAK();
  51115. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
  51116. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
  51117. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51118. HYBRID_BREAK();
  51119. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51120. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51121. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51122. HYBRID_BREAK();
  51123. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51124. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51125. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51126. HYBRID_BREAK();
  51127. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  51128. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  51129. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51130. HYBRID_BREAK();
  51131. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51132. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51133. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51134. HYBRID_BREAK();
  51135. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51136. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51137. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51138. HYBRID_BREAK();
  51139. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV):
  51140. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV)
  51141. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51142. HYBRID_BREAK();
  51143. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51144. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51145. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51146. HYBRID_BREAK();
  51147. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51148. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51149. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51150. HYBRID_BREAK();
  51151. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  51152. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  51153. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51154. HYBRID_BREAK();
  51155. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51156. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51157. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51158. HYBRID_BREAK();
  51159. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51160. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51161. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51162. HYBRID_BREAK();
  51163. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
  51164. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
  51165. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51166. HYBRID_BREAK();
  51167. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51168. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51169. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51170. HYBRID_BREAK();
  51171. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51172. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51173. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51174. HYBRID_BREAK();
  51175. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  51176. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  51177. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51178. HYBRID_BREAK();
  51179. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  51180. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  51181. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51182. HYBRID_BREAK();
  51183. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  51184. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  51185. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51186. HYBRID_BREAK();
  51187. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR):
  51188. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR)
  51189. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51190. HYBRID_BREAK();
  51191. HYBRID_CASE(ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED):
  51192. VM_TRACE(ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED)
  51193. ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51194. HYBRID_BREAK();
  51195. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV):
  51196. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV)
  51197. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51198. HYBRID_BREAK();
  51199. HYBRID_CASE(ZEND_BOOL_NOT_SPEC_TMPVAR):
  51200. VM_TRACE(ZEND_BOOL_NOT_SPEC_TMPVAR)
  51201. ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51202. HYBRID_BREAK();
  51203. HYBRID_CASE(ZEND_ECHO_SPEC_TMPVAR):
  51204. VM_TRACE(ZEND_ECHO_SPEC_TMPVAR)
  51205. ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51206. HYBRID_BREAK();
  51207. HYBRID_CASE(ZEND_JMPZ_SPEC_TMPVAR):
  51208. VM_TRACE(ZEND_JMPZ_SPEC_TMPVAR)
  51209. ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51210. HYBRID_BREAK();
  51211. HYBRID_CASE(ZEND_JMPNZ_SPEC_TMPVAR):
  51212. VM_TRACE(ZEND_JMPNZ_SPEC_TMPVAR)
  51213. ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51214. HYBRID_BREAK();
  51215. HYBRID_CASE(ZEND_JMPZNZ_SPEC_TMPVAR):
  51216. VM_TRACE(ZEND_JMPZNZ_SPEC_TMPVAR)
  51217. ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51218. HYBRID_BREAK();
  51219. HYBRID_CASE(ZEND_JMPZ_EX_SPEC_TMPVAR):
  51220. VM_TRACE(ZEND_JMPZ_EX_SPEC_TMPVAR)
  51221. ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51222. HYBRID_BREAK();
  51223. HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_TMPVAR):
  51224. VM_TRACE(ZEND_JMPNZ_EX_SPEC_TMPVAR)
  51225. ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51226. HYBRID_BREAK();
  51227. HYBRID_CASE(ZEND_FREE_SPEC_TMPVAR):
  51228. VM_TRACE(ZEND_FREE_SPEC_TMPVAR)
  51229. ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51230. HYBRID_BREAK();
  51231. HYBRID_CASE(ZEND_FE_FREE_SPEC_TMPVAR):
  51232. VM_TRACE(ZEND_FE_FREE_SPEC_TMPVAR)
  51233. ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51234. HYBRID_BREAK();
  51235. HYBRID_CASE(ZEND_THROW_SPEC_TMPVAR):
  51236. VM_TRACE(ZEND_THROW_SPEC_TMPVAR)
  51237. ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51238. HYBRID_BREAK();
  51239. HYBRID_CASE(ZEND_BOOL_SPEC_TMPVAR):
  51240. VM_TRACE(ZEND_BOOL_SPEC_TMPVAR)
  51241. ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51242. HYBRID_BREAK();
  51243. HYBRID_CASE(ZEND_CLONE_SPEC_TMPVAR):
  51244. VM_TRACE(ZEND_CLONE_SPEC_TMPVAR)
  51245. ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51246. HYBRID_BREAK();
  51247. HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR):
  51248. VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR)
  51249. ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51250. HYBRID_BREAK();
  51251. HYBRID_CASE(ZEND_YIELD_FROM_SPEC_TMPVAR):
  51252. VM_TRACE(ZEND_YIELD_FROM_SPEC_TMPVAR)
  51253. ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51254. HYBRID_BREAK();
  51255. HYBRID_CASE(ZEND_STRLEN_SPEC_TMPVAR):
  51256. VM_TRACE(ZEND_STRLEN_SPEC_TMPVAR)
  51257. ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51258. HYBRID_BREAK();
  51259. HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_TMPVAR):
  51260. VM_TRACE(ZEND_TYPE_CHECK_SPEC_TMPVAR)
  51261. ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51262. HYBRID_BREAK();
  51263. HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR):
  51264. VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR)
  51265. ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51266. HYBRID_BREAK();
  51267. HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CONST):
  51268. VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CONST)
  51269. ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51270. HYBRID_BREAK();
  51271. HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CONST):
  51272. VM_TRACE(ZEND_POW_SPEC_TMPVAR_CONST)
  51273. ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51274. HYBRID_BREAK();
  51275. HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CONST):
  51276. VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CONST)
  51277. ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51278. HYBRID_BREAK();
  51279. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST):
  51280. VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST)
  51281. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51282. HYBRID_BREAK();
  51283. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ):
  51284. VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
  51285. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51286. HYBRID_BREAK();
  51287. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ):
  51288. VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
  51289. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51290. HYBRID_BREAK();
  51291. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST):
  51292. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST)
  51293. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51294. HYBRID_BREAK();
  51295. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ):
  51296. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
  51297. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51298. HYBRID_BREAK();
  51299. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ):
  51300. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
  51301. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51302. HYBRID_BREAK();
  51303. HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST):
  51304. VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST)
  51305. ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51306. HYBRID_BREAK();
  51307. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST):
  51308. VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST)
  51309. ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51310. HYBRID_BREAK();
  51311. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST):
  51312. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST)
  51313. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51314. HYBRID_BREAK();
  51315. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST):
  51316. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST)
  51317. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51318. HYBRID_BREAK();
  51319. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST):
  51320. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST)
  51321. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51322. HYBRID_BREAK();
  51323. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST):
  51324. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST)
  51325. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51326. HYBRID_BREAK();
  51327. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST):
  51328. VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST)
  51329. ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51330. HYBRID_BREAK();
  51331. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST):
  51332. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST)
  51333. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51334. HYBRID_BREAK();
  51335. HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR_CONST):
  51336. VM_TRACE(ZEND_SEND_VAL_SPEC_TMPVAR_CONST)
  51337. ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51338. HYBRID_BREAK();
  51339. HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CONST):
  51340. VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CONST)
  51341. ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51342. HYBRID_BREAK();
  51343. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST):
  51344. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST)
  51345. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51346. HYBRID_BREAK();
  51347. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST):
  51348. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST)
  51349. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51350. HYBRID_BREAK();
  51351. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST):
  51352. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST)
  51353. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51354. HYBRID_BREAK();
  51355. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST):
  51356. VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST)
  51357. ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51358. HYBRID_BREAK();
  51359. HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST):
  51360. VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST)
  51361. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51362. HYBRID_BREAK();
  51363. HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV):
  51364. VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV)
  51365. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51366. HYBRID_BREAK();
  51367. HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_TMPVAR):
  51368. VM_TRACE(ZEND_DIV_SPEC_TMPVAR_TMPVAR)
  51369. ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51370. HYBRID_BREAK();
  51371. HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_TMPVAR):
  51372. VM_TRACE(ZEND_POW_SPEC_TMPVAR_TMPVAR)
  51373. ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51374. HYBRID_BREAK();
  51375. HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR):
  51376. VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR)
  51377. ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51378. HYBRID_BREAK();
  51379. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR):
  51380. VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR)
  51381. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51382. HYBRID_BREAK();
  51383. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ):
  51384. VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
  51385. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51386. HYBRID_BREAK();
  51387. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ):
  51388. VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
  51389. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51390. HYBRID_BREAK();
  51391. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR):
  51392. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR)
  51393. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51394. HYBRID_BREAK();
  51395. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ):
  51396. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
  51397. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51398. HYBRID_BREAK();
  51399. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ):
  51400. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
  51401. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51402. HYBRID_BREAK();
  51403. HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR):
  51404. VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR)
  51405. ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51406. HYBRID_BREAK();
  51407. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR):
  51408. VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR)
  51409. ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51410. HYBRID_BREAK();
  51411. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR):
  51412. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR)
  51413. ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51414. HYBRID_BREAK();
  51415. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR):
  51416. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR)
  51417. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51418. HYBRID_BREAK();
  51419. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR):
  51420. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR)
  51421. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51422. HYBRID_BREAK();
  51423. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR):
  51424. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR)
  51425. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51426. HYBRID_BREAK();
  51427. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR):
  51428. VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR)
  51429. ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51430. HYBRID_BREAK();
  51431. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR):
  51432. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR)
  51433. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51434. HYBRID_BREAK();
  51435. HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_TMPVAR):
  51436. VM_TRACE(ZEND_CASE_SPEC_TMPVAR_TMPVAR)
  51437. ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51438. HYBRID_BREAK();
  51439. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR):
  51440. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR)
  51441. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51442. HYBRID_BREAK();
  51443. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR):
  51444. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR)
  51445. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51446. HYBRID_BREAK();
  51447. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR):
  51448. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR)
  51449. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51450. HYBRID_BREAK();
  51451. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR):
  51452. VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR)
  51453. ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51454. HYBRID_BREAK();
  51455. HYBRID_CASE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED):
  51456. VM_TRACE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED)
  51457. ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51458. HYBRID_BREAK();
  51459. HYBRID_CASE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED):
  51460. VM_TRACE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED)
  51461. ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51462. HYBRID_BREAK();
  51463. HYBRID_CASE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED):
  51464. VM_TRACE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED)
  51465. ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51466. HYBRID_BREAK();
  51467. HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED):
  51468. VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED)
  51469. ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51470. HYBRID_BREAK();
  51471. HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED):
  51472. VM_TRACE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED)
  51473. ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51474. HYBRID_BREAK();
  51475. HYBRID_CASE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED):
  51476. VM_TRACE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED)
  51477. ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51478. HYBRID_BREAK();
  51479. HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED):
  51480. VM_TRACE(ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED)
  51481. ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51482. HYBRID_BREAK();
  51483. HYBRID_CASE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED):
  51484. VM_TRACE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED)
  51485. ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51486. HYBRID_BREAK();
  51487. HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED):
  51488. VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED)
  51489. ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51490. HYBRID_BREAK();
  51491. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED):
  51492. VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED)
  51493. ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51494. HYBRID_BREAK();
  51495. HYBRID_CASE(ZEND_COUNT_SPEC_TMPVAR_UNUSED):
  51496. VM_TRACE(ZEND_COUNT_SPEC_TMPVAR_UNUSED)
  51497. ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51498. HYBRID_BREAK();
  51499. HYBRID_CASE(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED):
  51500. VM_TRACE(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED)
  51501. ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51502. HYBRID_BREAK();
  51503. HYBRID_CASE(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED):
  51504. VM_TRACE(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED)
  51505. ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51506. HYBRID_BREAK();
  51507. HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CV):
  51508. VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CV)
  51509. ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51510. HYBRID_BREAK();
  51511. HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CV):
  51512. VM_TRACE(ZEND_POW_SPEC_TMPVAR_CV)
  51513. ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51514. HYBRID_BREAK();
  51515. HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CV):
  51516. VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CV)
  51517. ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51518. HYBRID_BREAK();
  51519. HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CV):
  51520. VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CV)
  51521. ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51522. HYBRID_BREAK();
  51523. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV):
  51524. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV)
  51525. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51526. HYBRID_BREAK();
  51527. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV):
  51528. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV)
  51529. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51530. HYBRID_BREAK();
  51531. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV):
  51532. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV)
  51533. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51534. HYBRID_BREAK();
  51535. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV):
  51536. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV)
  51537. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51538. HYBRID_BREAK();
  51539. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV):
  51540. VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV)
  51541. ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51542. HYBRID_BREAK();
  51543. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV):
  51544. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV)
  51545. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51546. HYBRID_BREAK();
  51547. HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CV):
  51548. VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CV)
  51549. ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51550. HYBRID_BREAK();
  51551. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV):
  51552. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV)
  51553. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51554. HYBRID_BREAK();
  51555. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV):
  51556. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV)
  51557. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51558. HYBRID_BREAK();
  51559. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV):
  51560. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV)
  51561. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51562. HYBRID_BREAK();
  51563. HYBRID_CASE(ZEND_RETURN_SPEC_TMP):
  51564. VM_TRACE(ZEND_RETURN_SPEC_TMP)
  51565. {
  51566. USE_OPLINE
  51567. zval *retval_ptr;
  51568. zval *return_value;
  51569. retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
  51570. return_value = EX(return_value);
  51571. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  51572. SAVE_OPLINE();
  51573. retval_ptr = ZVAL_UNDEFINED_OP1();
  51574. if (return_value) {
  51575. ZVAL_NULL(return_value);
  51576. }
  51577. } else if (!return_value) {
  51578. if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
  51579. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  51580. SAVE_OPLINE();
  51581. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  51582. }
  51583. }
  51584. } else {
  51585. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  51586. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51587. if (IS_TMP_VAR == IS_CONST) {
  51588. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  51589. Z_ADDREF_P(return_value);
  51590. }
  51591. }
  51592. } else if (IS_TMP_VAR == IS_CV) {
  51593. do {
  51594. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  51595. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  51596. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  51597. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  51598. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51599. if (GC_MAY_LEAK(ref)) {
  51600. gc_possible_root(ref);
  51601. }
  51602. ZVAL_NULL(retval_ptr);
  51603. break;
  51604. } else {
  51605. Z_ADDREF_P(retval_ptr);
  51606. }
  51607. } else {
  51608. retval_ptr = Z_REFVAL_P(retval_ptr);
  51609. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  51610. Z_ADDREF_P(retval_ptr);
  51611. }
  51612. }
  51613. }
  51614. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51615. } while (0);
  51616. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  51617. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  51618. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  51619. retval_ptr = Z_REFVAL_P(retval_ptr);
  51620. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51621. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  51622. efree_size(ref, sizeof(zend_reference));
  51623. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  51624. Z_ADDREF_P(retval_ptr);
  51625. }
  51626. } else {
  51627. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51628. }
  51629. }
  51630. }
  51631. goto zend_leave_helper_SPEC_LABEL;
  51632. }
  51633. HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_TMP):
  51634. VM_TRACE(ZEND_RETURN_BY_REF_SPEC_TMP)
  51635. ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51636. HYBRID_BREAK();
  51637. HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_TMP):
  51638. VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_TMP)
  51639. ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51640. HYBRID_BREAK();
  51641. HYBRID_CASE(ZEND_SEND_USER_SPEC_TMP):
  51642. VM_TRACE(ZEND_SEND_USER_SPEC_TMP)
  51643. ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51644. HYBRID_BREAK();
  51645. HYBRID_CASE(ZEND_CAST_SPEC_TMP):
  51646. VM_TRACE(ZEND_CAST_SPEC_TMP)
  51647. ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51648. HYBRID_BREAK();
  51649. HYBRID_CASE(ZEND_FE_RESET_R_SPEC_TMP):
  51650. VM_TRACE(ZEND_FE_RESET_R_SPEC_TMP)
  51651. ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51652. HYBRID_BREAK();
  51653. HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_TMP):
  51654. VM_TRACE(ZEND_FE_RESET_RW_SPEC_TMP)
  51655. ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51656. HYBRID_BREAK();
  51657. HYBRID_CASE(ZEND_END_SILENCE_SPEC_TMP):
  51658. VM_TRACE(ZEND_END_SILENCE_SPEC_TMP)
  51659. ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51660. HYBRID_BREAK();
  51661. HYBRID_CASE(ZEND_JMP_SET_SPEC_TMP):
  51662. VM_TRACE(ZEND_JMP_SET_SPEC_TMP)
  51663. ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51664. HYBRID_BREAK();
  51665. HYBRID_CASE(ZEND_COALESCE_SPEC_TMP):
  51666. VM_TRACE(ZEND_COALESCE_SPEC_TMP)
  51667. ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51668. HYBRID_BREAK();
  51669. HYBRID_CASE(ZEND_JMP_NULL_SPEC_TMP):
  51670. VM_TRACE(ZEND_JMP_NULL_SPEC_TMP)
  51671. ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51672. HYBRID_BREAK();
  51673. HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_TMP):
  51674. VM_TRACE(ZEND_QM_ASSIGN_SPEC_TMP)
  51675. ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51676. HYBRID_BREAK();
  51677. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST):
  51678. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST)
  51679. ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51680. HYBRID_BREAK();
  51681. HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_CONST):
  51682. VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_CONST)
  51683. ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51684. HYBRID_BREAK();
  51685. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST):
  51686. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST)
  51687. ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51688. HYBRID_BREAK();
  51689. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST):
  51690. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST)
  51691. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51692. HYBRID_BREAK();
  51693. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST):
  51694. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST)
  51695. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51696. HYBRID_BREAK();
  51697. HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CONST):
  51698. VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CONST)
  51699. ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51700. HYBRID_BREAK();
  51701. HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CONST):
  51702. VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CONST)
  51703. ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51704. HYBRID_BREAK();
  51705. HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_CONST):
  51706. VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_CONST)
  51707. ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51708. HYBRID_BREAK();
  51709. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST):
  51710. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST)
  51711. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51712. HYBRID_BREAK();
  51713. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CONST):
  51714. VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CONST)
  51715. ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51716. HYBRID_BREAK();
  51717. HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CONST):
  51718. VM_TRACE(ZEND_YIELD_SPEC_TMP_CONST)
  51719. ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51720. HYBRID_BREAK();
  51721. HYBRID_CASE(ZEND_IN_ARRAY_SPEC_TMP_CONST):
  51722. VM_TRACE(ZEND_IN_ARRAY_SPEC_TMP_CONST)
  51723. ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51724. HYBRID_BREAK();
  51725. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR):
  51726. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR)
  51727. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51728. HYBRID_BREAK();
  51729. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR):
  51730. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR)
  51731. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51732. HYBRID_BREAK();
  51733. HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR):
  51734. VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR)
  51735. ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51736. HYBRID_BREAK();
  51737. HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_TMPVAR):
  51738. VM_TRACE(ZEND_ROPE_END_SPEC_TMP_TMPVAR)
  51739. ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51740. HYBRID_BREAK();
  51741. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR):
  51742. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR)
  51743. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51744. HYBRID_BREAK();
  51745. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR):
  51746. VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR)
  51747. ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51748. HYBRID_BREAK();
  51749. HYBRID_CASE(ZEND_YIELD_SPEC_TMP_TMPVAR):
  51750. VM_TRACE(ZEND_YIELD_SPEC_TMP_TMPVAR)
  51751. ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51752. HYBRID_BREAK();
  51753. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP):
  51754. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP)
  51755. ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51756. HYBRID_BREAK();
  51757. HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_TMP):
  51758. VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_TMP)
  51759. ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51760. HYBRID_BREAK();
  51761. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP):
  51762. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP)
  51763. ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51764. HYBRID_BREAK();
  51765. HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_VAR):
  51766. VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_VAR)
  51767. ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51768. HYBRID_BREAK();
  51769. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED):
  51770. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED)
  51771. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51772. HYBRID_BREAK();
  51773. HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED):
  51774. VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED)
  51775. ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51776. HYBRID_BREAK();
  51777. HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED):
  51778. VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED)
  51779. ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51780. HYBRID_BREAK();
  51781. HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK):
  51782. VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK)
  51783. ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51784. HYBRID_BREAK();
  51785. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED):
  51786. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED)
  51787. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51788. HYBRID_BREAK();
  51789. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED):
  51790. VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED)
  51791. ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51792. HYBRID_BREAK();
  51793. HYBRID_CASE(ZEND_YIELD_SPEC_TMP_UNUSED):
  51794. VM_TRACE(ZEND_YIELD_SPEC_TMP_UNUSED)
  51795. ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51796. HYBRID_BREAK();
  51797. HYBRID_CASE(ZEND_GET_TYPE_SPEC_TMP_UNUSED):
  51798. VM_TRACE(ZEND_GET_TYPE_SPEC_TMP_UNUSED)
  51799. ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51800. HYBRID_BREAK();
  51801. HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_CV):
  51802. VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_CV)
  51803. ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51804. HYBRID_BREAK();
  51805. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV):
  51806. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV)
  51807. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51808. HYBRID_BREAK();
  51809. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV):
  51810. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV)
  51811. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51812. HYBRID_BREAK();
  51813. HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CV):
  51814. VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CV)
  51815. ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51816. HYBRID_BREAK();
  51817. HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CV):
  51818. VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CV)
  51819. ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51820. HYBRID_BREAK();
  51821. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV):
  51822. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV)
  51823. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51824. HYBRID_BREAK();
  51825. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CV):
  51826. VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CV)
  51827. ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51828. HYBRID_BREAK();
  51829. HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CV):
  51830. VM_TRACE(ZEND_YIELD_SPEC_TMP_CV)
  51831. ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51832. HYBRID_BREAK();
  51833. HYBRID_CASE(ZEND_BIND_LEXICAL_SPEC_TMP_CV):
  51834. VM_TRACE(ZEND_BIND_LEXICAL_SPEC_TMP_CV)
  51835. ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51836. HYBRID_BREAK();
  51837. HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED):
  51838. VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED)
  51839. ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51840. HYBRID_BREAK();
  51841. HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED):
  51842. VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED)
  51843. ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51844. HYBRID_BREAK();
  51845. HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED):
  51846. VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED)
  51847. ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51848. HYBRID_BREAK();
  51849. HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED):
  51850. VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED)
  51851. ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51852. HYBRID_BREAK();
  51853. HYBRID_CASE(ZEND_POST_INC_SPEC_VAR):
  51854. VM_TRACE(ZEND_POST_INC_SPEC_VAR)
  51855. ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51856. HYBRID_BREAK();
  51857. HYBRID_CASE(ZEND_POST_DEC_SPEC_VAR):
  51858. VM_TRACE(ZEND_POST_DEC_SPEC_VAR)
  51859. ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51860. HYBRID_BREAK();
  51861. HYBRID_CASE(ZEND_RETURN_SPEC_VAR):
  51862. VM_TRACE(ZEND_RETURN_SPEC_VAR)
  51863. {
  51864. USE_OPLINE
  51865. zval *retval_ptr;
  51866. zval *return_value;
  51867. retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
  51868. return_value = EX(return_value);
  51869. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  51870. SAVE_OPLINE();
  51871. retval_ptr = ZVAL_UNDEFINED_OP1();
  51872. if (return_value) {
  51873. ZVAL_NULL(return_value);
  51874. }
  51875. } else if (!return_value) {
  51876. if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
  51877. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  51878. SAVE_OPLINE();
  51879. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  51880. }
  51881. }
  51882. } else {
  51883. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  51884. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51885. if (IS_VAR == IS_CONST) {
  51886. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  51887. Z_ADDREF_P(return_value);
  51888. }
  51889. }
  51890. } else if (IS_VAR == IS_CV) {
  51891. do {
  51892. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  51893. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  51894. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  51895. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  51896. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51897. if (GC_MAY_LEAK(ref)) {
  51898. gc_possible_root(ref);
  51899. }
  51900. ZVAL_NULL(retval_ptr);
  51901. break;
  51902. } else {
  51903. Z_ADDREF_P(retval_ptr);
  51904. }
  51905. } else {
  51906. retval_ptr = Z_REFVAL_P(retval_ptr);
  51907. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  51908. Z_ADDREF_P(retval_ptr);
  51909. }
  51910. }
  51911. }
  51912. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51913. } while (0);
  51914. } else /* if (IS_VAR == IS_VAR) */ {
  51915. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  51916. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  51917. retval_ptr = Z_REFVAL_P(retval_ptr);
  51918. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51919. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  51920. efree_size(ref, sizeof(zend_reference));
  51921. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  51922. Z_ADDREF_P(retval_ptr);
  51923. }
  51924. } else {
  51925. ZVAL_COPY_VALUE(return_value, retval_ptr);
  51926. }
  51927. }
  51928. }
  51929. goto zend_leave_helper_SPEC_LABEL;
  51930. }
  51931. HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_VAR):
  51932. VM_TRACE(ZEND_RETURN_BY_REF_SPEC_VAR)
  51933. ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51934. HYBRID_BREAK();
  51935. HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_VAR):
  51936. VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_VAR)
  51937. ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51938. HYBRID_BREAK();
  51939. HYBRID_CASE(ZEND_SEND_USER_SPEC_VAR):
  51940. VM_TRACE(ZEND_SEND_USER_SPEC_VAR)
  51941. ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51942. HYBRID_BREAK();
  51943. HYBRID_CASE(ZEND_CAST_SPEC_VAR):
  51944. VM_TRACE(ZEND_CAST_SPEC_VAR)
  51945. ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51946. HYBRID_BREAK();
  51947. HYBRID_CASE(ZEND_FE_RESET_R_SPEC_VAR):
  51948. VM_TRACE(ZEND_FE_RESET_R_SPEC_VAR)
  51949. ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51950. HYBRID_BREAK();
  51951. HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_VAR):
  51952. VM_TRACE(ZEND_FE_RESET_RW_SPEC_VAR)
  51953. ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51954. HYBRID_BREAK();
  51955. HYBRID_CASE(ZEND_FE_FETCH_R_SPEC_VAR):
  51956. VM_TRACE(ZEND_FE_FETCH_R_SPEC_VAR)
  51957. ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51958. HYBRID_BREAK();
  51959. HYBRID_CASE(ZEND_FE_FETCH_RW_SPEC_VAR):
  51960. VM_TRACE(ZEND_FE_FETCH_RW_SPEC_VAR)
  51961. ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51962. HYBRID_BREAK();
  51963. HYBRID_CASE(ZEND_JMP_SET_SPEC_VAR):
  51964. VM_TRACE(ZEND_JMP_SET_SPEC_VAR)
  51965. ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51966. HYBRID_BREAK();
  51967. HYBRID_CASE(ZEND_COALESCE_SPEC_VAR):
  51968. VM_TRACE(ZEND_COALESCE_SPEC_VAR)
  51969. ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51970. HYBRID_BREAK();
  51971. HYBRID_CASE(ZEND_JMP_NULL_SPEC_VAR):
  51972. VM_TRACE(ZEND_JMP_NULL_SPEC_VAR)
  51973. ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51974. HYBRID_BREAK();
  51975. HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_VAR):
  51976. VM_TRACE(ZEND_QM_ASSIGN_SPEC_VAR)
  51977. ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51978. HYBRID_BREAK();
  51979. HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR):
  51980. VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR)
  51981. ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51982. HYBRID_BREAK();
  51983. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST):
  51984. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST)
  51985. ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51986. HYBRID_BREAK();
  51987. HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_CONST):
  51988. VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_CONST)
  51989. ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51990. HYBRID_BREAK();
  51991. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST):
  51992. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST)
  51993. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51994. HYBRID_BREAK();
  51995. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST):
  51996. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST)
  51997. ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51998. HYBRID_BREAK();
  51999. HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST):
  52000. VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST)
  52001. ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52002. HYBRID_BREAK();
  52003. HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_CONST):
  52004. VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CONST)
  52005. ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52006. HYBRID_BREAK();
  52007. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST):
  52008. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST)
  52009. ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52010. HYBRID_BREAK();
  52011. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST):
  52012. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST)
  52013. ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52014. HYBRID_BREAK();
  52015. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST):
  52016. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST)
  52017. ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52018. HYBRID_BREAK();
  52019. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST):
  52020. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST)
  52021. ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52022. HYBRID_BREAK();
  52023. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST):
  52024. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST)
  52025. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52026. HYBRID_BREAK();
  52027. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST):
  52028. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST)
  52029. ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52030. HYBRID_BREAK();
  52031. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST):
  52032. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST)
  52033. ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52034. HYBRID_BREAK();
  52035. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST):
  52036. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST)
  52037. ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52038. HYBRID_BREAK();
  52039. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST):
  52040. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST)
  52041. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52042. HYBRID_BREAK();
  52043. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST):
  52044. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST)
  52045. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52046. HYBRID_BREAK();
  52047. HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST):
  52048. VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST)
  52049. ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52050. HYBRID_BREAK();
  52051. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST):
  52052. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST)
  52053. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52054. HYBRID_BREAK();
  52055. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP):
  52056. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP)
  52057. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52058. HYBRID_BREAK();
  52059. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR):
  52060. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR)
  52061. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52062. HYBRID_BREAK();
  52063. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV):
  52064. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV)
  52065. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52066. HYBRID_BREAK();
  52067. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST):
  52068. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST)
  52069. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52070. HYBRID_BREAK();
  52071. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP):
  52072. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP)
  52073. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52074. HYBRID_BREAK();
  52075. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR):
  52076. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR)
  52077. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52078. HYBRID_BREAK();
  52079. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV):
  52080. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV)
  52081. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52082. HYBRID_BREAK();
  52083. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED):
  52084. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED)
  52085. ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52086. HYBRID_BREAK();
  52087. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED):
  52088. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED)
  52089. ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52090. HYBRID_BREAK();
  52091. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR):
  52092. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR)
  52093. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52094. HYBRID_BREAK();
  52095. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV):
  52096. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV)
  52097. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52098. HYBRID_BREAK();
  52099. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST):
  52100. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST)
  52101. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52102. HYBRID_BREAK();
  52103. HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR_CONST):
  52104. VM_TRACE(ZEND_SEND_VAR_SPEC_VAR_CONST)
  52105. ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52106. HYBRID_BREAK();
  52107. HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST):
  52108. VM_TRACE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST)
  52109. ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52110. HYBRID_BREAK();
  52111. HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST):
  52112. VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST)
  52113. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52114. HYBRID_BREAK();
  52115. HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR_CONST):
  52116. VM_TRACE(ZEND_SEND_REF_SPEC_VAR_CONST)
  52117. ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52118. HYBRID_BREAK();
  52119. HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_CONST):
  52120. VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_CONST)
  52121. ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52122. HYBRID_BREAK();
  52123. HYBRID_CASE(ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST):
  52124. VM_TRACE(ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST)
  52125. ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52126. HYBRID_BREAK();
  52127. HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST):
  52128. VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST)
  52129. ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52130. HYBRID_BREAK();
  52131. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST):
  52132. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST)
  52133. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52134. HYBRID_BREAK();
  52135. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CONST):
  52136. VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CONST)
  52137. ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52138. HYBRID_BREAK();
  52139. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CONST):
  52140. VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CONST)
  52141. ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52142. HYBRID_BREAK();
  52143. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CONST):
  52144. VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CONST)
  52145. ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52146. HYBRID_BREAK();
  52147. HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CONST):
  52148. VM_TRACE(ZEND_YIELD_SPEC_VAR_CONST)
  52149. ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52150. HYBRID_BREAK();
  52151. HYBRID_CASE(ZEND_IN_ARRAY_SPEC_VAR_CONST):
  52152. VM_TRACE(ZEND_IN_ARRAY_SPEC_VAR_CONST)
  52153. ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52154. HYBRID_BREAK();
  52155. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR):
  52156. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR)
  52157. ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52158. HYBRID_BREAK();
  52159. HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR):
  52160. VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR)
  52161. ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52162. HYBRID_BREAK();
  52163. HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR):
  52164. VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR)
  52165. ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52166. HYBRID_BREAK();
  52167. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR):
  52168. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR)
  52169. ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52170. HYBRID_BREAK();
  52171. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR):
  52172. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR)
  52173. ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52174. HYBRID_BREAK();
  52175. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR):
  52176. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR)
  52177. ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52178. HYBRID_BREAK();
  52179. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR):
  52180. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR)
  52181. ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52182. HYBRID_BREAK();
  52183. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR):
  52184. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR)
  52185. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52186. HYBRID_BREAK();
  52187. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR):
  52188. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR)
  52189. ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52190. HYBRID_BREAK();
  52191. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR):
  52192. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR)
  52193. ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52194. HYBRID_BREAK();
  52195. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR):
  52196. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR)
  52197. ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52198. HYBRID_BREAK();
  52199. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR):
  52200. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR)
  52201. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52202. HYBRID_BREAK();
  52203. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR):
  52204. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR)
  52205. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52206. HYBRID_BREAK();
  52207. HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR):
  52208. VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR)
  52209. ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52210. HYBRID_BREAK();
  52211. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST):
  52212. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST)
  52213. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52214. HYBRID_BREAK();
  52215. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP):
  52216. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP)
  52217. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52218. HYBRID_BREAK();
  52219. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR):
  52220. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR)
  52221. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52222. HYBRID_BREAK();
  52223. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV):
  52224. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV)
  52225. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52226. HYBRID_BREAK();
  52227. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST):
  52228. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST)
  52229. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52230. HYBRID_BREAK();
  52231. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP):
  52232. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP)
  52233. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52234. HYBRID_BREAK();
  52235. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR):
  52236. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR)
  52237. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52238. HYBRID_BREAK();
  52239. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV):
  52240. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV)
  52241. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52242. HYBRID_BREAK();
  52243. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR):
  52244. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR)
  52245. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52246. HYBRID_BREAK();
  52247. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV):
  52248. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV)
  52249. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52250. HYBRID_BREAK();
  52251. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR):
  52252. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR)
  52253. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52254. HYBRID_BREAK();
  52255. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR):
  52256. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR)
  52257. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52258. HYBRID_BREAK();
  52259. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR):
  52260. VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR)
  52261. ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52262. HYBRID_BREAK();
  52263. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR):
  52264. VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR)
  52265. ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52266. HYBRID_BREAK();
  52267. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR):
  52268. VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR)
  52269. ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52270. HYBRID_BREAK();
  52271. HYBRID_CASE(ZEND_YIELD_SPEC_VAR_TMPVAR):
  52272. VM_TRACE(ZEND_YIELD_SPEC_VAR_TMPVAR)
  52273. ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52274. HYBRID_BREAK();
  52275. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP):
  52276. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP)
  52277. ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52278. HYBRID_BREAK();
  52279. HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_TMP):
  52280. VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_TMP)
  52281. ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52282. HYBRID_BREAK();
  52283. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP):
  52284. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP)
  52285. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52286. HYBRID_BREAK();
  52287. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED):
  52288. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED)
  52289. ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52290. HYBRID_BREAK();
  52291. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED):
  52292. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED)
  52293. ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52294. HYBRID_BREAK();
  52295. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR):
  52296. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR)
  52297. ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52298. HYBRID_BREAK();
  52299. HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_VAR):
  52300. VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_VAR)
  52301. ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52302. HYBRID_BREAK();
  52303. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR):
  52304. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR)
  52305. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52306. HYBRID_BREAK();
  52307. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED):
  52308. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED)
  52309. ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52310. HYBRID_BREAK();
  52311. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED):
  52312. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED)
  52313. ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52314. HYBRID_BREAK();
  52315. HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_VAR):
  52316. VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_VAR)
  52317. ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52318. HYBRID_BREAK();
  52319. HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED):
  52320. VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED)
  52321. ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52322. HYBRID_BREAK();
  52323. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED):
  52324. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED)
  52325. ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52326. HYBRID_BREAK();
  52327. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED):
  52328. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED)
  52329. ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52330. HYBRID_BREAK();
  52331. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED):
  52332. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED)
  52333. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52334. HYBRID_BREAK();
  52335. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST):
  52336. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST)
  52337. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52338. HYBRID_BREAK();
  52339. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP):
  52340. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP)
  52341. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52342. HYBRID_BREAK();
  52343. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR):
  52344. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR)
  52345. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52346. HYBRID_BREAK();
  52347. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV):
  52348. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV)
  52349. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52350. HYBRID_BREAK();
  52351. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED):
  52352. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED)
  52353. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52354. HYBRID_BREAK();
  52355. HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED):
  52356. VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED)
  52357. ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52358. HYBRID_BREAK();
  52359. HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR_UNUSED):
  52360. VM_TRACE(ZEND_SEND_VAR_SPEC_VAR_UNUSED)
  52361. ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52362. HYBRID_BREAK();
  52363. HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED):
  52364. VM_TRACE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED)
  52365. ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52366. HYBRID_BREAK();
  52367. HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED):
  52368. VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED)
  52369. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52370. HYBRID_BREAK();
  52371. HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK):
  52372. VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK)
  52373. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52374. HYBRID_BREAK();
  52375. HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR_UNUSED):
  52376. VM_TRACE(ZEND_SEND_REF_SPEC_VAR_UNUSED)
  52377. ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52378. HYBRID_BREAK();
  52379. HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED):
  52380. VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED)
  52381. ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52382. HYBRID_BREAK();
  52383. HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK):
  52384. VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK)
  52385. ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52386. HYBRID_BREAK();
  52387. HYBRID_CASE(ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED):
  52388. VM_TRACE(ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED)
  52389. ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52390. HYBRID_BREAK();
  52391. HYBRID_CASE(ZEND_NEW_SPEC_VAR_UNUSED):
  52392. VM_TRACE(ZEND_NEW_SPEC_VAR_UNUSED)
  52393. ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52394. HYBRID_BREAK();
  52395. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED):
  52396. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED)
  52397. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52398. HYBRID_BREAK();
  52399. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED):
  52400. VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED)
  52401. ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52402. HYBRID_BREAK();
  52403. HYBRID_CASE(ZEND_SEPARATE_SPEC_VAR_UNUSED):
  52404. VM_TRACE(ZEND_SEPARATE_SPEC_VAR_UNUSED)
  52405. ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52406. HYBRID_BREAK();
  52407. HYBRID_CASE(ZEND_YIELD_SPEC_VAR_UNUSED):
  52408. VM_TRACE(ZEND_YIELD_SPEC_VAR_UNUSED)
  52409. ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52410. HYBRID_BREAK();
  52411. HYBRID_CASE(ZEND_MAKE_REF_SPEC_VAR_UNUSED):
  52412. VM_TRACE(ZEND_MAKE_REF_SPEC_VAR_UNUSED)
  52413. ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52414. HYBRID_BREAK();
  52415. HYBRID_CASE(ZEND_GET_TYPE_SPEC_VAR_UNUSED):
  52416. VM_TRACE(ZEND_GET_TYPE_SPEC_VAR_UNUSED)
  52417. ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52418. HYBRID_BREAK();
  52419. HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED):
  52420. VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED)
  52421. ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52422. HYBRID_BREAK();
  52423. HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_CV):
  52424. VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_CV)
  52425. ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52426. HYBRID_BREAK();
  52427. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV):
  52428. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV)
  52429. ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52430. HYBRID_BREAK();
  52431. HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV):
  52432. VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV)
  52433. ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52434. HYBRID_BREAK();
  52435. HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_CV):
  52436. VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CV)
  52437. ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52438. HYBRID_BREAK();
  52439. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV):
  52440. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV)
  52441. ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52442. HYBRID_BREAK();
  52443. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CV):
  52444. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CV)
  52445. ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52446. HYBRID_BREAK();
  52447. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CV):
  52448. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CV)
  52449. ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52450. HYBRID_BREAK();
  52451. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV):
  52452. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV)
  52453. ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52454. HYBRID_BREAK();
  52455. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV):
  52456. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV)
  52457. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52458. HYBRID_BREAK();
  52459. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV):
  52460. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV)
  52461. ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52462. HYBRID_BREAK();
  52463. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV):
  52464. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV)
  52465. ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52466. HYBRID_BREAK();
  52467. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV):
  52468. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV)
  52469. ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52470. HYBRID_BREAK();
  52471. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV):
  52472. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV)
  52473. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52474. HYBRID_BREAK();
  52475. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV):
  52476. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV)
  52477. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52478. HYBRID_BREAK();
  52479. HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CV):
  52480. VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CV)
  52481. ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52482. HYBRID_BREAK();
  52483. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST):
  52484. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST)
  52485. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52486. HYBRID_BREAK();
  52487. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP):
  52488. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP)
  52489. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52490. HYBRID_BREAK();
  52491. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR):
  52492. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR)
  52493. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52494. HYBRID_BREAK();
  52495. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV):
  52496. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV)
  52497. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52498. HYBRID_BREAK();
  52499. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST):
  52500. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST)
  52501. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52502. HYBRID_BREAK();
  52503. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP):
  52504. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP)
  52505. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52506. HYBRID_BREAK();
  52507. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR):
  52508. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR)
  52509. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52510. HYBRID_BREAK();
  52511. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV):
  52512. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV)
  52513. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52514. HYBRID_BREAK();
  52515. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED):
  52516. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED)
  52517. ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52518. HYBRID_BREAK();
  52519. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED):
  52520. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED)
  52521. ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52522. HYBRID_BREAK();
  52523. HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_CV):
  52524. VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_CV)
  52525. ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52526. HYBRID_BREAK();
  52527. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR):
  52528. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR)
  52529. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52530. HYBRID_BREAK();
  52531. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV):
  52532. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV)
  52533. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52534. HYBRID_BREAK();
  52535. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV):
  52536. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV)
  52537. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52538. HYBRID_BREAK();
  52539. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV):
  52540. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV)
  52541. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52542. HYBRID_BREAK();
  52543. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CV):
  52544. VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CV)
  52545. ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52546. HYBRID_BREAK();
  52547. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CV):
  52548. VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CV)
  52549. ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52550. HYBRID_BREAK();
  52551. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CV):
  52552. VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CV)
  52553. ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52554. HYBRID_BREAK();
  52555. HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CV):
  52556. VM_TRACE(ZEND_YIELD_SPEC_VAR_CV)
  52557. ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52558. HYBRID_BREAK();
  52559. HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED):
  52560. VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED)
  52561. ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52562. HYBRID_BREAK();
  52563. HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED):
  52564. VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED)
  52565. ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52566. HYBRID_BREAK();
  52567. HYBRID_CASE(ZEND_CLONE_SPEC_UNUSED):
  52568. VM_TRACE(ZEND_CLONE_SPEC_UNUSED)
  52569. ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52570. HYBRID_BREAK();
  52571. HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED):
  52572. VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED)
  52573. ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52574. HYBRID_BREAK();
  52575. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST):
  52576. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST)
  52577. ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52578. HYBRID_BREAK();
  52579. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST):
  52580. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST)
  52581. ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52582. HYBRID_BREAK();
  52583. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST):
  52584. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST)
  52585. ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52586. HYBRID_BREAK();
  52587. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST):
  52588. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST)
  52589. ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52590. HYBRID_BREAK();
  52591. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST):
  52592. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST)
  52593. ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52594. HYBRID_BREAK();
  52595. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST):
  52596. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST)
  52597. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52598. HYBRID_BREAK();
  52599. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST):
  52600. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST)
  52601. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52602. HYBRID_BREAK();
  52603. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST):
  52604. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST)
  52605. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52606. HYBRID_BREAK();
  52607. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST):
  52608. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST)
  52609. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52610. HYBRID_BREAK();
  52611. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST):
  52612. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST)
  52613. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52614. HYBRID_BREAK();
  52615. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP):
  52616. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP)
  52617. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52618. HYBRID_BREAK();
  52619. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR):
  52620. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR)
  52621. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52622. HYBRID_BREAK();
  52623. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV):
  52624. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV)
  52625. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52626. HYBRID_BREAK();
  52627. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR):
  52628. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR)
  52629. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52630. HYBRID_BREAK();
  52631. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV):
  52632. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV)
  52633. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52634. HYBRID_BREAK();
  52635. HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST):
  52636. VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST)
  52637. ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52638. HYBRID_BREAK();
  52639. HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST):
  52640. VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST)
  52641. ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52642. HYBRID_BREAK();
  52643. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST):
  52644. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST)
  52645. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52646. HYBRID_BREAK();
  52647. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST):
  52648. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST)
  52649. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52650. HYBRID_BREAK();
  52651. HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST):
  52652. VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST)
  52653. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52654. HYBRID_BREAK();
  52655. HYBRID_CASE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST):
  52656. VM_TRACE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST)
  52657. ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52658. HYBRID_BREAK();
  52659. HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST):
  52660. VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST)
  52661. ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52662. HYBRID_BREAK();
  52663. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST):
  52664. VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST)
  52665. ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52666. HYBRID_BREAK();
  52667. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST):
  52668. VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST)
  52669. ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52670. HYBRID_BREAK();
  52671. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST):
  52672. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST)
  52673. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52674. HYBRID_BREAK();
  52675. HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CONST):
  52676. VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CONST)
  52677. ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52678. HYBRID_BREAK();
  52679. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR):
  52680. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR)
  52681. ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52682. HYBRID_BREAK();
  52683. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR):
  52684. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR)
  52685. ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52686. HYBRID_BREAK();
  52687. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR):
  52688. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR)
  52689. ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52690. HYBRID_BREAK();
  52691. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR):
  52692. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR)
  52693. ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52694. HYBRID_BREAK();
  52695. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR):
  52696. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR)
  52697. ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52698. HYBRID_BREAK();
  52699. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR):
  52700. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR)
  52701. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52702. HYBRID_BREAK();
  52703. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR):
  52704. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR)
  52705. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52706. HYBRID_BREAK();
  52707. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR):
  52708. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR)
  52709. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52710. HYBRID_BREAK();
  52711. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR):
  52712. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR)
  52713. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52714. HYBRID_BREAK();
  52715. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST):
  52716. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST)
  52717. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52718. HYBRID_BREAK();
  52719. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP):
  52720. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP)
  52721. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52722. HYBRID_BREAK();
  52723. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
  52724. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
  52725. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52726. HYBRID_BREAK();
  52727. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
  52728. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
  52729. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52730. HYBRID_BREAK();
  52731. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
  52732. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
  52733. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52734. HYBRID_BREAK();
  52735. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
  52736. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
  52737. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52738. HYBRID_BREAK();
  52739. HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR):
  52740. VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR)
  52741. ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52742. HYBRID_BREAK();
  52743. HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR):
  52744. VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR)
  52745. ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52746. HYBRID_BREAK();
  52747. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR):
  52748. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR)
  52749. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52750. HYBRID_BREAK();
  52751. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR):
  52752. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR)
  52753. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52754. HYBRID_BREAK();
  52755. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR):
  52756. VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR)
  52757. ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52758. HYBRID_BREAK();
  52759. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR):
  52760. VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR)
  52761. ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52762. HYBRID_BREAK();
  52763. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR):
  52764. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR)
  52765. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52766. HYBRID_BREAK();
  52767. HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_TMPVAR):
  52768. VM_TRACE(ZEND_YIELD_SPEC_UNUSED_TMPVAR)
  52769. ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52770. HYBRID_BREAK();
  52771. HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED):
  52772. VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED)
  52773. ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52774. HYBRID_BREAK();
  52775. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED):
  52776. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED)
  52777. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52778. HYBRID_BREAK();
  52779. HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED):
  52780. VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED)
  52781. ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52782. HYBRID_BREAK();
  52783. HYBRID_CASE(ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED):
  52784. VM_TRACE(ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED)
  52785. ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52786. HYBRID_BREAK();
  52787. HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED):
  52788. VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED)
  52789. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52790. HYBRID_BREAK();
  52791. HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK):
  52792. VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK)
  52793. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52794. HYBRID_BREAK();
  52795. HYBRID_CASE(ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED):
  52796. VM_TRACE(ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED)
  52797. ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52798. HYBRID_BREAK();
  52799. HYBRID_CASE(ZEND_NEW_SPEC_UNUSED_UNUSED):
  52800. VM_TRACE(ZEND_NEW_SPEC_UNUSED_UNUSED)
  52801. ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52802. HYBRID_BREAK();
  52803. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED):
  52804. VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED)
  52805. ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52806. HYBRID_BREAK();
  52807. HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_UNUSED):
  52808. VM_TRACE(ZEND_YIELD_SPEC_UNUSED_UNUSED)
  52809. ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52810. HYBRID_BREAK();
  52811. HYBRID_CASE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED):
  52812. VM_TRACE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED)
  52813. ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52814. HYBRID_BREAK();
  52815. HYBRID_CASE(ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED):
  52816. VM_TRACE(ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED)
  52817. ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52818. HYBRID_BREAK();
  52819. HYBRID_CASE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED):
  52820. VM_TRACE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED)
  52821. ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52822. HYBRID_BREAK();
  52823. HYBRID_CASE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED):
  52824. VM_TRACE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED)
  52825. ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52826. HYBRID_BREAK();
  52827. HYBRID_CASE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED):
  52828. VM_TRACE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED)
  52829. ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52830. HYBRID_BREAK();
  52831. HYBRID_CASE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED):
  52832. VM_TRACE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED)
  52833. ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52834. HYBRID_BREAK();
  52835. HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED):
  52836. VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED)
  52837. ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52838. HYBRID_BREAK();
  52839. HYBRID_CASE(ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED):
  52840. VM_TRACE(ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED)
  52841. ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52842. HYBRID_BREAK();
  52843. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV):
  52844. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV)
  52845. ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52846. HYBRID_BREAK();
  52847. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV):
  52848. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV)
  52849. ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52850. HYBRID_BREAK();
  52851. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV):
  52852. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV)
  52853. ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52854. HYBRID_BREAK();
  52855. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV):
  52856. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV)
  52857. ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52858. HYBRID_BREAK();
  52859. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV):
  52860. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV)
  52861. ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52862. HYBRID_BREAK();
  52863. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV):
  52864. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV)
  52865. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52866. HYBRID_BREAK();
  52867. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV):
  52868. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV)
  52869. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52870. HYBRID_BREAK();
  52871. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV):
  52872. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV)
  52873. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52874. HYBRID_BREAK();
  52875. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV):
  52876. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV)
  52877. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52878. HYBRID_BREAK();
  52879. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST):
  52880. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST)
  52881. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52882. HYBRID_BREAK();
  52883. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP):
  52884. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP)
  52885. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52886. HYBRID_BREAK();
  52887. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR):
  52888. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR)
  52889. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52890. HYBRID_BREAK();
  52891. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV):
  52892. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV)
  52893. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52894. HYBRID_BREAK();
  52895. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR):
  52896. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR)
  52897. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52898. HYBRID_BREAK();
  52899. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV):
  52900. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV)
  52901. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52902. HYBRID_BREAK();
  52903. HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CV):
  52904. VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CV)
  52905. ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52906. HYBRID_BREAK();
  52907. HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV):
  52908. VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV)
  52909. ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52910. HYBRID_BREAK();
  52911. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV):
  52912. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV)
  52913. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52914. HYBRID_BREAK();
  52915. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV):
  52916. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV)
  52917. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52918. HYBRID_BREAK();
  52919. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV):
  52920. VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV)
  52921. ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52922. HYBRID_BREAK();
  52923. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV):
  52924. VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV)
  52925. ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52926. HYBRID_BREAK();
  52927. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV):
  52928. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV)
  52929. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52930. HYBRID_BREAK();
  52931. HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CV):
  52932. VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CV)
  52933. ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52934. HYBRID_BREAK();
  52935. HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CV):
  52936. VM_TRACE(ZEND_BOOL_NOT_SPEC_CV)
  52937. ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52938. HYBRID_BREAK();
  52939. HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED):
  52940. VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED)
  52941. ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52942. HYBRID_BREAK();
  52943. HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED):
  52944. VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED)
  52945. ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52946. HYBRID_BREAK();
  52947. HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED):
  52948. VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED)
  52949. ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52950. HYBRID_BREAK();
  52951. HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED):
  52952. VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED)
  52953. ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52954. HYBRID_BREAK();
  52955. HYBRID_CASE(ZEND_POST_INC_SPEC_CV):
  52956. VM_TRACE(ZEND_POST_INC_SPEC_CV)
  52957. ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52958. HYBRID_BREAK();
  52959. HYBRID_CASE(ZEND_POST_DEC_SPEC_CV):
  52960. VM_TRACE(ZEND_POST_DEC_SPEC_CV)
  52961. ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52962. HYBRID_BREAK();
  52963. HYBRID_CASE(ZEND_ECHO_SPEC_CV):
  52964. VM_TRACE(ZEND_ECHO_SPEC_CV)
  52965. ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52966. HYBRID_BREAK();
  52967. HYBRID_CASE(ZEND_JMPZ_SPEC_CV):
  52968. VM_TRACE(ZEND_JMPZ_SPEC_CV)
  52969. ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52970. HYBRID_BREAK();
  52971. HYBRID_CASE(ZEND_JMPNZ_SPEC_CV):
  52972. VM_TRACE(ZEND_JMPNZ_SPEC_CV)
  52973. ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52974. HYBRID_BREAK();
  52975. HYBRID_CASE(ZEND_JMPZNZ_SPEC_CV):
  52976. VM_TRACE(ZEND_JMPZNZ_SPEC_CV)
  52977. ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52978. HYBRID_BREAK();
  52979. HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CV):
  52980. VM_TRACE(ZEND_JMPZ_EX_SPEC_CV)
  52981. ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52982. HYBRID_BREAK();
  52983. HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CV):
  52984. VM_TRACE(ZEND_JMPNZ_EX_SPEC_CV)
  52985. ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52986. HYBRID_BREAK();
  52987. HYBRID_CASE(ZEND_RETURN_SPEC_CV):
  52988. VM_TRACE(ZEND_RETURN_SPEC_CV)
  52989. {
  52990. USE_OPLINE
  52991. zval *retval_ptr;
  52992. zval *return_value;
  52993. retval_ptr = EX_VAR(opline->op1.var);
  52994. return_value = EX(return_value);
  52995. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  52996. SAVE_OPLINE();
  52997. retval_ptr = ZVAL_UNDEFINED_OP1();
  52998. if (return_value) {
  52999. ZVAL_NULL(return_value);
  53000. }
  53001. } else if (!return_value) {
  53002. if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
  53003. if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
  53004. SAVE_OPLINE();
  53005. rc_dtor_func(Z_COUNTED_P(retval_ptr));
  53006. }
  53007. }
  53008. } else {
  53009. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  53010. ZVAL_COPY_VALUE(return_value, retval_ptr);
  53011. if (IS_CV == IS_CONST) {
  53012. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  53013. Z_ADDREF_P(return_value);
  53014. }
  53015. }
  53016. } else if (IS_CV == IS_CV) {
  53017. do {
  53018. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  53019. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  53020. if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
  53021. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  53022. ZVAL_COPY_VALUE(return_value, retval_ptr);
  53023. if (GC_MAY_LEAK(ref)) {
  53024. gc_possible_root(ref);
  53025. }
  53026. ZVAL_NULL(retval_ptr);
  53027. break;
  53028. } else {
  53029. Z_ADDREF_P(retval_ptr);
  53030. }
  53031. } else {
  53032. retval_ptr = Z_REFVAL_P(retval_ptr);
  53033. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  53034. Z_ADDREF_P(retval_ptr);
  53035. }
  53036. }
  53037. }
  53038. ZVAL_COPY_VALUE(return_value, retval_ptr);
  53039. } while (0);
  53040. } else /* if (IS_CV == IS_VAR) */ {
  53041. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  53042. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  53043. retval_ptr = Z_REFVAL_P(retval_ptr);
  53044. ZVAL_COPY_VALUE(return_value, retval_ptr);
  53045. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  53046. efree_size(ref, sizeof(zend_reference));
  53047. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  53048. Z_ADDREF_P(retval_ptr);
  53049. }
  53050. } else {
  53051. ZVAL_COPY_VALUE(return_value, retval_ptr);
  53052. }
  53053. }
  53054. }
  53055. goto zend_leave_helper_SPEC_LABEL;
  53056. }
  53057. HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CV):
  53058. VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CV)
  53059. ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53060. HYBRID_BREAK();
  53061. HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CV):
  53062. VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CV)
  53063. ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53064. HYBRID_BREAK();
  53065. HYBRID_CASE(ZEND_THROW_SPEC_CV):
  53066. VM_TRACE(ZEND_THROW_SPEC_CV)
  53067. ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53068. HYBRID_BREAK();
  53069. HYBRID_CASE(ZEND_SEND_USER_SPEC_CV):
  53070. VM_TRACE(ZEND_SEND_USER_SPEC_CV)
  53071. ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53072. HYBRID_BREAK();
  53073. HYBRID_CASE(ZEND_BOOL_SPEC_CV):
  53074. VM_TRACE(ZEND_BOOL_SPEC_CV)
  53075. ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53076. HYBRID_BREAK();
  53077. HYBRID_CASE(ZEND_CLONE_SPEC_CV):
  53078. VM_TRACE(ZEND_CLONE_SPEC_CV)
  53079. ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53080. HYBRID_BREAK();
  53081. HYBRID_CASE(ZEND_CAST_SPEC_CV):
  53082. VM_TRACE(ZEND_CAST_SPEC_CV)
  53083. ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53084. HYBRID_BREAK();
  53085. HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CV):
  53086. VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CV)
  53087. ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53088. HYBRID_BREAK();
  53089. HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CV):
  53090. VM_TRACE(ZEND_FE_RESET_R_SPEC_CV)
  53091. ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53092. HYBRID_BREAK();
  53093. HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CV):
  53094. VM_TRACE(ZEND_FE_RESET_RW_SPEC_CV)
  53095. ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53096. HYBRID_BREAK();
  53097. HYBRID_CASE(ZEND_JMP_SET_SPEC_CV):
  53098. VM_TRACE(ZEND_JMP_SET_SPEC_CV)
  53099. ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53100. HYBRID_BREAK();
  53101. HYBRID_CASE(ZEND_COALESCE_SPEC_CV):
  53102. VM_TRACE(ZEND_COALESCE_SPEC_CV)
  53103. ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53104. HYBRID_BREAK();
  53105. HYBRID_CASE(ZEND_JMP_NULL_SPEC_CV):
  53106. VM_TRACE(ZEND_JMP_NULL_SPEC_CV)
  53107. ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53108. HYBRID_BREAK();
  53109. HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CV):
  53110. VM_TRACE(ZEND_QM_ASSIGN_SPEC_CV)
  53111. ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53112. HYBRID_BREAK();
  53113. HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CV):
  53114. VM_TRACE(ZEND_YIELD_FROM_SPEC_CV)
  53115. ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53116. HYBRID_BREAK();
  53117. HYBRID_CASE(ZEND_STRLEN_SPEC_CV):
  53118. VM_TRACE(ZEND_STRLEN_SPEC_CV)
  53119. ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53120. HYBRID_BREAK();
  53121. HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CV):
  53122. VM_TRACE(ZEND_TYPE_CHECK_SPEC_CV)
  53123. ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53124. HYBRID_BREAK();
  53125. HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_CV):
  53126. VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_CV)
  53127. ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53128. HYBRID_BREAK();
  53129. HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
  53130. VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
  53131. ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53132. HYBRID_BREAK();
  53133. HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
  53134. VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
  53135. ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53136. HYBRID_BREAK();
  53137. HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED):
  53138. VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED)
  53139. ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53140. HYBRID_BREAK();
  53141. HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED):
  53142. VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED)
  53143. ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53144. HYBRID_BREAK();
  53145. HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
  53146. VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
  53147. ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53148. HYBRID_BREAK();
  53149. HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
  53150. VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
  53151. ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53152. HYBRID_BREAK();
  53153. HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED):
  53154. VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED)
  53155. ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53156. HYBRID_BREAK();
  53157. HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED):
  53158. VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED)
  53159. ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53160. HYBRID_BREAK();
  53161. HYBRID_CASE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV):
  53162. VM_TRACE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV)
  53163. ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53164. HYBRID_BREAK();
  53165. HYBRID_CASE(ZEND_POST_INC_LONG_SPEC_CV):
  53166. VM_TRACE(ZEND_POST_INC_LONG_SPEC_CV)
  53167. ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53168. HYBRID_BREAK();
  53169. HYBRID_CASE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV):
  53170. VM_TRACE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV)
  53171. ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53172. HYBRID_BREAK();
  53173. HYBRID_CASE(ZEND_POST_DEC_LONG_SPEC_CV):
  53174. VM_TRACE(ZEND_POST_DEC_LONG_SPEC_CV)
  53175. ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53176. HYBRID_BREAK();
  53177. HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_CV):
  53178. VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_CV)
  53179. ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53180. HYBRID_BREAK();
  53181. HYBRID_CASE(ZEND_DIV_SPEC_CV_CONST):
  53182. VM_TRACE(ZEND_DIV_SPEC_CV_CONST)
  53183. ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53184. HYBRID_BREAK();
  53185. HYBRID_CASE(ZEND_POW_SPEC_CV_CONST):
  53186. VM_TRACE(ZEND_POW_SPEC_CV_CONST)
  53187. ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53188. HYBRID_BREAK();
  53189. HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CONST):
  53190. VM_TRACE(ZEND_CONCAT_SPEC_CV_CONST)
  53191. ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53192. HYBRID_BREAK();
  53193. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CONST):
  53194. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CONST)
  53195. ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53196. HYBRID_BREAK();
  53197. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST):
  53198. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST)
  53199. ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53200. HYBRID_BREAK();
  53201. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST):
  53202. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST)
  53203. ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53204. HYBRID_BREAK();
  53205. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ):
  53206. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ)
  53207. ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53208. HYBRID_BREAK();
  53209. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ):
  53210. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ)
  53211. ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53212. HYBRID_BREAK();
  53213. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST):
  53214. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST)
  53215. ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53216. HYBRID_BREAK();
  53217. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ):
  53218. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ)
  53219. ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53220. HYBRID_BREAK();
  53221. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ):
  53222. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ)
  53223. ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53224. HYBRID_BREAK();
  53225. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CONST):
  53226. VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CONST)
  53227. ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53228. HYBRID_BREAK();
  53229. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CONST):
  53230. VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CONST)
  53231. ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53232. HYBRID_BREAK();
  53233. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST):
  53234. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST)
  53235. ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53236. HYBRID_BREAK();
  53237. HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST):
  53238. VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST)
  53239. ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53240. HYBRID_BREAK();
  53241. HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_CONST):
  53242. VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_CONST)
  53243. ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53244. HYBRID_BREAK();
  53245. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST):
  53246. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST)
  53247. ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53248. HYBRID_BREAK();
  53249. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CONST):
  53250. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CONST)
  53251. ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53252. HYBRID_BREAK();
  53253. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CONST):
  53254. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CONST)
  53255. ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53256. HYBRID_BREAK();
  53257. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CONST):
  53258. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CONST)
  53259. ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53260. HYBRID_BREAK();
  53261. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST):
  53262. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST)
  53263. ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53264. HYBRID_BREAK();
  53265. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST):
  53266. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST)
  53267. ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53268. HYBRID_BREAK();
  53269. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST):
  53270. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST)
  53271. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53272. HYBRID_BREAK();
  53273. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST):
  53274. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST)
  53275. ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53276. HYBRID_BREAK();
  53277. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST):
  53278. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST)
  53279. ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53280. HYBRID_BREAK();
  53281. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST):
  53282. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST)
  53283. ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53284. HYBRID_BREAK();
  53285. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST):
  53286. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST)
  53287. ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53288. HYBRID_BREAK();
  53289. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST):
  53290. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST)
  53291. ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53292. HYBRID_BREAK();
  53293. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST):
  53294. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST)
  53295. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53296. HYBRID_BREAK();
  53297. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST):
  53298. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST)
  53299. ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53300. HYBRID_BREAK();
  53301. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST):
  53302. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST)
  53303. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53304. HYBRID_BREAK();
  53305. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP):
  53306. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP)
  53307. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53308. HYBRID_BREAK();
  53309. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR):
  53310. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR)
  53311. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53312. HYBRID_BREAK();
  53313. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV):
  53314. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV)
  53315. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53316. HYBRID_BREAK();
  53317. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST):
  53318. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST)
  53319. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53320. HYBRID_BREAK();
  53321. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP):
  53322. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP)
  53323. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53324. HYBRID_BREAK();
  53325. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR):
  53326. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR)
  53327. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53328. HYBRID_BREAK();
  53329. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV):
  53330. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV)
  53331. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53332. HYBRID_BREAK();
  53333. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED):
  53334. VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED)
  53335. ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53336. HYBRID_BREAK();
  53337. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED):
  53338. VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED)
  53339. ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53340. HYBRID_BREAK();
  53341. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR):
  53342. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR)
  53343. ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53344. HYBRID_BREAK();
  53345. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV):
  53346. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV)
  53347. ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53348. HYBRID_BREAK();
  53349. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CONST):
  53350. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CONST)
  53351. ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53352. HYBRID_BREAK();
  53353. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST):
  53354. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST)
  53355. ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53356. HYBRID_BREAK();
  53357. HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV_CONST):
  53358. VM_TRACE(ZEND_SEND_VAR_SPEC_CV_CONST)
  53359. ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53360. HYBRID_BREAK();
  53361. HYBRID_CASE(ZEND_SEND_REF_SPEC_CV_CONST):
  53362. VM_TRACE(ZEND_SEND_REF_SPEC_CV_CONST)
  53363. ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53364. HYBRID_BREAK();
  53365. HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_CONST):
  53366. VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_CONST)
  53367. ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53368. HYBRID_BREAK();
  53369. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST):
  53370. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST)
  53371. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53372. HYBRID_BREAK();
  53373. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CONST):
  53374. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CONST)
  53375. ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53376. HYBRID_BREAK();
  53377. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CONST):
  53378. VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CONST)
  53379. ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53380. HYBRID_BREAK();
  53381. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CONST):
  53382. VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CONST)
  53383. ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53384. HYBRID_BREAK();
  53385. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST):
  53386. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST)
  53387. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53388. HYBRID_BREAK();
  53389. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST):
  53390. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST)
  53391. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53392. HYBRID_BREAK();
  53393. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST):
  53394. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST)
  53395. ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53396. HYBRID_BREAK();
  53397. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_CONST):
  53398. VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_CONST)
  53399. ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53400. HYBRID_BREAK();
  53401. HYBRID_CASE(ZEND_YIELD_SPEC_CV_CONST):
  53402. VM_TRACE(ZEND_YIELD_SPEC_CV_CONST)
  53403. ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53404. HYBRID_BREAK();
  53405. HYBRID_CASE(ZEND_BIND_GLOBAL_SPEC_CV_CONST):
  53406. VM_TRACE(ZEND_BIND_GLOBAL_SPEC_CV_CONST)
  53407. ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53408. HYBRID_BREAK();
  53409. HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CV_CONST):
  53410. VM_TRACE(ZEND_IN_ARRAY_SPEC_CV_CONST)
  53411. ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53412. HYBRID_BREAK();
  53413. HYBRID_CASE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST):
  53414. VM_TRACE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST)
  53415. ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53416. HYBRID_BREAK();
  53417. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST):
  53418. VM_TRACE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST)
  53419. ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53420. HYBRID_BREAK();
  53421. HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST):
  53422. VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST)
  53423. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53424. HYBRID_BREAK();
  53425. HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV):
  53426. VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV)
  53427. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53428. HYBRID_BREAK();
  53429. HYBRID_CASE(ZEND_DIV_SPEC_CV_TMPVAR):
  53430. VM_TRACE(ZEND_DIV_SPEC_CV_TMPVAR)
  53431. ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53432. HYBRID_BREAK();
  53433. HYBRID_CASE(ZEND_POW_SPEC_CV_TMPVAR):
  53434. VM_TRACE(ZEND_POW_SPEC_CV_TMPVAR)
  53435. ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53436. HYBRID_BREAK();
  53437. HYBRID_CASE(ZEND_CONCAT_SPEC_CV_TMPVAR):
  53438. VM_TRACE(ZEND_CONCAT_SPEC_CV_TMPVAR)
  53439. ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53440. HYBRID_BREAK();
  53441. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR):
  53442. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR)
  53443. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53444. HYBRID_BREAK();
  53445. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ):
  53446. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ)
  53447. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53448. HYBRID_BREAK();
  53449. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ):
  53450. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
  53451. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53452. HYBRID_BREAK();
  53453. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR):
  53454. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR)
  53455. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53456. HYBRID_BREAK();
  53457. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ):
  53458. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ)
  53459. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53460. HYBRID_BREAK();
  53461. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ):
  53462. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
  53463. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53464. HYBRID_BREAK();
  53465. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_TMPVAR):
  53466. VM_TRACE(ZEND_SPACESHIP_SPEC_CV_TMPVAR)
  53467. ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53468. HYBRID_BREAK();
  53469. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR):
  53470. VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR)
  53471. ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53472. HYBRID_BREAK();
  53473. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR):
  53474. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR)
  53475. ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53476. HYBRID_BREAK();
  53477. HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR):
  53478. VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR)
  53479. ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53480. HYBRID_BREAK();
  53481. HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR):
  53482. VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR)
  53483. ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53484. HYBRID_BREAK();
  53485. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR):
  53486. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR)
  53487. ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53488. HYBRID_BREAK();
  53489. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR):
  53490. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR)
  53491. ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53492. HYBRID_BREAK();
  53493. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR):
  53494. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR)
  53495. ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53496. HYBRID_BREAK();
  53497. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR):
  53498. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR)
  53499. ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53500. HYBRID_BREAK();
  53501. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR):
  53502. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR)
  53503. ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53504. HYBRID_BREAK();
  53505. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR):
  53506. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR)
  53507. ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53508. HYBRID_BREAK();
  53509. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR):
  53510. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR)
  53511. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53512. HYBRID_BREAK();
  53513. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR):
  53514. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR)
  53515. ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53516. HYBRID_BREAK();
  53517. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR):
  53518. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR)
  53519. ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53520. HYBRID_BREAK();
  53521. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR):
  53522. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR)
  53523. ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53524. HYBRID_BREAK();
  53525. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR):
  53526. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR)
  53527. ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53528. HYBRID_BREAK();
  53529. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR):
  53530. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR)
  53531. ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53532. HYBRID_BREAK();
  53533. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR):
  53534. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR)
  53535. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53536. HYBRID_BREAK();
  53537. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR):
  53538. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR)
  53539. ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53540. HYBRID_BREAK();
  53541. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST):
  53542. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST)
  53543. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53544. HYBRID_BREAK();
  53545. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP):
  53546. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP)
  53547. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53548. HYBRID_BREAK();
  53549. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR):
  53550. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR)
  53551. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53552. HYBRID_BREAK();
  53553. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV):
  53554. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV)
  53555. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53556. HYBRID_BREAK();
  53557. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST):
  53558. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST)
  53559. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53560. HYBRID_BREAK();
  53561. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP):
  53562. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP)
  53563. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53564. HYBRID_BREAK();
  53565. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR):
  53566. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR)
  53567. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53568. HYBRID_BREAK();
  53569. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV):
  53570. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV)
  53571. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53572. HYBRID_BREAK();
  53573. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR):
  53574. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR)
  53575. ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53576. HYBRID_BREAK();
  53577. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV):
  53578. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV)
  53579. ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53580. HYBRID_BREAK();
  53581. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR):
  53582. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR)
  53583. ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53584. HYBRID_BREAK();
  53585. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR):
  53586. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR)
  53587. ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53588. HYBRID_BREAK();
  53589. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR):
  53590. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR)
  53591. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53592. HYBRID_BREAK();
  53593. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR):
  53594. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR)
  53595. ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53596. HYBRID_BREAK();
  53597. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR):
  53598. VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR)
  53599. ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53600. HYBRID_BREAK();
  53601. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR):
  53602. VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR)
  53603. ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53604. HYBRID_BREAK();
  53605. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR):
  53606. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR)
  53607. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53608. HYBRID_BREAK();
  53609. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR):
  53610. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR)
  53611. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53612. HYBRID_BREAK();
  53613. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR):
  53614. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR)
  53615. ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53616. HYBRID_BREAK();
  53617. HYBRID_CASE(ZEND_YIELD_SPEC_CV_TMPVAR):
  53618. VM_TRACE(ZEND_YIELD_SPEC_CV_TMPVAR)
  53619. ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53620. HYBRID_BREAK();
  53621. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_TMP):
  53622. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_TMP)
  53623. ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53624. HYBRID_BREAK();
  53625. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP):
  53626. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP)
  53627. ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53628. HYBRID_BREAK();
  53629. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED):
  53630. VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED)
  53631. ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53632. HYBRID_BREAK();
  53633. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED):
  53634. VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED)
  53635. ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53636. HYBRID_BREAK();
  53637. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_VAR):
  53638. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_VAR)
  53639. ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53640. HYBRID_BREAK();
  53641. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR):
  53642. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR)
  53643. ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53644. HYBRID_BREAK();
  53645. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED):
  53646. VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED)
  53647. ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53648. HYBRID_BREAK();
  53649. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED):
  53650. VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED)
  53651. ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53652. HYBRID_BREAK();
  53653. HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_VAR):
  53654. VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_VAR)
  53655. ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53656. HYBRID_BREAK();
  53657. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_VAR):
  53658. VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_VAR)
  53659. ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53660. HYBRID_BREAK();
  53661. HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED):
  53662. VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED)
  53663. ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53664. HYBRID_BREAK();
  53665. HYBRID_CASE(ZEND_FETCH_R_SPEC_CV_UNUSED):
  53666. VM_TRACE(ZEND_FETCH_R_SPEC_CV_UNUSED)
  53667. ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53668. HYBRID_BREAK();
  53669. HYBRID_CASE(ZEND_FETCH_W_SPEC_CV_UNUSED):
  53670. VM_TRACE(ZEND_FETCH_W_SPEC_CV_UNUSED)
  53671. ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53672. HYBRID_BREAK();
  53673. HYBRID_CASE(ZEND_FETCH_RW_SPEC_CV_UNUSED):
  53674. VM_TRACE(ZEND_FETCH_RW_SPEC_CV_UNUSED)
  53675. ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53676. HYBRID_BREAK();
  53677. HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED):
  53678. VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED)
  53679. ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53680. HYBRID_BREAK();
  53681. HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED):
  53682. VM_TRACE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED)
  53683. ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53684. HYBRID_BREAK();
  53685. HYBRID_CASE(ZEND_FETCH_IS_SPEC_CV_UNUSED):
  53686. VM_TRACE(ZEND_FETCH_IS_SPEC_CV_UNUSED)
  53687. ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53688. HYBRID_BREAK();
  53689. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED):
  53690. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED)
  53691. ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53692. HYBRID_BREAK();
  53693. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED):
  53694. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED)
  53695. ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53696. HYBRID_BREAK();
  53697. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED):
  53698. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED)
  53699. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53700. HYBRID_BREAK();
  53701. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST):
  53702. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST)
  53703. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53704. HYBRID_BREAK();
  53705. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP):
  53706. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP)
  53707. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53708. HYBRID_BREAK();
  53709. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR):
  53710. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR)
  53711. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53712. HYBRID_BREAK();
  53713. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV):
  53714. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV)
  53715. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53716. HYBRID_BREAK();
  53717. HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED):
  53718. VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED)
  53719. ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53720. HYBRID_BREAK();
  53721. HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV_UNUSED):
  53722. VM_TRACE(ZEND_SEND_VAR_SPEC_CV_UNUSED)
  53723. ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53724. HYBRID_BREAK();
  53725. HYBRID_CASE(ZEND_SEND_REF_SPEC_CV_UNUSED):
  53726. VM_TRACE(ZEND_SEND_REF_SPEC_CV_UNUSED)
  53727. ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53728. HYBRID_BREAK();
  53729. HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED):
  53730. VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED)
  53731. ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53732. HYBRID_BREAK();
  53733. HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK):
  53734. VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK)
  53735. ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53736. HYBRID_BREAK();
  53737. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED):
  53738. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED)
  53739. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53740. HYBRID_BREAK();
  53741. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED):
  53742. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED)
  53743. ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53744. HYBRID_BREAK();
  53745. HYBRID_CASE(ZEND_UNSET_CV_SPEC_CV_UNUSED):
  53746. VM_TRACE(ZEND_UNSET_CV_SPEC_CV_UNUSED)
  53747. ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53748. HYBRID_BREAK();
  53749. HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CV_UNUSED):
  53750. VM_TRACE(ZEND_UNSET_VAR_SPEC_CV_UNUSED)
  53751. ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53752. HYBRID_BREAK();
  53753. HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET):
  53754. VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET)
  53755. ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53756. HYBRID_BREAK();
  53757. HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY):
  53758. VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY)
  53759. ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53760. HYBRID_BREAK();
  53761. HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED):
  53762. VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED)
  53763. ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53764. HYBRID_BREAK();
  53765. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_UNUSED):
  53766. VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_UNUSED)
  53767. ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53768. HYBRID_BREAK();
  53769. HYBRID_CASE(ZEND_YIELD_SPEC_CV_UNUSED):
  53770. VM_TRACE(ZEND_YIELD_SPEC_CV_UNUSED)
  53771. ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53772. HYBRID_BREAK();
  53773. HYBRID_CASE(ZEND_BIND_STATIC_SPEC_CV_UNUSED):
  53774. VM_TRACE(ZEND_BIND_STATIC_SPEC_CV_UNUSED)
  53775. ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53776. HYBRID_BREAK();
  53777. HYBRID_CASE(ZEND_CHECK_VAR_SPEC_CV_UNUSED):
  53778. VM_TRACE(ZEND_CHECK_VAR_SPEC_CV_UNUSED)
  53779. ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53780. HYBRID_BREAK();
  53781. HYBRID_CASE(ZEND_MAKE_REF_SPEC_CV_UNUSED):
  53782. VM_TRACE(ZEND_MAKE_REF_SPEC_CV_UNUSED)
  53783. ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53784. HYBRID_BREAK();
  53785. HYBRID_CASE(ZEND_COUNT_SPEC_CV_UNUSED):
  53786. VM_TRACE(ZEND_COUNT_SPEC_CV_UNUSED)
  53787. ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53788. HYBRID_BREAK();
  53789. HYBRID_CASE(ZEND_GET_CLASS_SPEC_CV_UNUSED):
  53790. VM_TRACE(ZEND_GET_CLASS_SPEC_CV_UNUSED)
  53791. ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53792. HYBRID_BREAK();
  53793. HYBRID_CASE(ZEND_GET_TYPE_SPEC_CV_UNUSED):
  53794. VM_TRACE(ZEND_GET_TYPE_SPEC_CV_UNUSED)
  53795. ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53796. HYBRID_BREAK();
  53797. HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED):
  53798. VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED)
  53799. ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53800. HYBRID_BREAK();
  53801. HYBRID_CASE(ZEND_DIV_SPEC_CV_CV):
  53802. VM_TRACE(ZEND_DIV_SPEC_CV_CV)
  53803. ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53804. HYBRID_BREAK();
  53805. HYBRID_CASE(ZEND_POW_SPEC_CV_CV):
  53806. VM_TRACE(ZEND_POW_SPEC_CV_CV)
  53807. ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53808. HYBRID_BREAK();
  53809. HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CV):
  53810. VM_TRACE(ZEND_CONCAT_SPEC_CV_CV)
  53811. ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53812. HYBRID_BREAK();
  53813. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CV):
  53814. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CV)
  53815. ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53816. HYBRID_BREAK();
  53817. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV):
  53818. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV)
  53819. ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53820. HYBRID_BREAK();
  53821. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV):
  53822. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV)
  53823. ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53824. HYBRID_BREAK();
  53825. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ):
  53826. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ)
  53827. ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53828. HYBRID_BREAK();
  53829. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ):
  53830. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ)
  53831. ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53832. HYBRID_BREAK();
  53833. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV):
  53834. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV)
  53835. ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53836. HYBRID_BREAK();
  53837. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ):
  53838. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ)
  53839. ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53840. HYBRID_BREAK();
  53841. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ):
  53842. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ)
  53843. ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53844. HYBRID_BREAK();
  53845. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CV):
  53846. VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CV)
  53847. ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53848. HYBRID_BREAK();
  53849. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CV):
  53850. VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CV)
  53851. ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53852. HYBRID_BREAK();
  53853. HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV):
  53854. VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV)
  53855. ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53856. HYBRID_BREAK();
  53857. HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV):
  53858. VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV)
  53859. ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53860. HYBRID_BREAK();
  53861. HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_CV):
  53862. VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_CV)
  53863. ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53864. HYBRID_BREAK();
  53865. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CV):
  53866. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CV)
  53867. ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53868. HYBRID_BREAK();
  53869. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CV):
  53870. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CV)
  53871. ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53872. HYBRID_BREAK();
  53873. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CV):
  53874. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CV)
  53875. ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53876. HYBRID_BREAK();
  53877. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CV):
  53878. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CV)
  53879. ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53880. HYBRID_BREAK();
  53881. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CV):
  53882. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CV)
  53883. ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53884. HYBRID_BREAK();
  53885. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CV):
  53886. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CV)
  53887. ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53888. HYBRID_BREAK();
  53889. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV):
  53890. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV)
  53891. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53892. HYBRID_BREAK();
  53893. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV):
  53894. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV)
  53895. ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53896. HYBRID_BREAK();
  53897. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CV):
  53898. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CV)
  53899. ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53900. HYBRID_BREAK();
  53901. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CV):
  53902. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CV)
  53903. ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53904. HYBRID_BREAK();
  53905. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV):
  53906. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV)
  53907. ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53908. HYBRID_BREAK();
  53909. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV):
  53910. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV)
  53911. ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53912. HYBRID_BREAK();
  53913. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV):
  53914. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV)
  53915. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53916. HYBRID_BREAK();
  53917. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV):
  53918. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV)
  53919. ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53920. HYBRID_BREAK();
  53921. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST):
  53922. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST)
  53923. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53924. HYBRID_BREAK();
  53925. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP):
  53926. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP)
  53927. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53928. HYBRID_BREAK();
  53929. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR):
  53930. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR)
  53931. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53932. HYBRID_BREAK();
  53933. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV):
  53934. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV)
  53935. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53936. HYBRID_BREAK();
  53937. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST):
  53938. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST)
  53939. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53940. HYBRID_BREAK();
  53941. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP):
  53942. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP)
  53943. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53944. HYBRID_BREAK();
  53945. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR):
  53946. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR)
  53947. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53948. HYBRID_BREAK();
  53949. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV):
  53950. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV)
  53951. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53952. HYBRID_BREAK();
  53953. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED):
  53954. VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED)
  53955. ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53956. HYBRID_BREAK();
  53957. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED):
  53958. VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED)
  53959. ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53960. HYBRID_BREAK();
  53961. HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_CV):
  53962. VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_CV)
  53963. ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53964. HYBRID_BREAK();
  53965. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR):
  53966. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR)
  53967. ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53968. HYBRID_BREAK();
  53969. HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV):
  53970. VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV)
  53971. ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53972. HYBRID_BREAK();
  53973. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CV):
  53974. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CV)
  53975. ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53976. HYBRID_BREAK();
  53977. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV):
  53978. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV)
  53979. ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53980. HYBRID_BREAK();
  53981. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV):
  53982. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV)
  53983. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53984. HYBRID_BREAK();
  53985. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CV):
  53986. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CV)
  53987. ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53988. HYBRID_BREAK();
  53989. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CV):
  53990. VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CV)
  53991. ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53992. HYBRID_BREAK();
  53993. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CV):
  53994. VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CV)
  53995. ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53996. HYBRID_BREAK();
  53997. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV):
  53998. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV)
  53999. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54000. HYBRID_BREAK();
  54001. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV):
  54002. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV)
  54003. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54004. HYBRID_BREAK();
  54005. HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV):
  54006. VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV)
  54007. ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54008. HYBRID_BREAK();
  54009. HYBRID_CASE(ZEND_YIELD_SPEC_CV_CV):
  54010. VM_TRACE(ZEND_YIELD_SPEC_CV_CV)
  54011. ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54012. HYBRID_BREAK();
  54013. HYBRID_CASE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV):
  54014. VM_TRACE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV)
  54015. ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54016. HYBRID_BREAK();
  54017. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV):
  54018. VM_TRACE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV)
  54019. ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54020. HYBRID_BREAK();
  54021. HYBRID_CASE(HYBRID_HALT):
  54022. #ifdef ZEND_VM_FP_GLOBAL_REG
  54023. execute_data = vm_stack_data.orig_execute_data;
  54024. #endif
  54025. #ifdef ZEND_VM_IP_GLOBAL_REG
  54026. opline = vm_stack_data.orig_opline;
  54027. #endif
  54028. return;
  54029. HYBRID_DEFAULT:
  54030. VM_TRACE(ZEND_NULL)
  54031. ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  54032. HYBRID_BREAK(); /* Never reached */
  54033. #else
  54034. #ifdef ZEND_VM_FP_GLOBAL_REG
  54035. execute_data = vm_stack_data.orig_execute_data;
  54036. # ifdef ZEND_VM_IP_GLOBAL_REG
  54037. opline = vm_stack_data.orig_opline;
  54038. # endif
  54039. return;
  54040. #else
  54041. if (EXPECTED(ret > 0)) {
  54042. execute_data = EG(current_execute_data);
  54043. ZEND_VM_LOOP_INTERRUPT_CHECK();
  54044. } else {
  54045. # ifdef ZEND_VM_IP_GLOBAL_REG
  54046. opline = vm_stack_data.orig_opline;
  54047. # endif
  54048. return;
  54049. }
  54050. #endif
  54051. #endif
  54052. }
  54053. }
  54054. zend_error_noreturn(E_CORE_ERROR, "Arrived at end of main loop which shouldn't happen");
  54055. }
  54056. #if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__)
  54057. # pragma GCC pop_options
  54058. #endif
  54059. ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value)
  54060. {
  54061. zend_execute_data *execute_data;
  54062. void *object_or_called_scope;
  54063. uint32_t call_info;
  54064. if (EG(exception) != NULL) {
  54065. return;
  54066. }
  54067. object_or_called_scope = zend_get_this_object(EG(current_execute_data));
  54068. if (EXPECTED(!object_or_called_scope)) {
  54069. object_or_called_scope = zend_get_called_scope(EG(current_execute_data));
  54070. call_info = ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE;
  54071. } else {
  54072. call_info = ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE | ZEND_CALL_HAS_THIS;
  54073. }
  54074. execute_data = zend_vm_stack_push_call_frame(call_info,
  54075. (zend_function*)op_array, 0, object_or_called_scope);
  54076. if (EG(current_execute_data)) {
  54077. execute_data->symbol_table = zend_rebuild_symbol_table();
  54078. } else {
  54079. execute_data->symbol_table = &EG(symbol_table);
  54080. }
  54081. EX(prev_execute_data) = EG(current_execute_data);
  54082. i_init_code_execute_data(execute_data, op_array, return_value);
  54083. ZEND_OBSERVER_FCALL_BEGIN(execute_data);
  54084. zend_execute_ex(execute_data);
  54085. /* Observer end handlers are called from ZEND_RETURN */
  54086. zend_vm_stack_free_call_frame(execute_data);
  54087. }
  54088. void zend_vm_init(void)
  54089. {
  54090. static const void * const labels[] = {
  54091. ZEND_NOP_SPEC_HANDLER,
  54092. ZEND_ADD_SPEC_CONST_CONST_HANDLER,
  54093. ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
  54094. ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
  54095. ZEND_NULL_HANDLER,
  54096. ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
  54097. ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
  54098. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54099. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54100. ZEND_NULL_HANDLER,
  54101. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54102. ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
  54103. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54104. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54105. ZEND_NULL_HANDLER,
  54106. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54107. ZEND_NULL_HANDLER,
  54108. ZEND_NULL_HANDLER,
  54109. ZEND_NULL_HANDLER,
  54110. ZEND_NULL_HANDLER,
  54111. ZEND_NULL_HANDLER,
  54112. ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
  54113. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54114. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54115. ZEND_NULL_HANDLER,
  54116. ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54117. ZEND_SUB_SPEC_CONST_CONST_HANDLER,
  54118. ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
  54119. ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
  54120. ZEND_NULL_HANDLER,
  54121. ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
  54122. ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
  54123. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54124. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54125. ZEND_NULL_HANDLER,
  54126. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54127. ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
  54128. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54129. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54130. ZEND_NULL_HANDLER,
  54131. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54132. ZEND_NULL_HANDLER,
  54133. ZEND_NULL_HANDLER,
  54134. ZEND_NULL_HANDLER,
  54135. ZEND_NULL_HANDLER,
  54136. ZEND_NULL_HANDLER,
  54137. ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
  54138. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54139. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54140. ZEND_NULL_HANDLER,
  54141. ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54142. ZEND_MUL_SPEC_CONST_CONST_HANDLER,
  54143. ZEND_NULL_HANDLER,
  54144. ZEND_NULL_HANDLER,
  54145. ZEND_NULL_HANDLER,
  54146. ZEND_NULL_HANDLER,
  54147. ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
  54148. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54149. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54150. ZEND_NULL_HANDLER,
  54151. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54152. ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
  54153. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54154. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54155. ZEND_NULL_HANDLER,
  54156. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54157. ZEND_NULL_HANDLER,
  54158. ZEND_NULL_HANDLER,
  54159. ZEND_NULL_HANDLER,
  54160. ZEND_NULL_HANDLER,
  54161. ZEND_NULL_HANDLER,
  54162. ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
  54163. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54164. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54165. ZEND_NULL_HANDLER,
  54166. ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54167. ZEND_DIV_SPEC_CONST_CONST_HANDLER,
  54168. ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
  54169. ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
  54170. ZEND_NULL_HANDLER,
  54171. ZEND_DIV_SPEC_CONST_CV_HANDLER,
  54172. ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
  54173. ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
  54174. ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
  54175. ZEND_NULL_HANDLER,
  54176. ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
  54177. ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
  54178. ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
  54179. ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
  54180. ZEND_NULL_HANDLER,
  54181. ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
  54182. ZEND_NULL_HANDLER,
  54183. ZEND_NULL_HANDLER,
  54184. ZEND_NULL_HANDLER,
  54185. ZEND_NULL_HANDLER,
  54186. ZEND_NULL_HANDLER,
  54187. ZEND_DIV_SPEC_CV_CONST_HANDLER,
  54188. ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
  54189. ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
  54190. ZEND_NULL_HANDLER,
  54191. ZEND_DIV_SPEC_CV_CV_HANDLER,
  54192. ZEND_MOD_SPEC_CONST_CONST_HANDLER,
  54193. ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
  54194. ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
  54195. ZEND_NULL_HANDLER,
  54196. ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
  54197. ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
  54198. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54199. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54200. ZEND_NULL_HANDLER,
  54201. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54202. ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
  54203. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54204. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54205. ZEND_NULL_HANDLER,
  54206. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54207. ZEND_NULL_HANDLER,
  54208. ZEND_NULL_HANDLER,
  54209. ZEND_NULL_HANDLER,
  54210. ZEND_NULL_HANDLER,
  54211. ZEND_NULL_HANDLER,
  54212. ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
  54213. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54214. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54215. ZEND_NULL_HANDLER,
  54216. ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54217. ZEND_SL_SPEC_CONST_CONST_HANDLER,
  54218. ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
  54219. ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
  54220. ZEND_NULL_HANDLER,
  54221. ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
  54222. ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
  54223. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54224. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54225. ZEND_NULL_HANDLER,
  54226. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54227. ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
  54228. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54229. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54230. ZEND_NULL_HANDLER,
  54231. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54232. ZEND_NULL_HANDLER,
  54233. ZEND_NULL_HANDLER,
  54234. ZEND_NULL_HANDLER,
  54235. ZEND_NULL_HANDLER,
  54236. ZEND_NULL_HANDLER,
  54237. ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
  54238. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54239. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54240. ZEND_NULL_HANDLER,
  54241. ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54242. ZEND_SR_SPEC_CONST_CONST_HANDLER,
  54243. ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
  54244. ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
  54245. ZEND_NULL_HANDLER,
  54246. ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
  54247. ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
  54248. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54249. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54250. ZEND_NULL_HANDLER,
  54251. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54252. ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
  54253. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54254. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54255. ZEND_NULL_HANDLER,
  54256. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54257. ZEND_NULL_HANDLER,
  54258. ZEND_NULL_HANDLER,
  54259. ZEND_NULL_HANDLER,
  54260. ZEND_NULL_HANDLER,
  54261. ZEND_NULL_HANDLER,
  54262. ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
  54263. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54264. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54265. ZEND_NULL_HANDLER,
  54266. ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54267. ZEND_NULL_HANDLER,
  54268. ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
  54269. ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
  54270. ZEND_NULL_HANDLER,
  54271. ZEND_CONCAT_SPEC_CONST_CV_HANDLER,
  54272. ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
  54273. ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  54274. ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  54275. ZEND_NULL_HANDLER,
  54276. ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
  54277. ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
  54278. ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  54279. ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  54280. ZEND_NULL_HANDLER,
  54281. ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
  54282. ZEND_NULL_HANDLER,
  54283. ZEND_NULL_HANDLER,
  54284. ZEND_NULL_HANDLER,
  54285. ZEND_NULL_HANDLER,
  54286. ZEND_NULL_HANDLER,
  54287. ZEND_CONCAT_SPEC_CV_CONST_HANDLER,
  54288. ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
  54289. ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
  54290. ZEND_NULL_HANDLER,
  54291. ZEND_CONCAT_SPEC_CV_CV_HANDLER,
  54292. ZEND_BW_OR_SPEC_CONST_CONST_HANDLER,
  54293. ZEND_NULL_HANDLER,
  54294. ZEND_NULL_HANDLER,
  54295. ZEND_NULL_HANDLER,
  54296. ZEND_NULL_HANDLER,
  54297. ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
  54298. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54299. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54300. ZEND_NULL_HANDLER,
  54301. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54302. ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
  54303. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54304. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54305. ZEND_NULL_HANDLER,
  54306. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54307. ZEND_NULL_HANDLER,
  54308. ZEND_NULL_HANDLER,
  54309. ZEND_NULL_HANDLER,
  54310. ZEND_NULL_HANDLER,
  54311. ZEND_NULL_HANDLER,
  54312. ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
  54313. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54314. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54315. ZEND_NULL_HANDLER,
  54316. ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54317. ZEND_BW_AND_SPEC_CONST_CONST_HANDLER,
  54318. ZEND_NULL_HANDLER,
  54319. ZEND_NULL_HANDLER,
  54320. ZEND_NULL_HANDLER,
  54321. ZEND_NULL_HANDLER,
  54322. ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
  54323. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54324. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54325. ZEND_NULL_HANDLER,
  54326. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54327. ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
  54328. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54329. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54330. ZEND_NULL_HANDLER,
  54331. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54332. ZEND_NULL_HANDLER,
  54333. ZEND_NULL_HANDLER,
  54334. ZEND_NULL_HANDLER,
  54335. ZEND_NULL_HANDLER,
  54336. ZEND_NULL_HANDLER,
  54337. ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
  54338. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54339. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54340. ZEND_NULL_HANDLER,
  54341. ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54342. ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER,
  54343. ZEND_NULL_HANDLER,
  54344. ZEND_NULL_HANDLER,
  54345. ZEND_NULL_HANDLER,
  54346. ZEND_NULL_HANDLER,
  54347. ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
  54348. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54349. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54350. ZEND_NULL_HANDLER,
  54351. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54352. ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
  54353. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54354. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54355. ZEND_NULL_HANDLER,
  54356. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54357. ZEND_NULL_HANDLER,
  54358. ZEND_NULL_HANDLER,
  54359. ZEND_NULL_HANDLER,
  54360. ZEND_NULL_HANDLER,
  54361. ZEND_NULL_HANDLER,
  54362. ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
  54363. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54364. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54365. ZEND_NULL_HANDLER,
  54366. ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54367. ZEND_POW_SPEC_CONST_CONST_HANDLER,
  54368. ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
  54369. ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
  54370. ZEND_NULL_HANDLER,
  54371. ZEND_POW_SPEC_CONST_CV_HANDLER,
  54372. ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
  54373. ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
  54374. ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
  54375. ZEND_NULL_HANDLER,
  54376. ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
  54377. ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
  54378. ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
  54379. ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
  54380. ZEND_NULL_HANDLER,
  54381. ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
  54382. ZEND_NULL_HANDLER,
  54383. ZEND_NULL_HANDLER,
  54384. ZEND_NULL_HANDLER,
  54385. ZEND_NULL_HANDLER,
  54386. ZEND_NULL_HANDLER,
  54387. ZEND_POW_SPEC_CV_CONST_HANDLER,
  54388. ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
  54389. ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
  54390. ZEND_NULL_HANDLER,
  54391. ZEND_POW_SPEC_CV_CV_HANDLER,
  54392. ZEND_BW_NOT_SPEC_CONST_HANDLER,
  54393. ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
  54394. ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
  54395. ZEND_NULL_HANDLER,
  54396. ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
  54397. ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
  54398. ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
  54399. ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
  54400. ZEND_NULL_HANDLER,
  54401. ZEND_BOOL_NOT_SPEC_CV_HANDLER,
  54402. ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER,
  54403. ZEND_NULL_HANDLER,
  54404. ZEND_NULL_HANDLER,
  54405. ZEND_NULL_HANDLER,
  54406. ZEND_NULL_HANDLER,
  54407. ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
  54408. ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54409. ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54410. ZEND_NULL_HANDLER,
  54411. ZEND_NULL_HANDLER,
  54412. ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
  54413. ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54414. ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54415. ZEND_NULL_HANDLER,
  54416. ZEND_NULL_HANDLER,
  54417. ZEND_NULL_HANDLER,
  54418. ZEND_NULL_HANDLER,
  54419. ZEND_NULL_HANDLER,
  54420. ZEND_NULL_HANDLER,
  54421. ZEND_NULL_HANDLER,
  54422. ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER,
  54423. ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
  54424. ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
  54425. ZEND_NULL_HANDLER,
  54426. ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER,
  54427. ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER,
  54428. ZEND_NULL_HANDLER,
  54429. ZEND_NULL_HANDLER,
  54430. ZEND_NULL_HANDLER,
  54431. ZEND_NULL_HANDLER,
  54432. ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER,
  54433. ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER,
  54434. ZEND_NULL_HANDLER,
  54435. ZEND_NULL_HANDLER,
  54436. ZEND_NULL_HANDLER,
  54437. ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER,
  54438. ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER,
  54439. ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER,
  54440. ZEND_NULL_HANDLER,
  54441. ZEND_NULL_HANDLER,
  54442. ZEND_NULL_HANDLER,
  54443. ZEND_NULL_HANDLER,
  54444. ZEND_NULL_HANDLER,
  54445. ZEND_NULL_HANDLER,
  54446. ZEND_NULL_HANDLER,
  54447. ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER,
  54448. ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER,
  54449. ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER,
  54450. ZEND_NULL_HANDLER,
  54451. ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER,
  54452. ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER,
  54453. ZEND_NULL_HANDLER,
  54454. ZEND_NULL_HANDLER,
  54455. ZEND_NULL_HANDLER,
  54456. ZEND_NULL_HANDLER,
  54457. ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER,
  54458. ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER,
  54459. ZEND_NULL_HANDLER,
  54460. ZEND_NULL_HANDLER,
  54461. ZEND_NULL_HANDLER,
  54462. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER,
  54463. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER,
  54464. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER,
  54465. ZEND_NULL_HANDLER,
  54466. ZEND_NULL_HANDLER,
  54467. ZEND_NULL_HANDLER,
  54468. ZEND_NULL_HANDLER,
  54469. ZEND_NULL_HANDLER,
  54470. ZEND_NULL_HANDLER,
  54471. ZEND_NULL_HANDLER,
  54472. ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER,
  54473. ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER,
  54474. ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER,
  54475. ZEND_NULL_HANDLER,
  54476. ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER,
  54477. ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
  54478. ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
  54479. ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
  54480. ZEND_NULL_HANDLER,
  54481. ZEND_NULL_HANDLER,
  54482. ZEND_NULL_HANDLER,
  54483. ZEND_NULL_HANDLER,
  54484. ZEND_NULL_HANDLER,
  54485. ZEND_NULL_HANDLER,
  54486. ZEND_NULL_HANDLER,
  54487. ZEND_NULL_HANDLER,
  54488. ZEND_NULL_HANDLER,
  54489. ZEND_NULL_HANDLER,
  54490. ZEND_NULL_HANDLER,
  54491. ZEND_NULL_HANDLER,
  54492. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
  54493. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
  54494. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
  54495. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54496. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
  54497. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
  54498. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54499. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
  54500. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
  54501. ZEND_NULL_HANDLER,
  54502. ZEND_NULL_HANDLER,
  54503. ZEND_NULL_HANDLER,
  54504. ZEND_NULL_HANDLER,
  54505. ZEND_NULL_HANDLER,
  54506. ZEND_NULL_HANDLER,
  54507. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
  54508. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
  54509. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
  54510. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54511. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
  54512. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
  54513. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54514. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
  54515. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
  54516. ZEND_NULL_HANDLER,
  54517. ZEND_NULL_HANDLER,
  54518. ZEND_NULL_HANDLER,
  54519. ZEND_NULL_HANDLER,
  54520. ZEND_NULL_HANDLER,
  54521. ZEND_NULL_HANDLER,
  54522. ZEND_NULL_HANDLER,
  54523. ZEND_NULL_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_NULL_HANDLER,
  54531. ZEND_NULL_HANDLER,
  54532. ZEND_NULL_HANDLER,
  54533. ZEND_NULL_HANDLER,
  54534. ZEND_NULL_HANDLER,
  54535. ZEND_NULL_HANDLER,
  54536. ZEND_NULL_HANDLER,
  54537. ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER,
  54538. ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER,
  54539. ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER,
  54540. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
  54541. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
  54542. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
  54543. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
  54544. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
  54545. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
  54546. ZEND_NULL_HANDLER,
  54547. ZEND_NULL_HANDLER,
  54548. ZEND_NULL_HANDLER,
  54549. ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER,
  54550. ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER,
  54551. ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER,
  54552. ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
  54553. ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
  54554. ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
  54555. ZEND_NULL_HANDLER,
  54556. ZEND_NULL_HANDLER,
  54557. ZEND_NULL_HANDLER,
  54558. ZEND_NULL_HANDLER,
  54559. ZEND_NULL_HANDLER,
  54560. ZEND_NULL_HANDLER,
  54561. ZEND_NULL_HANDLER,
  54562. ZEND_NULL_HANDLER,
  54563. ZEND_NULL_HANDLER,
  54564. ZEND_NULL_HANDLER,
  54565. ZEND_NULL_HANDLER,
  54566. ZEND_NULL_HANDLER,
  54567. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
  54568. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
  54569. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
  54570. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54571. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
  54572. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
  54573. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54574. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
  54575. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
  54576. ZEND_NULL_HANDLER,
  54577. ZEND_NULL_HANDLER,
  54578. ZEND_NULL_HANDLER,
  54579. ZEND_NULL_HANDLER,
  54580. ZEND_NULL_HANDLER,
  54581. ZEND_NULL_HANDLER,
  54582. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
  54583. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
  54584. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
  54585. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54586. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
  54587. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
  54588. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54589. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
  54590. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
  54591. ZEND_NULL_HANDLER,
  54592. ZEND_NULL_HANDLER,
  54593. ZEND_NULL_HANDLER,
  54594. ZEND_NULL_HANDLER,
  54595. ZEND_NULL_HANDLER,
  54596. ZEND_NULL_HANDLER,
  54597. ZEND_NULL_HANDLER,
  54598. ZEND_NULL_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_NULL_HANDLER,
  54606. ZEND_NULL_HANDLER,
  54607. ZEND_NULL_HANDLER,
  54608. ZEND_NULL_HANDLER,
  54609. ZEND_NULL_HANDLER,
  54610. ZEND_NULL_HANDLER,
  54611. ZEND_NULL_HANDLER,
  54612. ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER,
  54613. ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER,
  54614. ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER,
  54615. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
  54616. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
  54617. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
  54618. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
  54619. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
  54620. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
  54621. ZEND_NULL_HANDLER,
  54622. ZEND_NULL_HANDLER,
  54623. ZEND_NULL_HANDLER,
  54624. ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER,
  54625. ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER,
  54626. ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER,
  54627. ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
  54628. ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
  54629. ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
  54630. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
  54631. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  54632. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  54633. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
  54634. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  54635. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  54636. ZEND_NULL_HANDLER,
  54637. ZEND_NULL_HANDLER,
  54638. ZEND_NULL_HANDLER,
  54639. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
  54640. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  54641. ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  54642. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
  54643. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  54644. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  54645. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54646. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54647. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54648. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54649. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54650. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54651. ZEND_NULL_HANDLER,
  54652. ZEND_NULL_HANDLER,
  54653. ZEND_NULL_HANDLER,
  54654. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54655. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54656. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54657. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
  54658. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  54659. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  54660. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54661. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54662. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54663. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54664. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54665. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54666. ZEND_NULL_HANDLER,
  54667. ZEND_NULL_HANDLER,
  54668. ZEND_NULL_HANDLER,
  54669. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54670. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54671. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54672. ZEND_NULL_HANDLER,
  54673. ZEND_NULL_HANDLER,
  54674. ZEND_NULL_HANDLER,
  54675. ZEND_NULL_HANDLER,
  54676. ZEND_NULL_HANDLER,
  54677. ZEND_NULL_HANDLER,
  54678. ZEND_NULL_HANDLER,
  54679. ZEND_NULL_HANDLER,
  54680. ZEND_NULL_HANDLER,
  54681. ZEND_NULL_HANDLER,
  54682. ZEND_NULL_HANDLER,
  54683. ZEND_NULL_HANDLER,
  54684. ZEND_NULL_HANDLER,
  54685. ZEND_NULL_HANDLER,
  54686. ZEND_NULL_HANDLER,
  54687. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
  54688. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  54689. ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  54690. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54691. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54692. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54693. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54694. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54695. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54696. ZEND_NULL_HANDLER,
  54697. ZEND_NULL_HANDLER,
  54698. ZEND_NULL_HANDLER,
  54699. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54700. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54701. ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54702. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
  54703. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
  54704. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
  54705. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
  54706. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  54707. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  54708. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
  54709. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  54710. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  54711. ZEND_NULL_HANDLER,
  54712. ZEND_NULL_HANDLER,
  54713. ZEND_NULL_HANDLER,
  54714. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
  54715. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  54716. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  54717. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
  54718. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  54719. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  54720. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54721. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54722. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54723. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54724. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54725. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54726. ZEND_NULL_HANDLER,
  54727. ZEND_NULL_HANDLER,
  54728. ZEND_NULL_HANDLER,
  54729. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54730. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54731. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54732. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
  54733. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  54734. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  54735. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54736. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54737. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54738. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54739. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54740. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54741. ZEND_NULL_HANDLER,
  54742. ZEND_NULL_HANDLER,
  54743. ZEND_NULL_HANDLER,
  54744. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54745. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54746. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54747. ZEND_NULL_HANDLER,
  54748. ZEND_NULL_HANDLER,
  54749. ZEND_NULL_HANDLER,
  54750. ZEND_NULL_HANDLER,
  54751. ZEND_NULL_HANDLER,
  54752. ZEND_NULL_HANDLER,
  54753. ZEND_NULL_HANDLER,
  54754. ZEND_NULL_HANDLER,
  54755. ZEND_NULL_HANDLER,
  54756. ZEND_NULL_HANDLER,
  54757. ZEND_NULL_HANDLER,
  54758. ZEND_NULL_HANDLER,
  54759. ZEND_NULL_HANDLER,
  54760. ZEND_NULL_HANDLER,
  54761. ZEND_NULL_HANDLER,
  54762. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
  54763. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  54764. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  54765. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54766. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54767. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54768. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54769. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54770. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  54771. ZEND_NULL_HANDLER,
  54772. ZEND_NULL_HANDLER,
  54773. ZEND_NULL_HANDLER,
  54774. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  54775. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  54776. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_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_NULL_HANDLER,
  54786. ZEND_NULL_HANDLER,
  54787. ZEND_NULL_HANDLER,
  54788. ZEND_NULL_HANDLER,
  54789. ZEND_NULL_HANDLER,
  54790. ZEND_NULL_HANDLER,
  54791. ZEND_NULL_HANDLER,
  54792. ZEND_NULL_HANDLER,
  54793. ZEND_NULL_HANDLER,
  54794. ZEND_NULL_HANDLER,
  54795. ZEND_NULL_HANDLER,
  54796. ZEND_NULL_HANDLER,
  54797. ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER,
  54798. ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER,
  54799. ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER,
  54800. ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER,
  54801. ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER,
  54802. ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER,
  54803. ZEND_NULL_HANDLER,
  54804. ZEND_NULL_HANDLER,
  54805. ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
  54806. ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_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_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER,
  54818. ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER,
  54819. ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER,
  54820. ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER,
  54821. ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER,
  54822. ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER,
  54823. ZEND_NULL_HANDLER,
  54824. ZEND_NULL_HANDLER,
  54825. ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER,
  54826. ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER,
  54827. ZEND_NULL_HANDLER,
  54828. ZEND_NULL_HANDLER,
  54829. ZEND_NULL_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_NULL_HANDLER,
  54841. ZEND_NULL_HANDLER,
  54842. ZEND_NULL_HANDLER,
  54843. ZEND_NULL_HANDLER,
  54844. ZEND_NULL_HANDLER,
  54845. ZEND_NULL_HANDLER,
  54846. ZEND_NULL_HANDLER,
  54847. ZEND_NULL_HANDLER,
  54848. ZEND_NULL_HANDLER,
  54849. ZEND_NULL_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_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
  54878. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
  54879. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
  54880. ZEND_NULL_HANDLER,
  54881. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
  54882. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
  54883. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
  54884. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
  54885. ZEND_NULL_HANDLER,
  54886. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
  54887. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
  54888. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
  54889. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
  54890. ZEND_NULL_HANDLER,
  54891. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
  54892. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER,
  54893. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER,
  54894. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER,
  54895. ZEND_NULL_HANDLER,
  54896. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER,
  54897. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
  54898. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
  54899. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
  54900. ZEND_NULL_HANDLER,
  54901. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
  54902. ZEND_NULL_HANDLER,
  54903. ZEND_NULL_HANDLER,
  54904. ZEND_NULL_HANDLER,
  54905. ZEND_NULL_HANDLER,
  54906. ZEND_NULL_HANDLER,
  54907. ZEND_NULL_HANDLER,
  54908. ZEND_NULL_HANDLER,
  54909. ZEND_NULL_HANDLER,
  54910. ZEND_NULL_HANDLER,
  54911. ZEND_NULL_HANDLER,
  54912. ZEND_NULL_HANDLER,
  54913. ZEND_NULL_HANDLER,
  54914. ZEND_NULL_HANDLER,
  54915. ZEND_NULL_HANDLER,
  54916. ZEND_NULL_HANDLER,
  54917. ZEND_NULL_HANDLER,
  54918. ZEND_NULL_HANDLER,
  54919. ZEND_NULL_HANDLER,
  54920. ZEND_NULL_HANDLER,
  54921. ZEND_NULL_HANDLER,
  54922. ZEND_NULL_HANDLER,
  54923. ZEND_NULL_HANDLER,
  54924. ZEND_NULL_HANDLER,
  54925. ZEND_NULL_HANDLER,
  54926. ZEND_NULL_HANDLER,
  54927. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
  54928. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
  54929. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
  54930. ZEND_NULL_HANDLER,
  54931. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
  54932. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
  54933. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
  54934. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
  54935. ZEND_NULL_HANDLER,
  54936. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
  54937. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
  54938. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
  54939. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
  54940. ZEND_NULL_HANDLER,
  54941. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
  54942. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER,
  54943. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER,
  54944. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER,
  54945. ZEND_NULL_HANDLER,
  54946. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER,
  54947. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
  54948. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
  54949. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
  54950. ZEND_NULL_HANDLER,
  54951. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER,
  54952. ZEND_NULL_HANDLER,
  54953. ZEND_NULL_HANDLER,
  54954. ZEND_NULL_HANDLER,
  54955. ZEND_NULL_HANDLER,
  54956. ZEND_NULL_HANDLER,
  54957. ZEND_NULL_HANDLER,
  54958. ZEND_NULL_HANDLER,
  54959. ZEND_NULL_HANDLER,
  54960. ZEND_NULL_HANDLER,
  54961. ZEND_NULL_HANDLER,
  54962. ZEND_NULL_HANDLER,
  54963. ZEND_NULL_HANDLER,
  54964. ZEND_NULL_HANDLER,
  54965. ZEND_NULL_HANDLER,
  54966. ZEND_NULL_HANDLER,
  54967. ZEND_NULL_HANDLER,
  54968. ZEND_NULL_HANDLER,
  54969. ZEND_NULL_HANDLER,
  54970. ZEND_NULL_HANDLER,
  54971. ZEND_NULL_HANDLER,
  54972. ZEND_NULL_HANDLER,
  54973. ZEND_NULL_HANDLER,
  54974. ZEND_NULL_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_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
  55003. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
  55004. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
  55005. ZEND_NULL_HANDLER,
  55006. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
  55007. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
  55008. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
  55009. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
  55010. ZEND_NULL_HANDLER,
  55011. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
  55012. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
  55013. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
  55014. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
  55015. ZEND_NULL_HANDLER,
  55016. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
  55017. ZEND_NULL_HANDLER,
  55018. ZEND_NULL_HANDLER,
  55019. ZEND_NULL_HANDLER,
  55020. ZEND_NULL_HANDLER,
  55021. ZEND_NULL_HANDLER,
  55022. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
  55023. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
  55024. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
  55025. ZEND_NULL_HANDLER,
  55026. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
  55027. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER,
  55028. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER,
  55029. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
  55030. ZEND_NULL_HANDLER,
  55031. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
  55032. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
  55033. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
  55034. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
  55035. ZEND_NULL_HANDLER,
  55036. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
  55037. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
  55038. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
  55039. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
  55040. ZEND_NULL_HANDLER,
  55041. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
  55042. ZEND_NULL_HANDLER,
  55043. ZEND_NULL_HANDLER,
  55044. ZEND_NULL_HANDLER,
  55045. ZEND_NULL_HANDLER,
  55046. ZEND_NULL_HANDLER,
  55047. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER,
  55048. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER,
  55049. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
  55050. ZEND_NULL_HANDLER,
  55051. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
  55052. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
  55053. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
  55054. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
  55055. ZEND_NULL_HANDLER,
  55056. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
  55057. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
  55058. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
  55059. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
  55060. ZEND_NULL_HANDLER,
  55061. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
  55062. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
  55063. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
  55064. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
  55065. ZEND_NULL_HANDLER,
  55066. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
  55067. ZEND_NULL_HANDLER,
  55068. ZEND_NULL_HANDLER,
  55069. ZEND_NULL_HANDLER,
  55070. ZEND_NULL_HANDLER,
  55071. ZEND_NULL_HANDLER,
  55072. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
  55073. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
  55074. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
  55075. ZEND_NULL_HANDLER,
  55076. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER,
  55077. ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER,
  55078. ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER,
  55079. ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER,
  55080. ZEND_NULL_HANDLER,
  55081. ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER,
  55082. ZEND_NULL_HANDLER,
  55083. ZEND_NULL_HANDLER,
  55084. ZEND_NULL_HANDLER,
  55085. ZEND_NULL_HANDLER,
  55086. ZEND_NULL_HANDLER,
  55087. ZEND_NULL_HANDLER,
  55088. ZEND_NULL_HANDLER,
  55089. ZEND_NULL_HANDLER,
  55090. ZEND_NULL_HANDLER,
  55091. ZEND_NULL_HANDLER,
  55092. ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER,
  55093. ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER,
  55094. ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER,
  55095. ZEND_NULL_HANDLER,
  55096. ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER,
  55097. ZEND_NULL_HANDLER,
  55098. ZEND_NULL_HANDLER,
  55099. ZEND_NULL_HANDLER,
  55100. ZEND_NULL_HANDLER,
  55101. ZEND_NULL_HANDLER,
  55102. ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER,
  55103. ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER,
  55104. ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER,
  55105. ZEND_NULL_HANDLER,
  55106. ZEND_ASSIGN_OP_SPEC_CV_CV_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_NULL_HANDLER,
  55116. ZEND_NULL_HANDLER,
  55117. ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER,
  55118. ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER,
  55119. ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER,
  55120. ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER,
  55121. ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER,
  55122. ZEND_NULL_HANDLER,
  55123. ZEND_NULL_HANDLER,
  55124. ZEND_NULL_HANDLER,
  55125. ZEND_NULL_HANDLER,
  55126. ZEND_NULL_HANDLER,
  55127. ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER,
  55128. ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER,
  55129. ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER,
  55130. ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER,
  55131. ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_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_NULL_HANDLER,
  55141. ZEND_NULL_HANDLER,
  55142. ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER,
  55143. ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
  55144. ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
  55145. ZEND_NULL_HANDLER,
  55146. ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER,
  55147. ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER,
  55148. ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
  55149. ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
  55150. ZEND_NULL_HANDLER,
  55151. ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER,
  55152. ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER,
  55153. ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER,
  55154. ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER,
  55155. ZEND_NULL_HANDLER,
  55156. ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER,
  55157. ZEND_ASSIGN_STATIC_PROP_OP_SPEC_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_NULL_HANDLER,
  55166. ZEND_NULL_HANDLER,
  55167. ZEND_NULL_HANDLER,
  55168. ZEND_NULL_HANDLER,
  55169. ZEND_NULL_HANDLER,
  55170. ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER,
  55171. ZEND_NULL_HANDLER,
  55172. ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER,
  55173. ZEND_NULL_HANDLER,
  55174. ZEND_NULL_HANDLER,
  55175. ZEND_NULL_HANDLER,
  55176. ZEND_NULL_HANDLER,
  55177. ZEND_NULL_HANDLER,
  55178. ZEND_NULL_HANDLER,
  55179. ZEND_NULL_HANDLER,
  55180. ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER,
  55181. ZEND_NULL_HANDLER,
  55182. ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER,
  55183. ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
  55184. ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
  55185. ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
  55186. ZEND_NULL_HANDLER,
  55187. ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
  55188. ZEND_NULL_HANDLER,
  55189. ZEND_NULL_HANDLER,
  55190. ZEND_NULL_HANDLER,
  55191. ZEND_NULL_HANDLER,
  55192. ZEND_NULL_HANDLER,
  55193. ZEND_NULL_HANDLER,
  55194. ZEND_NULL_HANDLER,
  55195. ZEND_NULL_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_NULL_HANDLER,
  55204. ZEND_NULL_HANDLER,
  55205. ZEND_NULL_HANDLER,
  55206. ZEND_NULL_HANDLER,
  55207. ZEND_NULL_HANDLER,
  55208. ZEND_NULL_HANDLER,
  55209. ZEND_NULL_HANDLER,
  55210. ZEND_NULL_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_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
  55241. ZEND_NULL_HANDLER,
  55242. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
  55243. ZEND_NULL_HANDLER,
  55244. ZEND_NULL_HANDLER,
  55245. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
  55246. ZEND_NULL_HANDLER,
  55247. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
  55248. ZEND_NULL_HANDLER,
  55249. ZEND_NULL_HANDLER,
  55250. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
  55251. ZEND_NULL_HANDLER,
  55252. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_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_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
  55261. ZEND_NULL_HANDLER,
  55262. ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
  55263. ZEND_NULL_HANDLER,
  55264. ZEND_NULL_HANDLER,
  55265. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
  55266. ZEND_NULL_HANDLER,
  55267. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
  55268. ZEND_NULL_HANDLER,
  55269. ZEND_NULL_HANDLER,
  55270. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
  55271. ZEND_NULL_HANDLER,
  55272. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
  55273. ZEND_NULL_HANDLER,
  55274. ZEND_NULL_HANDLER,
  55275. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
  55276. ZEND_NULL_HANDLER,
  55277. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
  55278. ZEND_NULL_HANDLER,
  55279. ZEND_NULL_HANDLER,
  55280. ZEND_NULL_HANDLER,
  55281. ZEND_NULL_HANDLER,
  55282. ZEND_NULL_HANDLER,
  55283. ZEND_NULL_HANDLER,
  55284. ZEND_NULL_HANDLER,
  55285. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
  55286. ZEND_NULL_HANDLER,
  55287. ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
  55288. ZEND_NULL_HANDLER,
  55289. ZEND_NULL_HANDLER,
  55290. ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
  55291. ZEND_NULL_HANDLER,
  55292. ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
  55293. ZEND_NULL_HANDLER,
  55294. ZEND_NULL_HANDLER,
  55295. ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
  55296. ZEND_NULL_HANDLER,
  55297. ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
  55298. ZEND_NULL_HANDLER,
  55299. ZEND_NULL_HANDLER,
  55300. ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
  55301. ZEND_NULL_HANDLER,
  55302. ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
  55303. ZEND_NULL_HANDLER,
  55304. ZEND_NULL_HANDLER,
  55305. ZEND_NULL_HANDLER,
  55306. ZEND_NULL_HANDLER,
  55307. ZEND_NULL_HANDLER,
  55308. ZEND_NULL_HANDLER,
  55309. ZEND_NULL_HANDLER,
  55310. ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
  55311. ZEND_NULL_HANDLER,
  55312. ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER,
  55313. ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER,
  55314. ZEND_NULL_HANDLER,
  55315. ZEND_NULL_HANDLER,
  55316. ZEND_NULL_HANDLER,
  55317. ZEND_NULL_HANDLER,
  55318. ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
  55319. ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER,
  55320. ZEND_NULL_HANDLER,
  55321. ZEND_NULL_HANDLER,
  55322. ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER,
  55323. ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER,
  55324. ZEND_NULL_HANDLER,
  55325. ZEND_NULL_HANDLER,
  55326. ZEND_NULL_HANDLER,
  55327. ZEND_NULL_HANDLER,
  55328. ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
  55329. ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER,
  55330. ZEND_NULL_HANDLER,
  55331. ZEND_NULL_HANDLER,
  55332. ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER,
  55333. ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER,
  55334. ZEND_NULL_HANDLER,
  55335. ZEND_NULL_HANDLER,
  55336. ZEND_POST_INC_SPEC_VAR_HANDLER,
  55337. ZEND_NULL_HANDLER,
  55338. ZEND_POST_INC_SPEC_CV_HANDLER,
  55339. ZEND_NULL_HANDLER,
  55340. ZEND_NULL_HANDLER,
  55341. ZEND_POST_DEC_SPEC_VAR_HANDLER,
  55342. ZEND_NULL_HANDLER,
  55343. ZEND_POST_DEC_SPEC_CV_HANDLER,
  55344. ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER,
  55345. ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER,
  55346. ZEND_JMP_SPEC_HANDLER,
  55347. ZEND_JMPZ_SPEC_CONST_HANDLER,
  55348. ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
  55349. ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
  55350. ZEND_NULL_HANDLER,
  55351. ZEND_JMPZ_SPEC_CV_HANDLER,
  55352. ZEND_JMPNZ_SPEC_CONST_HANDLER,
  55353. ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
  55354. ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
  55355. ZEND_NULL_HANDLER,
  55356. ZEND_JMPNZ_SPEC_CV_HANDLER,
  55357. ZEND_JMPZNZ_SPEC_CONST_HANDLER,
  55358. ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
  55359. ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
  55360. ZEND_NULL_HANDLER,
  55361. ZEND_JMPZNZ_SPEC_CV_HANDLER,
  55362. ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
  55363. ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
  55364. ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
  55365. ZEND_NULL_HANDLER,
  55366. ZEND_JMPZ_EX_SPEC_CV_HANDLER,
  55367. ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
  55368. ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
  55369. ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
  55370. ZEND_NULL_HANDLER,
  55371. ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
  55372. ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER,
  55373. ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
  55374. ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
  55375. ZEND_NULL_HANDLER,
  55376. ZEND_CASE_SPEC_TMPVAR_CV_HANDLER,
  55377. ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER,
  55378. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER,
  55379. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER,
  55380. ZEND_NULL_HANDLER,
  55381. ZEND_NULL_HANDLER,
  55382. ZEND_NULL_HANDLER,
  55383. ZEND_NULL_HANDLER,
  55384. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER,
  55385. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER,
  55386. ZEND_NULL_HANDLER,
  55387. ZEND_NULL_HANDLER,
  55388. ZEND_CAST_SPEC_CONST_HANDLER,
  55389. ZEND_CAST_SPEC_TMP_HANDLER,
  55390. ZEND_CAST_SPEC_VAR_HANDLER,
  55391. ZEND_NULL_HANDLER,
  55392. ZEND_CAST_SPEC_CV_HANDLER,
  55393. ZEND_BOOL_SPEC_CONST_HANDLER,
  55394. ZEND_BOOL_SPEC_TMPVAR_HANDLER,
  55395. ZEND_BOOL_SPEC_TMPVAR_HANDLER,
  55396. ZEND_NULL_HANDLER,
  55397. ZEND_BOOL_SPEC_CV_HANDLER,
  55398. ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER,
  55399. ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
  55400. ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
  55401. ZEND_NULL_HANDLER,
  55402. ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER,
  55403. ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
  55404. ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  55405. ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  55406. ZEND_NULL_HANDLER,
  55407. ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
  55408. ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
  55409. ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  55410. ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  55411. ZEND_NULL_HANDLER,
  55412. ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
  55413. ZEND_NULL_HANDLER,
  55414. ZEND_NULL_HANDLER,
  55415. ZEND_NULL_HANDLER,
  55416. ZEND_NULL_HANDLER,
  55417. ZEND_NULL_HANDLER,
  55418. ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER,
  55419. ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
  55420. ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
  55421. ZEND_NULL_HANDLER,
  55422. ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER,
  55423. ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER,
  55424. ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
  55425. ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
  55426. ZEND_NULL_HANDLER,
  55427. ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER,
  55428. ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER,
  55429. ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
  55430. ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
  55431. ZEND_NULL_HANDLER,
  55432. ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER,
  55433. ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER,
  55434. ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
  55435. ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
  55436. ZEND_NULL_HANDLER,
  55437. ZEND_ROPE_END_SPEC_TMP_CV_HANDLER,
  55438. ZEND_BEGIN_SILENCE_SPEC_HANDLER,
  55439. ZEND_END_SILENCE_SPEC_TMP_HANDLER,
  55440. ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
  55441. ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER,
  55442. ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER,
  55443. ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER,
  55444. ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER,
  55445. ZEND_INIT_FCALL_SPEC_CONST_HANDLER,
  55446. ZEND_RETURN_SPEC_CONST_HANDLER,
  55447. ZEND_RETURN_SPEC_OBSERVER_HANDLER,
  55448. ZEND_RETURN_SPEC_TMP_HANDLER,
  55449. ZEND_RETURN_SPEC_OBSERVER_HANDLER,
  55450. ZEND_RETURN_SPEC_VAR_HANDLER,
  55451. ZEND_RETURN_SPEC_OBSERVER_HANDLER,
  55452. ZEND_NULL_HANDLER,
  55453. ZEND_NULL_HANDLER,
  55454. ZEND_RETURN_SPEC_CV_HANDLER,
  55455. ZEND_RETURN_SPEC_OBSERVER_HANDLER,
  55456. ZEND_RECV_SPEC_UNUSED_HANDLER,
  55457. ZEND_RECV_INIT_SPEC_CONST_HANDLER,
  55458. ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER,
  55459. ZEND_NULL_HANDLER,
  55460. ZEND_NULL_HANDLER,
  55461. ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER,
  55462. ZEND_NULL_HANDLER,
  55463. ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER,
  55464. ZEND_NULL_HANDLER,
  55465. ZEND_NULL_HANDLER,
  55466. ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER,
  55467. ZEND_NULL_HANDLER,
  55468. ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER,
  55469. ZEND_NULL_HANDLER,
  55470. ZEND_NULL_HANDLER,
  55471. ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER,
  55472. ZEND_NULL_HANDLER,
  55473. ZEND_NULL_HANDLER,
  55474. ZEND_NULL_HANDLER,
  55475. ZEND_NULL_HANDLER,
  55476. ZEND_NULL_HANDLER,
  55477. ZEND_NULL_HANDLER,
  55478. ZEND_NULL_HANDLER,
  55479. ZEND_NULL_HANDLER,
  55480. ZEND_NULL_HANDLER,
  55481. ZEND_NULL_HANDLER,
  55482. ZEND_NULL_HANDLER,
  55483. ZEND_NULL_HANDLER,
  55484. ZEND_NULL_HANDLER,
  55485. ZEND_NULL_HANDLER,
  55486. ZEND_NULL_HANDLER,
  55487. ZEND_NULL_HANDLER,
  55488. ZEND_NULL_HANDLER,
  55489. ZEND_NULL_HANDLER,
  55490. ZEND_NULL_HANDLER,
  55491. ZEND_NULL_HANDLER,
  55492. ZEND_NULL_HANDLER,
  55493. ZEND_NULL_HANDLER,
  55494. ZEND_NULL_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_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER,
  55504. ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER,
  55505. ZEND_NULL_HANDLER,
  55506. ZEND_NULL_HANDLER,
  55507. ZEND_NULL_HANDLER,
  55508. ZEND_NULL_HANDLER,
  55509. ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER,
  55510. ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_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_SEND_VAR_EX_SPEC_CV_CONST_HANDLER,
  55524. ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER,
  55525. ZEND_NULL_HANDLER,
  55526. ZEND_NULL_HANDLER,
  55527. ZEND_NULL_HANDLER,
  55528. ZEND_NULL_HANDLER,
  55529. ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER,
  55530. ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER,
  55531. ZEND_NULL_HANDLER,
  55532. ZEND_NULL_HANDLER,
  55533. ZEND_NULL_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_SEND_REF_SPEC_VAR_CONST_HANDLER,
  55544. ZEND_NULL_HANDLER,
  55545. ZEND_NULL_HANDLER,
  55546. ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER,
  55547. ZEND_NULL_HANDLER,
  55548. ZEND_NULL_HANDLER,
  55549. ZEND_NULL_HANDLER,
  55550. ZEND_NULL_HANDLER,
  55551. ZEND_NULL_HANDLER,
  55552. ZEND_NULL_HANDLER,
  55553. ZEND_SEND_REF_SPEC_CV_CONST_HANDLER,
  55554. ZEND_NULL_HANDLER,
  55555. ZEND_NULL_HANDLER,
  55556. ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER,
  55557. ZEND_NULL_HANDLER,
  55558. ZEND_NEW_SPEC_CONST_UNUSED_HANDLER,
  55559. ZEND_NULL_HANDLER,
  55560. ZEND_NEW_SPEC_VAR_UNUSED_HANDLER,
  55561. ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER,
  55562. ZEND_NULL_HANDLER,
  55563. ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
  55564. ZEND_FREE_SPEC_TMPVAR_HANDLER,
  55565. ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER,
  55566. ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
  55567. ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
  55568. ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER,
  55569. ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER,
  55570. ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER,
  55571. ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
  55572. ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
  55573. ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER,
  55574. ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER,
  55575. ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER,
  55576. ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
  55577. ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
  55578. ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER,
  55579. ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER,
  55580. ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER,
  55581. ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
  55582. ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
  55583. ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER,
  55584. ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER,
  55585. ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER,
  55586. ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
  55587. ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
  55588. ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER,
  55589. ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER,
  55590. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER,
  55591. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
  55592. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
  55593. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER,
  55594. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER,
  55595. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER,
  55596. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
  55597. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
  55598. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER,
  55599. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER,
  55600. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER,
  55601. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
  55602. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
  55603. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER,
  55604. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER,
  55605. ZEND_NULL_HANDLER,
  55606. ZEND_NULL_HANDLER,
  55607. ZEND_NULL_HANDLER,
  55608. ZEND_NULL_HANDLER,
  55609. ZEND_NULL_HANDLER,
  55610. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER,
  55611. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
  55612. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
  55613. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER,
  55614. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER,
  55615. ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
  55616. ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
  55617. ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
  55618. ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
  55619. ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
  55620. ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
  55621. ZEND_NULL_HANDLER,
  55622. ZEND_NULL_HANDLER,
  55623. ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
  55624. ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
  55625. ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER,
  55626. ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
  55627. ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
  55628. ZEND_NULL_HANDLER,
  55629. ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER,
  55630. ZEND_NULL_HANDLER,
  55631. ZEND_NULL_HANDLER,
  55632. ZEND_NULL_HANDLER,
  55633. ZEND_NULL_HANDLER,
  55634. ZEND_NULL_HANDLER,
  55635. ZEND_NULL_HANDLER,
  55636. ZEND_NULL_HANDLER,
  55637. ZEND_NULL_HANDLER,
  55638. ZEND_NULL_HANDLER,
  55639. ZEND_NULL_HANDLER,
  55640. ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER,
  55641. ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
  55642. ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
  55643. ZEND_NULL_HANDLER,
  55644. ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER,
  55645. ZEND_NULL_HANDLER,
  55646. ZEND_NULL_HANDLER,
  55647. ZEND_NULL_HANDLER,
  55648. ZEND_NULL_HANDLER,
  55649. ZEND_NULL_HANDLER,
  55650. ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER,
  55651. ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
  55652. ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
  55653. ZEND_NULL_HANDLER,
  55654. ZEND_UNSET_DIM_SPEC_CV_CV_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_NULL_HANDLER,
  55664. ZEND_NULL_HANDLER,
  55665. ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER,
  55666. ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  55667. ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  55668. ZEND_NULL_HANDLER,
  55669. ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER,
  55670. ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER,
  55671. ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  55672. ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  55673. ZEND_NULL_HANDLER,
  55674. ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER,
  55675. ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER,
  55676. ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
  55677. ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
  55678. ZEND_NULL_HANDLER,
  55679. ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER,
  55680. ZEND_FE_RESET_R_SPEC_CONST_HANDLER,
  55681. ZEND_FE_RESET_R_SPEC_TMP_HANDLER,
  55682. ZEND_FE_RESET_R_SPEC_VAR_HANDLER,
  55683. ZEND_NULL_HANDLER,
  55684. ZEND_FE_RESET_R_SPEC_CV_HANDLER,
  55685. ZEND_FE_FETCH_R_SPEC_VAR_HANDLER,
  55686. ZEND_EXIT_SPEC_HANDLER,
  55687. ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER,
  55688. ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
  55689. ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
  55690. ZEND_NULL_HANDLER,
  55691. ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER,
  55692. ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER,
  55693. ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
  55694. ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
  55695. ZEND_NULL_HANDLER,
  55696. ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER,
  55697. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
  55698. ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55699. ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55700. ZEND_NULL_HANDLER,
  55701. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
  55702. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
  55703. ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55704. ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55705. ZEND_NULL_HANDLER,
  55706. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
  55707. ZEND_NULL_HANDLER,
  55708. ZEND_NULL_HANDLER,
  55709. ZEND_NULL_HANDLER,
  55710. ZEND_NULL_HANDLER,
  55711. ZEND_NULL_HANDLER,
  55712. ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER,
  55713. ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
  55714. ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
  55715. ZEND_NULL_HANDLER,
  55716. ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER,
  55717. ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER,
  55718. ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
  55719. ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
  55720. ZEND_NULL_HANDLER,
  55721. ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER,
  55722. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
  55723. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55724. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55725. ZEND_NULL_HANDLER,
  55726. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
  55727. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
  55728. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55729. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55730. ZEND_NULL_HANDLER,
  55731. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
  55732. ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER,
  55733. ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
  55734. ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
  55735. ZEND_NULL_HANDLER,
  55736. ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER,
  55737. ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER,
  55738. ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
  55739. ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
  55740. ZEND_NULL_HANDLER,
  55741. ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER,
  55742. ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER,
  55743. ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
  55744. ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
  55745. ZEND_NULL_HANDLER,
  55746. ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER,
  55747. ZEND_NULL_HANDLER,
  55748. ZEND_NULL_HANDLER,
  55749. ZEND_NULL_HANDLER,
  55750. ZEND_NULL_HANDLER,
  55751. ZEND_NULL_HANDLER,
  55752. ZEND_NULL_HANDLER,
  55753. ZEND_NULL_HANDLER,
  55754. ZEND_NULL_HANDLER,
  55755. ZEND_NULL_HANDLER,
  55756. ZEND_NULL_HANDLER,
  55757. ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER,
  55758. ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
  55759. ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
  55760. ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER,
  55761. ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER,
  55762. ZEND_NULL_HANDLER,
  55763. ZEND_NULL_HANDLER,
  55764. ZEND_NULL_HANDLER,
  55765. ZEND_NULL_HANDLER,
  55766. ZEND_NULL_HANDLER,
  55767. ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER,
  55768. ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
  55769. ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
  55770. ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER,
  55771. ZEND_FETCH_DIM_W_SPEC_CV_CV_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_NULL_HANDLER,
  55781. ZEND_NULL_HANDLER,
  55782. ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER,
  55783. ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
  55784. ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
  55785. ZEND_NULL_HANDLER,
  55786. ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER,
  55787. ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER,
  55788. ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
  55789. ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
  55790. ZEND_NULL_HANDLER,
  55791. ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER,
  55792. ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER,
  55793. ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
  55794. ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
  55795. ZEND_NULL_HANDLER,
  55796. ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER,
  55797. ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER,
  55798. ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
  55799. ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
  55800. ZEND_NULL_HANDLER,
  55801. ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER,
  55802. ZEND_NULL_HANDLER,
  55803. ZEND_NULL_HANDLER,
  55804. ZEND_NULL_HANDLER,
  55805. ZEND_NULL_HANDLER,
  55806. ZEND_NULL_HANDLER,
  55807. ZEND_NULL_HANDLER,
  55808. ZEND_NULL_HANDLER,
  55809. ZEND_NULL_HANDLER,
  55810. ZEND_NULL_HANDLER,
  55811. ZEND_NULL_HANDLER,
  55812. ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER,
  55813. ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
  55814. ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
  55815. ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER,
  55816. ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER,
  55817. ZEND_NULL_HANDLER,
  55818. ZEND_NULL_HANDLER,
  55819. ZEND_NULL_HANDLER,
  55820. ZEND_NULL_HANDLER,
  55821. ZEND_NULL_HANDLER,
  55822. ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER,
  55823. ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
  55824. ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
  55825. ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER,
  55826. ZEND_FETCH_DIM_RW_SPEC_CV_CV_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_NULL_HANDLER,
  55836. ZEND_NULL_HANDLER,
  55837. ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER,
  55838. ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
  55839. ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
  55840. ZEND_NULL_HANDLER,
  55841. ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER,
  55842. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER,
  55843. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
  55844. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
  55845. ZEND_NULL_HANDLER,
  55846. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER,
  55847. ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER,
  55848. ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
  55849. ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
  55850. ZEND_NULL_HANDLER,
  55851. ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER,
  55852. ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER,
  55853. ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
  55854. ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
  55855. ZEND_NULL_HANDLER,
  55856. ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER,
  55857. ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER,
  55858. ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
  55859. ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
  55860. ZEND_NULL_HANDLER,
  55861. ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER,
  55862. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
  55863. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55864. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55865. ZEND_NULL_HANDLER,
  55866. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
  55867. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
  55868. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55869. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55870. ZEND_NULL_HANDLER,
  55871. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
  55872. ZEND_NULL_HANDLER,
  55873. ZEND_NULL_HANDLER,
  55874. ZEND_NULL_HANDLER,
  55875. ZEND_NULL_HANDLER,
  55876. ZEND_NULL_HANDLER,
  55877. ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER,
  55878. ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
  55879. ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
  55880. ZEND_NULL_HANDLER,
  55881. ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER,
  55882. ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER,
  55883. ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
  55884. ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
  55885. ZEND_NULL_HANDLER,
  55886. ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER,
  55887. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
  55888. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55889. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55890. ZEND_NULL_HANDLER,
  55891. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
  55892. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
  55893. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55894. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55895. ZEND_NULL_HANDLER,
  55896. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
  55897. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER,
  55898. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
  55899. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
  55900. ZEND_NULL_HANDLER,
  55901. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER,
  55902. ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER,
  55903. ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
  55904. ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
  55905. ZEND_NULL_HANDLER,
  55906. ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER,
  55907. ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
  55908. ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
  55909. ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
  55910. ZEND_NULL_HANDLER,
  55911. ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
  55912. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
  55913. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
  55914. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
  55915. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
  55916. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER,
  55917. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
  55918. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
  55919. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
  55920. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER,
  55921. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER,
  55922. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
  55923. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
  55924. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
  55925. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
  55926. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER,
  55927. ZEND_NULL_HANDLER,
  55928. ZEND_NULL_HANDLER,
  55929. ZEND_NULL_HANDLER,
  55930. ZEND_NULL_HANDLER,
  55931. ZEND_NULL_HANDLER,
  55932. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER,
  55933. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
  55934. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
  55935. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
  55936. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER,
  55937. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
  55938. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
  55939. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
  55940. ZEND_NULL_HANDLER,
  55941. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER,
  55942. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
  55943. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
  55944. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
  55945. ZEND_NULL_HANDLER,
  55946. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER,
  55947. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
  55948. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
  55949. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
  55950. ZEND_NULL_HANDLER,
  55951. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER,
  55952. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
  55953. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
  55954. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
  55955. ZEND_NULL_HANDLER,
  55956. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER,
  55957. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER,
  55958. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
  55959. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
  55960. ZEND_NULL_HANDLER,
  55961. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER,
  55962. ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER,
  55963. ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
  55964. ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
  55965. ZEND_NULL_HANDLER,
  55966. ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER,
  55967. ZEND_NULL_HANDLER,
  55968. ZEND_NULL_HANDLER,
  55969. ZEND_NULL_HANDLER,
  55970. ZEND_NULL_HANDLER,
  55971. ZEND_NULL_HANDLER,
  55972. ZEND_NULL_HANDLER,
  55973. ZEND_NULL_HANDLER,
  55974. ZEND_NULL_HANDLER,
  55975. ZEND_NULL_HANDLER,
  55976. ZEND_NULL_HANDLER,
  55977. ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER,
  55978. ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
  55979. ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
  55980. ZEND_NULL_HANDLER,
  55981. ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER,
  55982. ZEND_NULL_HANDLER,
  55983. ZEND_NULL_HANDLER,
  55984. ZEND_NULL_HANDLER,
  55985. ZEND_NULL_HANDLER,
  55986. ZEND_NULL_HANDLER,
  55987. ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER,
  55988. ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
  55989. ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
  55990. ZEND_NULL_HANDLER,
  55991. ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_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_NULL_HANDLER,
  56001. ZEND_NULL_HANDLER,
  56002. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER,
  56003. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
  56004. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
  56005. ZEND_NULL_HANDLER,
  56006. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER,
  56007. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER,
  56008. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
  56009. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
  56010. ZEND_NULL_HANDLER,
  56011. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER,
  56012. ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER,
  56013. ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
  56014. ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
  56015. ZEND_NULL_HANDLER,
  56016. ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER,
  56017. ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER,
  56018. ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
  56019. ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
  56020. ZEND_NULL_HANDLER,
  56021. ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER,
  56022. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
  56023. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  56024. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  56025. ZEND_NULL_HANDLER,
  56026. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
  56027. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
  56028. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  56029. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  56030. ZEND_NULL_HANDLER,
  56031. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
  56032. ZEND_NULL_HANDLER,
  56033. ZEND_NULL_HANDLER,
  56034. ZEND_NULL_HANDLER,
  56035. ZEND_NULL_HANDLER,
  56036. ZEND_NULL_HANDLER,
  56037. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
  56038. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  56039. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  56040. ZEND_NULL_HANDLER,
  56041. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
  56042. ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
  56043. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
  56044. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
  56045. ZEND_NULL_HANDLER,
  56046. ZEND_NULL_HANDLER,
  56047. ZEND_NULL_HANDLER,
  56048. ZEND_NULL_HANDLER,
  56049. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER,
  56050. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER,
  56051. ZEND_NULL_HANDLER,
  56052. ZEND_NULL_HANDLER,
  56053. ZEND_EXT_STMT_SPEC_HANDLER,
  56054. ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
  56055. ZEND_EXT_FCALL_END_SPEC_HANDLER,
  56056. ZEND_EXT_NOP_SPEC_HANDLER,
  56057. ZEND_TICKS_SPEC_HANDLER,
  56058. ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER,
  56059. ZEND_NULL_HANDLER,
  56060. ZEND_NULL_HANDLER,
  56061. ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER,
  56062. ZEND_NULL_HANDLER,
  56063. ZEND_CATCH_SPEC_CONST_HANDLER,
  56064. ZEND_THROW_SPEC_CONST_HANDLER,
  56065. ZEND_THROW_SPEC_TMPVAR_HANDLER,
  56066. ZEND_THROW_SPEC_TMPVAR_HANDLER,
  56067. ZEND_NULL_HANDLER,
  56068. ZEND_THROW_SPEC_CV_HANDLER,
  56069. ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER,
  56070. ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
  56071. ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
  56072. ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
  56073. ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER,
  56074. ZEND_CLONE_SPEC_CONST_HANDLER,
  56075. ZEND_CLONE_SPEC_TMPVAR_HANDLER,
  56076. ZEND_CLONE_SPEC_TMPVAR_HANDLER,
  56077. ZEND_CLONE_SPEC_UNUSED_HANDLER,
  56078. ZEND_CLONE_SPEC_CV_HANDLER,
  56079. ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
  56080. ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
  56081. ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
  56082. ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
  56083. ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
  56084. ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
  56085. ZEND_NULL_HANDLER,
  56086. ZEND_NULL_HANDLER,
  56087. ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
  56088. ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
  56089. ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
  56090. ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
  56091. ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
  56092. ZEND_NULL_HANDLER,
  56093. ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER,
  56094. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
  56095. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
  56096. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
  56097. ZEND_NULL_HANDLER,
  56098. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
  56099. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
  56100. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
  56101. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
  56102. ZEND_NULL_HANDLER,
  56103. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
  56104. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
  56105. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
  56106. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
  56107. ZEND_NULL_HANDLER,
  56108. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
  56109. ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER,
  56110. ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
  56111. ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
  56112. ZEND_NULL_HANDLER,
  56113. ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER,
  56114. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
  56115. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
  56116. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
  56117. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER,
  56118. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER,
  56119. ZEND_NULL_HANDLER,
  56120. ZEND_NULL_HANDLER,
  56121. ZEND_NULL_HANDLER,
  56122. ZEND_NULL_HANDLER,
  56123. ZEND_NULL_HANDLER,
  56124. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER,
  56125. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
  56126. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
  56127. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER,
  56128. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER,
  56129. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
  56130. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
  56131. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
  56132. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER,
  56133. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
  56134. ZEND_NULL_HANDLER,
  56135. ZEND_NULL_HANDLER,
  56136. ZEND_NULL_HANDLER,
  56137. ZEND_NULL_HANDLER,
  56138. ZEND_NULL_HANDLER,
  56139. ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER,
  56140. ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
  56141. ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
  56142. ZEND_NULL_HANDLER,
  56143. ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER,
  56144. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER,
  56145. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
  56146. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
  56147. ZEND_NULL_HANDLER,
  56148. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER,
  56149. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
  56150. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56151. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56152. ZEND_NULL_HANDLER,
  56153. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
  56154. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
  56155. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56156. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56157. ZEND_NULL_HANDLER,
  56158. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
  56159. ZEND_NULL_HANDLER,
  56160. ZEND_NULL_HANDLER,
  56161. ZEND_NULL_HANDLER,
  56162. ZEND_NULL_HANDLER,
  56163. ZEND_NULL_HANDLER,
  56164. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER,
  56165. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56166. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56167. ZEND_NULL_HANDLER,
  56168. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER,
  56169. ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER,
  56170. ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER,
  56171. ZEND_NULL_HANDLER,
  56172. ZEND_NULL_HANDLER,
  56173. ZEND_NULL_HANDLER,
  56174. ZEND_NULL_HANDLER,
  56175. ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER,
  56176. ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER,
  56177. ZEND_NULL_HANDLER,
  56178. ZEND_NULL_HANDLER,
  56179. ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER,
  56180. ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER,
  56181. ZEND_NULL_HANDLER,
  56182. ZEND_NULL_HANDLER,
  56183. ZEND_NULL_HANDLER,
  56184. ZEND_NULL_HANDLER,
  56185. ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER,
  56186. ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER,
  56187. ZEND_NULL_HANDLER,
  56188. ZEND_NULL_HANDLER,
  56189. ZEND_NULL_HANDLER,
  56190. ZEND_NULL_HANDLER,
  56191. ZEND_NULL_HANDLER,
  56192. ZEND_NULL_HANDLER,
  56193. ZEND_NULL_HANDLER,
  56194. ZEND_NULL_HANDLER,
  56195. ZEND_NULL_HANDLER,
  56196. ZEND_NULL_HANDLER,
  56197. ZEND_NULL_HANDLER,
  56198. ZEND_NULL_HANDLER,
  56199. ZEND_NULL_HANDLER,
  56200. ZEND_NULL_HANDLER,
  56201. ZEND_NULL_HANDLER,
  56202. ZEND_NULL_HANDLER,
  56203. ZEND_NULL_HANDLER,
  56204. ZEND_NULL_HANDLER,
  56205. ZEND_NULL_HANDLER,
  56206. ZEND_NULL_HANDLER,
  56207. ZEND_NULL_HANDLER,
  56208. ZEND_NULL_HANDLER,
  56209. ZEND_NULL_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_SEND_VAR_SPEC_VAR_CONST_HANDLER,
  56230. ZEND_NULL_HANDLER,
  56231. ZEND_NULL_HANDLER,
  56232. ZEND_SEND_VAR_SPEC_VAR_UNUSED_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_SEND_VAR_SPEC_CV_CONST_HANDLER,
  56240. ZEND_NULL_HANDLER,
  56241. ZEND_NULL_HANDLER,
  56242. ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER,
  56243. ZEND_NULL_HANDLER,
  56244. ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER,
  56245. ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
  56246. ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
  56247. ZEND_NULL_HANDLER,
  56248. ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER,
  56249. ZEND_SEND_ARRAY_SPEC_HANDLER,
  56250. ZEND_SEND_USER_SPEC_CONST_HANDLER,
  56251. ZEND_SEND_USER_SPEC_TMP_HANDLER,
  56252. ZEND_SEND_USER_SPEC_VAR_HANDLER,
  56253. ZEND_NULL_HANDLER,
  56254. ZEND_SEND_USER_SPEC_CV_HANDLER,
  56255. ZEND_STRLEN_SPEC_CONST_HANDLER,
  56256. ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
  56257. ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
  56258. ZEND_NULL_HANDLER,
  56259. ZEND_STRLEN_SPEC_CV_HANDLER,
  56260. ZEND_DEFINED_SPEC_CONST_HANDLER,
  56261. ZEND_TYPE_CHECK_SPEC_CONST_HANDLER,
  56262. ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
  56263. ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
  56264. ZEND_NULL_HANDLER,
  56265. ZEND_TYPE_CHECK_SPEC_CV_HANDLER,
  56266. ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER,
  56267. ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER,
  56268. ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER,
  56269. ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
  56270. ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER,
  56271. ZEND_FE_RESET_RW_SPEC_CONST_HANDLER,
  56272. ZEND_FE_RESET_RW_SPEC_TMP_HANDLER,
  56273. ZEND_FE_RESET_RW_SPEC_VAR_HANDLER,
  56274. ZEND_NULL_HANDLER,
  56275. ZEND_FE_RESET_RW_SPEC_CV_HANDLER,
  56276. ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER,
  56277. ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
  56278. ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER,
  56279. ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
  56280. ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
  56281. ZEND_NULL_HANDLER,
  56282. ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER,
  56283. ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER,
  56284. ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER,
  56285. ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER,
  56286. ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER,
  56287. ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER,
  56288. ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER,
  56289. ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER,
  56290. ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER,
  56291. ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER,
  56292. ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER,
  56293. ZEND_NULL_HANDLER,
  56294. ZEND_NULL_HANDLER,
  56295. ZEND_NULL_HANDLER,
  56296. ZEND_NULL_HANDLER,
  56297. ZEND_NULL_HANDLER,
  56298. ZEND_NULL_HANDLER,
  56299. ZEND_NULL_HANDLER,
  56300. ZEND_NULL_HANDLER,
  56301. ZEND_NULL_HANDLER,
  56302. ZEND_NULL_HANDLER,
  56303. ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER,
  56304. ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  56305. ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  56306. ZEND_NULL_HANDLER,
  56307. ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER,
  56308. ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
  56309. ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56310. ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56311. ZEND_NULL_HANDLER,
  56312. ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
  56313. ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER,
  56314. ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56315. ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56316. ZEND_NULL_HANDLER,
  56317. ZEND_PRE_INC_OBJ_SPEC_CV_CV_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_NULL_HANDLER,
  56327. ZEND_NULL_HANDLER,
  56328. ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER,
  56329. ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  56330. ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  56331. ZEND_NULL_HANDLER,
  56332. ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER,
  56333. ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
  56334. ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56335. ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56336. ZEND_NULL_HANDLER,
  56337. ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
  56338. ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER,
  56339. ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56340. ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56341. ZEND_NULL_HANDLER,
  56342. ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER,
  56343. ZEND_ECHO_SPEC_CONST_HANDLER,
  56344. ZEND_ECHO_SPEC_TMPVAR_HANDLER,
  56345. ZEND_ECHO_SPEC_TMPVAR_HANDLER,
  56346. ZEND_NULL_HANDLER,
  56347. ZEND_ECHO_SPEC_CV_HANDLER,
  56348. ZEND_NULL_HANDLER,
  56349. ZEND_NULL_HANDLER,
  56350. ZEND_NULL_HANDLER,
  56351. ZEND_NULL_HANDLER,
  56352. ZEND_NULL_HANDLER,
  56353. ZEND_NULL_HANDLER,
  56354. ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
  56355. ZEND_NULL_HANDLER,
  56356. ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
  56357. ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
  56358. ZEND_NULL_HANDLER,
  56359. ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
  56360. ZEND_NULL_HANDLER,
  56361. ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
  56362. ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
  56363. ZEND_NULL_HANDLER,
  56364. ZEND_NULL_HANDLER,
  56365. ZEND_NULL_HANDLER,
  56366. ZEND_NULL_HANDLER,
  56367. ZEND_NULL_HANDLER,
  56368. ZEND_NULL_HANDLER,
  56369. ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER,
  56370. ZEND_NULL_HANDLER,
  56371. ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER,
  56372. ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER,
  56373. ZEND_NULL_HANDLER,
  56374. ZEND_GENERATOR_CREATE_SPEC_HANDLER,
  56375. ZEND_NULL_HANDLER,
  56376. ZEND_NULL_HANDLER,
  56377. ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER,
  56378. ZEND_NULL_HANDLER,
  56379. ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER,
  56380. ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
  56381. ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER,
  56382. ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER,
  56383. ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER,
  56384. ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER,
  56385. ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
  56386. ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER,
  56387. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER,
  56388. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
  56389. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
  56390. ZEND_NULL_HANDLER,
  56391. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER,
  56392. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
  56393. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56394. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56395. ZEND_NULL_HANDLER,
  56396. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
  56397. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
  56398. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56399. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56400. ZEND_NULL_HANDLER,
  56401. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
  56402. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER,
  56403. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56404. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56405. ZEND_NULL_HANDLER,
  56406. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER,
  56407. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER,
  56408. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56409. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56410. ZEND_NULL_HANDLER,
  56411. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER,
  56412. ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
  56413. ZEND_USER_OPCODE_SPEC_HANDLER,
  56414. ZEND_ASSERT_CHECK_SPEC_HANDLER,
  56415. ZEND_JMP_SET_SPEC_CONST_HANDLER,
  56416. ZEND_JMP_SET_SPEC_TMP_HANDLER,
  56417. ZEND_JMP_SET_SPEC_VAR_HANDLER,
  56418. ZEND_NULL_HANDLER,
  56419. ZEND_JMP_SET_SPEC_CV_HANDLER,
  56420. ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER,
  56421. ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER,
  56422. ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER,
  56423. ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER,
  56424. ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
  56425. ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
  56426. ZEND_NULL_HANDLER,
  56427. ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER,
  56428. ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER,
  56429. ZEND_NULL_HANDLER,
  56430. ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER,
  56431. ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER,
  56432. ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER,
  56433. ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER,
  56434. ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
  56435. ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER,
  56436. ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
  56437. ZEND_YIELD_SPEC_CONST_CONST_HANDLER,
  56438. ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER,
  56439. ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER,
  56440. ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER,
  56441. ZEND_YIELD_SPEC_CONST_CV_HANDLER,
  56442. ZEND_YIELD_SPEC_TMP_CONST_HANDLER,
  56443. ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER,
  56444. ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER,
  56445. ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER,
  56446. ZEND_YIELD_SPEC_TMP_CV_HANDLER,
  56447. ZEND_YIELD_SPEC_VAR_CONST_HANDLER,
  56448. ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER,
  56449. ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER,
  56450. ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER,
  56451. ZEND_YIELD_SPEC_VAR_CV_HANDLER,
  56452. ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER,
  56453. ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER,
  56454. ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER,
  56455. ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER,
  56456. ZEND_YIELD_SPEC_UNUSED_CV_HANDLER,
  56457. ZEND_YIELD_SPEC_CV_CONST_HANDLER,
  56458. ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER,
  56459. ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER,
  56460. ZEND_YIELD_SPEC_CV_UNUSED_HANDLER,
  56461. ZEND_YIELD_SPEC_CV_CV_HANDLER,
  56462. ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER,
  56463. ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
  56464. ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER,
  56465. ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
  56466. ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER,
  56467. ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
  56468. ZEND_NULL_HANDLER,
  56469. ZEND_NULL_HANDLER,
  56470. ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER,
  56471. ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
  56472. ZEND_FAST_CALL_SPEC_HANDLER,
  56473. ZEND_FAST_RET_SPEC_HANDLER,
  56474. ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER,
  56475. ZEND_SEND_UNPACK_SPEC_HANDLER,
  56476. ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
  56477. ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER,
  56478. ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER,
  56479. ZEND_NULL_HANDLER,
  56480. ZEND_YIELD_FROM_SPEC_CV_HANDLER,
  56481. ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER,
  56482. ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER,
  56483. ZEND_COALESCE_SPEC_CONST_HANDLER,
  56484. ZEND_COALESCE_SPEC_TMP_HANDLER,
  56485. ZEND_COALESCE_SPEC_VAR_HANDLER,
  56486. ZEND_NULL_HANDLER,
  56487. ZEND_COALESCE_SPEC_CV_HANDLER,
  56488. ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER,
  56489. ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
  56490. ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
  56491. ZEND_NULL_HANDLER,
  56492. ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER,
  56493. ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
  56494. ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
  56495. ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
  56496. ZEND_NULL_HANDLER,
  56497. ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
  56498. ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
  56499. ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
  56500. ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
  56501. ZEND_NULL_HANDLER,
  56502. ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
  56503. ZEND_NULL_HANDLER,
  56504. ZEND_NULL_HANDLER,
  56505. ZEND_NULL_HANDLER,
  56506. ZEND_NULL_HANDLER,
  56507. ZEND_NULL_HANDLER,
  56508. ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER,
  56509. ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
  56510. ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
  56511. ZEND_NULL_HANDLER,
  56512. ZEND_SPACESHIP_SPEC_CV_CV_HANDLER,
  56513. ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
  56514. ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER,
  56515. ZEND_NULL_HANDLER,
  56516. ZEND_NULL_HANDLER,
  56517. ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
  56518. ZEND_NULL_HANDLER,
  56519. ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER,
  56520. ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER,
  56521. ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER,
  56522. ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER,
  56523. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER,
  56524. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER,
  56525. ZEND_UNSET_STATIC_PROP_SPEC_HANDLER,
  56526. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER,
  56527. ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER,
  56528. ZEND_NULL_HANDLER,
  56529. ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER,
  56530. ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
  56531. ZEND_NULL_HANDLER,
  56532. ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER,
  56533. ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER,
  56534. ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER,
  56535. ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
  56536. ZEND_NULL_HANDLER,
  56537. ZEND_NULL_HANDLER,
  56538. ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
  56539. ZEND_NULL_HANDLER,
  56540. ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER,
  56541. ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER,
  56542. ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56543. ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56544. ZEND_NULL_HANDLER,
  56545. ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56546. ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER,
  56547. ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
  56548. ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
  56549. ZEND_NULL_HANDLER,
  56550. ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
  56551. ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER,
  56552. ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER,
  56553. ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER,
  56554. ZEND_NULL_HANDLER,
  56555. ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER,
  56556. ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER,
  56557. ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER,
  56558. ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER,
  56559. ZEND_NULL_HANDLER,
  56560. ZEND_COUNT_SPEC_CV_UNUSED_HANDLER,
  56561. ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER,
  56562. ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER,
  56563. ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER,
  56564. ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
  56565. ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER,
  56566. ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
  56567. ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER,
  56568. ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER,
  56569. ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER,
  56570. ZEND_NULL_HANDLER,
  56571. ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER,
  56572. ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER,
  56573. ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER,
  56574. ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER,
  56575. ZEND_NULL_HANDLER,
  56576. ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER,
  56577. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER,
  56578. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
  56579. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
  56580. ZEND_NULL_HANDLER,
  56581. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER,
  56582. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER,
  56583. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
  56584. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
  56585. ZEND_NULL_HANDLER,
  56586. ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER,
  56587. ZEND_NULL_HANDLER,
  56588. ZEND_NULL_HANDLER,
  56589. ZEND_NULL_HANDLER,
  56590. ZEND_NULL_HANDLER,
  56591. ZEND_NULL_HANDLER,
  56592. ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER,
  56593. ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER,
  56594. ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER,
  56595. ZEND_NULL_HANDLER,
  56596. ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER,
  56597. ZEND_MATCH_SPEC_CONST_CONST_HANDLER,
  56598. ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
  56599. ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
  56600. ZEND_NULL_HANDLER,
  56601. ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
  56602. ZEND_NULL_HANDLER,
  56603. ZEND_NULL_HANDLER,
  56604. ZEND_NULL_HANDLER,
  56605. ZEND_NULL_HANDLER,
  56606. ZEND_NULL_HANDLER,
  56607. ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER,
  56608. ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER,
  56609. ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER,
  56610. ZEND_NULL_HANDLER,
  56611. ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER,
  56612. ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER,
  56613. ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER,
  56614. ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER,
  56615. ZEND_NULL_HANDLER,
  56616. ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER,
  56617. ZEND_NULL_HANDLER,
  56618. ZEND_NULL_HANDLER,
  56619. ZEND_NULL_HANDLER,
  56620. ZEND_NULL_HANDLER,
  56621. ZEND_NULL_HANDLER,
  56622. ZEND_NULL_HANDLER,
  56623. ZEND_NULL_HANDLER,
  56624. ZEND_NULL_HANDLER,
  56625. ZEND_NULL_HANDLER,
  56626. ZEND_NULL_HANDLER,
  56627. ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER,
  56628. ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
  56629. ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
  56630. ZEND_NULL_HANDLER,
  56631. ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
  56632. ZEND_JMP_NULL_SPEC_CONST_HANDLER,
  56633. ZEND_JMP_NULL_SPEC_TMP_HANDLER,
  56634. ZEND_JMP_NULL_SPEC_VAR_HANDLER,
  56635. ZEND_NULL_HANDLER,
  56636. ZEND_JMP_NULL_SPEC_CV_HANDLER,
  56637. ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
  56638. ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER,
  56639. ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
  56640. ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER,
  56641. ZEND_RECV_NOTYPE_SPEC_HANDLER,
  56642. ZEND_JMP_FORWARD_SPEC_HANDLER,
  56643. ZEND_NULL_HANDLER,
  56644. ZEND_NULL_HANDLER,
  56645. ZEND_NULL_HANDLER,
  56646. ZEND_NULL_HANDLER,
  56647. ZEND_NULL_HANDLER,
  56648. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56649. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56650. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56651. ZEND_NULL_HANDLER,
  56652. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56653. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56654. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56655. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56656. ZEND_NULL_HANDLER,
  56657. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56658. ZEND_NULL_HANDLER,
  56659. ZEND_NULL_HANDLER,
  56660. ZEND_NULL_HANDLER,
  56661. ZEND_NULL_HANDLER,
  56662. ZEND_NULL_HANDLER,
  56663. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56664. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56665. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56666. ZEND_NULL_HANDLER,
  56667. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56668. ZEND_NULL_HANDLER,
  56669. ZEND_NULL_HANDLER,
  56670. ZEND_NULL_HANDLER,
  56671. ZEND_NULL_HANDLER,
  56672. ZEND_NULL_HANDLER,
  56673. ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56674. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56675. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56676. ZEND_NULL_HANDLER,
  56677. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56678. ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56679. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56680. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56681. ZEND_NULL_HANDLER,
  56682. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56683. ZEND_NULL_HANDLER,
  56684. ZEND_NULL_HANDLER,
  56685. ZEND_NULL_HANDLER,
  56686. ZEND_NULL_HANDLER,
  56687. ZEND_NULL_HANDLER,
  56688. ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56689. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56690. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56691. ZEND_NULL_HANDLER,
  56692. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56693. ZEND_NULL_HANDLER,
  56694. ZEND_NULL_HANDLER,
  56695. ZEND_NULL_HANDLER,
  56696. ZEND_NULL_HANDLER,
  56697. ZEND_NULL_HANDLER,
  56698. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56699. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56700. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56701. ZEND_NULL_HANDLER,
  56702. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56703. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56704. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56705. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56706. ZEND_NULL_HANDLER,
  56707. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56708. ZEND_NULL_HANDLER,
  56709. ZEND_NULL_HANDLER,
  56710. ZEND_NULL_HANDLER,
  56711. ZEND_NULL_HANDLER,
  56712. ZEND_NULL_HANDLER,
  56713. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56714. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56715. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56716. ZEND_NULL_HANDLER,
  56717. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56718. ZEND_NULL_HANDLER,
  56719. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
  56720. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
  56721. ZEND_NULL_HANDLER,
  56722. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
  56723. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56724. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56725. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56726. ZEND_NULL_HANDLER,
  56727. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56728. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56729. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56730. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56731. ZEND_NULL_HANDLER,
  56732. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56733. ZEND_NULL_HANDLER,
  56734. ZEND_NULL_HANDLER,
  56735. ZEND_NULL_HANDLER,
  56736. ZEND_NULL_HANDLER,
  56737. ZEND_NULL_HANDLER,
  56738. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56739. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56740. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56741. ZEND_NULL_HANDLER,
  56742. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56743. ZEND_NULL_HANDLER,
  56744. ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  56745. ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  56746. ZEND_NULL_HANDLER,
  56747. ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  56748. ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56749. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56750. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56751. ZEND_NULL_HANDLER,
  56752. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56753. ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56754. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56755. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56756. ZEND_NULL_HANDLER,
  56757. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56758. ZEND_NULL_HANDLER,
  56759. ZEND_NULL_HANDLER,
  56760. ZEND_NULL_HANDLER,
  56761. ZEND_NULL_HANDLER,
  56762. ZEND_NULL_HANDLER,
  56763. ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56764. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56765. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56766. ZEND_NULL_HANDLER,
  56767. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56768. ZEND_NULL_HANDLER,
  56769. ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  56770. ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  56771. ZEND_NULL_HANDLER,
  56772. ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  56773. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56774. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56775. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56776. ZEND_NULL_HANDLER,
  56777. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56778. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56779. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56780. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56781. ZEND_NULL_HANDLER,
  56782. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56783. ZEND_NULL_HANDLER,
  56784. ZEND_NULL_HANDLER,
  56785. ZEND_NULL_HANDLER,
  56786. ZEND_NULL_HANDLER,
  56787. ZEND_NULL_HANDLER,
  56788. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56789. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56790. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56791. ZEND_NULL_HANDLER,
  56792. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56793. ZEND_NULL_HANDLER,
  56794. ZEND_NULL_HANDLER,
  56795. ZEND_NULL_HANDLER,
  56796. ZEND_NULL_HANDLER,
  56797. ZEND_NULL_HANDLER,
  56798. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56799. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56800. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56801. ZEND_NULL_HANDLER,
  56802. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56803. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56804. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56805. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56806. ZEND_NULL_HANDLER,
  56807. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56808. ZEND_NULL_HANDLER,
  56809. ZEND_NULL_HANDLER,
  56810. ZEND_NULL_HANDLER,
  56811. ZEND_NULL_HANDLER,
  56812. ZEND_NULL_HANDLER,
  56813. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56814. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56815. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56816. ZEND_NULL_HANDLER,
  56817. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56818. ZEND_NULL_HANDLER,
  56819. ZEND_NULL_HANDLER,
  56820. ZEND_NULL_HANDLER,
  56821. ZEND_NULL_HANDLER,
  56822. ZEND_NULL_HANDLER,
  56823. ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56824. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56825. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56826. ZEND_NULL_HANDLER,
  56827. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56828. ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56829. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56830. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56831. ZEND_NULL_HANDLER,
  56832. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56833. ZEND_NULL_HANDLER,
  56834. ZEND_NULL_HANDLER,
  56835. ZEND_NULL_HANDLER,
  56836. ZEND_NULL_HANDLER,
  56837. ZEND_NULL_HANDLER,
  56838. ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56839. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56840. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56841. ZEND_NULL_HANDLER,
  56842. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56843. ZEND_NULL_HANDLER,
  56844. ZEND_NULL_HANDLER,
  56845. ZEND_NULL_HANDLER,
  56846. ZEND_NULL_HANDLER,
  56847. ZEND_NULL_HANDLER,
  56848. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56849. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56850. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56851. ZEND_NULL_HANDLER,
  56852. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56853. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56854. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56855. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56856. ZEND_NULL_HANDLER,
  56857. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56858. ZEND_NULL_HANDLER,
  56859. ZEND_NULL_HANDLER,
  56860. ZEND_NULL_HANDLER,
  56861. ZEND_NULL_HANDLER,
  56862. ZEND_NULL_HANDLER,
  56863. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56864. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56865. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56866. ZEND_NULL_HANDLER,
  56867. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56868. ZEND_NULL_HANDLER,
  56869. ZEND_NULL_HANDLER,
  56870. ZEND_NULL_HANDLER,
  56871. ZEND_NULL_HANDLER,
  56872. ZEND_NULL_HANDLER,
  56873. ZEND_NULL_HANDLER,
  56874. ZEND_NULL_HANDLER,
  56875. ZEND_NULL_HANDLER,
  56876. ZEND_NULL_HANDLER,
  56877. ZEND_NULL_HANDLER,
  56878. ZEND_NULL_HANDLER,
  56879. ZEND_NULL_HANDLER,
  56880. ZEND_NULL_HANDLER,
  56881. ZEND_NULL_HANDLER,
  56882. ZEND_NULL_HANDLER,
  56883. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56884. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  56885. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  56886. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56887. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56888. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56889. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56890. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56891. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56892. ZEND_NULL_HANDLER,
  56893. ZEND_NULL_HANDLER,
  56894. ZEND_NULL_HANDLER,
  56895. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56896. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56897. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56898. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56899. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  56900. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  56901. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56902. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56903. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56904. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56905. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56906. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56907. ZEND_NULL_HANDLER,
  56908. ZEND_NULL_HANDLER,
  56909. ZEND_NULL_HANDLER,
  56910. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56911. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56912. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56913. ZEND_NULL_HANDLER,
  56914. ZEND_NULL_HANDLER,
  56915. ZEND_NULL_HANDLER,
  56916. ZEND_NULL_HANDLER,
  56917. ZEND_NULL_HANDLER,
  56918. ZEND_NULL_HANDLER,
  56919. ZEND_NULL_HANDLER,
  56920. ZEND_NULL_HANDLER,
  56921. ZEND_NULL_HANDLER,
  56922. ZEND_NULL_HANDLER,
  56923. ZEND_NULL_HANDLER,
  56924. ZEND_NULL_HANDLER,
  56925. ZEND_NULL_HANDLER,
  56926. ZEND_NULL_HANDLER,
  56927. ZEND_NULL_HANDLER,
  56928. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56929. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  56930. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  56931. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56932. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56933. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56934. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56935. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56936. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56937. ZEND_NULL_HANDLER,
  56938. ZEND_NULL_HANDLER,
  56939. ZEND_NULL_HANDLER,
  56940. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56941. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56942. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_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_NULL_HANDLER,
  56952. ZEND_NULL_HANDLER,
  56953. ZEND_NULL_HANDLER,
  56954. ZEND_NULL_HANDLER,
  56955. ZEND_NULL_HANDLER,
  56956. ZEND_NULL_HANDLER,
  56957. ZEND_NULL_HANDLER,
  56958. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56959. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  56960. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  56961. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56962. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56963. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56964. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56965. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56966. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56967. ZEND_NULL_HANDLER,
  56968. ZEND_NULL_HANDLER,
  56969. ZEND_NULL_HANDLER,
  56970. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56971. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56972. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56973. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56974. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  56975. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  56976. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56977. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56978. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56979. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56980. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56981. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56982. ZEND_NULL_HANDLER,
  56983. ZEND_NULL_HANDLER,
  56984. ZEND_NULL_HANDLER,
  56985. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56986. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  56987. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  56988. ZEND_NULL_HANDLER,
  56989. ZEND_NULL_HANDLER,
  56990. ZEND_NULL_HANDLER,
  56991. ZEND_NULL_HANDLER,
  56992. ZEND_NULL_HANDLER,
  56993. ZEND_NULL_HANDLER,
  56994. ZEND_NULL_HANDLER,
  56995. ZEND_NULL_HANDLER,
  56996. ZEND_NULL_HANDLER,
  56997. ZEND_NULL_HANDLER,
  56998. ZEND_NULL_HANDLER,
  56999. ZEND_NULL_HANDLER,
  57000. ZEND_NULL_HANDLER,
  57001. ZEND_NULL_HANDLER,
  57002. ZEND_NULL_HANDLER,
  57003. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57004. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57005. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57006. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57007. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57008. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57009. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57010. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57011. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57012. ZEND_NULL_HANDLER,
  57013. ZEND_NULL_HANDLER,
  57014. ZEND_NULL_HANDLER,
  57015. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57016. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57017. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_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_NULL_HANDLER,
  57027. ZEND_NULL_HANDLER,
  57028. ZEND_NULL_HANDLER,
  57029. ZEND_NULL_HANDLER,
  57030. ZEND_NULL_HANDLER,
  57031. ZEND_NULL_HANDLER,
  57032. ZEND_NULL_HANDLER,
  57033. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57034. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57035. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57036. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57037. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57038. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57039. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57040. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57041. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57042. ZEND_NULL_HANDLER,
  57043. ZEND_NULL_HANDLER,
  57044. ZEND_NULL_HANDLER,
  57045. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57046. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57047. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57048. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57049. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57050. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57051. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57052. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57053. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57054. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57055. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57056. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57057. ZEND_NULL_HANDLER,
  57058. ZEND_NULL_HANDLER,
  57059. ZEND_NULL_HANDLER,
  57060. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57061. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57062. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57063. ZEND_NULL_HANDLER,
  57064. ZEND_NULL_HANDLER,
  57065. ZEND_NULL_HANDLER,
  57066. ZEND_NULL_HANDLER,
  57067. ZEND_NULL_HANDLER,
  57068. ZEND_NULL_HANDLER,
  57069. ZEND_NULL_HANDLER,
  57070. ZEND_NULL_HANDLER,
  57071. ZEND_NULL_HANDLER,
  57072. ZEND_NULL_HANDLER,
  57073. ZEND_NULL_HANDLER,
  57074. ZEND_NULL_HANDLER,
  57075. ZEND_NULL_HANDLER,
  57076. ZEND_NULL_HANDLER,
  57077. ZEND_NULL_HANDLER,
  57078. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57079. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57080. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57081. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57082. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57083. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57084. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57085. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57086. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57087. ZEND_NULL_HANDLER,
  57088. ZEND_NULL_HANDLER,
  57089. ZEND_NULL_HANDLER,
  57090. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57091. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57092. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_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_NULL_HANDLER,
  57102. ZEND_NULL_HANDLER,
  57103. ZEND_NULL_HANDLER,
  57104. ZEND_NULL_HANDLER,
  57105. ZEND_NULL_HANDLER,
  57106. ZEND_NULL_HANDLER,
  57107. ZEND_NULL_HANDLER,
  57108. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57109. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57110. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57111. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57112. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57113. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57114. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57115. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57116. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57117. ZEND_NULL_HANDLER,
  57118. ZEND_NULL_HANDLER,
  57119. ZEND_NULL_HANDLER,
  57120. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57121. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57122. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57123. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57124. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57125. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57126. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57127. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57128. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57129. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57130. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57131. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57132. ZEND_NULL_HANDLER,
  57133. ZEND_NULL_HANDLER,
  57134. ZEND_NULL_HANDLER,
  57135. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57136. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57137. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57138. ZEND_NULL_HANDLER,
  57139. ZEND_NULL_HANDLER,
  57140. ZEND_NULL_HANDLER,
  57141. ZEND_NULL_HANDLER,
  57142. ZEND_NULL_HANDLER,
  57143. ZEND_NULL_HANDLER,
  57144. ZEND_NULL_HANDLER,
  57145. ZEND_NULL_HANDLER,
  57146. ZEND_NULL_HANDLER,
  57147. ZEND_NULL_HANDLER,
  57148. ZEND_NULL_HANDLER,
  57149. ZEND_NULL_HANDLER,
  57150. ZEND_NULL_HANDLER,
  57151. ZEND_NULL_HANDLER,
  57152. ZEND_NULL_HANDLER,
  57153. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57154. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57155. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57156. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57157. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57158. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57159. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57160. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57161. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57162. ZEND_NULL_HANDLER,
  57163. ZEND_NULL_HANDLER,
  57164. ZEND_NULL_HANDLER,
  57165. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57166. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57167. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57168. ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER,
  57169. ZEND_NULL_HANDLER,
  57170. ZEND_NULL_HANDLER,
  57171. ZEND_NULL_HANDLER,
  57172. ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER,
  57173. ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER,
  57174. ZEND_NULL_HANDLER,
  57175. ZEND_NULL_HANDLER,
  57176. ZEND_NULL_HANDLER,
  57177. ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER,
  57178. ZEND_NULL_HANDLER,
  57179. ZEND_NULL_HANDLER,
  57180. ZEND_NULL_HANDLER,
  57181. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57182. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57183. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57184. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57185. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57186. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57187. ZEND_NULL_HANDLER,
  57188. ZEND_NULL_HANDLER,
  57189. ZEND_NULL_HANDLER,
  57190. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57191. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57192. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57193. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57194. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57195. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57196. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57197. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57198. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57199. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57200. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57201. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57202. ZEND_NULL_HANDLER,
  57203. ZEND_NULL_HANDLER,
  57204. ZEND_NULL_HANDLER,
  57205. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57206. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57207. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57208. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57209. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57210. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57211. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57212. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57213. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57214. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57215. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57216. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57217. ZEND_NULL_HANDLER,
  57218. ZEND_NULL_HANDLER,
  57219. ZEND_NULL_HANDLER,
  57220. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57221. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57222. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57223. ZEND_NULL_HANDLER,
  57224. ZEND_NULL_HANDLER,
  57225. ZEND_NULL_HANDLER,
  57226. ZEND_NULL_HANDLER,
  57227. ZEND_NULL_HANDLER,
  57228. ZEND_NULL_HANDLER,
  57229. ZEND_NULL_HANDLER,
  57230. ZEND_NULL_HANDLER,
  57231. ZEND_NULL_HANDLER,
  57232. ZEND_NULL_HANDLER,
  57233. ZEND_NULL_HANDLER,
  57234. ZEND_NULL_HANDLER,
  57235. ZEND_NULL_HANDLER,
  57236. ZEND_NULL_HANDLER,
  57237. ZEND_NULL_HANDLER,
  57238. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57239. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57240. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57241. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57242. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57243. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57244. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57245. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57246. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57247. ZEND_NULL_HANDLER,
  57248. ZEND_NULL_HANDLER,
  57249. ZEND_NULL_HANDLER,
  57250. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57251. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57252. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57253. ZEND_NULL_HANDLER,
  57254. ZEND_NULL_HANDLER,
  57255. ZEND_NULL_HANDLER,
  57256. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57257. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57258. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57259. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57260. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57261. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57262. ZEND_NULL_HANDLER,
  57263. ZEND_NULL_HANDLER,
  57264. ZEND_NULL_HANDLER,
  57265. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57266. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57267. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57268. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57269. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57270. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57271. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57272. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57273. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57274. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57275. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57276. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57277. ZEND_NULL_HANDLER,
  57278. ZEND_NULL_HANDLER,
  57279. ZEND_NULL_HANDLER,
  57280. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57281. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57282. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57283. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57284. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57285. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57286. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57287. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57288. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57289. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57290. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57291. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57292. ZEND_NULL_HANDLER,
  57293. ZEND_NULL_HANDLER,
  57294. ZEND_NULL_HANDLER,
  57295. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57296. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57297. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57298. ZEND_NULL_HANDLER,
  57299. ZEND_NULL_HANDLER,
  57300. ZEND_NULL_HANDLER,
  57301. ZEND_NULL_HANDLER,
  57302. ZEND_NULL_HANDLER,
  57303. ZEND_NULL_HANDLER,
  57304. ZEND_NULL_HANDLER,
  57305. ZEND_NULL_HANDLER,
  57306. ZEND_NULL_HANDLER,
  57307. ZEND_NULL_HANDLER,
  57308. ZEND_NULL_HANDLER,
  57309. ZEND_NULL_HANDLER,
  57310. ZEND_NULL_HANDLER,
  57311. ZEND_NULL_HANDLER,
  57312. ZEND_NULL_HANDLER,
  57313. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57314. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57315. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57316. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57317. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57318. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57319. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57320. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57321. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57322. ZEND_NULL_HANDLER,
  57323. ZEND_NULL_HANDLER,
  57324. ZEND_NULL_HANDLER,
  57325. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57326. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57327. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57328. ZEND_NULL_HANDLER,
  57329. ZEND_NULL_HANDLER,
  57330. ZEND_NULL_HANDLER,
  57331. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57332. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57333. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57334. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57335. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57336. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57337. ZEND_NULL_HANDLER,
  57338. ZEND_NULL_HANDLER,
  57339. ZEND_NULL_HANDLER,
  57340. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57341. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57342. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57343. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57344. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57345. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57346. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57347. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57348. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57349. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57350. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57351. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57352. ZEND_NULL_HANDLER,
  57353. ZEND_NULL_HANDLER,
  57354. ZEND_NULL_HANDLER,
  57355. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57356. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57357. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57358. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57359. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57360. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57361. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57362. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57363. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57364. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57365. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57366. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57367. ZEND_NULL_HANDLER,
  57368. ZEND_NULL_HANDLER,
  57369. ZEND_NULL_HANDLER,
  57370. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57371. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57372. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57373. ZEND_NULL_HANDLER,
  57374. ZEND_NULL_HANDLER,
  57375. ZEND_NULL_HANDLER,
  57376. ZEND_NULL_HANDLER,
  57377. ZEND_NULL_HANDLER,
  57378. ZEND_NULL_HANDLER,
  57379. ZEND_NULL_HANDLER,
  57380. ZEND_NULL_HANDLER,
  57381. ZEND_NULL_HANDLER,
  57382. ZEND_NULL_HANDLER,
  57383. ZEND_NULL_HANDLER,
  57384. ZEND_NULL_HANDLER,
  57385. ZEND_NULL_HANDLER,
  57386. ZEND_NULL_HANDLER,
  57387. ZEND_NULL_HANDLER,
  57388. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57389. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57390. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57391. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57392. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57393. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57394. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57395. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57396. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57397. ZEND_NULL_HANDLER,
  57398. ZEND_NULL_HANDLER,
  57399. ZEND_NULL_HANDLER,
  57400. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57401. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57402. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57403. ZEND_NULL_HANDLER,
  57404. ZEND_NULL_HANDLER,
  57405. ZEND_NULL_HANDLER,
  57406. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57407. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57408. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57409. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57410. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57411. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57412. ZEND_NULL_HANDLER,
  57413. ZEND_NULL_HANDLER,
  57414. ZEND_NULL_HANDLER,
  57415. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57416. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57417. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57418. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57419. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57420. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57421. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57422. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57423. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57424. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57425. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57426. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57427. ZEND_NULL_HANDLER,
  57428. ZEND_NULL_HANDLER,
  57429. ZEND_NULL_HANDLER,
  57430. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57431. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57432. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57433. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57434. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57435. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57436. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57437. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57438. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57439. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57440. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57441. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57442. ZEND_NULL_HANDLER,
  57443. ZEND_NULL_HANDLER,
  57444. ZEND_NULL_HANDLER,
  57445. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57446. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57447. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57448. ZEND_NULL_HANDLER,
  57449. ZEND_NULL_HANDLER,
  57450. ZEND_NULL_HANDLER,
  57451. ZEND_NULL_HANDLER,
  57452. ZEND_NULL_HANDLER,
  57453. ZEND_NULL_HANDLER,
  57454. ZEND_NULL_HANDLER,
  57455. ZEND_NULL_HANDLER,
  57456. ZEND_NULL_HANDLER,
  57457. ZEND_NULL_HANDLER,
  57458. ZEND_NULL_HANDLER,
  57459. ZEND_NULL_HANDLER,
  57460. ZEND_NULL_HANDLER,
  57461. ZEND_NULL_HANDLER,
  57462. ZEND_NULL_HANDLER,
  57463. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57464. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57465. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57466. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57467. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57468. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57469. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57470. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57471. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57472. ZEND_NULL_HANDLER,
  57473. ZEND_NULL_HANDLER,
  57474. ZEND_NULL_HANDLER,
  57475. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57476. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57477. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57478. ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
  57479. ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
  57480. ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
  57481. ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
  57482. ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
  57483. ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
  57484. ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
  57485. ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
  57486. ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
  57487. ZEND_POST_INC_LONG_SPEC_CV_HANDLER,
  57488. ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
  57489. ZEND_POST_DEC_LONG_SPEC_CV_HANDLER,
  57490. ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER,
  57491. ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
  57492. ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
  57493. ZEND_NULL_HANDLER,
  57494. ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
  57495. ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER,
  57496. ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
  57497. ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
  57498. ZEND_NULL_HANDLER,
  57499. ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
  57500. ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER,
  57501. ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
  57502. ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
  57503. ZEND_NULL_HANDLER,
  57504. ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
  57505. ZEND_NULL_HANDLER,
  57506. ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
  57507. ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
  57508. ZEND_NULL_HANDLER,
  57509. ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
  57510. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
  57511. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57512. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57513. ZEND_NULL_HANDLER,
  57514. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57515. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
  57516. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57517. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57518. ZEND_NULL_HANDLER,
  57519. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57520. ZEND_NULL_HANDLER,
  57521. ZEND_NULL_HANDLER,
  57522. ZEND_NULL_HANDLER,
  57523. ZEND_NULL_HANDLER,
  57524. ZEND_NULL_HANDLER,
  57525. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER,
  57526. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
  57527. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
  57528. ZEND_NULL_HANDLER,
  57529. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
  57530. ZEND_NULL_HANDLER,
  57531. ZEND_NULL_HANDLER,
  57532. ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER,
  57533. ZEND_NULL_HANDLER,
  57534. ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER,
  57535. ZEND_NULL_HANDLER,
  57536. ZEND_NULL_HANDLER,
  57537. ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER,
  57538. ZEND_NULL_HANDLER,
  57539. ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER,
  57540. ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER,
  57541. ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER,
  57542. ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
  57543. ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER,
  57544. ZEND_NULL_HANDLER
  57545. };
  57546. static const uint32_t specs[] = {
  57547. 0,
  57548. 1 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57549. 26 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57550. 51 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57551. 76 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57552. 101 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57553. 126 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57554. 151 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57555. 176 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57556. 201 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57557. 226 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57558. 251 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57559. 276 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57560. 301 | SPEC_RULE_OP1,
  57561. 306 | SPEC_RULE_OP1,
  57562. 311 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57563. 336 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57564. 361 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57565. 386 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE,
  57566. 461 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE,
  57567. 536 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH,
  57568. 611 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH,
  57569. 686 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_RETVAL,
  57570. 736 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
  57571. 861 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
  57572. 986 | SPEC_RULE_OP_DATA,
  57573. 991 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57574. 1016 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57575. 1041 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57576. 1066,
  57577. 1067 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57578. 1092 | SPEC_RULE_OP1,
  57579. 1097 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
  57580. 1222,
  57581. 1223 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
  57582. 1233 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
  57583. 1243 | SPEC_RULE_OP1,
  57584. 1248 | SPEC_RULE_OP1,
  57585. 1253,
  57586. 1253,
  57587. 1254,
  57588. 1254,
  57589. 1255,
  57590. 1256 | SPEC_RULE_OP1,
  57591. 1261 | SPEC_RULE_OP1,
  57592. 1266 | SPEC_RULE_OP1,
  57593. 1271 | SPEC_RULE_OP1,
  57594. 1276 | SPEC_RULE_OP1,
  57595. 1281 | SPEC_RULE_OP2,
  57596. 1286,
  57597. 1287 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
  57598. 1297 | SPEC_RULE_OP1,
  57599. 1302 | SPEC_RULE_OP1,
  57600. 1307 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57601. 1332 | SPEC_RULE_OP2,
  57602. 1337 | SPEC_RULE_OP2,
  57603. 1342 | SPEC_RULE_OP2,
  57604. 1347,
  57605. 1348,
  57606. 1349,
  57607. 1350 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
  57608. 1354,
  57609. 1355 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
  57610. 1365,
  57611. 1366,
  57612. 1367 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57613. 1392 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
  57614. 1442 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57615. 1467 | SPEC_RULE_OP1,
  57616. 1472,
  57617. 1473,
  57618. 1474 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57619. 1499 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57620. 1524 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
  57621. 1534 | SPEC_RULE_OP1,
  57622. 1539 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57623. 1564 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57624. 1589 | SPEC_RULE_OP1,
  57625. 1594,
  57626. 1595,
  57627. 1596 | SPEC_RULE_OP1,
  57628. 1601 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57629. 1626 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57630. 1651 | SPEC_RULE_OP1,
  57631. 1656 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57632. 1681 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57633. 1706 | SPEC_RULE_OP1,
  57634. 1711 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57635. 1736 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57636. 1761 | SPEC_RULE_OP1,
  57637. 1766 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57638. 1791 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57639. 1816 | SPEC_RULE_OP1,
  57640. 1821 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57641. 1846 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57642. 1871 | SPEC_RULE_OP1,
  57643. 1876 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57644. 1901 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57645. 1926 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57646. 1951,
  57647. 1952 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
  57648. 1962,
  57649. 1963,
  57650. 1964,
  57651. 1965,
  57652. 1966,
  57653. 1967 | SPEC_RULE_OP2,
  57654. 1972,
  57655. 1973 | SPEC_RULE_OP1,
  57656. 1978 | SPEC_RULE_OP2,
  57657. 1983 | SPEC_RULE_OP1,
  57658. 1988 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
  57659. 1998 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57660. 2023 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57661. 2048 | SPEC_RULE_OP1,
  57662. 2053 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57663. 2078 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
  57664. 2128 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57665. 2153 | SPEC_RULE_OP2,
  57666. 2158,
  57667. 2159 | SPEC_RULE_OP1,
  57668. 2164 | SPEC_RULE_OP1,
  57669. 2169,
  57670. 2170 | SPEC_RULE_OP1,
  57671. 2175 | SPEC_RULE_OP1,
  57672. 2180 | SPEC_RULE_OP1,
  57673. 2185,
  57674. 2186,
  57675. 2187 | SPEC_RULE_OP2,
  57676. 2192 | SPEC_RULE_RETVAL,
  57677. 2194 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
  57678. 2198 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
  57679. 2202 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57680. 2202 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57681. 2227 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57682. 2227 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57683. 2252 | SPEC_RULE_OP1,
  57684. 2257,
  57685. 2258 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57686. 2283,
  57687. 2284 | SPEC_RULE_OP1,
  57688. 2289,
  57689. 2290,
  57690. 2291,
  57691. 2292,
  57692. 2293,
  57693. 2294,
  57694. 2295,
  57695. 2296 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57696. 2321,
  57697. 2322,
  57698. 2323,
  57699. 2324 | SPEC_RULE_OP1,
  57700. 2329,
  57701. 2330 | SPEC_RULE_ISSET,
  57702. 2332 | SPEC_RULE_OP2,
  57703. 2337,
  57704. 2338 | SPEC_RULE_OP1,
  57705. 2343 | SPEC_RULE_OBSERVER,
  57706. 2345,
  57707. 2346 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57708. 2371 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
  57709. 2381,
  57710. 2382,
  57711. 2383,
  57712. 2384,
  57713. 2385 | SPEC_RULE_OP1,
  57714. 2390,
  57715. 2391,
  57716. 2392 | SPEC_RULE_OP1,
  57717. 2397 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57718. 2422,
  57719. 2423 | SPEC_RULE_OP1,
  57720. 2428,
  57721. 2429,
  57722. 2430,
  57723. 2431,
  57724. 2432,
  57725. 2433,
  57726. 2434,
  57727. 2435,
  57728. 2436 | SPEC_RULE_OP1,
  57729. 2441,
  57730. 2442,
  57731. 2443,
  57732. 2444 | SPEC_RULE_OP2,
  57733. 2449,
  57734. 2450 | SPEC_RULE_OP1,
  57735. 2455 | SPEC_RULE_OP1,
  57736. 2460 | SPEC_RULE_OP1,
  57737. 2465 | SPEC_RULE_OP1,
  57738. 2470 | SPEC_RULE_OP1,
  57739. 2475,
  57740. 2476 | SPEC_RULE_OP1,
  57741. 2481 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57742. 2506 | SPEC_RULE_OP1,
  57743. 2511 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57744. 2536 | SPEC_RULE_OP1,
  57745. 2541 | SPEC_RULE_OP1,
  57746. 2546,
  57747. 2547,
  57748. 2548,
  57749. 2549,
  57750. 3453
  57751. };
  57752. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  57753. zend_opcode_handler_funcs = labels;
  57754. zend_spec_handlers = specs;
  57755. execute_ex(NULL);
  57756. #else
  57757. zend_opcode_handlers = labels;
  57758. zend_handlers_count = sizeof(labels) / sizeof(void*);
  57759. zend_spec_handlers = specs;
  57760. #endif
  57761. VM_TRACE_START();
  57762. }
  57763. static HashTable *zend_handlers_table = NULL;
  57764. void zend_vm_dtor(void)
  57765. {
  57766. VM_TRACE_END();
  57767. if (zend_handlers_table) {
  57768. zend_hash_destroy(zend_handlers_table);
  57769. free(zend_handlers_table);
  57770. zend_handlers_table = NULL;
  57771. }
  57772. }
  57773. static void init_opcode_serialiser(void)
  57774. {
  57775. int i;
  57776. zval tmp;
  57777. zend_handlers_table = malloc(sizeof(HashTable));
  57778. zend_hash_init(zend_handlers_table, zend_handlers_count, NULL, NULL, 1);
  57779. zend_hash_real_init(zend_handlers_table, 0);
  57780. Z_TYPE_INFO(tmp) = IS_LONG;
  57781. for (i = 0; i < zend_handlers_count; i++) {
  57782. Z_LVAL(tmp) = i;
  57783. zend_hash_index_add(zend_handlers_table, (zend_long)(zend_uintptr_t)zend_opcode_handlers[i], &tmp);
  57784. }
  57785. }
  57786. ZEND_API void ZEND_FASTCALL zend_serialize_opcode_handler(zend_op *op)
  57787. {
  57788. zval *zv;
  57789. if (!zend_handlers_table) {
  57790. init_opcode_serialiser();
  57791. }
  57792. zv = zend_hash_index_find(zend_handlers_table, (zend_long)(zend_uintptr_t)op->handler);
  57793. ZEND_ASSERT(zv != NULL);
  57794. op->handler = (const void *)(zend_uintptr_t)Z_LVAL_P(zv);
  57795. }
  57796. ZEND_API void ZEND_FASTCALL zend_deserialize_opcode_handler(zend_op *op)
  57797. {
  57798. op->handler = zend_opcode_handlers[(zend_uintptr_t)op->handler];
  57799. }
  57800. ZEND_API const void* ZEND_FASTCALL zend_get_opcode_handler_func(const zend_op *op)
  57801. {
  57802. #if ZEND_VM_KIND == ZEND_VM_KIND_CALL
  57803. return op->handler;
  57804. #elif ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
  57805. zval *zv;
  57806. if (!zend_handlers_table) {
  57807. init_opcode_serialiser();
  57808. }
  57809. zv = zend_hash_index_find(zend_handlers_table, (zend_long)(zend_uintptr_t)op->handler);
  57810. ZEND_ASSERT(zv != NULL);
  57811. return zend_opcode_handler_funcs[Z_LVAL_P(zv)];
  57812. #else
  57813. return NULL;
  57814. #endif
  57815. }
  57816. ZEND_API const zend_op *zend_get_halt_op(void)
  57817. {
  57818. #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
  57819. return &hybrid_halt_op;
  57820. #else
  57821. return NULL;
  57822. #endif
  57823. }
  57824. ZEND_API int zend_vm_kind(void)
  57825. {
  57826. return ZEND_VM_KIND;
  57827. }
  57828. static uint32_t ZEND_FASTCALL zend_vm_get_opcode_handler_idx(uint32_t spec, const zend_op* op)
  57829. {
  57830. static const int zend_vm_decode[] = {
  57831. _UNUSED_CODE, /* 0 = IS_UNUSED */
  57832. _CONST_CODE, /* 1 = IS_CONST */
  57833. _TMP_CODE, /* 2 = IS_TMP_VAR */
  57834. _UNUSED_CODE, /* 3 */
  57835. _VAR_CODE, /* 4 = IS_VAR */
  57836. _UNUSED_CODE, /* 5 */
  57837. _UNUSED_CODE, /* 6 */
  57838. _UNUSED_CODE, /* 7 */
  57839. _CV_CODE /* 8 = IS_CV */
  57840. };
  57841. uint32_t offset = 0;
  57842. if (spec & SPEC_RULE_OP1) offset = offset * 5 + zend_vm_decode[op->op1_type];
  57843. if (spec & SPEC_RULE_OP2) offset = offset * 5 + zend_vm_decode[op->op2_type];
  57844. if (spec & SPEC_EXTRA_MASK) {
  57845. if (spec & SPEC_RULE_RETVAL) {
  57846. offset = offset * 2 + (op->result_type != IS_UNUSED);
  57847. if ((spec & SPEC_RULE_OBSERVER) && ZEND_OBSERVER_ENABLED) {
  57848. offset += 2;
  57849. }
  57850. } else if (spec & SPEC_RULE_QUICK_ARG) {
  57851. offset = offset * 2 + (op->op2.num <= MAX_ARG_FLAG_NUM);
  57852. } else if (spec & SPEC_RULE_OP_DATA) {
  57853. offset = offset * 5 + zend_vm_decode[(op + 1)->op1_type];
  57854. } else if (spec & SPEC_RULE_ISSET) {
  57855. offset = offset * 2 + (op->extended_value & ZEND_ISEMPTY);
  57856. } else if (spec & SPEC_RULE_SMART_BRANCH) {
  57857. offset = offset * 3;
  57858. if (op->result_type == (IS_SMART_BRANCH_JMPZ|IS_TMP_VAR)) {
  57859. offset += 1;
  57860. } else if (op->result_type == (IS_SMART_BRANCH_JMPNZ|IS_TMP_VAR)) {
  57861. offset += 2;
  57862. }
  57863. } else if (spec & SPEC_RULE_OBSERVER) {
  57864. offset = offset * 2;
  57865. if (ZEND_OBSERVER_ENABLED) {
  57866. offset += 1;
  57867. }
  57868. }
  57869. }
  57870. return (spec & SPEC_START_MASK) + offset;
  57871. }
  57872. #if (ZEND_VM_KIND != ZEND_VM_KIND_HYBRID) || !ZEND_VM_SPEC
  57873. static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op* op)
  57874. {
  57875. return zend_opcode_handlers[zend_vm_get_opcode_handler_idx(zend_spec_handlers[opcode], op)];
  57876. }
  57877. #endif
  57878. #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
  57879. static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend_op* op)
  57880. {
  57881. uint32_t spec = zend_spec_handlers[opcode];
  57882. return zend_opcode_handler_funcs[zend_vm_get_opcode_handler_idx(spec, op)];
  57883. }
  57884. #endif
  57885. ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler(zend_op* op)
  57886. {
  57887. zend_uchar opcode = zend_user_opcodes[op->opcode];
  57888. if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
  57889. if (op->op1_type < op->op2_type) {
  57890. zend_swap_operands(op);
  57891. }
  57892. }
  57893. op->handler = zend_opcode_handlers[zend_vm_get_opcode_handler_idx(zend_spec_handlers[opcode], op)];
  57894. }
  57895. 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)
  57896. {
  57897. zend_uchar opcode = zend_user_opcodes[op->opcode];
  57898. uint32_t spec = zend_spec_handlers[opcode];
  57899. switch (opcode) {
  57900. case ZEND_ADD:
  57901. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  57902. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57903. break;
  57904. }
  57905. spec = 2552 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  57906. if (op->op1_type < op->op2_type) {
  57907. zend_swap_operands(op);
  57908. }
  57909. } else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  57910. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57911. break;
  57912. }
  57913. spec = 2577 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  57914. if (op->op1_type < op->op2_type) {
  57915. zend_swap_operands(op);
  57916. }
  57917. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  57918. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57919. break;
  57920. }
  57921. spec = 2602 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  57922. if (op->op1_type < op->op2_type) {
  57923. zend_swap_operands(op);
  57924. }
  57925. }
  57926. break;
  57927. case ZEND_SUB:
  57928. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  57929. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57930. break;
  57931. }
  57932. spec = 2627 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
  57933. } else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  57934. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57935. break;
  57936. }
  57937. spec = 2652 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
  57938. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  57939. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57940. break;
  57941. }
  57942. spec = 2677 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
  57943. }
  57944. break;
  57945. case ZEND_MUL:
  57946. if (op->op1_type < op->op2_type) {
  57947. zend_swap_operands(op);
  57948. }
  57949. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  57950. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57951. break;
  57952. }
  57953. spec = 2702 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  57954. } else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  57955. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57956. break;
  57957. }
  57958. spec = 2727 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  57959. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  57960. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57961. break;
  57962. }
  57963. spec = 2752 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  57964. }
  57965. break;
  57966. case ZEND_IS_IDENTICAL:
  57967. if (op->op1_type < op->op2_type) {
  57968. zend_swap_operands(op);
  57969. }
  57970. if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  57971. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57972. break;
  57973. }
  57974. spec = 2777 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  57975. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  57976. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57977. break;
  57978. }
  57979. spec = 2852 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  57980. } 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))) {
  57981. spec = 3077 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  57982. }
  57983. break;
  57984. case ZEND_IS_NOT_IDENTICAL:
  57985. if (op->op1_type < op->op2_type) {
  57986. zend_swap_operands(op);
  57987. }
  57988. if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  57989. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57990. break;
  57991. }
  57992. spec = 2927 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  57993. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  57994. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  57995. break;
  57996. }
  57997. spec = 3002 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  57998. } 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))) {
  57999. spec = 3082 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  58000. }
  58001. break;
  58002. case ZEND_IS_EQUAL:
  58003. if (op->op1_type < op->op2_type) {
  58004. zend_swap_operands(op);
  58005. }
  58006. if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58007. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58008. break;
  58009. }
  58010. spec = 2777 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  58011. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  58012. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58013. break;
  58014. }
  58015. spec = 2852 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  58016. }
  58017. break;
  58018. case ZEND_IS_NOT_EQUAL:
  58019. if (op->op1_type < op->op2_type) {
  58020. zend_swap_operands(op);
  58021. }
  58022. if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58023. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58024. break;
  58025. }
  58026. spec = 2927 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  58027. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  58028. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58029. break;
  58030. }
  58031. spec = 3002 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  58032. }
  58033. break;
  58034. case ZEND_IS_SMALLER:
  58035. if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58036. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58037. break;
  58038. }
  58039. spec = 3087 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
  58040. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  58041. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58042. break;
  58043. }
  58044. spec = 3162 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
  58045. }
  58046. break;
  58047. case ZEND_IS_SMALLER_OR_EQUAL:
  58048. if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58049. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58050. break;
  58051. }
  58052. spec = 3237 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
  58053. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  58054. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58055. break;
  58056. }
  58057. spec = 3312 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
  58058. }
  58059. break;
  58060. case ZEND_QM_ASSIGN:
  58061. if (op1_info == MAY_BE_LONG) {
  58062. spec = 3399 | SPEC_RULE_OP1;
  58063. } else if (op1_info == MAY_BE_DOUBLE) {
  58064. spec = 3404 | SPEC_RULE_OP1;
  58065. } 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))))) {
  58066. spec = 3409 | SPEC_RULE_OP1;
  58067. }
  58068. break;
  58069. case ZEND_PRE_INC:
  58070. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
  58071. spec = 3387 | SPEC_RULE_RETVAL;
  58072. } else if (op1_info == MAY_BE_LONG) {
  58073. spec = 3389 | SPEC_RULE_RETVAL;
  58074. }
  58075. break;
  58076. case ZEND_PRE_DEC:
  58077. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
  58078. spec = 3391 | SPEC_RULE_RETVAL;
  58079. } else if (op1_info == MAY_BE_LONG) {
  58080. spec = 3393 | SPEC_RULE_RETVAL;
  58081. }
  58082. break;
  58083. case ZEND_POST_INC:
  58084. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
  58085. spec = 3395;
  58086. } else if (op1_info == MAY_BE_LONG) {
  58087. spec = 3396;
  58088. }
  58089. break;
  58090. case ZEND_POST_DEC:
  58091. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
  58092. spec = 3397;
  58093. } else if (op1_info == MAY_BE_LONG) {
  58094. spec = 3398;
  58095. }
  58096. break;
  58097. case ZEND_JMP:
  58098. if (OP_JMP_ADDR(op, op->op1) > op) {
  58099. spec = 2551;
  58100. }
  58101. break;
  58102. case ZEND_RECV:
  58103. if (op->op2.num == MAY_BE_ANY) {
  58104. spec = 2550;
  58105. }
  58106. break;
  58107. case ZEND_SEND_VAL:
  58108. if (op->op1_type == IS_CONST && op->op2_type == IS_UNUSED && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
  58109. spec = 3449;
  58110. }
  58111. break;
  58112. case ZEND_SEND_VAR_EX:
  58113. if (op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
  58114. spec = 3444 | SPEC_RULE_OP1;
  58115. }
  58116. break;
  58117. case ZEND_FE_FETCH_R:
  58118. if (op->op2_type == IS_CV && (op1_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY) {
  58119. spec = 3451 | SPEC_RULE_RETVAL;
  58120. }
  58121. break;
  58122. case ZEND_FETCH_DIM_R:
  58123. if (!(op2_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
  58124. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58125. break;
  58126. }
  58127. spec = 3414 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
  58128. }
  58129. break;
  58130. case ZEND_SEND_VAL_EX:
  58131. 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))) {
  58132. spec = 3450;
  58133. }
  58134. break;
  58135. case ZEND_SEND_VAR:
  58136. if (op->op2_type == IS_UNUSED && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
  58137. spec = 3439 | SPEC_RULE_OP1;
  58138. }
  58139. break;
  58140. case ZEND_BW_OR:
  58141. case ZEND_BW_AND:
  58142. case ZEND_BW_XOR:
  58143. case ZEND_BOOL_XOR:
  58144. if (op->op1_type < op->op2_type) {
  58145. zend_swap_operands(op);
  58146. }
  58147. break;
  58148. case ZEND_USER_OPCODE:
  58149. if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
  58150. if (op->op1_type < op->op2_type) {
  58151. zend_swap_operands(op);
  58152. }
  58153. }
  58154. break;
  58155. default:
  58156. break;
  58157. }
  58158. op->handler = zend_opcode_handlers[zend_vm_get_opcode_handler_idx(spec, op)];
  58159. }
  58160. ZEND_API int ZEND_FASTCALL zend_vm_call_opcode_handler(zend_execute_data* ex)
  58161. {
  58162. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  58163. opcode_handler_t handler;
  58164. #endif
  58165. int ret;
  58166. #ifdef ZEND_VM_IP_GLOBAL_REG
  58167. const zend_op *orig_opline = opline;
  58168. #endif
  58169. #ifdef ZEND_VM_FP_GLOBAL_REG
  58170. zend_execute_data *orig_execute_data = execute_data;
  58171. execute_data = ex;
  58172. #else
  58173. zend_execute_data *execute_data = ex;
  58174. #endif
  58175. LOAD_OPLINE();
  58176. #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
  58177. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  58178. handler = (opcode_handler_t)zend_vm_get_opcode_handler_func(zend_user_opcodes[opline->opcode], opline);
  58179. handler(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  58180. if (EXPECTED(opline != &hybrid_halt_op)) {
  58181. #else
  58182. ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  58183. if (EXPECTED(opline)) {
  58184. #endif
  58185. ret = execute_data != ex ? (int)(execute_data->prev_execute_data != ex) + 1 : 0;
  58186. SAVE_OPLINE();
  58187. } else {
  58188. ret = -1;
  58189. }
  58190. #else
  58191. ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  58192. SAVE_OPLINE();
  58193. #endif
  58194. #ifdef ZEND_VM_FP_GLOBAL_REG
  58195. execute_data = orig_execute_data;
  58196. #endif
  58197. #ifdef ZEND_VM_IP_GLOBAL_REG
  58198. opline = orig_opline;
  58199. #endif
  58200. return ret;
  58201. }