zend_vm_execute.h 2.1 MB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329153301533115332153331533415335153361533715338153391534015341153421534315344153451534615347153481534915350153511535215353153541535515356153571535815359153601536115362153631536415365153661536715368153691537015371153721537315374153751537615377153781537915380153811538215383153841538515386153871538815389153901539115392153931539415395153961539715398153991540015401154021540315404154051540615407154081540915410154111541215413154141541515416154171541815419154201542115422154231542415425154261542715428154291543015431154321543315434154351543615437154381543915440154411544215443154441544515446154471544815449154501545115452154531545415455154561545715458154591546015461154621546315464154651546615467154681546915470154711547215473154741547515476154771547815479154801548115482154831548415485154861548715488154891549015491154921549315494154951549615497154981549915500155011550215503155041550515506155071550815509155101551115512155131551415515155161551715518155191552015521155221552315524155251552615527155281552915530155311553215533155341553515536155371553815539155401554115542155431554415545155461554715548155491555015551155521555315554155551555615557155581555915560155611556215563155641556515566155671556815569155701557115572155731557415575155761557715578155791558015581155821558315584155851558615587155881558915590155911559215593155941559515596155971559815599156001560115602156031560415605156061560715608156091561015611156121561315614156151561615617156181561915620156211562215623156241562515626156271562815629156301563115632156331563415635156361563715638156391564015641156421564315644156451564615647156481564915650156511565215653156541565515656156571565815659156601566115662156631566415665156661566715668156691567015671156721567315674156751567615677156781567915680156811568215683156841568515686156871568815689156901569115692156931569415695156961569715698156991570015701157021570315704157051570615707157081570915710157111571215713157141571515716157171571815719157201572115722157231572415725157261572715728157291573015731157321573315734157351573615737157381573915740157411574215743157441574515746157471574815749157501575115752157531575415755157561575715758157591576015761157621576315764157651576615767157681576915770157711577215773157741577515776157771577815779157801578115782157831578415785157861578715788157891579015791157921579315794157951579615797157981579915800158011580215803158041580515806158071580815809158101581115812158131581415815158161581715818158191582015821158221582315824158251582615827158281582915830158311583215833158341583515836158371583815839158401584115842158431584415845158461584715848158491585015851158521585315854158551585615857158581585915860158611586215863158641586515866158671586815869158701587115872158731587415875158761587715878158791588015881158821588315884158851588615887158881588915890158911589215893158941589515896158971589815899159001590115902159031590415905159061590715908159091591015911159121591315914159151591615917159181591915920159211592215923159241592515926159271592815929159301593115932159331593415935159361593715938159391594015941159421594315944159451594615947159481594915950159511595215953159541595515956159571595815959159601596115962159631596415965159661596715968159691597015971159721597315974159751597615977159781597915980159811598215983159841598515986159871598815989159901599115992159931599415995159961599715998159991600016001160021600316004160051600616007160081600916010160111601216013160141601516016160171601816019160201602116022160231602416025160261602716028160291603016031160321603316034160351603616037160381603916040160411604216043160441604516046160471604816049160501605116052160531605416055160561605716058160591606016061160621606316064160651606616067160681606916070160711607216073160741607516076160771607816079160801608116082160831608416085160861608716088160891609016091160921609316094160951609616097160981609916100161011610216103161041610516106161071610816109161101611116112161131611416115161161611716118161191612016121161221612316124161251612616127161281612916130161311613216133161341613516136161371613816139161401614116142161431614416145161461614716148161491615016151161521615316154161551615616157161581615916160161611616216163161641616516166161671616816169161701617116172161731617416175161761617716178161791618016181161821618316184161851618616187161881618916190161911619216193161941619516196161971619816199162001620116202162031620416205162061620716208162091621016211162121621316214162151621616217162181621916220162211622216223162241622516226162271622816229162301623116232162331623416235162361623716238162391624016241162421624316244162451624616247162481624916250162511625216253162541625516256162571625816259162601626116262162631626416265162661626716268162691627016271162721627316274162751627616277162781627916280162811628216283162841628516286162871628816289162901629116292162931629416295162961629716298162991630016301163021630316304163051630616307163081630916310163111631216313163141631516316163171631816319163201632116322163231632416325163261632716328163291633016331163321633316334163351633616337163381633916340163411634216343163441634516346163471634816349163501635116352163531635416355163561635716358163591636016361163621636316364163651636616367163681636916370163711637216373163741637516376163771637816379163801638116382163831638416385163861638716388163891639016391163921639316394163951639616397163981639916400164011640216403164041640516406164071640816409164101641116412164131641416415164161641716418164191642016421164221642316424164251642616427164281642916430164311643216433164341643516436164371643816439164401644116442164431644416445164461644716448164491645016451164521645316454164551645616457164581645916460164611646216463164641646516466164671646816469164701647116472164731647416475164761647716478164791648016481164821648316484164851648616487164881648916490164911649216493164941649516496164971649816499165001650116502165031650416505165061650716508165091651016511165121651316514165151651616517165181651916520165211652216523165241652516526165271652816529165301653116532165331653416535165361653716538165391654016541165421654316544165451654616547165481654916550165511655216553165541655516556165571655816559165601656116562165631656416565165661656716568165691657016571165721657316574165751657616577165781657916580165811658216583165841658516586165871658816589165901659116592165931659416595165961659716598165991660016601166021660316604166051660616607166081660916610166111661216613166141661516616166171661816619166201662116622166231662416625166261662716628166291663016631166321663316634166351663616637166381663916640166411664216643166441664516646166471664816649166501665116652166531665416655166561665716658166591666016661166621666316664166651666616667166681666916670166711667216673166741667516676166771667816679166801668116682166831668416685166861668716688166891669016691166921669316694166951669616697166981669916700167011670216703167041670516706167071670816709167101671116712167131671416715167161671716718167191672016721167221672316724167251672616727167281672916730167311673216733167341673516736167371673816739167401674116742167431674416745167461674716748167491675016751167521675316754167551675616757167581675916760167611676216763167641676516766167671676816769167701677116772167731677416775167761677716778167791678016781167821678316784167851678616787167881678916790167911679216793167941679516796167971679816799168001680116802168031680416805168061680716808168091681016811168121681316814168151681616817168181681916820168211682216823168241682516826168271682816829168301683116832168331683416835168361683716838168391684016841168421684316844168451684616847168481684916850168511685216853168541685516856168571685816859168601686116862168631686416865168661686716868168691687016871168721687316874168751687616877168781687916880168811688216883168841688516886168871688816889168901689116892168931689416895168961689716898168991690016901169021690316904169051690616907169081690916910169111691216913169141691516916169171691816919169201692116922169231692416925169261692716928169291693016931169321693316934169351693616937169381693916940169411694216943169441694516946169471694816949169501695116952169531695416955169561695716958169591696016961169621696316964169651696616967169681696916970169711697216973169741697516976169771697816979169801698116982169831698416985169861698716988169891699016991169921699316994169951699616997169981699917000170011700217003170041700517006170071700817009170101701117012170131701417015170161701717018170191702017021170221702317024170251702617027170281702917030170311703217033170341703517036170371703817039170401704117042170431704417045170461704717048170491705017051170521705317054170551705617057170581705917060170611706217063170641706517066170671706817069170701707117072170731707417075170761707717078170791708017081170821708317084170851708617087170881708917090170911709217093170941709517096170971709817099171001710117102171031710417105171061710717108171091711017111171121711317114171151711617117171181711917120171211712217123171241712517126171271712817129171301713117132171331713417135171361713717138171391714017141171421714317144171451714617147171481714917150171511715217153171541715517156171571715817159171601716117162171631716417165171661716717168171691717017171171721717317174171751717617177171781717917180171811718217183171841718517186171871718817189171901719117192171931719417195171961719717198171991720017201172021720317204172051720617207172081720917210172111721217213172141721517216172171721817219172201722117222172231722417225172261722717228172291723017231172321723317234172351723617237172381723917240172411724217243172441724517246172471724817249172501725117252172531725417255172561725717258172591726017261172621726317264172651726617267172681726917270172711727217273172741727517276172771727817279172801728117282172831728417285172861728717288172891729017291172921729317294172951729617297172981729917300173011730217303173041730517306173071730817309173101731117312173131731417315173161731717318173191732017321173221732317324173251732617327173281732917330173311733217333173341733517336173371733817339173401734117342173431734417345173461734717348173491735017351173521735317354173551735617357173581735917360173611736217363173641736517366173671736817369173701737117372173731737417375173761737717378173791738017381173821738317384173851738617387173881738917390173911739217393173941739517396173971739817399174001740117402174031740417405174061740717408174091741017411174121741317414174151741617417174181741917420174211742217423174241742517426174271742817429174301743117432174331743417435174361743717438174391744017441174421744317444174451744617447174481744917450174511745217453174541745517456174571745817459174601746117462174631746417465174661746717468174691747017471174721747317474174751747617477174781747917480174811748217483174841748517486174871748817489174901749117492174931749417495174961749717498174991750017501175021750317504175051750617507175081750917510175111751217513175141751517516175171751817519175201752117522175231752417525175261752717528175291753017531175321753317534175351753617537175381753917540175411754217543175441754517546175471754817549175501755117552175531755417555175561755717558175591756017561175621756317564175651756617567175681756917570175711757217573175741757517576175771757817579175801758117582175831758417585175861758717588175891759017591175921759317594175951759617597175981759917600176011760217603176041760517606176071760817609176101761117612176131761417615176161761717618176191762017621176221762317624176251762617627176281762917630176311763217633176341763517636176371763817639176401764117642176431764417645176461764717648176491765017651176521765317654176551765617657176581765917660176611766217663176641766517666176671766817669176701767117672176731767417675176761767717678176791768017681176821768317684176851768617687176881768917690176911769217693176941769517696176971769817699177001770117702177031770417705177061770717708177091771017711177121771317714177151771617717177181771917720177211772217723177241772517726177271772817729177301773117732177331773417735177361773717738177391774017741177421774317744177451774617747177481774917750177511775217753177541775517756177571775817759177601776117762177631776417765177661776717768177691777017771177721777317774177751777617777177781777917780177811778217783177841778517786177871778817789177901779117792177931779417795177961779717798177991780017801178021780317804178051780617807178081780917810178111781217813178141781517816178171781817819178201782117822178231782417825178261782717828178291783017831178321783317834178351783617837178381783917840178411784217843178441784517846178471784817849178501785117852178531785417855178561785717858178591786017861178621786317864178651786617867178681786917870178711787217873178741787517876178771787817879178801788117882178831788417885178861788717888178891789017891178921789317894178951789617897178981789917900179011790217903179041790517906179071790817909179101791117912179131791417915179161791717918179191792017921179221792317924179251792617927179281792917930179311793217933179341793517936179371793817939179401794117942179431794417945179461794717948179491795017951179521795317954179551795617957179581795917960179611796217963179641796517966179671796817969179701797117972179731797417975179761797717978179791798017981179821798317984179851798617987179881798917990179911799217993179941799517996179971799817999180001800118002180031800418005180061800718008180091801018011180121801318014180151801618017180181801918020180211802218023180241802518026180271802818029180301803118032180331803418035180361803718038180391804018041180421804318044180451804618047180481804918050180511805218053180541805518056180571805818059180601806118062180631806418065180661806718068180691807018071180721807318074180751807618077180781807918080180811808218083180841808518086180871808818089180901809118092180931809418095180961809718098180991810018101181021810318104181051810618107181081810918110181111811218113181141811518116181171811818119181201812118122181231812418125181261812718128181291813018131181321813318134181351813618137181381813918140181411814218143181441814518146181471814818149181501815118152181531815418155181561815718158181591816018161181621816318164181651816618167181681816918170181711817218173181741817518176181771817818179181801818118182181831818418185181861818718188181891819018191181921819318194181951819618197181981819918200182011820218203182041820518206182071820818209182101821118212182131821418215182161821718218182191822018221182221822318224182251822618227182281822918230182311823218233182341823518236182371823818239182401824118242182431824418245182461824718248182491825018251182521825318254182551825618257182581825918260182611826218263182641826518266182671826818269182701827118272182731827418275182761827718278182791828018281182821828318284182851828618287182881828918290182911829218293182941829518296182971829818299183001830118302183031830418305183061830718308183091831018311183121831318314183151831618317183181831918320183211832218323183241832518326183271832818329183301833118332183331833418335183361833718338183391834018341183421834318344183451834618347183481834918350183511835218353183541835518356183571835818359183601836118362183631836418365183661836718368183691837018371183721837318374183751837618377183781837918380183811838218383183841838518386183871838818389183901839118392183931839418395183961839718398183991840018401184021840318404184051840618407184081840918410184111841218413184141841518416184171841818419184201842118422184231842418425184261842718428184291843018431184321843318434184351843618437184381843918440184411844218443184441844518446184471844818449184501845118452184531845418455184561845718458184591846018461184621846318464184651846618467184681846918470184711847218473184741847518476184771847818479184801848118482184831848418485184861848718488184891849018491184921849318494184951849618497184981849918500185011850218503185041850518506185071850818509185101851118512185131851418515185161851718518185191852018521185221852318524185251852618527185281852918530185311853218533185341853518536185371853818539185401854118542185431854418545185461854718548185491855018551185521855318554185551855618557185581855918560185611856218563185641856518566185671856818569185701857118572185731857418575185761857718578185791858018581185821858318584185851858618587185881858918590185911859218593185941859518596185971859818599186001860118602186031860418605186061860718608186091861018611186121861318614186151861618617186181861918620186211862218623186241862518626186271862818629186301863118632186331863418635186361863718638186391864018641186421864318644186451864618647186481864918650186511865218653186541865518656186571865818659186601866118662186631866418665186661866718668186691867018671186721867318674186751867618677186781867918680186811868218683186841868518686186871868818689186901869118692186931869418695186961869718698186991870018701187021870318704187051870618707187081870918710187111871218713187141871518716187171871818719187201872118722187231872418725187261872718728187291873018731187321873318734187351873618737187381873918740187411874218743187441874518746187471874818749187501875118752187531875418755187561875718758187591876018761187621876318764187651876618767187681876918770187711877218773187741877518776187771877818779187801878118782187831878418785187861878718788187891879018791187921879318794187951879618797187981879918800188011880218803188041880518806188071880818809188101881118812188131881418815188161881718818188191882018821188221882318824188251882618827188281882918830188311883218833188341883518836188371883818839188401884118842188431884418845188461884718848188491885018851188521885318854188551885618857188581885918860188611886218863188641886518866188671886818869188701887118872188731887418875188761887718878188791888018881188821888318884188851888618887188881888918890188911889218893188941889518896188971889818899189001890118902189031890418905189061890718908189091891018911189121891318914189151891618917189181891918920189211892218923189241892518926189271892818929189301893118932189331893418935189361893718938189391894018941189421894318944189451894618947189481894918950189511895218953189541895518956189571895818959189601896118962189631896418965189661896718968189691897018971189721897318974189751897618977189781897918980189811898218983189841898518986189871898818989189901899118992189931899418995189961899718998189991900019001190021900319004190051900619007190081900919010190111901219013190141901519016190171901819019190201902119022190231902419025190261902719028190291903019031190321903319034190351903619037190381903919040190411904219043190441904519046190471904819049190501905119052190531905419055190561905719058190591906019061190621906319064190651906619067190681906919070190711907219073190741907519076190771907819079190801908119082190831908419085190861908719088190891909019091190921909319094190951909619097190981909919100191011910219103191041910519106191071910819109191101911119112191131911419115191161911719118191191912019121191221912319124191251912619127191281912919130191311913219133191341913519136191371913819139191401914119142191431914419145191461914719148191491915019151191521915319154191551915619157191581915919160191611916219163191641916519166191671916819169191701917119172191731917419175191761917719178191791918019181191821918319184191851918619187191881918919190191911919219193191941919519196191971919819199192001920119202192031920419205192061920719208192091921019211192121921319214192151921619217192181921919220192211922219223192241922519226192271922819229192301923119232192331923419235192361923719238192391924019241192421924319244192451924619247192481924919250192511925219253192541925519256192571925819259192601926119262192631926419265192661926719268192691927019271192721927319274192751927619277192781927919280192811928219283192841928519286192871928819289192901929119292192931929419295192961929719298192991930019301193021930319304193051930619307193081930919310193111931219313193141931519316193171931819319193201932119322193231932419325193261932719328193291933019331193321933319334193351933619337193381933919340193411934219343193441934519346193471934819349193501935119352193531935419355193561935719358193591936019361193621936319364193651936619367193681936919370193711937219373193741937519376193771937819379193801938119382193831938419385193861938719388193891939019391193921939319394193951939619397193981939919400194011940219403194041940519406194071940819409194101941119412194131941419415194161941719418194191942019421194221942319424194251942619427194281942919430194311943219433194341943519436194371943819439194401944119442194431944419445194461944719448194491945019451194521945319454194551945619457194581945919460194611946219463194641946519466194671946819469194701947119472194731947419475194761947719478194791948019481194821948319484194851948619487194881948919490194911949219493194941949519496194971949819499195001950119502195031950419505195061950719508195091951019511195121951319514195151951619517195181951919520195211952219523195241952519526195271952819529195301953119532195331953419535195361953719538195391954019541195421954319544195451954619547195481954919550195511955219553195541955519556195571955819559195601956119562195631956419565195661956719568195691957019571195721957319574195751957619577195781957919580195811958219583195841958519586195871958819589195901959119592195931959419595195961959719598195991960019601196021960319604196051960619607196081960919610196111961219613196141961519616196171961819619196201962119622196231962419625196261962719628196291963019631196321963319634196351963619637196381963919640196411964219643196441964519646196471964819649196501965119652196531965419655196561965719658196591966019661196621966319664196651966619667196681966919670196711967219673196741967519676196771967819679196801968119682196831968419685196861968719688196891969019691196921969319694196951969619697196981969919700197011970219703197041970519706197071970819709197101971119712197131971419715197161971719718197191972019721197221972319724197251972619727197281972919730197311973219733197341973519736197371973819739197401974119742197431974419745197461974719748197491975019751197521975319754197551975619757197581975919760197611976219763197641976519766197671976819769197701977119772197731977419775197761977719778197791978019781197821978319784197851978619787197881978919790197911979219793197941979519796197971979819799198001980119802198031980419805198061980719808198091981019811198121981319814198151981619817198181981919820198211982219823198241982519826198271982819829198301983119832198331983419835198361983719838198391984019841198421984319844198451984619847198481984919850198511985219853198541985519856198571985819859198601986119862198631986419865198661986719868198691987019871198721987319874198751987619877198781987919880198811988219883198841988519886198871988819889198901989119892198931989419895198961989719898198991990019901199021990319904199051990619907199081990919910199111991219913199141991519916199171991819919199201992119922199231992419925199261992719928199291993019931199321993319934199351993619937199381993919940199411994219943199441994519946199471994819949199501995119952199531995419955199561995719958199591996019961199621996319964199651996619967199681996919970199711997219973199741997519976199771997819979199801998119982199831998419985199861998719988199891999019991199921999319994199951999619997199981999920000200012000220003200042000520006200072000820009200102001120012200132001420015200162001720018200192002020021200222002320024200252002620027200282002920030200312003220033200342003520036200372003820039200402004120042200432004420045200462004720048200492005020051200522005320054200552005620057200582005920060200612006220063200642006520066200672006820069200702007120072200732007420075200762007720078200792008020081200822008320084200852008620087200882008920090200912009220093200942009520096200972009820099201002010120102201032010420105201062010720108201092011020111201122011320114201152011620117201182011920120201212012220123201242012520126201272012820129201302013120132201332013420135201362013720138201392014020141201422014320144201452014620147201482014920150201512015220153201542015520156201572015820159201602016120162201632016420165201662016720168201692017020171201722017320174201752017620177201782017920180201812018220183201842018520186201872018820189201902019120192201932019420195201962019720198201992020020201202022020320204202052020620207202082020920210202112021220213202142021520216202172021820219202202022120222202232022420225202262022720228202292023020231202322023320234202352023620237202382023920240202412024220243202442024520246202472024820249202502025120252202532025420255202562025720258202592026020261202622026320264202652026620267202682026920270202712027220273202742027520276202772027820279202802028120282202832028420285202862028720288202892029020291202922029320294202952029620297202982029920300203012030220303203042030520306203072030820309203102031120312203132031420315203162031720318203192032020321203222032320324203252032620327203282032920330203312033220333203342033520336203372033820339203402034120342203432034420345203462034720348203492035020351203522035320354203552035620357203582035920360203612036220363203642036520366203672036820369203702037120372203732037420375203762037720378203792038020381203822038320384203852038620387203882038920390203912039220393203942039520396203972039820399204002040120402204032040420405204062040720408204092041020411204122041320414204152041620417204182041920420204212042220423204242042520426204272042820429204302043120432204332043420435204362043720438204392044020441204422044320444204452044620447204482044920450204512045220453204542045520456204572045820459204602046120462204632046420465204662046720468204692047020471204722047320474204752047620477204782047920480204812048220483204842048520486204872048820489204902049120492204932049420495204962049720498204992050020501205022050320504205052050620507205082050920510205112051220513205142051520516205172051820519205202052120522205232052420525205262052720528205292053020531205322053320534205352053620537205382053920540205412054220543205442054520546205472054820549205502055120552205532055420555205562055720558205592056020561205622056320564205652056620567205682056920570205712057220573205742057520576205772057820579205802058120582205832058420585205862058720588205892059020591205922059320594205952059620597205982059920600206012060220603206042060520606206072060820609206102061120612206132061420615206162061720618206192062020621206222062320624206252062620627206282062920630206312063220633206342063520636206372063820639206402064120642206432064420645206462064720648206492065020651206522065320654206552065620657206582065920660206612066220663206642066520666206672066820669206702067120672206732067420675206762067720678206792068020681206822068320684206852068620687206882068920690206912069220693206942069520696206972069820699207002070120702207032070420705207062070720708207092071020711207122071320714207152071620717207182071920720207212072220723207242072520726207272072820729207302073120732207332073420735207362073720738207392074020741207422074320744207452074620747207482074920750207512075220753207542075520756207572075820759207602076120762207632076420765207662076720768207692077020771207722077320774207752077620777207782077920780207812078220783207842078520786207872078820789207902079120792207932079420795207962079720798207992080020801208022080320804208052080620807208082080920810208112081220813208142081520816208172081820819208202082120822208232082420825208262082720828208292083020831208322083320834208352083620837208382083920840208412084220843208442084520846208472084820849208502085120852208532085420855208562085720858208592086020861208622086320864208652086620867208682086920870208712087220873208742087520876208772087820879208802088120882208832088420885208862088720888208892089020891208922089320894208952089620897208982089920900209012090220903209042090520906209072090820909209102091120912209132091420915209162091720918209192092020921209222092320924209252092620927209282092920930209312093220933209342093520936209372093820939209402094120942209432094420945209462094720948209492095020951209522095320954209552095620957209582095920960209612096220963209642096520966209672096820969209702097120972209732097420975209762097720978209792098020981209822098320984209852098620987209882098920990209912099220993209942099520996209972099820999210002100121002210032100421005210062100721008210092101021011210122101321014210152101621017210182101921020210212102221023210242102521026210272102821029210302103121032210332103421035210362103721038210392104021041210422104321044210452104621047210482104921050210512105221053210542105521056210572105821059210602106121062210632106421065210662106721068210692107021071210722107321074210752107621077210782107921080210812108221083210842108521086210872108821089210902109121092210932109421095210962109721098210992110021101211022110321104211052110621107211082110921110211112111221113211142111521116211172111821119211202112121122211232112421125211262112721128211292113021131211322113321134211352113621137211382113921140211412114221143211442114521146211472114821149211502115121152211532115421155211562115721158211592116021161211622116321164211652116621167211682116921170211712117221173211742117521176211772117821179211802118121182211832118421185211862118721188211892119021191211922119321194211952119621197211982119921200212012120221203212042120521206212072120821209212102121121212212132121421215212162121721218212192122021221212222122321224212252122621227212282122921230212312123221233212342123521236212372123821239212402124121242212432124421245212462124721248212492125021251212522125321254212552125621257212582125921260212612126221263212642126521266212672126821269212702127121272212732127421275212762127721278212792128021281212822128321284212852128621287212882128921290212912129221293212942129521296212972129821299213002130121302213032130421305213062130721308213092131021311213122131321314213152131621317213182131921320213212132221323213242132521326213272132821329213302133121332213332133421335213362133721338213392134021341213422134321344213452134621347213482134921350213512135221353213542135521356213572135821359213602136121362213632136421365213662136721368213692137021371213722137321374213752137621377213782137921380213812138221383213842138521386213872138821389213902139121392213932139421395213962139721398213992140021401214022140321404214052140621407214082140921410214112141221413214142141521416214172141821419214202142121422214232142421425214262142721428214292143021431214322143321434214352143621437214382143921440214412144221443214442144521446214472144821449214502145121452214532145421455214562145721458214592146021461214622146321464214652146621467214682146921470214712147221473214742147521476214772147821479214802148121482214832148421485214862148721488214892149021491214922149321494214952149621497214982149921500215012150221503215042150521506215072150821509215102151121512215132151421515215162151721518215192152021521215222152321524215252152621527215282152921530215312153221533215342153521536215372153821539215402154121542215432154421545215462154721548215492155021551215522155321554215552155621557215582155921560215612156221563215642156521566215672156821569215702157121572215732157421575215762157721578215792158021581215822158321584215852158621587215882158921590215912159221593215942159521596215972159821599216002160121602216032160421605216062160721608216092161021611216122161321614216152161621617216182161921620216212162221623216242162521626216272162821629216302163121632216332163421635216362163721638216392164021641216422164321644216452164621647216482164921650216512165221653216542165521656216572165821659216602166121662216632166421665216662166721668216692167021671216722167321674216752167621677216782167921680216812168221683216842168521686216872168821689216902169121692216932169421695216962169721698216992170021701217022170321704217052170621707217082170921710217112171221713217142171521716217172171821719217202172121722217232172421725217262172721728217292173021731217322173321734217352173621737217382173921740217412174221743217442174521746217472174821749217502175121752217532175421755217562175721758217592176021761217622176321764217652176621767217682176921770217712177221773217742177521776217772177821779217802178121782217832178421785217862178721788217892179021791217922179321794217952179621797217982179921800218012180221803218042180521806218072180821809218102181121812218132181421815218162181721818218192182021821218222182321824218252182621827218282182921830218312183221833218342183521836218372183821839218402184121842218432184421845218462184721848218492185021851218522185321854218552185621857218582185921860218612186221863218642186521866218672186821869218702187121872218732187421875218762187721878218792188021881218822188321884218852188621887218882188921890218912189221893218942189521896218972189821899219002190121902219032190421905219062190721908219092191021911219122191321914219152191621917219182191921920219212192221923219242192521926219272192821929219302193121932219332193421935219362193721938219392194021941219422194321944219452194621947219482194921950219512195221953219542195521956219572195821959219602196121962219632196421965219662196721968219692197021971219722197321974219752197621977219782197921980219812198221983219842198521986219872198821989219902199121992219932199421995219962199721998219992200022001220022200322004220052200622007220082200922010220112201222013220142201522016220172201822019220202202122022220232202422025220262202722028220292203022031220322203322034220352203622037220382203922040220412204222043220442204522046220472204822049220502205122052220532205422055220562205722058220592206022061220622206322064220652206622067220682206922070220712207222073220742207522076220772207822079220802208122082220832208422085220862208722088220892209022091220922209322094220952209622097220982209922100221012210222103221042210522106221072210822109221102211122112221132211422115221162211722118221192212022121221222212322124221252212622127221282212922130221312213222133221342213522136221372213822139221402214122142221432214422145221462214722148221492215022151221522215322154221552215622157221582215922160221612216222163221642216522166221672216822169221702217122172221732217422175221762217722178221792218022181221822218322184221852218622187221882218922190221912219222193221942219522196221972219822199222002220122202222032220422205222062220722208222092221022211222122221322214222152221622217222182221922220222212222222223222242222522226222272222822229222302223122232222332223422235222362223722238222392224022241222422224322244222452224622247222482224922250222512225222253222542225522256222572225822259222602226122262222632226422265222662226722268222692227022271222722227322274222752227622277222782227922280222812228222283222842228522286222872228822289222902229122292222932229422295222962229722298222992230022301223022230322304223052230622307223082230922310223112231222313223142231522316223172231822319223202232122322223232232422325223262232722328223292233022331223322233322334223352233622337223382233922340223412234222343223442234522346223472234822349223502235122352223532235422355223562235722358223592236022361223622236322364223652236622367223682236922370223712237222373223742237522376223772237822379223802238122382223832238422385223862238722388223892239022391223922239322394223952239622397223982239922400224012240222403224042240522406224072240822409224102241122412224132241422415224162241722418224192242022421224222242322424224252242622427224282242922430224312243222433224342243522436224372243822439224402244122442224432244422445224462244722448224492245022451224522245322454224552245622457224582245922460224612246222463224642246522466224672246822469224702247122472224732247422475224762247722478224792248022481224822248322484224852248622487224882248922490224912249222493224942249522496224972249822499225002250122502225032250422505225062250722508225092251022511225122251322514225152251622517225182251922520225212252222523225242252522526225272252822529225302253122532225332253422535225362253722538225392254022541225422254322544225452254622547225482254922550225512255222553225542255522556225572255822559225602256122562225632256422565225662256722568225692257022571225722257322574225752257622577225782257922580225812258222583225842258522586225872258822589225902259122592225932259422595225962259722598225992260022601226022260322604226052260622607226082260922610226112261222613226142261522616226172261822619226202262122622226232262422625226262262722628226292263022631226322263322634226352263622637226382263922640226412264222643226442264522646226472264822649226502265122652226532265422655226562265722658226592266022661226622266322664226652266622667226682266922670226712267222673226742267522676226772267822679226802268122682226832268422685226862268722688226892269022691226922269322694226952269622697226982269922700227012270222703227042270522706227072270822709227102271122712227132271422715227162271722718227192272022721227222272322724227252272622727227282272922730227312273222733227342273522736227372273822739227402274122742227432274422745227462274722748227492275022751227522275322754227552275622757227582275922760227612276222763227642276522766227672276822769227702277122772227732277422775227762277722778227792278022781227822278322784227852278622787227882278922790227912279222793227942279522796227972279822799228002280122802228032280422805228062280722808228092281022811228122281322814228152281622817228182281922820228212282222823228242282522826228272282822829228302283122832228332283422835228362283722838228392284022841228422284322844228452284622847228482284922850228512285222853228542285522856228572285822859228602286122862228632286422865228662286722868228692287022871228722287322874228752287622877228782287922880228812288222883228842288522886228872288822889228902289122892228932289422895228962289722898228992290022901229022290322904229052290622907229082290922910229112291222913229142291522916229172291822919229202292122922229232292422925229262292722928229292293022931229322293322934229352293622937229382293922940229412294222943229442294522946229472294822949229502295122952229532295422955229562295722958229592296022961229622296322964229652296622967229682296922970229712297222973229742297522976229772297822979229802298122982229832298422985229862298722988229892299022991229922299322994229952299622997229982299923000230012300223003230042300523006230072300823009230102301123012230132301423015230162301723018230192302023021230222302323024230252302623027230282302923030230312303223033230342303523036230372303823039230402304123042230432304423045230462304723048230492305023051230522305323054230552305623057230582305923060230612306223063230642306523066230672306823069230702307123072230732307423075230762307723078230792308023081230822308323084230852308623087230882308923090230912309223093230942309523096230972309823099231002310123102231032310423105231062310723108231092311023111231122311323114231152311623117231182311923120231212312223123231242312523126231272312823129231302313123132231332313423135231362313723138231392314023141231422314323144231452314623147231482314923150231512315223153231542315523156231572315823159231602316123162231632316423165231662316723168231692317023171231722317323174231752317623177231782317923180231812318223183231842318523186231872318823189231902319123192231932319423195231962319723198231992320023201232022320323204232052320623207232082320923210232112321223213232142321523216232172321823219232202322123222232232322423225232262322723228232292323023231232322323323234232352323623237232382323923240232412324223243232442324523246232472324823249232502325123252232532325423255232562325723258232592326023261232622326323264232652326623267232682326923270232712327223273232742327523276232772327823279232802328123282232832328423285232862328723288232892329023291232922329323294232952329623297232982329923300233012330223303233042330523306233072330823309233102331123312233132331423315233162331723318233192332023321233222332323324233252332623327233282332923330233312333223333233342333523336233372333823339233402334123342233432334423345233462334723348233492335023351233522335323354233552335623357233582335923360233612336223363233642336523366233672336823369233702337123372233732337423375233762337723378233792338023381233822338323384233852338623387233882338923390233912339223393233942339523396233972339823399234002340123402234032340423405234062340723408234092341023411234122341323414234152341623417234182341923420234212342223423234242342523426234272342823429234302343123432234332343423435234362343723438234392344023441234422344323444234452344623447234482344923450234512345223453234542345523456234572345823459234602346123462234632346423465234662346723468234692347023471234722347323474234752347623477234782347923480234812348223483234842348523486234872348823489234902349123492234932349423495234962349723498234992350023501235022350323504235052350623507235082350923510235112351223513235142351523516235172351823519235202352123522235232352423525235262352723528235292353023531235322353323534235352353623537235382353923540235412354223543235442354523546235472354823549235502355123552235532355423555235562355723558235592356023561235622356323564235652356623567235682356923570235712357223573235742357523576235772357823579235802358123582235832358423585235862358723588235892359023591235922359323594235952359623597235982359923600236012360223603236042360523606236072360823609236102361123612236132361423615236162361723618236192362023621236222362323624236252362623627236282362923630236312363223633236342363523636236372363823639236402364123642236432364423645236462364723648236492365023651236522365323654236552365623657236582365923660236612366223663236642366523666236672366823669236702367123672236732367423675236762367723678236792368023681236822368323684236852368623687236882368923690236912369223693236942369523696236972369823699237002370123702237032370423705237062370723708237092371023711237122371323714237152371623717237182371923720237212372223723237242372523726237272372823729237302373123732237332373423735237362373723738237392374023741237422374323744237452374623747237482374923750237512375223753237542375523756237572375823759237602376123762237632376423765237662376723768237692377023771237722377323774237752377623777237782377923780237812378223783237842378523786237872378823789237902379123792237932379423795237962379723798237992380023801238022380323804238052380623807238082380923810238112381223813238142381523816238172381823819238202382123822238232382423825238262382723828238292383023831238322383323834238352383623837238382383923840238412384223843238442384523846238472384823849238502385123852238532385423855238562385723858238592386023861238622386323864238652386623867238682386923870238712387223873238742387523876238772387823879238802388123882238832388423885238862388723888238892389023891238922389323894238952389623897238982389923900239012390223903239042390523906239072390823909239102391123912239132391423915239162391723918239192392023921239222392323924239252392623927239282392923930239312393223933239342393523936239372393823939239402394123942239432394423945239462394723948239492395023951239522395323954239552395623957239582395923960239612396223963239642396523966239672396823969239702397123972239732397423975239762397723978239792398023981239822398323984239852398623987239882398923990239912399223993239942399523996239972399823999240002400124002240032400424005240062400724008240092401024011240122401324014240152401624017240182401924020240212402224023240242402524026240272402824029240302403124032240332403424035240362403724038240392404024041240422404324044240452404624047240482404924050240512405224053240542405524056240572405824059240602406124062240632406424065240662406724068240692407024071240722407324074240752407624077240782407924080240812408224083240842408524086240872408824089240902409124092240932409424095240962409724098240992410024101241022410324104241052410624107241082410924110241112411224113241142411524116241172411824119241202412124122241232412424125241262412724128241292413024131241322413324134241352413624137241382413924140241412414224143241442414524146241472414824149241502415124152241532415424155241562415724158241592416024161241622416324164241652416624167241682416924170241712417224173241742417524176241772417824179241802418124182241832418424185241862418724188241892419024191241922419324194241952419624197241982419924200242012420224203242042420524206242072420824209242102421124212242132421424215242162421724218242192422024221242222422324224242252422624227242282422924230242312423224233242342423524236242372423824239242402424124242242432424424245242462424724248242492425024251242522425324254242552425624257242582425924260242612426224263242642426524266242672426824269242702427124272242732427424275242762427724278242792428024281242822428324284242852428624287242882428924290242912429224293242942429524296242972429824299243002430124302243032430424305243062430724308243092431024311243122431324314243152431624317243182431924320243212432224323243242432524326243272432824329243302433124332243332433424335243362433724338243392434024341243422434324344243452434624347243482434924350243512435224353243542435524356243572435824359243602436124362243632436424365243662436724368243692437024371243722437324374243752437624377243782437924380243812438224383243842438524386243872438824389243902439124392243932439424395243962439724398243992440024401244022440324404244052440624407244082440924410244112441224413244142441524416244172441824419244202442124422244232442424425244262442724428244292443024431244322443324434244352443624437244382443924440244412444224443244442444524446244472444824449244502445124452244532445424455244562445724458244592446024461244622446324464244652446624467244682446924470244712447224473244742447524476244772447824479244802448124482244832448424485244862448724488244892449024491244922449324494244952449624497244982449924500245012450224503245042450524506245072450824509245102451124512245132451424515245162451724518245192452024521245222452324524245252452624527245282452924530245312453224533245342453524536245372453824539245402454124542245432454424545245462454724548245492455024551245522455324554245552455624557245582455924560245612456224563245642456524566245672456824569245702457124572245732457424575245762457724578245792458024581245822458324584245852458624587245882458924590245912459224593245942459524596245972459824599246002460124602246032460424605246062460724608246092461024611246122461324614246152461624617246182461924620246212462224623246242462524626246272462824629246302463124632246332463424635246362463724638246392464024641246422464324644246452464624647246482464924650246512465224653246542465524656246572465824659246602466124662246632466424665246662466724668246692467024671246722467324674246752467624677246782467924680246812468224683246842468524686246872468824689246902469124692246932469424695246962469724698246992470024701247022470324704247052470624707247082470924710247112471224713247142471524716247172471824719247202472124722247232472424725247262472724728247292473024731247322473324734247352473624737247382473924740247412474224743247442474524746247472474824749247502475124752247532475424755247562475724758247592476024761247622476324764247652476624767247682476924770247712477224773247742477524776247772477824779247802478124782247832478424785247862478724788247892479024791247922479324794247952479624797247982479924800248012480224803248042480524806248072480824809248102481124812248132481424815248162481724818248192482024821248222482324824248252482624827248282482924830248312483224833248342483524836248372483824839248402484124842248432484424845248462484724848248492485024851248522485324854248552485624857248582485924860248612486224863248642486524866248672486824869248702487124872248732487424875248762487724878248792488024881248822488324884248852488624887248882488924890248912489224893248942489524896248972489824899249002490124902249032490424905249062490724908249092491024911249122491324914249152491624917249182491924920249212492224923249242492524926249272492824929249302493124932249332493424935249362493724938249392494024941249422494324944249452494624947249482494924950249512495224953249542495524956249572495824959249602496124962249632496424965249662496724968249692497024971249722497324974249752497624977249782497924980249812498224983249842498524986249872498824989249902499124992249932499424995249962499724998249992500025001250022500325004250052500625007250082500925010250112501225013250142501525016250172501825019250202502125022250232502425025250262502725028250292503025031250322503325034250352503625037250382503925040250412504225043250442504525046250472504825049250502505125052250532505425055250562505725058250592506025061250622506325064250652506625067250682506925070250712507225073250742507525076250772507825079250802508125082250832508425085250862508725088250892509025091250922509325094250952509625097250982509925100251012510225103251042510525106251072510825109251102511125112251132511425115251162511725118251192512025121251222512325124251252512625127251282512925130251312513225133251342513525136251372513825139251402514125142251432514425145251462514725148251492515025151251522515325154251552515625157251582515925160251612516225163251642516525166251672516825169251702517125172251732517425175251762517725178251792518025181251822518325184251852518625187251882518925190251912519225193251942519525196251972519825199252002520125202252032520425205252062520725208252092521025211252122521325214252152521625217252182521925220252212522225223252242522525226252272522825229252302523125232252332523425235252362523725238252392524025241252422524325244252452524625247252482524925250252512525225253252542525525256252572525825259252602526125262252632526425265252662526725268252692527025271252722527325274252752527625277252782527925280252812528225283252842528525286252872528825289252902529125292252932529425295252962529725298252992530025301253022530325304253052530625307253082530925310253112531225313253142531525316253172531825319253202532125322253232532425325253262532725328253292533025331253322533325334253352533625337253382533925340253412534225343253442534525346253472534825349253502535125352253532535425355253562535725358253592536025361253622536325364253652536625367253682536925370253712537225373253742537525376253772537825379253802538125382253832538425385253862538725388253892539025391253922539325394253952539625397253982539925400254012540225403254042540525406254072540825409254102541125412254132541425415254162541725418254192542025421254222542325424254252542625427254282542925430254312543225433254342543525436254372543825439254402544125442254432544425445254462544725448254492545025451254522545325454254552545625457254582545925460254612546225463254642546525466254672546825469254702547125472254732547425475254762547725478254792548025481254822548325484254852548625487254882548925490254912549225493254942549525496254972549825499255002550125502255032550425505255062550725508255092551025511255122551325514255152551625517255182551925520255212552225523255242552525526255272552825529255302553125532255332553425535255362553725538255392554025541255422554325544255452554625547255482554925550255512555225553255542555525556255572555825559255602556125562255632556425565255662556725568255692557025571255722557325574255752557625577255782557925580255812558225583255842558525586255872558825589255902559125592255932559425595255962559725598255992560025601256022560325604256052560625607256082560925610256112561225613256142561525616256172561825619256202562125622256232562425625256262562725628256292563025631256322563325634256352563625637256382563925640256412564225643256442564525646256472564825649256502565125652256532565425655256562565725658256592566025661256622566325664256652566625667256682566925670256712567225673256742567525676256772567825679256802568125682256832568425685256862568725688256892569025691256922569325694256952569625697256982569925700257012570225703257042570525706257072570825709257102571125712257132571425715257162571725718257192572025721257222572325724257252572625727257282572925730257312573225733257342573525736257372573825739257402574125742257432574425745257462574725748257492575025751257522575325754257552575625757257582575925760257612576225763257642576525766257672576825769257702577125772257732577425775257762577725778257792578025781257822578325784257852578625787257882578925790257912579225793257942579525796257972579825799258002580125802258032580425805258062580725808258092581025811258122581325814258152581625817258182581925820258212582225823258242582525826258272582825829258302583125832258332583425835258362583725838258392584025841258422584325844258452584625847258482584925850258512585225853258542585525856258572585825859258602586125862258632586425865258662586725868258692587025871258722587325874258752587625877258782587925880258812588225883258842588525886258872588825889258902589125892258932589425895258962589725898258992590025901259022590325904259052590625907259082590925910259112591225913259142591525916259172591825919259202592125922259232592425925259262592725928259292593025931259322593325934259352593625937259382593925940259412594225943259442594525946259472594825949259502595125952259532595425955259562595725958259592596025961259622596325964259652596625967259682596925970259712597225973259742597525976259772597825979259802598125982259832598425985259862598725988259892599025991259922599325994259952599625997259982599926000260012600226003260042600526006260072600826009260102601126012260132601426015260162601726018260192602026021260222602326024260252602626027260282602926030260312603226033260342603526036260372603826039260402604126042260432604426045260462604726048260492605026051260522605326054260552605626057260582605926060260612606226063260642606526066260672606826069260702607126072260732607426075260762607726078260792608026081260822608326084260852608626087260882608926090260912609226093260942609526096260972609826099261002610126102261032610426105261062610726108261092611026111261122611326114261152611626117261182611926120261212612226123261242612526126261272612826129261302613126132261332613426135261362613726138261392614026141261422614326144261452614626147261482614926150261512615226153261542615526156261572615826159261602616126162261632616426165261662616726168261692617026171261722617326174261752617626177261782617926180261812618226183261842618526186261872618826189261902619126192261932619426195261962619726198261992620026201262022620326204262052620626207262082620926210262112621226213262142621526216262172621826219262202622126222262232622426225262262622726228262292623026231262322623326234262352623626237262382623926240262412624226243262442624526246262472624826249262502625126252262532625426255262562625726258262592626026261262622626326264262652626626267262682626926270262712627226273262742627526276262772627826279262802628126282262832628426285262862628726288262892629026291262922629326294262952629626297262982629926300263012630226303263042630526306263072630826309263102631126312263132631426315263162631726318263192632026321263222632326324263252632626327263282632926330263312633226333263342633526336263372633826339263402634126342263432634426345263462634726348263492635026351263522635326354263552635626357263582635926360263612636226363263642636526366263672636826369263702637126372263732637426375263762637726378263792638026381263822638326384263852638626387263882638926390263912639226393263942639526396263972639826399264002640126402264032640426405264062640726408264092641026411264122641326414264152641626417264182641926420264212642226423264242642526426264272642826429264302643126432264332643426435264362643726438264392644026441264422644326444264452644626447264482644926450264512645226453264542645526456264572645826459264602646126462264632646426465264662646726468264692647026471264722647326474264752647626477264782647926480264812648226483264842648526486264872648826489264902649126492264932649426495264962649726498264992650026501265022650326504265052650626507265082650926510265112651226513265142651526516265172651826519265202652126522265232652426525265262652726528265292653026531265322653326534265352653626537265382653926540265412654226543265442654526546265472654826549265502655126552265532655426555265562655726558265592656026561265622656326564265652656626567265682656926570265712657226573265742657526576265772657826579265802658126582265832658426585265862658726588265892659026591265922659326594265952659626597265982659926600266012660226603266042660526606266072660826609266102661126612266132661426615266162661726618266192662026621266222662326624266252662626627266282662926630266312663226633266342663526636266372663826639266402664126642266432664426645266462664726648266492665026651266522665326654266552665626657266582665926660266612666226663266642666526666266672666826669266702667126672266732667426675266762667726678266792668026681266822668326684266852668626687266882668926690266912669226693266942669526696266972669826699267002670126702267032670426705267062670726708267092671026711267122671326714267152671626717267182671926720267212672226723267242672526726267272672826729267302673126732267332673426735267362673726738267392674026741267422674326744267452674626747267482674926750267512675226753267542675526756267572675826759267602676126762267632676426765267662676726768267692677026771267722677326774267752677626777267782677926780267812678226783267842678526786267872678826789267902679126792267932679426795267962679726798267992680026801268022680326804268052680626807268082680926810268112681226813268142681526816268172681826819268202682126822268232682426825268262682726828268292683026831268322683326834268352683626837268382683926840268412684226843268442684526846268472684826849268502685126852268532685426855268562685726858268592686026861268622686326864268652686626867268682686926870268712687226873268742687526876268772687826879268802688126882268832688426885268862688726888268892689026891268922689326894268952689626897268982689926900269012690226903269042690526906269072690826909269102691126912269132691426915269162691726918269192692026921269222692326924269252692626927269282692926930269312693226933269342693526936269372693826939269402694126942269432694426945269462694726948269492695026951269522695326954269552695626957269582695926960269612696226963269642696526966269672696826969269702697126972269732697426975269762697726978269792698026981269822698326984269852698626987269882698926990269912699226993269942699526996269972699826999270002700127002270032700427005270062700727008270092701027011270122701327014270152701627017270182701927020270212702227023270242702527026270272702827029270302703127032270332703427035270362703727038270392704027041270422704327044270452704627047270482704927050270512705227053270542705527056270572705827059270602706127062270632706427065270662706727068270692707027071270722707327074270752707627077270782707927080270812708227083270842708527086270872708827089270902709127092270932709427095270962709727098270992710027101271022710327104271052710627107271082710927110271112711227113271142711527116271172711827119271202712127122271232712427125271262712727128271292713027131271322713327134271352713627137271382713927140271412714227143271442714527146271472714827149271502715127152271532715427155271562715727158271592716027161271622716327164271652716627167271682716927170271712717227173271742717527176271772717827179271802718127182271832718427185271862718727188271892719027191271922719327194271952719627197271982719927200272012720227203272042720527206272072720827209272102721127212272132721427215272162721727218272192722027221272222722327224272252722627227272282722927230272312723227233272342723527236272372723827239272402724127242272432724427245272462724727248272492725027251272522725327254272552725627257272582725927260272612726227263272642726527266272672726827269272702727127272272732727427275272762727727278272792728027281272822728327284272852728627287272882728927290272912729227293272942729527296272972729827299273002730127302273032730427305273062730727308273092731027311273122731327314273152731627317273182731927320273212732227323273242732527326273272732827329273302733127332273332733427335273362733727338273392734027341273422734327344273452734627347273482734927350273512735227353273542735527356273572735827359273602736127362273632736427365273662736727368273692737027371273722737327374273752737627377273782737927380273812738227383273842738527386273872738827389273902739127392273932739427395273962739727398273992740027401274022740327404274052740627407274082740927410274112741227413274142741527416274172741827419274202742127422274232742427425274262742727428274292743027431274322743327434274352743627437274382743927440274412744227443274442744527446274472744827449274502745127452274532745427455274562745727458274592746027461274622746327464274652746627467274682746927470274712747227473274742747527476274772747827479274802748127482274832748427485274862748727488274892749027491274922749327494274952749627497274982749927500275012750227503275042750527506275072750827509275102751127512275132751427515275162751727518275192752027521275222752327524275252752627527275282752927530275312753227533275342753527536275372753827539275402754127542275432754427545275462754727548275492755027551275522755327554275552755627557275582755927560275612756227563275642756527566275672756827569275702757127572275732757427575275762757727578275792758027581275822758327584275852758627587275882758927590275912759227593275942759527596275972759827599276002760127602276032760427605276062760727608276092761027611276122761327614276152761627617276182761927620276212762227623276242762527626276272762827629276302763127632276332763427635276362763727638276392764027641276422764327644276452764627647276482764927650276512765227653276542765527656276572765827659276602766127662276632766427665276662766727668276692767027671276722767327674276752767627677276782767927680276812768227683276842768527686276872768827689276902769127692276932769427695276962769727698276992770027701277022770327704277052770627707277082770927710277112771227713277142771527716277172771827719277202772127722277232772427725277262772727728277292773027731277322773327734277352773627737277382773927740277412774227743277442774527746277472774827749277502775127752277532775427755277562775727758277592776027761277622776327764277652776627767277682776927770277712777227773277742777527776277772777827779277802778127782277832778427785277862778727788277892779027791277922779327794277952779627797277982779927800278012780227803278042780527806278072780827809278102781127812278132781427815278162781727818278192782027821278222782327824278252782627827278282782927830278312783227833278342783527836278372783827839278402784127842278432784427845278462784727848278492785027851278522785327854278552785627857278582785927860278612786227863278642786527866278672786827869278702787127872278732787427875278762787727878278792788027881278822788327884278852788627887278882788927890278912789227893278942789527896278972789827899279002790127902279032790427905279062790727908279092791027911279122791327914279152791627917279182791927920279212792227923279242792527926279272792827929279302793127932279332793427935279362793727938279392794027941279422794327944279452794627947279482794927950279512795227953279542795527956279572795827959279602796127962279632796427965279662796727968279692797027971279722797327974279752797627977279782797927980279812798227983279842798527986279872798827989279902799127992279932799427995279962799727998279992800028001280022800328004280052800628007280082800928010280112801228013280142801528016280172801828019280202802128022280232802428025280262802728028280292803028031280322803328034280352803628037280382803928040280412804228043280442804528046280472804828049280502805128052280532805428055280562805728058280592806028061280622806328064280652806628067280682806928070280712807228073280742807528076280772807828079280802808128082280832808428085280862808728088280892809028091280922809328094280952809628097280982809928100281012810228103281042810528106281072810828109281102811128112281132811428115281162811728118281192812028121281222812328124281252812628127281282812928130281312813228133281342813528136281372813828139281402814128142281432814428145281462814728148281492815028151281522815328154281552815628157281582815928160281612816228163281642816528166281672816828169281702817128172281732817428175281762817728178281792818028181281822818328184281852818628187281882818928190281912819228193281942819528196281972819828199282002820128202282032820428205282062820728208282092821028211282122821328214282152821628217282182821928220282212822228223282242822528226282272822828229282302823128232282332823428235282362823728238282392824028241282422824328244282452824628247282482824928250282512825228253282542825528256282572825828259282602826128262282632826428265282662826728268282692827028271282722827328274282752827628277282782827928280282812828228283282842828528286282872828828289282902829128292282932829428295282962829728298282992830028301283022830328304283052830628307283082830928310283112831228313283142831528316283172831828319283202832128322283232832428325283262832728328283292833028331283322833328334283352833628337283382833928340283412834228343283442834528346283472834828349283502835128352283532835428355283562835728358283592836028361283622836328364283652836628367283682836928370283712837228373283742837528376283772837828379283802838128382283832838428385283862838728388283892839028391283922839328394283952839628397283982839928400284012840228403284042840528406284072840828409284102841128412284132841428415284162841728418284192842028421284222842328424284252842628427284282842928430284312843228433284342843528436284372843828439284402844128442284432844428445284462844728448284492845028451284522845328454284552845628457284582845928460284612846228463284642846528466284672846828469284702847128472284732847428475284762847728478284792848028481284822848328484284852848628487284882848928490284912849228493284942849528496284972849828499285002850128502285032850428505285062850728508285092851028511285122851328514285152851628517285182851928520285212852228523285242852528526285272852828529285302853128532285332853428535285362853728538285392854028541285422854328544285452854628547285482854928550285512855228553285542855528556285572855828559285602856128562285632856428565285662856728568285692857028571285722857328574285752857628577285782857928580285812858228583285842858528586285872858828589285902859128592285932859428595285962859728598285992860028601286022860328604286052860628607286082860928610286112861228613286142861528616286172861828619286202862128622286232862428625286262862728628286292863028631286322863328634286352863628637286382863928640286412864228643286442864528646286472864828649286502865128652286532865428655286562865728658286592866028661286622866328664286652866628667286682866928670286712867228673286742867528676286772867828679286802868128682286832868428685286862868728688286892869028691286922869328694286952869628697286982869928700287012870228703287042870528706287072870828709287102871128712287132871428715287162871728718287192872028721287222872328724287252872628727287282872928730287312873228733287342873528736287372873828739287402874128742287432874428745287462874728748287492875028751287522875328754287552875628757287582875928760287612876228763287642876528766287672876828769287702877128772287732877428775287762877728778287792878028781287822878328784287852878628787287882878928790287912879228793287942879528796287972879828799288002880128802288032880428805288062880728808288092881028811288122881328814288152881628817288182881928820288212882228823288242882528826288272882828829288302883128832288332883428835288362883728838288392884028841288422884328844288452884628847288482884928850288512885228853288542885528856288572885828859288602886128862288632886428865288662886728868288692887028871288722887328874288752887628877288782887928880288812888228883288842888528886288872888828889288902889128892288932889428895288962889728898288992890028901289022890328904289052890628907289082890928910289112891228913289142891528916289172891828919289202892128922289232892428925289262892728928289292893028931289322893328934289352893628937289382893928940289412894228943289442894528946289472894828949289502895128952289532895428955289562895728958289592896028961289622896328964289652896628967289682896928970289712897228973289742897528976289772897828979289802898128982289832898428985289862898728988289892899028991289922899328994289952899628997289982899929000290012900229003290042900529006290072900829009290102901129012290132901429015290162901729018290192902029021290222902329024290252902629027290282902929030290312903229033290342903529036290372903829039290402904129042290432904429045290462904729048290492905029051290522905329054290552905629057290582905929060290612906229063290642906529066290672906829069290702907129072290732907429075290762907729078290792908029081290822908329084290852908629087290882908929090290912909229093290942909529096290972909829099291002910129102291032910429105291062910729108291092911029111291122911329114291152911629117291182911929120291212912229123291242912529126291272912829129291302913129132291332913429135291362913729138291392914029141291422914329144291452914629147291482914929150291512915229153291542915529156291572915829159291602916129162291632916429165291662916729168291692917029171291722917329174291752917629177291782917929180291812918229183291842918529186291872918829189291902919129192291932919429195291962919729198291992920029201292022920329204292052920629207292082920929210292112921229213292142921529216292172921829219292202922129222292232922429225292262922729228292292923029231292322923329234292352923629237292382923929240292412924229243292442924529246292472924829249292502925129252292532925429255292562925729258292592926029261292622926329264292652926629267292682926929270292712927229273292742927529276292772927829279292802928129282292832928429285292862928729288292892929029291292922929329294292952929629297292982929929300293012930229303293042930529306293072930829309293102931129312293132931429315293162931729318293192932029321293222932329324293252932629327293282932929330293312933229333293342933529336293372933829339293402934129342293432934429345293462934729348293492935029351293522935329354293552935629357293582935929360293612936229363293642936529366293672936829369293702937129372293732937429375293762937729378293792938029381293822938329384293852938629387293882938929390293912939229393293942939529396293972939829399294002940129402294032940429405294062940729408294092941029411294122941329414294152941629417294182941929420294212942229423294242942529426294272942829429294302943129432294332943429435294362943729438294392944029441294422944329444294452944629447294482944929450294512945229453294542945529456294572945829459294602946129462294632946429465294662946729468294692947029471294722947329474294752947629477294782947929480294812948229483294842948529486294872948829489294902949129492294932949429495294962949729498294992950029501295022950329504295052950629507295082950929510295112951229513295142951529516295172951829519295202952129522295232952429525295262952729528295292953029531295322953329534295352953629537295382953929540295412954229543295442954529546295472954829549295502955129552295532955429555295562955729558295592956029561295622956329564295652956629567295682956929570295712957229573295742957529576295772957829579295802958129582295832958429585295862958729588295892959029591295922959329594295952959629597295982959929600296012960229603296042960529606296072960829609296102961129612296132961429615296162961729618296192962029621296222962329624296252962629627296282962929630296312963229633296342963529636296372963829639296402964129642296432964429645296462964729648296492965029651296522965329654296552965629657296582965929660296612966229663296642966529666296672966829669296702967129672296732967429675296762967729678296792968029681296822968329684296852968629687296882968929690296912969229693296942969529696296972969829699297002970129702297032970429705297062970729708297092971029711297122971329714297152971629717297182971929720297212972229723297242972529726297272972829729297302973129732297332973429735297362973729738297392974029741297422974329744297452974629747297482974929750297512975229753297542975529756297572975829759297602976129762297632976429765297662976729768297692977029771297722977329774297752977629777297782977929780297812978229783297842978529786297872978829789297902979129792297932979429795297962979729798297992980029801298022980329804298052980629807298082980929810298112981229813298142981529816298172981829819298202982129822298232982429825298262982729828298292983029831298322983329834298352983629837298382983929840298412984229843298442984529846298472984829849298502985129852298532985429855298562985729858298592986029861298622986329864298652986629867298682986929870298712987229873298742987529876298772987829879298802988129882298832988429885298862988729888298892989029891298922989329894298952989629897298982989929900299012990229903299042990529906299072990829909299102991129912299132991429915299162991729918299192992029921299222992329924299252992629927299282992929930299312993229933299342993529936299372993829939299402994129942299432994429945299462994729948299492995029951299522995329954299552995629957299582995929960299612996229963299642996529966299672996829969299702997129972299732997429975299762997729978299792998029981299822998329984299852998629987299882998929990299912999229993299942999529996299972999829999300003000130002300033000430005300063000730008300093001030011300123001330014300153001630017300183001930020300213002230023300243002530026300273002830029300303003130032300333003430035300363003730038300393004030041300423004330044300453004630047300483004930050300513005230053300543005530056300573005830059300603006130062300633006430065300663006730068300693007030071300723007330074300753007630077300783007930080300813008230083300843008530086300873008830089300903009130092300933009430095300963009730098300993010030101301023010330104301053010630107301083010930110301113011230113301143011530116301173011830119301203012130122301233012430125301263012730128301293013030131301323013330134301353013630137301383013930140301413014230143301443014530146301473014830149301503015130152301533015430155301563015730158301593016030161301623016330164301653016630167301683016930170301713017230173301743017530176301773017830179301803018130182301833018430185301863018730188301893019030191301923019330194301953019630197301983019930200302013020230203302043020530206302073020830209302103021130212302133021430215302163021730218302193022030221302223022330224302253022630227302283022930230302313023230233302343023530236302373023830239302403024130242302433024430245302463024730248302493025030251302523025330254302553025630257302583025930260302613026230263302643026530266302673026830269302703027130272302733027430275302763027730278302793028030281302823028330284302853028630287302883028930290302913029230293302943029530296302973029830299303003030130302303033030430305303063030730308303093031030311303123031330314303153031630317303183031930320303213032230323303243032530326303273032830329303303033130332303333033430335303363033730338303393034030341303423034330344303453034630347303483034930350303513035230353303543035530356303573035830359303603036130362303633036430365303663036730368303693037030371303723037330374303753037630377303783037930380303813038230383303843038530386303873038830389303903039130392303933039430395303963039730398303993040030401304023040330404304053040630407304083040930410304113041230413304143041530416304173041830419304203042130422304233042430425304263042730428304293043030431304323043330434304353043630437304383043930440304413044230443304443044530446304473044830449304503045130452304533045430455304563045730458304593046030461304623046330464304653046630467304683046930470304713047230473304743047530476304773047830479304803048130482304833048430485304863048730488304893049030491304923049330494304953049630497304983049930500305013050230503305043050530506305073050830509305103051130512305133051430515305163051730518305193052030521305223052330524305253052630527305283052930530305313053230533305343053530536305373053830539305403054130542305433054430545305463054730548305493055030551305523055330554305553055630557305583055930560305613056230563305643056530566305673056830569305703057130572305733057430575305763057730578305793058030581305823058330584305853058630587305883058930590305913059230593305943059530596305973059830599306003060130602306033060430605306063060730608306093061030611306123061330614306153061630617306183061930620306213062230623306243062530626306273062830629306303063130632306333063430635306363063730638306393064030641306423064330644306453064630647306483064930650306513065230653306543065530656306573065830659306603066130662306633066430665306663066730668306693067030671306723067330674306753067630677306783067930680306813068230683306843068530686306873068830689306903069130692306933069430695306963069730698306993070030701307023070330704307053070630707307083070930710307113071230713307143071530716307173071830719307203072130722307233072430725307263072730728307293073030731307323073330734307353073630737307383073930740307413074230743307443074530746307473074830749307503075130752307533075430755307563075730758307593076030761307623076330764307653076630767307683076930770307713077230773307743077530776307773077830779307803078130782307833078430785307863078730788307893079030791307923079330794307953079630797307983079930800308013080230803308043080530806308073080830809308103081130812308133081430815308163081730818308193082030821308223082330824308253082630827308283082930830308313083230833308343083530836308373083830839308403084130842308433084430845308463084730848308493085030851308523085330854308553085630857308583085930860308613086230863308643086530866308673086830869308703087130872308733087430875308763087730878308793088030881308823088330884308853088630887308883088930890308913089230893308943089530896308973089830899309003090130902309033090430905309063090730908309093091030911309123091330914309153091630917309183091930920309213092230923309243092530926309273092830929309303093130932309333093430935309363093730938309393094030941309423094330944309453094630947309483094930950309513095230953309543095530956309573095830959309603096130962309633096430965309663096730968309693097030971309723097330974309753097630977309783097930980309813098230983309843098530986309873098830989309903099130992309933099430995309963099730998309993100031001310023100331004310053100631007310083100931010310113101231013310143101531016310173101831019310203102131022310233102431025310263102731028310293103031031310323103331034310353103631037310383103931040310413104231043310443104531046310473104831049310503105131052310533105431055310563105731058310593106031061310623106331064310653106631067310683106931070310713107231073310743107531076310773107831079310803108131082310833108431085310863108731088310893109031091310923109331094310953109631097310983109931100311013110231103311043110531106311073110831109311103111131112311133111431115311163111731118311193112031121311223112331124311253112631127311283112931130311313113231133311343113531136311373113831139311403114131142311433114431145311463114731148311493115031151311523115331154311553115631157311583115931160311613116231163311643116531166311673116831169311703117131172311733117431175311763117731178311793118031181311823118331184311853118631187311883118931190311913119231193311943119531196311973119831199312003120131202312033120431205312063120731208312093121031211312123121331214312153121631217312183121931220312213122231223312243122531226312273122831229312303123131232312333123431235312363123731238312393124031241312423124331244312453124631247312483124931250312513125231253312543125531256312573125831259312603126131262312633126431265312663126731268312693127031271312723127331274312753127631277312783127931280312813128231283312843128531286312873128831289312903129131292312933129431295312963129731298312993130031301313023130331304313053130631307313083130931310313113131231313313143131531316313173131831319313203132131322313233132431325313263132731328313293133031331313323133331334313353133631337313383133931340313413134231343313443134531346313473134831349313503135131352313533135431355313563135731358313593136031361313623136331364313653136631367313683136931370313713137231373313743137531376313773137831379313803138131382313833138431385313863138731388313893139031391313923139331394313953139631397313983139931400314013140231403314043140531406314073140831409314103141131412314133141431415314163141731418314193142031421314223142331424314253142631427314283142931430314313143231433314343143531436314373143831439314403144131442314433144431445314463144731448314493145031451314523145331454314553145631457314583145931460314613146231463314643146531466314673146831469314703147131472314733147431475314763147731478314793148031481314823148331484314853148631487314883148931490314913149231493314943149531496314973149831499315003150131502315033150431505315063150731508315093151031511315123151331514315153151631517315183151931520315213152231523315243152531526315273152831529315303153131532315333153431535315363153731538315393154031541315423154331544315453154631547315483154931550315513155231553315543155531556315573155831559315603156131562315633156431565315663156731568315693157031571315723157331574315753157631577315783157931580315813158231583315843158531586315873158831589315903159131592315933159431595315963159731598315993160031601316023160331604316053160631607316083160931610316113161231613316143161531616316173161831619316203162131622316233162431625316263162731628316293163031631316323163331634316353163631637316383163931640316413164231643316443164531646316473164831649316503165131652316533165431655316563165731658316593166031661316623166331664316653166631667316683166931670316713167231673316743167531676316773167831679316803168131682316833168431685316863168731688316893169031691316923169331694316953169631697316983169931700317013170231703317043170531706317073170831709317103171131712317133171431715317163171731718317193172031721317223172331724317253172631727317283172931730317313173231733317343173531736317373173831739317403174131742317433174431745317463174731748317493175031751317523175331754317553175631757317583175931760317613176231763317643176531766317673176831769317703177131772317733177431775317763177731778317793178031781317823178331784317853178631787317883178931790317913179231793317943179531796317973179831799318003180131802318033180431805318063180731808318093181031811318123181331814318153181631817318183181931820318213182231823318243182531826318273182831829318303183131832318333183431835318363183731838318393184031841318423184331844318453184631847318483184931850318513185231853318543185531856318573185831859318603186131862318633186431865318663186731868318693187031871318723187331874318753187631877318783187931880318813188231883318843188531886318873188831889318903189131892318933189431895318963189731898318993190031901319023190331904319053190631907319083190931910319113191231913319143191531916319173191831919319203192131922319233192431925319263192731928319293193031931319323193331934319353193631937319383193931940319413194231943319443194531946319473194831949319503195131952319533195431955319563195731958319593196031961319623196331964319653196631967319683196931970319713197231973319743197531976319773197831979319803198131982319833198431985319863198731988319893199031991319923199331994319953199631997319983199932000320013200232003320043200532006320073200832009320103201132012320133201432015320163201732018320193202032021320223202332024320253202632027320283202932030320313203232033320343203532036320373203832039320403204132042320433204432045320463204732048320493205032051320523205332054320553205632057320583205932060320613206232063320643206532066320673206832069320703207132072320733207432075320763207732078320793208032081320823208332084320853208632087320883208932090320913209232093320943209532096320973209832099321003210132102321033210432105321063210732108321093211032111321123211332114321153211632117321183211932120321213212232123321243212532126321273212832129321303213132132321333213432135321363213732138321393214032141321423214332144321453214632147321483214932150321513215232153321543215532156321573215832159321603216132162321633216432165321663216732168321693217032171321723217332174321753217632177321783217932180321813218232183321843218532186321873218832189321903219132192321933219432195321963219732198321993220032201322023220332204322053220632207322083220932210322113221232213322143221532216322173221832219322203222132222322233222432225322263222732228322293223032231322323223332234322353223632237322383223932240322413224232243322443224532246322473224832249322503225132252322533225432255322563225732258322593226032261322623226332264322653226632267322683226932270322713227232273322743227532276322773227832279322803228132282322833228432285322863228732288322893229032291322923229332294322953229632297322983229932300323013230232303323043230532306323073230832309323103231132312323133231432315323163231732318323193232032321323223232332324323253232632327323283232932330323313233232333323343233532336323373233832339323403234132342323433234432345323463234732348323493235032351323523235332354323553235632357323583235932360323613236232363323643236532366323673236832369323703237132372323733237432375323763237732378323793238032381323823238332384323853238632387323883238932390323913239232393323943239532396323973239832399324003240132402324033240432405324063240732408324093241032411324123241332414324153241632417324183241932420324213242232423324243242532426324273242832429324303243132432324333243432435324363243732438324393244032441324423244332444324453244632447324483244932450324513245232453324543245532456324573245832459324603246132462324633246432465324663246732468324693247032471324723247332474324753247632477324783247932480324813248232483324843248532486324873248832489324903249132492324933249432495324963249732498324993250032501325023250332504325053250632507325083250932510325113251232513325143251532516325173251832519325203252132522325233252432525325263252732528325293253032531325323253332534325353253632537325383253932540325413254232543325443254532546325473254832549325503255132552325533255432555325563255732558325593256032561325623256332564325653256632567325683256932570325713257232573325743257532576325773257832579325803258132582325833258432585325863258732588325893259032591325923259332594325953259632597325983259932600326013260232603326043260532606326073260832609326103261132612326133261432615326163261732618326193262032621326223262332624326253262632627326283262932630326313263232633326343263532636326373263832639326403264132642326433264432645326463264732648326493265032651326523265332654326553265632657326583265932660326613266232663326643266532666326673266832669326703267132672326733267432675326763267732678326793268032681326823268332684326853268632687326883268932690326913269232693326943269532696326973269832699327003270132702327033270432705327063270732708327093271032711327123271332714327153271632717327183271932720327213272232723327243272532726327273272832729327303273132732327333273432735327363273732738327393274032741327423274332744327453274632747327483274932750327513275232753327543275532756327573275832759327603276132762327633276432765327663276732768327693277032771327723277332774327753277632777327783277932780327813278232783327843278532786327873278832789327903279132792327933279432795327963279732798327993280032801328023280332804328053280632807328083280932810328113281232813328143281532816328173281832819328203282132822328233282432825328263282732828328293283032831328323283332834328353283632837328383283932840328413284232843328443284532846328473284832849328503285132852328533285432855328563285732858328593286032861328623286332864328653286632867328683286932870328713287232873328743287532876328773287832879328803288132882328833288432885328863288732888328893289032891328923289332894328953289632897328983289932900329013290232903329043290532906329073290832909329103291132912329133291432915329163291732918329193292032921329223292332924329253292632927329283292932930329313293232933329343293532936329373293832939329403294132942329433294432945329463294732948329493295032951329523295332954329553295632957329583295932960329613296232963329643296532966329673296832969329703297132972329733297432975329763297732978329793298032981329823298332984329853298632987329883298932990329913299232993329943299532996329973299832999330003300133002330033300433005330063300733008330093301033011330123301333014330153301633017330183301933020330213302233023330243302533026330273302833029330303303133032330333303433035330363303733038330393304033041330423304333044330453304633047330483304933050330513305233053330543305533056330573305833059330603306133062330633306433065330663306733068330693307033071330723307333074330753307633077330783307933080330813308233083330843308533086330873308833089330903309133092330933309433095330963309733098330993310033101331023310333104331053310633107331083310933110331113311233113331143311533116331173311833119331203312133122331233312433125331263312733128331293313033131331323313333134331353313633137331383313933140331413314233143331443314533146331473314833149331503315133152331533315433155331563315733158331593316033161331623316333164331653316633167331683316933170331713317233173331743317533176331773317833179331803318133182331833318433185331863318733188331893319033191331923319333194331953319633197331983319933200332013320233203332043320533206332073320833209332103321133212332133321433215332163321733218332193322033221332223322333224332253322633227332283322933230332313323233233332343323533236332373323833239332403324133242332433324433245332463324733248332493325033251332523325333254332553325633257332583325933260332613326233263332643326533266332673326833269332703327133272332733327433275332763327733278332793328033281332823328333284332853328633287332883328933290332913329233293332943329533296332973329833299333003330133302333033330433305333063330733308333093331033311333123331333314333153331633317333183331933320333213332233323333243332533326333273332833329333303333133332333333333433335333363333733338333393334033341333423334333344333453334633347333483334933350333513335233353333543335533356333573335833359333603336133362333633336433365333663336733368333693337033371333723337333374333753337633377333783337933380333813338233383333843338533386333873338833389333903339133392333933339433395333963339733398333993340033401334023340333404334053340633407334083340933410334113341233413334143341533416334173341833419334203342133422334233342433425334263342733428334293343033431334323343333434334353343633437334383343933440334413344233443334443344533446334473344833449334503345133452334533345433455334563345733458334593346033461334623346333464334653346633467334683346933470334713347233473334743347533476334773347833479334803348133482334833348433485334863348733488334893349033491334923349333494334953349633497334983349933500335013350233503335043350533506335073350833509335103351133512335133351433515335163351733518335193352033521335223352333524335253352633527335283352933530335313353233533335343353533536335373353833539335403354133542335433354433545335463354733548335493355033551335523355333554335553355633557335583355933560335613356233563335643356533566335673356833569335703357133572335733357433575335763357733578335793358033581335823358333584335853358633587335883358933590335913359233593335943359533596335973359833599336003360133602336033360433605336063360733608336093361033611336123361333614336153361633617336183361933620336213362233623336243362533626336273362833629336303363133632336333363433635336363363733638336393364033641336423364333644336453364633647336483364933650336513365233653336543365533656336573365833659336603366133662336633366433665336663366733668336693367033671336723367333674336753367633677336783367933680336813368233683336843368533686336873368833689336903369133692336933369433695336963369733698336993370033701337023370333704337053370633707337083370933710337113371233713337143371533716337173371833719337203372133722337233372433725337263372733728337293373033731337323373333734337353373633737337383373933740337413374233743337443374533746337473374833749337503375133752337533375433755337563375733758337593376033761337623376333764337653376633767337683376933770337713377233773337743377533776337773377833779337803378133782337833378433785337863378733788337893379033791337923379333794337953379633797337983379933800338013380233803338043380533806338073380833809338103381133812338133381433815338163381733818338193382033821338223382333824338253382633827338283382933830338313383233833338343383533836338373383833839338403384133842338433384433845338463384733848338493385033851338523385333854338553385633857338583385933860338613386233863338643386533866338673386833869338703387133872338733387433875338763387733878338793388033881338823388333884338853388633887338883388933890338913389233893338943389533896338973389833899339003390133902339033390433905339063390733908339093391033911339123391333914339153391633917339183391933920339213392233923339243392533926339273392833929339303393133932339333393433935339363393733938339393394033941339423394333944339453394633947339483394933950339513395233953339543395533956339573395833959339603396133962339633396433965339663396733968339693397033971339723397333974339753397633977339783397933980339813398233983339843398533986339873398833989339903399133992339933399433995339963399733998339993400034001340023400334004340053400634007340083400934010340113401234013340143401534016340173401834019340203402134022340233402434025340263402734028340293403034031340323403334034340353403634037340383403934040340413404234043340443404534046340473404834049340503405134052340533405434055340563405734058340593406034061340623406334064340653406634067340683406934070340713407234073340743407534076340773407834079340803408134082340833408434085340863408734088340893409034091340923409334094340953409634097340983409934100341013410234103341043410534106341073410834109341103411134112341133411434115341163411734118341193412034121341223412334124341253412634127341283412934130341313413234133341343413534136341373413834139341403414134142341433414434145341463414734148341493415034151341523415334154341553415634157341583415934160341613416234163341643416534166341673416834169341703417134172341733417434175341763417734178341793418034181341823418334184341853418634187341883418934190341913419234193341943419534196341973419834199342003420134202342033420434205342063420734208342093421034211342123421334214342153421634217342183421934220342213422234223342243422534226342273422834229342303423134232342333423434235342363423734238342393424034241342423424334244342453424634247342483424934250342513425234253342543425534256342573425834259342603426134262342633426434265342663426734268342693427034271342723427334274342753427634277342783427934280342813428234283342843428534286342873428834289342903429134292342933429434295342963429734298342993430034301343023430334304343053430634307343083430934310343113431234313343143431534316343173431834319343203432134322343233432434325343263432734328343293433034331343323433334334343353433634337343383433934340343413434234343343443434534346343473434834349343503435134352343533435434355343563435734358343593436034361343623436334364343653436634367343683436934370343713437234373343743437534376343773437834379343803438134382343833438434385343863438734388343893439034391343923439334394343953439634397343983439934400344013440234403344043440534406344073440834409344103441134412344133441434415344163441734418344193442034421344223442334424344253442634427344283442934430344313443234433344343443534436344373443834439344403444134442344433444434445344463444734448344493445034451344523445334454344553445634457344583445934460344613446234463344643446534466344673446834469344703447134472344733447434475344763447734478344793448034481344823448334484344853448634487344883448934490344913449234493344943449534496344973449834499345003450134502345033450434505345063450734508345093451034511345123451334514345153451634517345183451934520345213452234523345243452534526345273452834529345303453134532345333453434535345363453734538345393454034541345423454334544345453454634547345483454934550345513455234553345543455534556345573455834559345603456134562345633456434565345663456734568345693457034571345723457334574345753457634577345783457934580345813458234583345843458534586345873458834589345903459134592345933459434595345963459734598345993460034601346023460334604346053460634607346083460934610346113461234613346143461534616346173461834619346203462134622346233462434625346263462734628346293463034631346323463334634346353463634637346383463934640346413464234643346443464534646346473464834649346503465134652346533465434655346563465734658346593466034661346623466334664346653466634667346683466934670346713467234673346743467534676346773467834679346803468134682346833468434685346863468734688346893469034691346923469334694346953469634697346983469934700347013470234703347043470534706347073470834709347103471134712347133471434715347163471734718347193472034721347223472334724347253472634727347283472934730347313473234733347343473534736347373473834739347403474134742347433474434745347463474734748347493475034751347523475334754347553475634757347583475934760347613476234763347643476534766347673476834769347703477134772347733477434775347763477734778347793478034781347823478334784347853478634787347883478934790347913479234793347943479534796347973479834799348003480134802348033480434805348063480734808348093481034811348123481334814348153481634817348183481934820348213482234823348243482534826348273482834829348303483134832348333483434835348363483734838348393484034841348423484334844348453484634847348483484934850348513485234853348543485534856348573485834859348603486134862348633486434865348663486734868348693487034871348723487334874348753487634877348783487934880348813488234883348843488534886348873488834889348903489134892348933489434895348963489734898348993490034901349023490334904349053490634907349083490934910349113491234913349143491534916349173491834919349203492134922349233492434925349263492734928349293493034931349323493334934349353493634937349383493934940349413494234943349443494534946349473494834949349503495134952349533495434955349563495734958349593496034961349623496334964349653496634967349683496934970349713497234973349743497534976349773497834979349803498134982349833498434985349863498734988349893499034991349923499334994349953499634997349983499935000350013500235003350043500535006350073500835009350103501135012350133501435015350163501735018350193502035021350223502335024350253502635027350283502935030350313503235033350343503535036350373503835039350403504135042350433504435045350463504735048350493505035051350523505335054350553505635057350583505935060350613506235063350643506535066350673506835069350703507135072350733507435075350763507735078350793508035081350823508335084350853508635087350883508935090350913509235093350943509535096350973509835099351003510135102351033510435105351063510735108351093511035111351123511335114351153511635117351183511935120351213512235123351243512535126351273512835129351303513135132351333513435135351363513735138351393514035141351423514335144351453514635147351483514935150351513515235153351543515535156351573515835159351603516135162351633516435165351663516735168351693517035171351723517335174351753517635177351783517935180351813518235183351843518535186351873518835189351903519135192351933519435195351963519735198351993520035201352023520335204352053520635207352083520935210352113521235213352143521535216352173521835219352203522135222352233522435225352263522735228352293523035231352323523335234352353523635237352383523935240352413524235243352443524535246352473524835249352503525135252352533525435255352563525735258352593526035261352623526335264352653526635267352683526935270352713527235273352743527535276352773527835279352803528135282352833528435285352863528735288352893529035291352923529335294352953529635297352983529935300353013530235303353043530535306353073530835309353103531135312353133531435315353163531735318353193532035321353223532335324353253532635327353283532935330353313533235333353343533535336353373533835339353403534135342353433534435345353463534735348353493535035351353523535335354353553535635357353583535935360353613536235363353643536535366353673536835369353703537135372353733537435375353763537735378353793538035381353823538335384353853538635387353883538935390353913539235393353943539535396353973539835399354003540135402354033540435405354063540735408354093541035411354123541335414354153541635417354183541935420354213542235423354243542535426354273542835429354303543135432354333543435435354363543735438354393544035441354423544335444354453544635447354483544935450354513545235453354543545535456354573545835459354603546135462354633546435465354663546735468354693547035471354723547335474354753547635477354783547935480354813548235483354843548535486354873548835489354903549135492354933549435495354963549735498354993550035501355023550335504355053550635507355083550935510355113551235513355143551535516355173551835519355203552135522355233552435525355263552735528355293553035531355323553335534355353553635537355383553935540355413554235543355443554535546355473554835549355503555135552355533555435555355563555735558355593556035561355623556335564355653556635567355683556935570355713557235573355743557535576355773557835579355803558135582355833558435585355863558735588355893559035591355923559335594355953559635597355983559935600356013560235603356043560535606356073560835609356103561135612356133561435615356163561735618356193562035621356223562335624356253562635627356283562935630356313563235633356343563535636356373563835639356403564135642356433564435645356463564735648356493565035651356523565335654356553565635657356583565935660356613566235663356643566535666356673566835669356703567135672356733567435675356763567735678356793568035681356823568335684356853568635687356883568935690356913569235693356943569535696356973569835699357003570135702357033570435705357063570735708357093571035711357123571335714357153571635717357183571935720357213572235723357243572535726357273572835729357303573135732357333573435735357363573735738357393574035741357423574335744357453574635747357483574935750357513575235753357543575535756357573575835759357603576135762357633576435765357663576735768357693577035771357723577335774357753577635777357783577935780357813578235783357843578535786357873578835789357903579135792357933579435795357963579735798357993580035801358023580335804358053580635807358083580935810358113581235813358143581535816358173581835819358203582135822358233582435825358263582735828358293583035831358323583335834358353583635837358383583935840358413584235843358443584535846358473584835849358503585135852358533585435855358563585735858358593586035861358623586335864358653586635867358683586935870358713587235873358743587535876358773587835879358803588135882358833588435885358863588735888358893589035891358923589335894358953589635897358983589935900359013590235903359043590535906359073590835909359103591135912359133591435915359163591735918359193592035921359223592335924359253592635927359283592935930359313593235933359343593535936359373593835939359403594135942359433594435945359463594735948359493595035951359523595335954359553595635957359583595935960359613596235963359643596535966359673596835969359703597135972359733597435975359763597735978359793598035981359823598335984359853598635987359883598935990359913599235993359943599535996359973599835999360003600136002360033600436005360063600736008360093601036011360123601336014360153601636017360183601936020360213602236023360243602536026360273602836029360303603136032360333603436035360363603736038360393604036041360423604336044360453604636047360483604936050360513605236053360543605536056360573605836059360603606136062360633606436065360663606736068360693607036071360723607336074360753607636077360783607936080360813608236083360843608536086360873608836089360903609136092360933609436095360963609736098360993610036101361023610336104361053610636107361083610936110361113611236113361143611536116361173611836119361203612136122361233612436125361263612736128361293613036131361323613336134361353613636137361383613936140361413614236143361443614536146361473614836149361503615136152361533615436155361563615736158361593616036161361623616336164361653616636167361683616936170361713617236173361743617536176361773617836179361803618136182361833618436185361863618736188361893619036191361923619336194361953619636197361983619936200362013620236203362043620536206362073620836209362103621136212362133621436215362163621736218362193622036221362223622336224362253622636227362283622936230362313623236233362343623536236362373623836239362403624136242362433624436245362463624736248362493625036251362523625336254362553625636257362583625936260362613626236263362643626536266362673626836269362703627136272362733627436275362763627736278362793628036281362823628336284362853628636287362883628936290362913629236293362943629536296362973629836299363003630136302363033630436305363063630736308363093631036311363123631336314363153631636317363183631936320363213632236323363243632536326363273632836329363303633136332363333633436335363363633736338363393634036341363423634336344363453634636347363483634936350363513635236353363543635536356363573635836359363603636136362363633636436365363663636736368363693637036371363723637336374363753637636377363783637936380363813638236383363843638536386363873638836389363903639136392363933639436395363963639736398363993640036401364023640336404364053640636407364083640936410364113641236413364143641536416364173641836419364203642136422364233642436425364263642736428364293643036431364323643336434364353643636437364383643936440364413644236443364443644536446364473644836449364503645136452364533645436455364563645736458364593646036461364623646336464364653646636467364683646936470364713647236473364743647536476364773647836479364803648136482364833648436485364863648736488364893649036491364923649336494364953649636497364983649936500365013650236503365043650536506365073650836509365103651136512365133651436515365163651736518365193652036521365223652336524365253652636527365283652936530365313653236533365343653536536365373653836539365403654136542365433654436545365463654736548365493655036551365523655336554365553655636557365583655936560365613656236563365643656536566365673656836569365703657136572365733657436575365763657736578365793658036581365823658336584365853658636587365883658936590365913659236593365943659536596365973659836599366003660136602366033660436605366063660736608366093661036611366123661336614366153661636617366183661936620366213662236623366243662536626366273662836629366303663136632366333663436635366363663736638366393664036641366423664336644366453664636647366483664936650366513665236653366543665536656366573665836659366603666136662366633666436665366663666736668366693667036671366723667336674366753667636677366783667936680366813668236683366843668536686366873668836689366903669136692366933669436695366963669736698366993670036701367023670336704367053670636707367083670936710367113671236713367143671536716367173671836719367203672136722367233672436725367263672736728367293673036731367323673336734367353673636737367383673936740367413674236743367443674536746367473674836749367503675136752367533675436755367563675736758367593676036761367623676336764367653676636767367683676936770367713677236773367743677536776367773677836779367803678136782367833678436785367863678736788367893679036791367923679336794367953679636797367983679936800368013680236803368043680536806368073680836809368103681136812368133681436815368163681736818368193682036821368223682336824368253682636827368283682936830368313683236833368343683536836368373683836839368403684136842368433684436845368463684736848368493685036851368523685336854368553685636857368583685936860368613686236863368643686536866368673686836869368703687136872368733687436875368763687736878368793688036881368823688336884368853688636887368883688936890368913689236893368943689536896368973689836899369003690136902369033690436905369063690736908369093691036911369123691336914369153691636917369183691936920369213692236923369243692536926369273692836929369303693136932369333693436935369363693736938369393694036941369423694336944369453694636947369483694936950369513695236953369543695536956369573695836959369603696136962369633696436965369663696736968369693697036971369723697336974369753697636977369783697936980369813698236983369843698536986369873698836989369903699136992369933699436995369963699736998369993700037001370023700337004370053700637007370083700937010370113701237013370143701537016370173701837019370203702137022370233702437025370263702737028370293703037031370323703337034370353703637037370383703937040370413704237043370443704537046370473704837049370503705137052370533705437055370563705737058370593706037061370623706337064370653706637067370683706937070370713707237073370743707537076370773707837079370803708137082370833708437085370863708737088370893709037091370923709337094370953709637097370983709937100371013710237103371043710537106371073710837109371103711137112371133711437115371163711737118371193712037121371223712337124371253712637127371283712937130371313713237133371343713537136371373713837139371403714137142371433714437145371463714737148371493715037151371523715337154371553715637157371583715937160371613716237163371643716537166371673716837169371703717137172371733717437175371763717737178371793718037181371823718337184371853718637187371883718937190371913719237193371943719537196371973719837199372003720137202372033720437205372063720737208372093721037211372123721337214372153721637217372183721937220372213722237223372243722537226372273722837229372303723137232372333723437235372363723737238372393724037241372423724337244372453724637247372483724937250372513725237253372543725537256372573725837259372603726137262372633726437265372663726737268372693727037271372723727337274372753727637277372783727937280372813728237283372843728537286372873728837289372903729137292372933729437295372963729737298372993730037301373023730337304373053730637307373083730937310373113731237313373143731537316373173731837319373203732137322373233732437325373263732737328373293733037331373323733337334373353733637337373383733937340373413734237343373443734537346373473734837349373503735137352373533735437355373563735737358373593736037361373623736337364373653736637367373683736937370373713737237373373743737537376373773737837379373803738137382373833738437385373863738737388373893739037391373923739337394373953739637397373983739937400374013740237403374043740537406374073740837409374103741137412374133741437415374163741737418374193742037421374223742337424374253742637427374283742937430374313743237433374343743537436374373743837439374403744137442374433744437445374463744737448374493745037451374523745337454374553745637457374583745937460374613746237463374643746537466374673746837469374703747137472374733747437475374763747737478374793748037481374823748337484374853748637487374883748937490374913749237493374943749537496374973749837499375003750137502375033750437505375063750737508375093751037511375123751337514375153751637517375183751937520375213752237523375243752537526375273752837529375303753137532375333753437535375363753737538375393754037541375423754337544375453754637547375483754937550375513755237553375543755537556375573755837559375603756137562375633756437565375663756737568375693757037571375723757337574375753757637577375783757937580375813758237583375843758537586375873758837589375903759137592375933759437595375963759737598375993760037601376023760337604376053760637607376083760937610376113761237613376143761537616376173761837619376203762137622376233762437625376263762737628376293763037631376323763337634376353763637637376383763937640376413764237643376443764537646376473764837649376503765137652376533765437655376563765737658376593766037661376623766337664376653766637667376683766937670376713767237673376743767537676376773767837679376803768137682376833768437685376863768737688376893769037691376923769337694376953769637697376983769937700377013770237703377043770537706377073770837709377103771137712377133771437715377163771737718377193772037721377223772337724377253772637727377283772937730377313773237733377343773537736377373773837739377403774137742377433774437745377463774737748377493775037751377523775337754377553775637757377583775937760377613776237763377643776537766377673776837769377703777137772377733777437775377763777737778377793778037781377823778337784377853778637787377883778937790377913779237793377943779537796377973779837799378003780137802378033780437805378063780737808378093781037811378123781337814378153781637817378183781937820378213782237823378243782537826378273782837829378303783137832378333783437835378363783737838378393784037841378423784337844378453784637847378483784937850378513785237853378543785537856378573785837859378603786137862378633786437865378663786737868378693787037871378723787337874378753787637877378783787937880378813788237883378843788537886378873788837889378903789137892378933789437895378963789737898378993790037901379023790337904379053790637907379083790937910379113791237913379143791537916379173791837919379203792137922379233792437925379263792737928379293793037931379323793337934379353793637937379383793937940379413794237943379443794537946379473794837949379503795137952379533795437955379563795737958379593796037961379623796337964379653796637967379683796937970379713797237973379743797537976379773797837979379803798137982379833798437985379863798737988379893799037991379923799337994379953799637997379983799938000380013800238003380043800538006380073800838009380103801138012380133801438015380163801738018380193802038021380223802338024380253802638027380283802938030380313803238033380343803538036380373803838039380403804138042380433804438045380463804738048380493805038051380523805338054380553805638057380583805938060380613806238063380643806538066380673806838069380703807138072380733807438075380763807738078380793808038081380823808338084380853808638087380883808938090380913809238093380943809538096380973809838099381003810138102381033810438105381063810738108381093811038111381123811338114381153811638117381183811938120381213812238123381243812538126381273812838129381303813138132381333813438135381363813738138381393814038141381423814338144381453814638147381483814938150381513815238153381543815538156381573815838159381603816138162381633816438165381663816738168381693817038171381723817338174381753817638177381783817938180381813818238183381843818538186381873818838189381903819138192381933819438195381963819738198381993820038201382023820338204382053820638207382083820938210382113821238213382143821538216382173821838219382203822138222382233822438225382263822738228382293823038231382323823338234382353823638237382383823938240382413824238243382443824538246382473824838249382503825138252382533825438255382563825738258382593826038261382623826338264382653826638267382683826938270382713827238273382743827538276382773827838279382803828138282382833828438285382863828738288382893829038291382923829338294382953829638297382983829938300383013830238303383043830538306383073830838309383103831138312383133831438315383163831738318383193832038321383223832338324383253832638327383283832938330383313833238333383343833538336383373833838339383403834138342383433834438345383463834738348383493835038351383523835338354383553835638357383583835938360383613836238363383643836538366383673836838369383703837138372383733837438375383763837738378383793838038381383823838338384383853838638387383883838938390383913839238393383943839538396383973839838399384003840138402384033840438405384063840738408384093841038411384123841338414384153841638417384183841938420384213842238423384243842538426384273842838429384303843138432384333843438435384363843738438384393844038441384423844338444384453844638447384483844938450384513845238453384543845538456384573845838459384603846138462384633846438465384663846738468384693847038471384723847338474384753847638477384783847938480384813848238483384843848538486384873848838489384903849138492384933849438495384963849738498384993850038501385023850338504385053850638507385083850938510385113851238513385143851538516385173851838519385203852138522385233852438525385263852738528385293853038531385323853338534385353853638537385383853938540385413854238543385443854538546385473854838549385503855138552385533855438555385563855738558385593856038561385623856338564385653856638567385683856938570385713857238573385743857538576385773857838579385803858138582385833858438585385863858738588385893859038591385923859338594385953859638597385983859938600386013860238603386043860538606386073860838609386103861138612386133861438615386163861738618386193862038621386223862338624386253862638627386283862938630386313863238633386343863538636386373863838639386403864138642386433864438645386463864738648386493865038651386523865338654386553865638657386583865938660386613866238663386643866538666386673866838669386703867138672386733867438675386763867738678386793868038681386823868338684386853868638687386883868938690386913869238693386943869538696386973869838699387003870138702387033870438705387063870738708387093871038711387123871338714387153871638717387183871938720387213872238723387243872538726387273872838729387303873138732387333873438735387363873738738387393874038741387423874338744387453874638747387483874938750387513875238753387543875538756387573875838759387603876138762387633876438765387663876738768387693877038771387723877338774387753877638777387783877938780387813878238783387843878538786387873878838789387903879138792387933879438795387963879738798387993880038801388023880338804388053880638807388083880938810388113881238813388143881538816388173881838819388203882138822388233882438825388263882738828388293883038831388323883338834388353883638837388383883938840388413884238843388443884538846388473884838849388503885138852388533885438855388563885738858388593886038861388623886338864388653886638867388683886938870388713887238873388743887538876388773887838879388803888138882388833888438885388863888738888388893889038891388923889338894388953889638897388983889938900389013890238903389043890538906389073890838909389103891138912389133891438915389163891738918389193892038921389223892338924389253892638927389283892938930389313893238933389343893538936389373893838939389403894138942389433894438945389463894738948389493895038951389523895338954389553895638957389583895938960389613896238963389643896538966389673896838969389703897138972389733897438975389763897738978389793898038981389823898338984389853898638987389883898938990389913899238993389943899538996389973899838999390003900139002390033900439005390063900739008390093901039011390123901339014390153901639017390183901939020390213902239023390243902539026390273902839029390303903139032390333903439035390363903739038390393904039041390423904339044390453904639047390483904939050390513905239053390543905539056390573905839059390603906139062390633906439065390663906739068390693907039071390723907339074390753907639077390783907939080390813908239083390843908539086390873908839089390903909139092390933909439095390963909739098390993910039101391023910339104391053910639107391083910939110391113911239113391143911539116391173911839119391203912139122391233912439125391263912739128391293913039131391323913339134391353913639137391383913939140391413914239143391443914539146391473914839149391503915139152391533915439155391563915739158391593916039161391623916339164391653916639167391683916939170391713917239173391743917539176391773917839179391803918139182391833918439185391863918739188391893919039191391923919339194391953919639197391983919939200392013920239203392043920539206392073920839209392103921139212392133921439215392163921739218392193922039221392223922339224392253922639227392283922939230392313923239233392343923539236392373923839239392403924139242392433924439245392463924739248392493925039251392523925339254392553925639257392583925939260392613926239263392643926539266392673926839269392703927139272392733927439275392763927739278392793928039281392823928339284392853928639287392883928939290392913929239293392943929539296392973929839299393003930139302393033930439305393063930739308393093931039311393123931339314393153931639317393183931939320393213932239323393243932539326393273932839329393303933139332393333933439335393363933739338393393934039341393423934339344393453934639347393483934939350393513935239353393543935539356393573935839359393603936139362393633936439365393663936739368393693937039371393723937339374393753937639377393783937939380393813938239383393843938539386393873938839389393903939139392393933939439395393963939739398393993940039401394023940339404394053940639407394083940939410394113941239413394143941539416394173941839419394203942139422394233942439425394263942739428394293943039431394323943339434394353943639437394383943939440394413944239443394443944539446394473944839449394503945139452394533945439455394563945739458394593946039461394623946339464394653946639467394683946939470394713947239473394743947539476394773947839479394803948139482394833948439485394863948739488394893949039491394923949339494394953949639497394983949939500395013950239503395043950539506395073950839509395103951139512395133951439515395163951739518395193952039521395223952339524395253952639527395283952939530395313953239533395343953539536395373953839539395403954139542395433954439545395463954739548395493955039551395523955339554395553955639557395583955939560395613956239563395643956539566395673956839569395703957139572395733957439575395763957739578395793958039581395823958339584395853958639587395883958939590395913959239593395943959539596395973959839599396003960139602396033960439605396063960739608396093961039611396123961339614396153961639617396183961939620396213962239623396243962539626396273962839629396303963139632396333963439635396363963739638396393964039641396423964339644396453964639647396483964939650396513965239653396543965539656396573965839659396603966139662396633966439665396663966739668396693967039671396723967339674396753967639677396783967939680396813968239683396843968539686396873968839689396903969139692396933969439695396963969739698396993970039701397023970339704397053970639707397083970939710397113971239713397143971539716397173971839719397203972139722397233972439725397263972739728397293973039731397323973339734397353973639737397383973939740397413974239743397443974539746397473974839749397503975139752397533975439755397563975739758397593976039761397623976339764397653976639767397683976939770397713977239773397743977539776397773977839779397803978139782397833978439785397863978739788397893979039791397923979339794397953979639797397983979939800398013980239803398043980539806398073980839809398103981139812398133981439815398163981739818398193982039821398223982339824398253982639827398283982939830398313983239833398343983539836398373983839839398403984139842398433984439845398463984739848398493985039851398523985339854398553985639857398583985939860398613986239863398643986539866398673986839869398703987139872398733987439875398763987739878398793988039881398823988339884398853988639887398883988939890398913989239893398943989539896398973989839899399003990139902399033990439905399063990739908399093991039911399123991339914399153991639917399183991939920399213992239923399243992539926399273992839929399303993139932399333993439935399363993739938399393994039941399423994339944399453994639947399483994939950399513995239953399543995539956399573995839959399603996139962399633996439965399663996739968399693997039971399723997339974399753997639977399783997939980399813998239983399843998539986399873998839989399903999139992399933999439995399963999739998399994000040001400024000340004400054000640007400084000940010400114001240013400144001540016400174001840019400204002140022400234002440025400264002740028400294003040031400324003340034400354003640037400384003940040400414004240043400444004540046400474004840049400504005140052400534005440055400564005740058400594006040061400624006340064400654006640067400684006940070400714007240073400744007540076400774007840079400804008140082400834008440085400864008740088400894009040091400924009340094400954009640097400984009940100401014010240103401044010540106401074010840109401104011140112401134011440115401164011740118401194012040121401224012340124401254012640127401284012940130401314013240133401344013540136401374013840139401404014140142401434014440145401464014740148401494015040151401524015340154401554015640157401584015940160401614016240163401644016540166401674016840169401704017140172401734017440175401764017740178401794018040181401824018340184401854018640187401884018940190401914019240193401944019540196401974019840199402004020140202402034020440205402064020740208402094021040211402124021340214402154021640217402184021940220402214022240223402244022540226402274022840229402304023140232402334023440235402364023740238402394024040241402424024340244402454024640247402484024940250402514025240253402544025540256402574025840259402604026140262402634026440265402664026740268402694027040271402724027340274402754027640277402784027940280402814028240283402844028540286402874028840289402904029140292402934029440295402964029740298402994030040301403024030340304403054030640307403084030940310403114031240313403144031540316403174031840319403204032140322403234032440325403264032740328403294033040331403324033340334403354033640337403384033940340403414034240343403444034540346403474034840349403504035140352403534035440355403564035740358403594036040361403624036340364403654036640367403684036940370403714037240373403744037540376403774037840379403804038140382403834038440385403864038740388403894039040391403924039340394403954039640397403984039940400404014040240403404044040540406404074040840409404104041140412404134041440415404164041740418404194042040421404224042340424404254042640427404284042940430404314043240433404344043540436404374043840439404404044140442404434044440445404464044740448404494045040451404524045340454404554045640457404584045940460404614046240463404644046540466404674046840469404704047140472404734047440475404764047740478404794048040481404824048340484404854048640487404884048940490404914049240493404944049540496404974049840499405004050140502405034050440505405064050740508405094051040511405124051340514405154051640517405184051940520405214052240523405244052540526405274052840529405304053140532405334053440535405364053740538405394054040541405424054340544405454054640547405484054940550405514055240553405544055540556405574055840559405604056140562405634056440565405664056740568405694057040571405724057340574405754057640577405784057940580405814058240583405844058540586405874058840589405904059140592405934059440595405964059740598405994060040601406024060340604406054060640607406084060940610406114061240613406144061540616406174061840619406204062140622406234062440625406264062740628406294063040631406324063340634406354063640637406384063940640406414064240643406444064540646406474064840649406504065140652406534065440655406564065740658406594066040661406624066340664406654066640667406684066940670406714067240673406744067540676406774067840679406804068140682406834068440685406864068740688406894069040691406924069340694406954069640697406984069940700407014070240703407044070540706407074070840709407104071140712407134071440715407164071740718407194072040721407224072340724407254072640727407284072940730407314073240733407344073540736407374073840739407404074140742407434074440745407464074740748407494075040751407524075340754407554075640757407584075940760407614076240763407644076540766407674076840769407704077140772407734077440775407764077740778407794078040781407824078340784407854078640787407884078940790407914079240793407944079540796407974079840799408004080140802408034080440805408064080740808408094081040811408124081340814408154081640817408184081940820408214082240823408244082540826408274082840829408304083140832408334083440835408364083740838408394084040841408424084340844408454084640847408484084940850408514085240853408544085540856408574085840859408604086140862408634086440865408664086740868408694087040871408724087340874408754087640877408784087940880408814088240883408844088540886408874088840889408904089140892408934089440895408964089740898408994090040901409024090340904409054090640907409084090940910409114091240913409144091540916409174091840919409204092140922409234092440925409264092740928409294093040931409324093340934409354093640937409384093940940409414094240943409444094540946409474094840949409504095140952409534095440955409564095740958409594096040961409624096340964409654096640967409684096940970409714097240973409744097540976409774097840979409804098140982409834098440985409864098740988409894099040991409924099340994409954099640997409984099941000410014100241003410044100541006410074100841009410104101141012410134101441015410164101741018410194102041021410224102341024410254102641027410284102941030410314103241033410344103541036410374103841039410404104141042410434104441045410464104741048410494105041051410524105341054410554105641057410584105941060410614106241063410644106541066410674106841069410704107141072410734107441075410764107741078410794108041081410824108341084410854108641087410884108941090410914109241093410944109541096410974109841099411004110141102411034110441105411064110741108411094111041111411124111341114411154111641117411184111941120411214112241123411244112541126411274112841129411304113141132411334113441135411364113741138411394114041141411424114341144411454114641147411484114941150411514115241153411544115541156411574115841159411604116141162411634116441165411664116741168411694117041171411724117341174411754117641177411784117941180411814118241183411844118541186411874118841189411904119141192411934119441195411964119741198411994120041201412024120341204412054120641207412084120941210412114121241213412144121541216412174121841219412204122141222412234122441225412264122741228412294123041231412324123341234412354123641237412384123941240412414124241243412444124541246412474124841249412504125141252412534125441255412564125741258412594126041261412624126341264412654126641267412684126941270412714127241273412744127541276412774127841279412804128141282412834128441285412864128741288412894129041291412924129341294412954129641297412984129941300413014130241303413044130541306413074130841309413104131141312413134131441315413164131741318413194132041321413224132341324413254132641327413284132941330413314133241333413344133541336413374133841339413404134141342413434134441345413464134741348413494135041351413524135341354413554135641357413584135941360413614136241363413644136541366413674136841369413704137141372413734137441375413764137741378413794138041381413824138341384413854138641387413884138941390413914139241393413944139541396413974139841399414004140141402414034140441405414064140741408414094141041411414124141341414414154141641417414184141941420414214142241423414244142541426414274142841429414304143141432414334143441435414364143741438414394144041441414424144341444414454144641447414484144941450414514145241453414544145541456414574145841459414604146141462414634146441465414664146741468414694147041471414724147341474414754147641477414784147941480414814148241483414844148541486414874148841489414904149141492414934149441495414964149741498414994150041501415024150341504415054150641507415084150941510415114151241513415144151541516415174151841519415204152141522415234152441525415264152741528415294153041531415324153341534415354153641537415384153941540415414154241543415444154541546415474154841549415504155141552415534155441555415564155741558415594156041561415624156341564415654156641567415684156941570415714157241573415744157541576415774157841579415804158141582415834158441585415864158741588415894159041591415924159341594415954159641597415984159941600416014160241603416044160541606416074160841609416104161141612416134161441615416164161741618416194162041621416224162341624416254162641627416284162941630416314163241633416344163541636416374163841639416404164141642416434164441645416464164741648416494165041651416524165341654416554165641657416584165941660416614166241663416644166541666416674166841669416704167141672416734167441675416764167741678416794168041681416824168341684416854168641687416884168941690416914169241693416944169541696416974169841699417004170141702417034170441705417064170741708417094171041711417124171341714417154171641717417184171941720417214172241723417244172541726417274172841729417304173141732417334173441735417364173741738417394174041741417424174341744417454174641747417484174941750417514175241753417544175541756417574175841759417604176141762417634176441765417664176741768417694177041771417724177341774417754177641777417784177941780417814178241783417844178541786417874178841789417904179141792417934179441795417964179741798417994180041801418024180341804418054180641807418084180941810418114181241813418144181541816418174181841819418204182141822418234182441825418264182741828418294183041831418324183341834418354183641837418384183941840418414184241843418444184541846418474184841849418504185141852418534185441855418564185741858418594186041861418624186341864418654186641867418684186941870418714187241873418744187541876418774187841879418804188141882418834188441885418864188741888418894189041891418924189341894418954189641897418984189941900419014190241903419044190541906419074190841909419104191141912419134191441915419164191741918419194192041921419224192341924419254192641927419284192941930419314193241933419344193541936419374193841939419404194141942419434194441945419464194741948419494195041951419524195341954419554195641957419584195941960419614196241963419644196541966419674196841969419704197141972419734197441975419764197741978419794198041981419824198341984419854198641987419884198941990419914199241993419944199541996419974199841999420004200142002420034200442005420064200742008420094201042011420124201342014420154201642017420184201942020420214202242023420244202542026420274202842029420304203142032420334203442035420364203742038420394204042041420424204342044420454204642047420484204942050420514205242053420544205542056420574205842059420604206142062420634206442065420664206742068420694207042071420724207342074420754207642077420784207942080420814208242083420844208542086420874208842089420904209142092420934209442095420964209742098420994210042101421024210342104421054210642107421084210942110421114211242113421144211542116421174211842119421204212142122421234212442125421264212742128421294213042131421324213342134421354213642137421384213942140421414214242143421444214542146421474214842149421504215142152421534215442155421564215742158421594216042161421624216342164421654216642167421684216942170421714217242173421744217542176421774217842179421804218142182421834218442185421864218742188421894219042191421924219342194421954219642197421984219942200422014220242203422044220542206422074220842209422104221142212422134221442215422164221742218422194222042221422224222342224422254222642227422284222942230422314223242233422344223542236422374223842239422404224142242422434224442245422464224742248422494225042251422524225342254422554225642257422584225942260422614226242263422644226542266422674226842269422704227142272422734227442275422764227742278422794228042281422824228342284422854228642287422884228942290422914229242293422944229542296422974229842299423004230142302423034230442305423064230742308423094231042311423124231342314423154231642317423184231942320423214232242323423244232542326423274232842329423304233142332423334233442335423364233742338423394234042341423424234342344423454234642347423484234942350423514235242353423544235542356423574235842359423604236142362423634236442365423664236742368423694237042371423724237342374423754237642377423784237942380423814238242383423844238542386423874238842389423904239142392423934239442395423964239742398423994240042401424024240342404424054240642407424084240942410424114241242413424144241542416424174241842419424204242142422424234242442425424264242742428424294243042431424324243342434424354243642437424384243942440424414244242443424444244542446424474244842449424504245142452424534245442455424564245742458424594246042461424624246342464424654246642467424684246942470424714247242473424744247542476424774247842479424804248142482424834248442485424864248742488424894249042491424924249342494424954249642497424984249942500425014250242503425044250542506425074250842509425104251142512425134251442515425164251742518425194252042521425224252342524425254252642527425284252942530425314253242533425344253542536425374253842539425404254142542425434254442545425464254742548425494255042551425524255342554425554255642557425584255942560425614256242563425644256542566425674256842569425704257142572425734257442575425764257742578425794258042581425824258342584425854258642587425884258942590425914259242593425944259542596425974259842599426004260142602426034260442605426064260742608426094261042611426124261342614426154261642617426184261942620426214262242623426244262542626426274262842629426304263142632426334263442635426364263742638426394264042641426424264342644426454264642647426484264942650426514265242653426544265542656426574265842659426604266142662426634266442665426664266742668426694267042671426724267342674426754267642677426784267942680426814268242683426844268542686426874268842689426904269142692426934269442695426964269742698426994270042701427024270342704427054270642707427084270942710427114271242713427144271542716427174271842719427204272142722427234272442725427264272742728427294273042731427324273342734427354273642737427384273942740427414274242743427444274542746427474274842749427504275142752427534275442755427564275742758427594276042761427624276342764427654276642767427684276942770427714277242773427744277542776427774277842779427804278142782427834278442785427864278742788427894279042791427924279342794427954279642797427984279942800428014280242803428044280542806428074280842809428104281142812428134281442815428164281742818428194282042821428224282342824428254282642827428284282942830428314283242833428344283542836428374283842839428404284142842428434284442845428464284742848428494285042851428524285342854428554285642857428584285942860428614286242863428644286542866428674286842869428704287142872428734287442875428764287742878428794288042881428824288342884428854288642887428884288942890428914289242893428944289542896428974289842899429004290142902429034290442905429064290742908429094291042911429124291342914429154291642917429184291942920429214292242923429244292542926429274292842929429304293142932429334293442935429364293742938429394294042941429424294342944429454294642947429484294942950429514295242953429544295542956429574295842959429604296142962429634296442965429664296742968429694297042971429724297342974429754297642977429784297942980429814298242983429844298542986429874298842989429904299142992429934299442995429964299742998429994300043001430024300343004430054300643007430084300943010430114301243013430144301543016430174301843019430204302143022430234302443025430264302743028430294303043031430324303343034430354303643037430384303943040430414304243043430444304543046430474304843049430504305143052430534305443055430564305743058430594306043061430624306343064430654306643067430684306943070430714307243073430744307543076430774307843079430804308143082430834308443085430864308743088430894309043091430924309343094430954309643097430984309943100431014310243103431044310543106431074310843109431104311143112431134311443115431164311743118431194312043121431224312343124431254312643127431284312943130431314313243133431344313543136431374313843139431404314143142431434314443145431464314743148431494315043151431524315343154431554315643157431584315943160431614316243163431644316543166431674316843169431704317143172431734317443175431764317743178431794318043181431824318343184431854318643187431884318943190431914319243193431944319543196431974319843199432004320143202432034320443205432064320743208432094321043211432124321343214432154321643217432184321943220432214322243223432244322543226432274322843229432304323143232432334323443235432364323743238432394324043241432424324343244432454324643247432484324943250432514325243253432544325543256432574325843259432604326143262432634326443265432664326743268432694327043271432724327343274432754327643277432784327943280432814328243283432844328543286432874328843289432904329143292432934329443295432964329743298432994330043301433024330343304433054330643307433084330943310433114331243313433144331543316433174331843319433204332143322433234332443325433264332743328433294333043331433324333343334433354333643337433384333943340433414334243343433444334543346433474334843349433504335143352433534335443355433564335743358433594336043361433624336343364433654336643367433684336943370433714337243373433744337543376433774337843379433804338143382433834338443385433864338743388433894339043391433924339343394433954339643397433984339943400434014340243403434044340543406434074340843409434104341143412434134341443415434164341743418434194342043421434224342343424434254342643427434284342943430434314343243433434344343543436434374343843439434404344143442434434344443445434464344743448434494345043451434524345343454434554345643457434584345943460434614346243463434644346543466434674346843469434704347143472434734347443475434764347743478434794348043481434824348343484434854348643487434884348943490434914349243493434944349543496434974349843499435004350143502435034350443505435064350743508435094351043511435124351343514435154351643517435184351943520435214352243523435244352543526435274352843529435304353143532435334353443535435364353743538435394354043541435424354343544435454354643547435484354943550435514355243553435544355543556435574355843559435604356143562435634356443565435664356743568435694357043571435724357343574435754357643577435784357943580435814358243583435844358543586435874358843589435904359143592435934359443595435964359743598435994360043601436024360343604436054360643607436084360943610436114361243613436144361543616436174361843619436204362143622436234362443625436264362743628436294363043631436324363343634436354363643637436384363943640436414364243643436444364543646436474364843649436504365143652436534365443655436564365743658436594366043661436624366343664436654366643667436684366943670436714367243673436744367543676436774367843679436804368143682436834368443685436864368743688436894369043691436924369343694436954369643697436984369943700437014370243703437044370543706437074370843709437104371143712437134371443715437164371743718437194372043721437224372343724437254372643727437284372943730437314373243733437344373543736437374373843739437404374143742437434374443745437464374743748437494375043751437524375343754437554375643757437584375943760437614376243763437644376543766437674376843769437704377143772437734377443775437764377743778437794378043781437824378343784437854378643787437884378943790437914379243793437944379543796437974379843799438004380143802438034380443805438064380743808438094381043811438124381343814438154381643817438184381943820438214382243823438244382543826438274382843829438304383143832438334383443835438364383743838438394384043841438424384343844438454384643847438484384943850438514385243853438544385543856438574385843859438604386143862438634386443865438664386743868438694387043871438724387343874438754387643877438784387943880438814388243883438844388543886438874388843889438904389143892438934389443895438964389743898438994390043901439024390343904439054390643907439084390943910439114391243913439144391543916439174391843919439204392143922439234392443925439264392743928439294393043931439324393343934439354393643937439384393943940439414394243943439444394543946439474394843949439504395143952439534395443955439564395743958439594396043961439624396343964439654396643967439684396943970439714397243973439744397543976439774397843979439804398143982439834398443985439864398743988439894399043991439924399343994439954399643997439984399944000440014400244003440044400544006440074400844009440104401144012440134401444015440164401744018440194402044021440224402344024440254402644027440284402944030440314403244033440344403544036440374403844039440404404144042440434404444045440464404744048440494405044051440524405344054440554405644057440584405944060440614406244063440644406544066440674406844069440704407144072440734407444075440764407744078440794408044081440824408344084440854408644087440884408944090440914409244093440944409544096440974409844099441004410144102441034410444105441064410744108441094411044111441124411344114441154411644117441184411944120441214412244123441244412544126441274412844129441304413144132441334413444135441364413744138441394414044141441424414344144441454414644147441484414944150441514415244153441544415544156441574415844159441604416144162441634416444165441664416744168441694417044171441724417344174441754417644177441784417944180441814418244183441844418544186441874418844189441904419144192441934419444195441964419744198441994420044201442024420344204442054420644207442084420944210442114421244213442144421544216442174421844219442204422144222442234422444225442264422744228442294423044231442324423344234442354423644237442384423944240442414424244243442444424544246442474424844249442504425144252442534425444255442564425744258442594426044261442624426344264442654426644267442684426944270442714427244273442744427544276442774427844279442804428144282442834428444285442864428744288442894429044291442924429344294442954429644297442984429944300443014430244303443044430544306443074430844309443104431144312443134431444315443164431744318443194432044321443224432344324443254432644327443284432944330443314433244333443344433544336443374433844339443404434144342443434434444345443464434744348443494435044351443524435344354443554435644357443584435944360443614436244363443644436544366443674436844369443704437144372443734437444375443764437744378443794438044381443824438344384443854438644387443884438944390443914439244393443944439544396443974439844399444004440144402444034440444405444064440744408444094441044411444124441344414444154441644417444184441944420444214442244423444244442544426444274442844429444304443144432444334443444435444364443744438444394444044441444424444344444444454444644447444484444944450444514445244453444544445544456444574445844459444604446144462444634446444465444664446744468444694447044471444724447344474444754447644477444784447944480444814448244483444844448544486444874448844489444904449144492444934449444495444964449744498444994450044501445024450344504445054450644507445084450944510445114451244513445144451544516445174451844519445204452144522445234452444525445264452744528445294453044531445324453344534445354453644537445384453944540445414454244543445444454544546445474454844549445504455144552445534455444555445564455744558445594456044561445624456344564445654456644567445684456944570445714457244573445744457544576445774457844579445804458144582445834458444585445864458744588445894459044591445924459344594445954459644597445984459944600446014460244603446044460544606446074460844609446104461144612446134461444615446164461744618446194462044621446224462344624446254462644627446284462944630446314463244633446344463544636446374463844639446404464144642446434464444645446464464744648446494465044651446524465344654446554465644657446584465944660446614466244663446644466544666446674466844669446704467144672446734467444675446764467744678446794468044681446824468344684446854468644687446884468944690446914469244693446944469544696446974469844699447004470144702447034470444705447064470744708447094471044711447124471344714447154471644717447184471944720447214472244723447244472544726447274472844729447304473144732447334473444735447364473744738447394474044741447424474344744447454474644747447484474944750447514475244753447544475544756447574475844759447604476144762447634476444765447664476744768447694477044771447724477344774447754477644777447784477944780447814478244783447844478544786447874478844789447904479144792447934479444795447964479744798447994480044801448024480344804448054480644807448084480944810448114481244813448144481544816448174481844819448204482144822448234482444825448264482744828448294483044831448324483344834448354483644837448384483944840448414484244843448444484544846448474484844849448504485144852448534485444855448564485744858448594486044861448624486344864448654486644867448684486944870448714487244873448744487544876448774487844879448804488144882448834488444885448864488744888448894489044891448924489344894448954489644897448984489944900449014490244903449044490544906449074490844909449104491144912449134491444915449164491744918449194492044921449224492344924449254492644927449284492944930449314493244933449344493544936449374493844939449404494144942449434494444945449464494744948449494495044951449524495344954449554495644957449584495944960449614496244963449644496544966449674496844969449704497144972449734497444975449764497744978449794498044981449824498344984449854498644987449884498944990449914499244993449944499544996449974499844999450004500145002450034500445005450064500745008450094501045011450124501345014450154501645017450184501945020450214502245023450244502545026450274502845029450304503145032450334503445035450364503745038450394504045041450424504345044450454504645047450484504945050450514505245053450544505545056450574505845059450604506145062450634506445065450664506745068450694507045071450724507345074450754507645077450784507945080450814508245083450844508545086450874508845089450904509145092450934509445095450964509745098450994510045101451024510345104451054510645107451084510945110451114511245113451144511545116451174511845119451204512145122451234512445125451264512745128451294513045131451324513345134451354513645137451384513945140451414514245143451444514545146451474514845149451504515145152451534515445155451564515745158451594516045161451624516345164451654516645167451684516945170451714517245173451744517545176451774517845179451804518145182451834518445185451864518745188451894519045191451924519345194451954519645197451984519945200452014520245203452044520545206452074520845209452104521145212452134521445215452164521745218452194522045221452224522345224452254522645227452284522945230452314523245233452344523545236452374523845239452404524145242452434524445245452464524745248452494525045251452524525345254452554525645257452584525945260452614526245263452644526545266452674526845269452704527145272452734527445275452764527745278452794528045281452824528345284452854528645287452884528945290452914529245293452944529545296452974529845299453004530145302453034530445305453064530745308453094531045311453124531345314453154531645317453184531945320453214532245323453244532545326453274532845329453304533145332453334533445335453364533745338453394534045341453424534345344453454534645347453484534945350453514535245353453544535545356453574535845359453604536145362453634536445365453664536745368453694537045371453724537345374453754537645377453784537945380453814538245383453844538545386453874538845389453904539145392453934539445395453964539745398453994540045401454024540345404454054540645407454084540945410454114541245413454144541545416454174541845419454204542145422454234542445425454264542745428454294543045431454324543345434454354543645437454384543945440454414544245443454444544545446454474544845449454504545145452454534545445455454564545745458454594546045461454624546345464454654546645467454684546945470454714547245473454744547545476454774547845479454804548145482454834548445485454864548745488454894549045491454924549345494454954549645497454984549945500455014550245503455044550545506455074550845509455104551145512455134551445515455164551745518455194552045521455224552345524455254552645527455284552945530455314553245533455344553545536455374553845539455404554145542455434554445545455464554745548455494555045551455524555345554455554555645557455584555945560455614556245563455644556545566455674556845569455704557145572455734557445575455764557745578455794558045581455824558345584455854558645587455884558945590455914559245593455944559545596455974559845599456004560145602456034560445605456064560745608456094561045611456124561345614456154561645617456184561945620456214562245623456244562545626456274562845629456304563145632456334563445635456364563745638456394564045641456424564345644456454564645647456484564945650456514565245653456544565545656456574565845659456604566145662456634566445665456664566745668456694567045671456724567345674456754567645677456784567945680456814568245683456844568545686456874568845689456904569145692456934569445695456964569745698456994570045701457024570345704457054570645707457084570945710457114571245713457144571545716457174571845719457204572145722457234572445725457264572745728457294573045731457324573345734457354573645737457384573945740457414574245743457444574545746457474574845749457504575145752457534575445755457564575745758457594576045761457624576345764457654576645767457684576945770457714577245773457744577545776457774577845779457804578145782457834578445785457864578745788457894579045791457924579345794457954579645797457984579945800458014580245803458044580545806458074580845809458104581145812458134581445815458164581745818458194582045821458224582345824458254582645827458284582945830458314583245833458344583545836458374583845839458404584145842458434584445845458464584745848458494585045851458524585345854458554585645857458584585945860458614586245863458644586545866458674586845869458704587145872458734587445875458764587745878458794588045881458824588345884458854588645887458884588945890458914589245893458944589545896458974589845899459004590145902459034590445905459064590745908459094591045911459124591345914459154591645917459184591945920459214592245923459244592545926459274592845929459304593145932459334593445935459364593745938459394594045941459424594345944459454594645947459484594945950459514595245953459544595545956459574595845959459604596145962459634596445965459664596745968459694597045971459724597345974459754597645977459784597945980459814598245983459844598545986459874598845989459904599145992459934599445995459964599745998459994600046001460024600346004460054600646007460084600946010460114601246013460144601546016460174601846019460204602146022460234602446025460264602746028460294603046031460324603346034460354603646037460384603946040460414604246043460444604546046460474604846049460504605146052460534605446055460564605746058460594606046061460624606346064460654606646067460684606946070460714607246073460744607546076460774607846079460804608146082460834608446085460864608746088460894609046091460924609346094460954609646097460984609946100461014610246103461044610546106461074610846109461104611146112461134611446115461164611746118461194612046121461224612346124461254612646127461284612946130461314613246133461344613546136461374613846139461404614146142461434614446145461464614746148461494615046151461524615346154461554615646157461584615946160461614616246163461644616546166461674616846169461704617146172461734617446175461764617746178461794618046181461824618346184461854618646187461884618946190461914619246193461944619546196461974619846199462004620146202462034620446205462064620746208462094621046211462124621346214462154621646217462184621946220462214622246223462244622546226462274622846229462304623146232462334623446235462364623746238462394624046241462424624346244462454624646247462484624946250462514625246253462544625546256462574625846259462604626146262462634626446265462664626746268462694627046271462724627346274462754627646277462784627946280462814628246283462844628546286462874628846289462904629146292462934629446295462964629746298462994630046301463024630346304463054630646307463084630946310463114631246313463144631546316463174631846319463204632146322463234632446325463264632746328463294633046331463324633346334463354633646337463384633946340463414634246343463444634546346463474634846349463504635146352463534635446355463564635746358463594636046361463624636346364463654636646367463684636946370463714637246373463744637546376463774637846379463804638146382463834638446385463864638746388463894639046391463924639346394463954639646397463984639946400464014640246403464044640546406464074640846409464104641146412464134641446415464164641746418464194642046421464224642346424464254642646427464284642946430464314643246433464344643546436464374643846439464404644146442464434644446445464464644746448464494645046451464524645346454464554645646457464584645946460464614646246463464644646546466464674646846469464704647146472464734647446475464764647746478464794648046481464824648346484464854648646487464884648946490464914649246493464944649546496464974649846499465004650146502465034650446505465064650746508465094651046511465124651346514465154651646517465184651946520465214652246523465244652546526465274652846529465304653146532465334653446535465364653746538465394654046541465424654346544465454654646547465484654946550465514655246553465544655546556465574655846559465604656146562465634656446565465664656746568465694657046571465724657346574465754657646577465784657946580465814658246583465844658546586465874658846589465904659146592465934659446595465964659746598465994660046601466024660346604466054660646607466084660946610466114661246613466144661546616466174661846619466204662146622466234662446625466264662746628466294663046631466324663346634466354663646637466384663946640466414664246643466444664546646466474664846649466504665146652466534665446655466564665746658466594666046661466624666346664466654666646667466684666946670466714667246673466744667546676466774667846679466804668146682466834668446685466864668746688466894669046691466924669346694466954669646697466984669946700467014670246703467044670546706467074670846709467104671146712467134671446715467164671746718467194672046721467224672346724467254672646727467284672946730467314673246733467344673546736467374673846739467404674146742467434674446745467464674746748467494675046751467524675346754467554675646757467584675946760467614676246763467644676546766467674676846769467704677146772467734677446775467764677746778467794678046781467824678346784467854678646787467884678946790467914679246793467944679546796467974679846799468004680146802468034680446805468064680746808468094681046811468124681346814468154681646817468184681946820468214682246823468244682546826468274682846829468304683146832468334683446835468364683746838468394684046841468424684346844468454684646847468484684946850468514685246853468544685546856468574685846859468604686146862468634686446865468664686746868468694687046871468724687346874468754687646877468784687946880468814688246883468844688546886468874688846889468904689146892468934689446895468964689746898468994690046901469024690346904469054690646907469084690946910469114691246913469144691546916469174691846919469204692146922469234692446925469264692746928469294693046931469324693346934469354693646937469384693946940469414694246943469444694546946469474694846949469504695146952469534695446955469564695746958469594696046961469624696346964469654696646967469684696946970469714697246973469744697546976469774697846979469804698146982469834698446985469864698746988469894699046991469924699346994469954699646997469984699947000470014700247003470044700547006470074700847009470104701147012470134701447015470164701747018470194702047021470224702347024470254702647027470284702947030470314703247033470344703547036470374703847039470404704147042470434704447045470464704747048470494705047051470524705347054470554705647057470584705947060470614706247063470644706547066470674706847069470704707147072470734707447075470764707747078470794708047081470824708347084470854708647087470884708947090470914709247093470944709547096470974709847099471004710147102471034710447105471064710747108471094711047111471124711347114471154711647117471184711947120471214712247123471244712547126471274712847129471304713147132471334713447135471364713747138471394714047141471424714347144471454714647147471484714947150471514715247153471544715547156471574715847159471604716147162471634716447165471664716747168471694717047171471724717347174471754717647177471784717947180471814718247183471844718547186471874718847189471904719147192471934719447195471964719747198471994720047201472024720347204472054720647207472084720947210472114721247213472144721547216472174721847219472204722147222472234722447225472264722747228472294723047231472324723347234472354723647237472384723947240472414724247243472444724547246472474724847249472504725147252472534725447255472564725747258472594726047261472624726347264472654726647267472684726947270472714727247273472744727547276472774727847279472804728147282472834728447285472864728747288472894729047291472924729347294472954729647297472984729947300473014730247303473044730547306473074730847309473104731147312473134731447315473164731747318473194732047321473224732347324473254732647327473284732947330473314733247333473344733547336473374733847339473404734147342473434734447345473464734747348473494735047351473524735347354473554735647357473584735947360473614736247363473644736547366473674736847369473704737147372473734737447375473764737747378473794738047381473824738347384473854738647387473884738947390473914739247393473944739547396473974739847399474004740147402474034740447405474064740747408474094741047411474124741347414474154741647417474184741947420474214742247423474244742547426474274742847429474304743147432474334743447435474364743747438474394744047441474424744347444474454744647447474484744947450474514745247453474544745547456474574745847459474604746147462474634746447465474664746747468474694747047471474724747347474474754747647477474784747947480474814748247483474844748547486474874748847489474904749147492474934749447495474964749747498474994750047501475024750347504475054750647507475084750947510475114751247513475144751547516475174751847519475204752147522475234752447525475264752747528475294753047531475324753347534475354753647537475384753947540475414754247543475444754547546475474754847549475504755147552475534755447555475564755747558475594756047561475624756347564475654756647567475684756947570475714757247573475744757547576475774757847579475804758147582475834758447585475864758747588475894759047591475924759347594475954759647597475984759947600476014760247603476044760547606476074760847609476104761147612476134761447615476164761747618476194762047621476224762347624476254762647627476284762947630476314763247633476344763547636476374763847639476404764147642476434764447645476464764747648476494765047651476524765347654476554765647657476584765947660476614766247663476644766547666476674766847669476704767147672476734767447675476764767747678476794768047681476824768347684476854768647687476884768947690476914769247693476944769547696476974769847699477004770147702477034770447705477064770747708477094771047711477124771347714477154771647717477184771947720477214772247723477244772547726477274772847729477304773147732477334773447735477364773747738477394774047741477424774347744477454774647747477484774947750477514775247753477544775547756477574775847759477604776147762477634776447765477664776747768477694777047771477724777347774477754777647777477784777947780477814778247783477844778547786477874778847789477904779147792477934779447795477964779747798477994780047801478024780347804478054780647807478084780947810478114781247813478144781547816478174781847819478204782147822478234782447825478264782747828478294783047831478324783347834478354783647837478384783947840478414784247843478444784547846478474784847849478504785147852478534785447855478564785747858478594786047861478624786347864478654786647867478684786947870478714787247873478744787547876478774787847879478804788147882478834788447885478864788747888478894789047891478924789347894478954789647897478984789947900479014790247903479044790547906479074790847909479104791147912479134791447915479164791747918479194792047921479224792347924479254792647927479284792947930479314793247933479344793547936479374793847939479404794147942479434794447945479464794747948479494795047951479524795347954479554795647957479584795947960479614796247963479644796547966479674796847969479704797147972479734797447975479764797747978479794798047981479824798347984479854798647987479884798947990479914799247993479944799547996479974799847999480004800148002480034800448005480064800748008480094801048011480124801348014480154801648017480184801948020480214802248023480244802548026480274802848029480304803148032480334803448035480364803748038480394804048041480424804348044480454804648047480484804948050480514805248053480544805548056480574805848059480604806148062480634806448065480664806748068480694807048071480724807348074480754807648077480784807948080480814808248083480844808548086480874808848089480904809148092480934809448095480964809748098480994810048101481024810348104481054810648107481084810948110481114811248113481144811548116481174811848119481204812148122481234812448125481264812748128481294813048131481324813348134481354813648137481384813948140481414814248143481444814548146481474814848149481504815148152481534815448155481564815748158481594816048161481624816348164481654816648167481684816948170481714817248173481744817548176481774817848179481804818148182481834818448185481864818748188481894819048191481924819348194481954819648197481984819948200482014820248203482044820548206482074820848209482104821148212482134821448215482164821748218482194822048221482224822348224482254822648227482284822948230482314823248233482344823548236482374823848239482404824148242482434824448245482464824748248482494825048251482524825348254482554825648257482584825948260482614826248263482644826548266482674826848269482704827148272482734827448275482764827748278482794828048281482824828348284482854828648287482884828948290482914829248293482944829548296482974829848299483004830148302483034830448305483064830748308483094831048311483124831348314483154831648317483184831948320483214832248323483244832548326483274832848329483304833148332483334833448335483364833748338483394834048341483424834348344483454834648347483484834948350483514835248353483544835548356483574835848359483604836148362483634836448365483664836748368483694837048371483724837348374483754837648377483784837948380483814838248383483844838548386483874838848389483904839148392483934839448395483964839748398483994840048401484024840348404484054840648407484084840948410484114841248413484144841548416484174841848419484204842148422484234842448425484264842748428484294843048431484324843348434484354843648437484384843948440484414844248443484444844548446484474844848449484504845148452484534845448455484564845748458484594846048461484624846348464484654846648467484684846948470484714847248473484744847548476484774847848479484804848148482484834848448485484864848748488484894849048491484924849348494484954849648497484984849948500485014850248503485044850548506485074850848509485104851148512485134851448515485164851748518485194852048521485224852348524485254852648527485284852948530485314853248533485344853548536485374853848539485404854148542485434854448545485464854748548485494855048551485524855348554485554855648557485584855948560485614856248563485644856548566485674856848569485704857148572485734857448575485764857748578485794858048581485824858348584485854858648587485884858948590485914859248593485944859548596485974859848599486004860148602486034860448605486064860748608486094861048611486124861348614486154861648617486184861948620486214862248623486244862548626486274862848629486304863148632486334863448635486364863748638486394864048641486424864348644486454864648647486484864948650486514865248653486544865548656486574865848659486604866148662486634866448665486664866748668486694867048671486724867348674486754867648677486784867948680486814868248683486844868548686486874868848689486904869148692486934869448695486964869748698486994870048701487024870348704487054870648707487084870948710487114871248713487144871548716487174871848719487204872148722487234872448725487264872748728487294873048731487324873348734487354873648737487384873948740487414874248743487444874548746487474874848749487504875148752487534875448755487564875748758487594876048761487624876348764487654876648767487684876948770487714877248773487744877548776487774877848779487804878148782487834878448785487864878748788487894879048791487924879348794487954879648797487984879948800488014880248803488044880548806488074880848809488104881148812488134881448815488164881748818488194882048821488224882348824488254882648827488284882948830488314883248833488344883548836488374883848839488404884148842488434884448845488464884748848488494885048851488524885348854488554885648857488584885948860488614886248863488644886548866488674886848869488704887148872488734887448875488764887748878488794888048881488824888348884488854888648887488884888948890488914889248893488944889548896488974889848899489004890148902489034890448905489064890748908489094891048911489124891348914489154891648917489184891948920489214892248923489244892548926489274892848929489304893148932489334893448935489364893748938489394894048941489424894348944489454894648947489484894948950489514895248953489544895548956489574895848959489604896148962489634896448965489664896748968489694897048971489724897348974489754897648977489784897948980489814898248983489844898548986489874898848989489904899148992489934899448995489964899748998489994900049001490024900349004490054900649007490084900949010490114901249013490144901549016490174901849019490204902149022490234902449025490264902749028490294903049031490324903349034490354903649037490384903949040490414904249043490444904549046490474904849049490504905149052490534905449055490564905749058490594906049061490624906349064490654906649067490684906949070490714907249073490744907549076490774907849079490804908149082490834908449085490864908749088490894909049091490924909349094490954909649097490984909949100491014910249103491044910549106491074910849109491104911149112491134911449115491164911749118491194912049121491224912349124491254912649127491284912949130491314913249133491344913549136491374913849139491404914149142491434914449145491464914749148491494915049151491524915349154491554915649157491584915949160491614916249163491644916549166491674916849169491704917149172491734917449175491764917749178491794918049181491824918349184491854918649187491884918949190491914919249193491944919549196491974919849199492004920149202492034920449205492064920749208492094921049211492124921349214492154921649217492184921949220492214922249223492244922549226492274922849229492304923149232492334923449235492364923749238492394924049241492424924349244492454924649247492484924949250492514925249253492544925549256492574925849259492604926149262492634926449265492664926749268492694927049271492724927349274492754927649277492784927949280492814928249283492844928549286492874928849289492904929149292492934929449295492964929749298492994930049301493024930349304493054930649307493084930949310493114931249313493144931549316493174931849319493204932149322493234932449325493264932749328493294933049331493324933349334493354933649337493384933949340493414934249343493444934549346493474934849349493504935149352493534935449355493564935749358493594936049361493624936349364493654936649367493684936949370493714937249373493744937549376493774937849379493804938149382493834938449385493864938749388493894939049391493924939349394493954939649397493984939949400494014940249403494044940549406494074940849409494104941149412494134941449415494164941749418494194942049421494224942349424494254942649427494284942949430494314943249433494344943549436494374943849439494404944149442494434944449445494464944749448494494945049451494524945349454494554945649457494584945949460494614946249463494644946549466494674946849469494704947149472494734947449475494764947749478494794948049481494824948349484494854948649487494884948949490494914949249493494944949549496494974949849499495004950149502495034950449505495064950749508495094951049511495124951349514495154951649517495184951949520495214952249523495244952549526495274952849529495304953149532495334953449535495364953749538495394954049541495424954349544495454954649547495484954949550495514955249553495544955549556495574955849559495604956149562495634956449565495664956749568495694957049571495724957349574495754957649577495784957949580495814958249583495844958549586495874958849589495904959149592495934959449595495964959749598495994960049601496024960349604496054960649607496084960949610496114961249613496144961549616496174961849619496204962149622496234962449625496264962749628496294963049631496324963349634496354963649637496384963949640496414964249643496444964549646496474964849649496504965149652496534965449655496564965749658496594966049661496624966349664496654966649667496684966949670496714967249673496744967549676496774967849679496804968149682496834968449685496864968749688496894969049691496924969349694496954969649697496984969949700497014970249703497044970549706497074970849709497104971149712497134971449715497164971749718497194972049721497224972349724497254972649727497284972949730497314973249733497344973549736497374973849739497404974149742497434974449745497464974749748497494975049751497524975349754497554975649757497584975949760497614976249763497644976549766497674976849769497704977149772497734977449775497764977749778497794978049781497824978349784497854978649787497884978949790497914979249793497944979549796497974979849799498004980149802498034980449805498064980749808498094981049811498124981349814498154981649817498184981949820498214982249823498244982549826498274982849829498304983149832498334983449835498364983749838498394984049841498424984349844498454984649847498484984949850498514985249853498544985549856498574985849859498604986149862498634986449865498664986749868498694987049871498724987349874498754987649877498784987949880498814988249883498844988549886498874988849889498904989149892498934989449895498964989749898498994990049901499024990349904499054990649907499084990949910499114991249913499144991549916499174991849919499204992149922499234992449925499264992749928499294993049931499324993349934499354993649937499384993949940499414994249943499444994549946499474994849949499504995149952499534995449955499564995749958499594996049961499624996349964499654996649967499684996949970499714997249973499744997549976499774997849979499804998149982499834998449985499864998749988499894999049991499924999349994499954999649997499984999950000500015000250003500045000550006500075000850009500105001150012500135001450015500165001750018500195002050021500225002350024500255002650027500285002950030500315003250033500345003550036500375003850039500405004150042500435004450045500465004750048500495005050051500525005350054500555005650057500585005950060500615006250063500645006550066500675006850069500705007150072500735007450075500765007750078500795008050081500825008350084500855008650087500885008950090500915009250093500945009550096500975009850099501005010150102501035010450105501065010750108501095011050111501125011350114501155011650117501185011950120501215012250123501245012550126501275012850129501305013150132501335013450135501365013750138501395014050141501425014350144501455014650147501485014950150501515015250153501545015550156501575015850159501605016150162501635016450165501665016750168501695017050171501725017350174501755017650177501785017950180501815018250183501845018550186501875018850189501905019150192501935019450195501965019750198501995020050201502025020350204502055020650207502085020950210502115021250213502145021550216502175021850219502205022150222502235022450225502265022750228502295023050231502325023350234502355023650237502385023950240502415024250243502445024550246502475024850249502505025150252502535025450255502565025750258502595026050261502625026350264502655026650267502685026950270502715027250273502745027550276502775027850279502805028150282502835028450285502865028750288502895029050291502925029350294502955029650297502985029950300503015030250303503045030550306503075030850309503105031150312503135031450315503165031750318503195032050321503225032350324503255032650327503285032950330503315033250333503345033550336503375033850339503405034150342503435034450345503465034750348503495035050351503525035350354503555035650357503585035950360503615036250363503645036550366503675036850369503705037150372503735037450375503765037750378503795038050381503825038350384503855038650387503885038950390503915039250393503945039550396503975039850399504005040150402504035040450405504065040750408504095041050411504125041350414504155041650417504185041950420504215042250423504245042550426504275042850429504305043150432504335043450435504365043750438504395044050441504425044350444504455044650447504485044950450504515045250453504545045550456504575045850459504605046150462504635046450465504665046750468504695047050471504725047350474504755047650477504785047950480504815048250483504845048550486504875048850489504905049150492504935049450495504965049750498504995050050501505025050350504505055050650507505085050950510505115051250513505145051550516505175051850519505205052150522505235052450525505265052750528505295053050531505325053350534505355053650537505385053950540505415054250543505445054550546505475054850549505505055150552505535055450555505565055750558505595056050561505625056350564505655056650567505685056950570505715057250573505745057550576505775057850579505805058150582505835058450585505865058750588505895059050591505925059350594505955059650597505985059950600506015060250603506045060550606506075060850609506105061150612506135061450615506165061750618506195062050621506225062350624506255062650627506285062950630506315063250633506345063550636506375063850639506405064150642506435064450645506465064750648506495065050651506525065350654506555065650657506585065950660506615066250663506645066550666506675066850669506705067150672506735067450675506765067750678506795068050681506825068350684506855068650687506885068950690506915069250693506945069550696506975069850699507005070150702507035070450705507065070750708507095071050711507125071350714507155071650717507185071950720507215072250723507245072550726507275072850729507305073150732507335073450735507365073750738507395074050741507425074350744507455074650747507485074950750507515075250753507545075550756507575075850759507605076150762507635076450765507665076750768507695077050771507725077350774507755077650777507785077950780507815078250783507845078550786507875078850789507905079150792507935079450795507965079750798507995080050801508025080350804508055080650807508085080950810508115081250813508145081550816508175081850819508205082150822508235082450825508265082750828508295083050831508325083350834508355083650837508385083950840508415084250843508445084550846508475084850849508505085150852508535085450855508565085750858508595086050861508625086350864508655086650867508685086950870508715087250873508745087550876508775087850879508805088150882508835088450885508865088750888508895089050891508925089350894508955089650897508985089950900509015090250903509045090550906509075090850909509105091150912509135091450915509165091750918509195092050921509225092350924509255092650927509285092950930509315093250933509345093550936509375093850939509405094150942509435094450945509465094750948509495095050951509525095350954509555095650957509585095950960509615096250963509645096550966509675096850969509705097150972509735097450975509765097750978509795098050981509825098350984509855098650987509885098950990509915099250993509945099550996509975099850999510005100151002510035100451005510065100751008510095101051011510125101351014510155101651017510185101951020510215102251023510245102551026510275102851029510305103151032510335103451035510365103751038510395104051041510425104351044510455104651047510485104951050510515105251053510545105551056510575105851059510605106151062510635106451065510665106751068510695107051071510725107351074510755107651077510785107951080510815108251083510845108551086510875108851089510905109151092510935109451095510965109751098510995110051101511025110351104511055110651107511085110951110511115111251113511145111551116511175111851119511205112151122511235112451125511265112751128511295113051131511325113351134511355113651137511385113951140511415114251143511445114551146511475114851149511505115151152511535115451155511565115751158511595116051161511625116351164511655116651167511685116951170511715117251173511745117551176511775117851179511805118151182511835118451185511865118751188511895119051191511925119351194511955119651197511985119951200512015120251203512045120551206512075120851209512105121151212512135121451215512165121751218512195122051221512225122351224512255122651227512285122951230512315123251233512345123551236512375123851239512405124151242512435124451245512465124751248512495125051251512525125351254512555125651257512585125951260512615126251263512645126551266512675126851269512705127151272512735127451275512765127751278512795128051281512825128351284512855128651287512885128951290512915129251293512945129551296512975129851299513005130151302513035130451305513065130751308513095131051311513125131351314513155131651317513185131951320513215132251323513245132551326513275132851329513305133151332513335133451335513365133751338513395134051341513425134351344513455134651347513485134951350513515135251353513545135551356513575135851359513605136151362513635136451365513665136751368513695137051371513725137351374513755137651377513785137951380513815138251383513845138551386513875138851389513905139151392513935139451395513965139751398513995140051401514025140351404514055140651407514085140951410514115141251413514145141551416514175141851419514205142151422514235142451425514265142751428514295143051431514325143351434514355143651437514385143951440514415144251443514445144551446514475144851449514505145151452514535145451455514565145751458514595146051461514625146351464514655146651467514685146951470514715147251473514745147551476514775147851479514805148151482514835148451485514865148751488514895149051491514925149351494514955149651497514985149951500515015150251503515045150551506515075150851509515105151151512515135151451515515165151751518515195152051521515225152351524515255152651527515285152951530515315153251533515345153551536515375153851539515405154151542515435154451545515465154751548515495155051551515525155351554515555155651557515585155951560515615156251563515645156551566515675156851569515705157151572515735157451575515765157751578515795158051581515825158351584515855158651587515885158951590515915159251593515945159551596515975159851599516005160151602516035160451605516065160751608516095161051611516125161351614516155161651617516185161951620516215162251623516245162551626516275162851629516305163151632516335163451635516365163751638516395164051641516425164351644516455164651647516485164951650516515165251653516545165551656516575165851659516605166151662516635166451665516665166751668516695167051671516725167351674516755167651677516785167951680516815168251683516845168551686516875168851689516905169151692516935169451695516965169751698516995170051701517025170351704517055170651707517085170951710517115171251713517145171551716517175171851719517205172151722517235172451725517265172751728517295173051731517325173351734517355173651737517385173951740517415174251743517445174551746517475174851749517505175151752517535175451755517565175751758517595176051761517625176351764517655176651767517685176951770517715177251773517745177551776517775177851779517805178151782517835178451785517865178751788517895179051791517925179351794517955179651797517985179951800518015180251803518045180551806518075180851809518105181151812518135181451815518165181751818518195182051821518225182351824518255182651827518285182951830518315183251833518345183551836518375183851839518405184151842518435184451845518465184751848518495185051851518525185351854518555185651857518585185951860518615186251863518645186551866518675186851869518705187151872518735187451875518765187751878518795188051881518825188351884518855188651887518885188951890518915189251893518945189551896518975189851899519005190151902519035190451905519065190751908519095191051911519125191351914519155191651917519185191951920519215192251923519245192551926519275192851929519305193151932519335193451935519365193751938519395194051941519425194351944519455194651947519485194951950519515195251953519545195551956519575195851959519605196151962519635196451965519665196751968519695197051971519725197351974519755197651977519785197951980519815198251983519845198551986519875198851989519905199151992519935199451995519965199751998519995200052001520025200352004520055200652007520085200952010520115201252013520145201552016520175201852019520205202152022520235202452025520265202752028520295203052031520325203352034520355203652037520385203952040520415204252043520445204552046520475204852049520505205152052520535205452055520565205752058520595206052061520625206352064520655206652067520685206952070520715207252073520745207552076520775207852079520805208152082520835208452085520865208752088520895209052091520925209352094520955209652097520985209952100521015210252103521045210552106521075210852109521105211152112521135211452115521165211752118521195212052121521225212352124521255212652127521285212952130521315213252133521345213552136521375213852139521405214152142521435214452145521465214752148521495215052151521525215352154521555215652157521585215952160521615216252163521645216552166521675216852169521705217152172521735217452175521765217752178521795218052181521825218352184521855218652187521885218952190521915219252193521945219552196521975219852199522005220152202522035220452205522065220752208522095221052211522125221352214522155221652217522185221952220522215222252223522245222552226522275222852229522305223152232522335223452235522365223752238522395224052241522425224352244522455224652247522485224952250522515225252253522545225552256522575225852259522605226152262522635226452265522665226752268522695227052271522725227352274522755227652277522785227952280522815228252283522845228552286522875228852289522905229152292522935229452295522965229752298522995230052301523025230352304523055230652307523085230952310523115231252313523145231552316523175231852319523205232152322523235232452325523265232752328523295233052331523325233352334523355233652337523385233952340523415234252343523445234552346523475234852349523505235152352523535235452355523565235752358523595236052361523625236352364523655236652367523685236952370523715237252373523745237552376523775237852379523805238152382523835238452385523865238752388523895239052391523925239352394523955239652397523985239952400524015240252403524045240552406524075240852409524105241152412524135241452415524165241752418524195242052421524225242352424524255242652427524285242952430524315243252433524345243552436524375243852439524405244152442524435244452445524465244752448524495245052451524525245352454524555245652457524585245952460524615246252463524645246552466524675246852469524705247152472524735247452475524765247752478524795248052481524825248352484524855248652487524885248952490524915249252493524945249552496524975249852499525005250152502525035250452505525065250752508525095251052511525125251352514525155251652517525185251952520525215252252523525245252552526525275252852529525305253152532525335253452535525365253752538525395254052541525425254352544525455254652547525485254952550525515255252553525545255552556525575255852559525605256152562525635256452565525665256752568525695257052571525725257352574525755257652577525785257952580525815258252583525845258552586525875258852589525905259152592525935259452595525965259752598525995260052601526025260352604526055260652607526085260952610526115261252613526145261552616526175261852619526205262152622526235262452625526265262752628526295263052631526325263352634526355263652637526385263952640526415264252643526445264552646526475264852649526505265152652526535265452655526565265752658526595266052661526625266352664526655266652667526685266952670526715267252673526745267552676526775267852679526805268152682526835268452685526865268752688526895269052691526925269352694526955269652697526985269952700527015270252703527045270552706527075270852709527105271152712527135271452715527165271752718527195272052721527225272352724527255272652727527285272952730527315273252733527345273552736527375273852739527405274152742527435274452745527465274752748527495275052751527525275352754527555275652757527585275952760527615276252763527645276552766527675276852769527705277152772527735277452775527765277752778527795278052781527825278352784527855278652787527885278952790527915279252793527945279552796527975279852799528005280152802528035280452805528065280752808528095281052811528125281352814528155281652817528185281952820528215282252823528245282552826528275282852829528305283152832528335283452835528365283752838528395284052841528425284352844528455284652847528485284952850528515285252853528545285552856528575285852859528605286152862528635286452865528665286752868528695287052871528725287352874528755287652877528785287952880528815288252883528845288552886528875288852889528905289152892528935289452895528965289752898528995290052901529025290352904529055290652907529085290952910529115291252913529145291552916529175291852919529205292152922529235292452925529265292752928529295293052931529325293352934529355293652937529385293952940529415294252943529445294552946529475294852949529505295152952529535295452955529565295752958529595296052961529625296352964529655296652967529685296952970529715297252973529745297552976529775297852979529805298152982529835298452985529865298752988529895299052991529925299352994529955299652997529985299953000530015300253003530045300553006530075300853009530105301153012530135301453015530165301753018530195302053021530225302353024530255302653027530285302953030530315303253033530345303553036530375303853039530405304153042530435304453045530465304753048530495305053051530525305353054530555305653057530585305953060530615306253063530645306553066530675306853069530705307153072530735307453075530765307753078530795308053081530825308353084530855308653087530885308953090530915309253093530945309553096530975309853099531005310153102531035310453105531065310753108531095311053111531125311353114531155311653117531185311953120531215312253123531245312553126531275312853129531305313153132531335313453135531365313753138531395314053141531425314353144531455314653147531485314953150531515315253153531545315553156531575315853159531605316153162531635316453165531665316753168531695317053171531725317353174531755317653177531785317953180531815318253183531845318553186531875318853189531905319153192531935319453195531965319753198531995320053201532025320353204532055320653207532085320953210532115321253213532145321553216532175321853219532205322153222532235322453225532265322753228532295323053231532325323353234532355323653237532385323953240532415324253243532445324553246532475324853249532505325153252532535325453255532565325753258532595326053261532625326353264532655326653267532685326953270532715327253273532745327553276532775327853279532805328153282532835328453285532865328753288532895329053291532925329353294532955329653297532985329953300533015330253303533045330553306533075330853309533105331153312533135331453315533165331753318533195332053321533225332353324533255332653327533285332953330533315333253333533345333553336533375333853339533405334153342533435334453345533465334753348533495335053351533525335353354533555335653357533585335953360533615336253363533645336553366533675336853369533705337153372533735337453375533765337753378533795338053381533825338353384533855338653387533885338953390533915339253393533945339553396533975339853399534005340153402534035340453405534065340753408534095341053411534125341353414534155341653417534185341953420534215342253423534245342553426534275342853429534305343153432534335343453435534365343753438534395344053441534425344353444534455344653447534485344953450534515345253453534545345553456534575345853459534605346153462534635346453465534665346753468534695347053471534725347353474534755347653477534785347953480534815348253483534845348553486534875348853489534905349153492534935349453495534965349753498534995350053501535025350353504535055350653507535085350953510535115351253513535145351553516535175351853519535205352153522535235352453525535265352753528535295353053531535325353353534535355353653537535385353953540535415354253543535445354553546535475354853549535505355153552535535355453555535565355753558535595356053561535625356353564535655356653567535685356953570535715357253573535745357553576535775357853579535805358153582535835358453585535865358753588535895359053591535925359353594535955359653597535985359953600536015360253603536045360553606536075360853609536105361153612536135361453615536165361753618536195362053621536225362353624536255362653627536285362953630536315363253633536345363553636536375363853639536405364153642536435364453645536465364753648536495365053651536525365353654536555365653657536585365953660536615366253663536645366553666536675366853669536705367153672536735367453675536765367753678536795368053681536825368353684536855368653687536885368953690536915369253693536945369553696536975369853699537005370153702537035370453705537065370753708537095371053711537125371353714537155371653717537185371953720537215372253723537245372553726537275372853729537305373153732537335373453735537365373753738537395374053741537425374353744537455374653747537485374953750537515375253753537545375553756537575375853759537605376153762537635376453765537665376753768537695377053771537725377353774537755377653777537785377953780537815378253783537845378553786537875378853789537905379153792537935379453795537965379753798537995380053801538025380353804538055380653807538085380953810538115381253813538145381553816538175381853819538205382153822538235382453825538265382753828538295383053831538325383353834538355383653837538385383953840538415384253843538445384553846538475384853849538505385153852538535385453855538565385753858538595386053861538625386353864538655386653867538685386953870538715387253873538745387553876538775387853879538805388153882538835388453885538865388753888538895389053891538925389353894538955389653897538985389953900539015390253903539045390553906539075390853909539105391153912539135391453915539165391753918539195392053921539225392353924539255392653927539285392953930539315393253933539345393553936539375393853939539405394153942539435394453945539465394753948539495395053951539525395353954539555395653957539585395953960539615396253963539645396553966539675396853969539705397153972539735397453975539765397753978539795398053981539825398353984539855398653987539885398953990539915399253993539945399553996539975399853999540005400154002540035400454005540065400754008540095401054011540125401354014540155401654017540185401954020540215402254023540245402554026540275402854029540305403154032540335403454035540365403754038540395404054041540425404354044540455404654047540485404954050540515405254053540545405554056540575405854059540605406154062540635406454065540665406754068540695407054071540725407354074540755407654077540785407954080540815408254083540845408554086540875408854089540905409154092540935409454095540965409754098540995410054101541025410354104541055410654107541085410954110541115411254113541145411554116541175411854119541205412154122541235412454125541265412754128541295413054131541325413354134541355413654137541385413954140541415414254143541445414554146541475414854149541505415154152541535415454155541565415754158541595416054161541625416354164541655416654167541685416954170541715417254173541745417554176541775417854179541805418154182541835418454185541865418754188541895419054191541925419354194541955419654197541985419954200542015420254203542045420554206542075420854209542105421154212542135421454215542165421754218542195422054221542225422354224542255422654227542285422954230542315423254233542345423554236542375423854239542405424154242542435424454245542465424754248542495425054251542525425354254542555425654257542585425954260542615426254263542645426554266542675426854269542705427154272542735427454275542765427754278542795428054281542825428354284542855428654287542885428954290542915429254293542945429554296542975429854299543005430154302543035430454305543065430754308543095431054311543125431354314543155431654317543185431954320543215432254323543245432554326543275432854329543305433154332543335433454335543365433754338543395434054341543425434354344543455434654347543485434954350543515435254353543545435554356543575435854359543605436154362543635436454365543665436754368543695437054371543725437354374543755437654377543785437954380543815438254383543845438554386543875438854389543905439154392543935439454395543965439754398543995440054401544025440354404544055440654407544085440954410544115441254413544145441554416544175441854419544205442154422544235442454425544265442754428544295443054431544325443354434544355443654437544385443954440544415444254443544445444554446544475444854449544505445154452544535445454455544565445754458544595446054461544625446354464544655446654467544685446954470544715447254473544745447554476544775447854479544805448154482544835448454485544865448754488544895449054491544925449354494544955449654497544985449954500545015450254503545045450554506545075450854509545105451154512545135451454515545165451754518545195452054521545225452354524545255452654527545285452954530545315453254533545345453554536545375453854539545405454154542545435454454545545465454754548545495455054551545525455354554545555455654557545585455954560545615456254563545645456554566545675456854569545705457154572545735457454575545765457754578545795458054581545825458354584545855458654587545885458954590545915459254593545945459554596545975459854599546005460154602546035460454605546065460754608546095461054611546125461354614546155461654617546185461954620546215462254623546245462554626546275462854629546305463154632546335463454635546365463754638546395464054641546425464354644546455464654647546485464954650546515465254653546545465554656546575465854659546605466154662546635466454665546665466754668546695467054671546725467354674546755467654677546785467954680546815468254683546845468554686546875468854689546905469154692546935469454695546965469754698546995470054701547025470354704547055470654707547085470954710547115471254713547145471554716547175471854719547205472154722547235472454725547265472754728547295473054731547325473354734547355473654737547385473954740547415474254743547445474554746547475474854749547505475154752547535475454755547565475754758547595476054761547625476354764547655476654767547685476954770547715477254773547745477554776547775477854779547805478154782547835478454785547865478754788547895479054791547925479354794547955479654797547985479954800548015480254803548045480554806548075480854809548105481154812548135481454815548165481754818548195482054821548225482354824548255482654827548285482954830548315483254833548345483554836548375483854839548405484154842548435484454845548465484754848548495485054851548525485354854548555485654857548585485954860548615486254863548645486554866548675486854869548705487154872548735487454875548765487754878548795488054881548825488354884548855488654887548885488954890548915489254893548945489554896548975489854899549005490154902549035490454905549065490754908549095491054911549125491354914549155491654917549185491954920549215492254923549245492554926549275492854929549305493154932549335493454935549365493754938549395494054941549425494354944549455494654947549485494954950549515495254953549545495554956549575495854959549605496154962549635496454965549665496754968549695497054971549725497354974549755497654977549785497954980549815498254983549845498554986549875498854989549905499154992549935499454995549965499754998549995500055001550025500355004550055500655007550085500955010550115501255013550145501555016550175501855019550205502155022550235502455025550265502755028550295503055031550325503355034550355503655037550385503955040550415504255043550445504555046550475504855049550505505155052550535505455055550565505755058550595506055061550625506355064550655506655067550685506955070550715507255073550745507555076550775507855079550805508155082550835508455085550865508755088550895509055091550925509355094550955509655097550985509955100551015510255103551045510555106551075510855109551105511155112551135511455115551165511755118551195512055121551225512355124551255512655127551285512955130551315513255133551345513555136551375513855139551405514155142551435514455145551465514755148551495515055151551525515355154551555515655157551585515955160551615516255163551645516555166551675516855169551705517155172551735517455175551765517755178551795518055181551825518355184551855518655187551885518955190551915519255193551945519555196551975519855199552005520155202552035520455205552065520755208552095521055211552125521355214552155521655217552185521955220552215522255223552245522555226552275522855229552305523155232552335523455235552365523755238552395524055241552425524355244552455524655247552485524955250552515525255253552545525555256552575525855259552605526155262552635526455265552665526755268552695527055271552725527355274552755527655277552785527955280552815528255283552845528555286552875528855289552905529155292552935529455295552965529755298552995530055301553025530355304553055530655307553085530955310553115531255313553145531555316553175531855319553205532155322553235532455325553265532755328553295533055331553325533355334553355533655337553385533955340553415534255343553445534555346553475534855349553505535155352553535535455355553565535755358553595536055361553625536355364553655536655367553685536955370553715537255373553745537555376553775537855379553805538155382553835538455385553865538755388553895539055391553925539355394553955539655397553985539955400554015540255403554045540555406554075540855409554105541155412554135541455415554165541755418554195542055421554225542355424554255542655427554285542955430554315543255433554345543555436554375543855439554405544155442554435544455445554465544755448554495545055451554525545355454554555545655457554585545955460554615546255463554645546555466554675546855469554705547155472554735547455475554765547755478554795548055481554825548355484554855548655487554885548955490554915549255493554945549555496554975549855499555005550155502555035550455505555065550755508555095551055511555125551355514555155551655517555185551955520555215552255523555245552555526555275552855529555305553155532555335553455535555365553755538555395554055541555425554355544555455554655547555485554955550555515555255553555545555555556555575555855559555605556155562555635556455565555665556755568555695557055571555725557355574555755557655577555785557955580555815558255583555845558555586555875558855589555905559155592555935559455595555965559755598555995560055601556025560355604556055560655607556085560955610556115561255613556145561555616556175561855619556205562155622556235562455625556265562755628556295563055631556325563355634556355563655637556385563955640556415564255643556445564555646556475564855649556505565155652556535565455655556565565755658556595566055661556625566355664556655566655667556685566955670556715567255673556745567555676556775567855679556805568155682556835568455685556865568755688556895569055691556925569355694556955569655697556985569955700557015570255703557045570555706557075570855709557105571155712557135571455715557165571755718557195572055721557225572355724557255572655727557285572955730557315573255733557345573555736557375573855739557405574155742557435574455745557465574755748557495575055751557525575355754557555575655757557585575955760557615576255763557645576555766557675576855769557705577155772557735577455775557765577755778557795578055781557825578355784557855578655787557885578955790557915579255793557945579555796557975579855799558005580155802558035580455805558065580755808558095581055811558125581355814558155581655817558185581955820558215582255823558245582555826558275582855829558305583155832558335583455835558365583755838558395584055841558425584355844558455584655847558485584955850558515585255853558545585555856558575585855859558605586155862558635586455865558665586755868558695587055871558725587355874558755587655877558785587955880558815588255883558845588555886558875588855889558905589155892558935589455895558965589755898558995590055901559025590355904559055590655907559085590955910559115591255913559145591555916559175591855919559205592155922559235592455925559265592755928559295593055931559325593355934559355593655937559385593955940559415594255943559445594555946559475594855949559505595155952559535595455955559565595755958559595596055961559625596355964559655596655967559685596955970559715597255973559745597555976559775597855979559805598155982559835598455985559865598755988559895599055991559925599355994559955599655997559985599956000560015600256003560045600556006560075600856009560105601156012560135601456015560165601756018560195602056021560225602356024560255602656027560285602956030560315603256033560345603556036560375603856039560405604156042560435604456045560465604756048560495605056051560525605356054560555605656057560585605956060560615606256063560645606556066560675606856069560705607156072560735607456075560765607756078560795608056081560825608356084560855608656087560885608956090560915609256093560945609556096560975609856099561005610156102561035610456105561065610756108561095611056111561125611356114561155611656117561185611956120561215612256123561245612556126561275612856129561305613156132561335613456135561365613756138561395614056141561425614356144561455614656147561485614956150561515615256153561545615556156561575615856159561605616156162561635616456165561665616756168561695617056171561725617356174561755617656177561785617956180561815618256183561845618556186561875618856189561905619156192561935619456195561965619756198561995620056201562025620356204562055620656207562085620956210562115621256213562145621556216562175621856219562205622156222562235622456225562265622756228562295623056231562325623356234562355623656237562385623956240562415624256243562445624556246562475624856249562505625156252562535625456255562565625756258562595626056261562625626356264562655626656267562685626956270562715627256273562745627556276562775627856279562805628156282562835628456285562865628756288562895629056291562925629356294562955629656297562985629956300563015630256303563045630556306563075630856309563105631156312563135631456315563165631756318563195632056321563225632356324563255632656327563285632956330563315633256333563345633556336563375633856339563405634156342563435634456345563465634756348563495635056351563525635356354563555635656357563585635956360563615636256363563645636556366563675636856369563705637156372563735637456375563765637756378563795638056381563825638356384563855638656387563885638956390563915639256393563945639556396563975639856399564005640156402564035640456405564065640756408564095641056411564125641356414564155641656417564185641956420564215642256423564245642556426564275642856429564305643156432564335643456435564365643756438564395644056441564425644356444564455644656447564485644956450564515645256453564545645556456564575645856459564605646156462564635646456465564665646756468564695647056471564725647356474564755647656477564785647956480564815648256483564845648556486564875648856489564905649156492564935649456495564965649756498564995650056501565025650356504565055650656507565085650956510565115651256513565145651556516565175651856519565205652156522565235652456525565265652756528565295653056531565325653356534565355653656537565385653956540565415654256543565445654556546565475654856549565505655156552565535655456555565565655756558565595656056561565625656356564565655656656567565685656956570565715657256573565745657556576565775657856579565805658156582565835658456585565865658756588565895659056591565925659356594565955659656597565985659956600566015660256603566045660556606566075660856609566105661156612566135661456615566165661756618566195662056621566225662356624566255662656627566285662956630566315663256633566345663556636566375663856639566405664156642566435664456645566465664756648566495665056651566525665356654566555665656657566585665956660566615666256663566645666556666566675666856669566705667156672566735667456675566765667756678566795668056681566825668356684566855668656687566885668956690566915669256693566945669556696566975669856699567005670156702567035670456705567065670756708567095671056711567125671356714567155671656717567185671956720567215672256723567245672556726567275672856729567305673156732567335673456735567365673756738567395674056741567425674356744567455674656747567485674956750567515675256753567545675556756567575675856759567605676156762567635676456765567665676756768567695677056771567725677356774567755677656777567785677956780567815678256783567845678556786567875678856789567905679156792567935679456795567965679756798567995680056801568025680356804568055680656807568085680956810568115681256813568145681556816568175681856819568205682156822568235682456825568265682756828568295683056831568325683356834568355683656837568385683956840568415684256843568445684556846568475684856849568505685156852568535685456855568565685756858568595686056861568625686356864568655686656867568685686956870568715687256873568745687556876568775687856879568805688156882568835688456885568865688756888568895689056891568925689356894568955689656897568985689956900569015690256903569045690556906569075690856909569105691156912569135691456915569165691756918569195692056921569225692356924569255692656927569285692956930569315693256933569345693556936569375693856939569405694156942569435694456945569465694756948569495695056951569525695356954569555695656957569585695956960569615696256963569645696556966569675696856969569705697156972569735697456975569765697756978569795698056981569825698356984569855698656987569885698956990569915699256993569945699556996569975699856999570005700157002570035700457005570065700757008570095701057011570125701357014570155701657017570185701957020570215702257023570245702557026570275702857029570305703157032570335703457035570365703757038570395704057041570425704357044570455704657047570485704957050570515705257053570545705557056570575705857059570605706157062570635706457065570665706757068570695707057071570725707357074570755707657077570785707957080570815708257083570845708557086570875708857089570905709157092570935709457095570965709757098570995710057101571025710357104571055710657107571085710957110571115711257113571145711557116571175711857119571205712157122571235712457125571265712757128571295713057131571325713357134571355713657137571385713957140571415714257143571445714557146571475714857149571505715157152571535715457155571565715757158571595716057161571625716357164571655716657167571685716957170571715717257173571745717557176571775717857179571805718157182571835718457185571865718757188571895719057191571925719357194571955719657197571985719957200572015720257203572045720557206572075720857209572105721157212572135721457215572165721757218572195722057221572225722357224572255722657227572285722957230572315723257233572345723557236572375723857239572405724157242572435724457245572465724757248572495725057251572525725357254572555725657257572585725957260572615726257263572645726557266572675726857269572705727157272572735727457275572765727757278572795728057281572825728357284572855728657287572885728957290572915729257293572945729557296572975729857299573005730157302573035730457305573065730757308573095731057311573125731357314573155731657317573185731957320573215732257323573245732557326573275732857329573305733157332573335733457335573365733757338573395734057341573425734357344573455734657347573485734957350573515735257353573545735557356573575735857359573605736157362573635736457365573665736757368573695737057371573725737357374573755737657377573785737957380573815738257383573845738557386573875738857389573905739157392573935739457395573965739757398573995740057401574025740357404574055740657407574085740957410574115741257413574145741557416574175741857419574205742157422574235742457425574265742757428574295743057431574325743357434574355743657437574385743957440574415744257443574445744557446574475744857449574505745157452574535745457455574565745757458574595746057461574625746357464574655746657467574685746957470574715747257473574745747557476574775747857479574805748157482574835748457485574865748757488574895749057491574925749357494574955749657497574985749957500575015750257503575045750557506575075750857509575105751157512575135751457515575165751757518575195752057521575225752357524575255752657527575285752957530575315753257533575345753557536575375753857539575405754157542575435754457545575465754757548575495755057551575525755357554575555755657557575585755957560575615756257563575645756557566575675756857569575705757157572575735757457575575765757757578575795758057581575825758357584575855758657587575885758957590575915759257593575945759557596575975759857599576005760157602576035760457605576065760757608576095761057611576125761357614576155761657617576185761957620576215762257623576245762557626576275762857629576305763157632576335763457635576365763757638576395764057641576425764357644576455764657647576485764957650576515765257653576545765557656576575765857659576605766157662576635766457665576665766757668576695767057671576725767357674576755767657677576785767957680576815768257683576845768557686576875768857689576905769157692576935769457695576965769757698576995770057701577025770357704577055770657707577085770957710577115771257713577145771557716577175771857719577205772157722577235772457725577265772757728577295773057731577325773357734577355773657737577385773957740577415774257743577445774557746577475774857749577505775157752577535775457755577565775757758577595776057761577625776357764577655776657767577685776957770577715777257773577745777557776577775777857779577805778157782577835778457785577865778757788577895779057791577925779357794577955779657797577985779957800578015780257803578045780557806578075780857809578105781157812578135781457815578165781757818578195782057821578225782357824578255782657827578285782957830578315783257833578345783557836578375783857839578405784157842578435784457845578465784757848578495785057851578525785357854578555785657857578585785957860578615786257863578645786557866578675786857869578705787157872578735787457875578765787757878578795788057881578825788357884578855788657887578885788957890578915789257893578945789557896578975789857899579005790157902579035790457905579065790757908579095791057911579125791357914579155791657917579185791957920579215792257923579245792557926579275792857929579305793157932579335793457935579365793757938579395794057941579425794357944579455794657947579485794957950579515795257953579545795557956579575795857959579605796157962579635796457965579665796757968579695797057971579725797357974579755797657977579785797957980579815798257983579845798557986579875798857989579905799157992579935799457995579965799757998579995800058001580025800358004580055800658007580085800958010580115801258013580145801558016580175801858019580205802158022580235802458025580265802758028580295803058031580325803358034580355803658037580385803958040580415804258043580445804558046580475804858049580505805158052580535805458055580565805758058580595806058061580625806358064580655806658067580685806958070580715807258073580745807558076580775807858079580805808158082580835808458085580865808758088580895809058091580925809358094580955809658097580985809958100581015810258103581045810558106581075810858109581105811158112581135811458115581165811758118581195812058121581225812358124581255812658127581285812958130581315813258133581345813558136581375813858139581405814158142581435814458145581465814758148581495815058151581525815358154581555815658157581585815958160581615816258163581645816558166581675816858169581705817158172581735817458175581765817758178581795818058181581825818358184581855818658187581885818958190581915819258193581945819558196581975819858199582005820158202582035820458205582065820758208582095821058211582125821358214582155821658217582185821958220582215822258223582245822558226582275822858229582305823158232582335823458235582365823758238582395824058241582425824358244582455824658247582485824958250582515825258253582545825558256582575825858259582605826158262582635826458265582665826758268582695827058271582725827358274582755827658277582785827958280582815828258283582845828558286582875828858289582905829158292582935829458295582965829758298582995830058301583025830358304583055830658307583085830958310583115831258313583145831558316583175831858319583205832158322583235832458325583265832758328583295833058331583325833358334583355833658337583385833958340583415834258343583445834558346583475834858349583505835158352583535835458355583565835758358583595836058361583625836358364583655836658367583685836958370583715837258373583745837558376583775837858379583805838158382583835838458385583865838758388583895839058391583925839358394583955839658397583985839958400584015840258403584045840558406584075840858409584105841158412584135841458415584165841758418584195842058421584225842358424584255842658427584285842958430584315843258433584345843558436584375843858439584405844158442584435844458445584465844758448584495845058451584525845358454584555845658457584585845958460584615846258463584645846558466584675846858469584705847158472584735847458475584765847758478584795848058481584825848358484584855848658487584885848958490584915849258493584945849558496584975849858499585005850158502585035850458505585065850758508585095851058511585125851358514585155851658517585185851958520585215852258523585245852558526585275852858529585305853158532585335853458535585365853758538585395854058541585425854358544585455854658547585485854958550585515855258553585545855558556585575855858559585605856158562585635856458565585665856758568585695857058571585725857358574585755857658577585785857958580585815858258583585845858558586585875858858589585905859158592585935859458595585965859758598585995860058601586025860358604586055860658607586085860958610586115861258613586145861558616586175861858619586205862158622586235862458625586265862758628586295863058631586325863358634586355863658637586385863958640586415864258643586445864558646586475864858649586505865158652586535865458655586565865758658586595866058661586625866358664586655866658667586685866958670586715867258673586745867558676586775867858679586805868158682586835868458685586865868758688586895869058691586925869358694586955869658697586985869958700587015870258703587045870558706587075870858709587105871158712587135871458715587165871758718587195872058721587225872358724587255872658727587285872958730587315873258733587345873558736587375873858739587405874158742587435874458745587465874758748587495875058751587525875358754587555875658757587585875958760587615876258763587645876558766587675876858769587705877158772587735877458775587765877758778587795878058781587825878358784587855878658787587885878958790587915879258793587945879558796587975879858799588005880158802588035880458805588065880758808588095881058811588125881358814588155881658817588185881958820588215882258823588245882558826588275882858829588305883158832588335883458835588365883758838588395884058841588425884358844588455884658847588485884958850588515885258853588545885558856588575885858859588605886158862588635886458865588665886758868588695887058871588725887358874588755887658877588785887958880588815888258883588845888558886588875888858889588905889158892588935889458895588965889758898588995890058901589025890358904589055890658907589085890958910589115891258913589145891558916589175891858919589205892158922589235892458925589265892758928589295893058931589325893358934589355893658937589385893958940589415894258943589445894558946589475894858949589505895158952589535895458955589565895758958589595896058961589625896358964589655896658967589685896958970589715897258973589745897558976589775897858979589805898158982589835898458985589865898758988589895899058991589925899358994589955899658997589985899959000590015900259003590045900559006590075900859009590105901159012590135901459015590165901759018590195902059021590225902359024590255902659027590285902959030590315903259033590345903559036590375903859039590405904159042590435904459045590465904759048590495905059051590525905359054590555905659057590585905959060590615906259063590645906559066590675906859069590705907159072590735907459075590765907759078590795908059081590825908359084590855908659087590885908959090590915909259093590945909559096590975909859099591005910159102591035910459105591065910759108591095911059111591125911359114591155911659117591185911959120591215912259123591245912559126591275912859129591305913159132591335913459135591365913759138591395914059141591425914359144591455914659147591485914959150591515915259153591545915559156591575915859159591605916159162591635916459165591665916759168591695917059171591725917359174591755917659177591785917959180591815918259183591845918559186591875918859189591905919159192591935919459195591965919759198591995920059201592025920359204592055920659207592085920959210592115921259213592145921559216592175921859219592205922159222592235922459225592265922759228592295923059231592325923359234592355923659237592385923959240592415924259243592445924559246592475924859249592505925159252592535925459255592565925759258592595926059261592625926359264592655926659267592685926959270592715927259273592745927559276592775927859279592805928159282592835928459285592865928759288592895929059291592925929359294592955929659297592985929959300593015930259303593045930559306593075930859309593105931159312593135931459315593165931759318593195932059321593225932359324593255932659327593285932959330593315933259333593345933559336593375933859339593405934159342593435934459345593465934759348593495935059351593525935359354593555935659357593585935959360593615936259363593645936559366593675936859369593705937159372593735937459375593765937759378593795938059381593825938359384593855938659387593885938959390593915939259393593945939559396593975939859399594005940159402594035940459405594065940759408594095941059411594125941359414594155941659417594185941959420594215942259423594245942559426594275942859429594305943159432594335943459435594365943759438594395944059441594425944359444594455944659447594485944959450594515945259453594545945559456594575945859459594605946159462594635946459465594665946759468594695947059471594725947359474594755947659477594785947959480594815948259483594845948559486594875948859489594905949159492594935949459495594965949759498594995950059501595025950359504595055950659507595085950959510595115951259513595145951559516595175951859519595205952159522595235952459525595265952759528595295953059531595325953359534595355953659537595385953959540595415954259543595445954559546595475954859549595505955159552595535955459555595565955759558595595956059561595625956359564595655956659567595685956959570595715957259573595745957559576595775957859579595805958159582595835958459585595865958759588595895959059591595925959359594595955959659597595985959959600596015960259603596045960559606596075960859609596105961159612596135961459615596165961759618596195962059621596225962359624596255962659627596285962959630596315963259633596345963559636596375963859639596405964159642596435964459645596465964759648596495965059651596525965359654596555965659657596585965959660596615966259663596645966559666596675966859669596705967159672596735967459675596765967759678596795968059681596825968359684596855968659687596885968959690596915969259693596945969559696596975969859699597005970159702597035970459705597065970759708597095971059711597125971359714597155971659717597185971959720597215972259723597245972559726597275972859729597305973159732597335973459735597365973759738597395974059741597425974359744597455974659747597485974959750597515975259753597545975559756597575975859759597605976159762597635976459765597665976759768597695977059771597725977359774597755977659777597785977959780597815978259783597845978559786597875978859789597905979159792597935979459795597965979759798597995980059801598025980359804598055980659807598085980959810598115981259813598145981559816598175981859819598205982159822598235982459825598265982759828598295983059831598325983359834598355983659837598385983959840598415984259843598445984559846598475984859849598505985159852598535985459855598565985759858598595986059861598625986359864598655986659867598685986959870598715987259873598745987559876598775987859879598805988159882598835988459885598865988759888598895989059891598925989359894598955989659897598985989959900599015990259903599045990559906599075990859909599105991159912599135991459915599165991759918599195992059921599225992359924599255992659927599285992959930599315993259933599345993559936599375993859939599405994159942599435994459945599465994759948599495995059951599525995359954599555995659957599585995959960599615996259963599645996559966599675996859969599705997159972599735997459975599765997759978599795998059981599825998359984599855998659987599885998959990599915999259993599945999559996599975999859999600006000160002600036000460005600066000760008600096001060011600126001360014600156001660017600186001960020600216002260023600246002560026600276002860029600306003160032600336003460035600366003760038600396004060041600426004360044600456004660047600486004960050600516005260053600546005560056600576005860059600606006160062600636006460065600666006760068600696007060071600726007360074600756007660077600786007960080600816008260083600846008560086600876008860089600906009160092600936009460095600966009760098600996010060101601026010360104601056010660107601086010960110601116011260113601146011560116601176011860119601206012160122601236012460125601266012760128601296013060131601326013360134601356013660137601386013960140601416014260143601446014560146601476014860149601506015160152601536015460155601566015760158601596016060161601626016360164601656016660167601686016960170601716017260173601746017560176601776017860179601806018160182601836018460185601866018760188601896019060191601926019360194601956019660197601986019960200602016020260203602046020560206602076020860209602106021160212602136021460215602166021760218602196022060221602226022360224602256022660227602286022960230602316023260233602346023560236602376023860239602406024160242602436024460245602466024760248602496025060251602526025360254602556025660257602586025960260602616026260263602646026560266602676026860269602706027160272602736027460275602766027760278602796028060281602826028360284602856028660287602886028960290602916029260293602946029560296602976029860299603006030160302603036030460305603066030760308603096031060311603126031360314603156031660317603186031960320603216032260323603246032560326603276032860329603306033160332603336033460335603366033760338603396034060341603426034360344603456034660347603486034960350603516035260353603546035560356603576035860359603606036160362603636036460365603666036760368603696037060371603726037360374603756037660377603786037960380603816038260383603846038560386603876038860389603906039160392603936039460395603966039760398603996040060401604026040360404604056040660407604086040960410604116041260413604146041560416604176041860419604206042160422604236042460425604266042760428604296043060431604326043360434604356043660437604386043960440604416044260443604446044560446604476044860449604506045160452604536045460455604566045760458604596046060461604626046360464604656046660467604686046960470604716047260473604746047560476604776047860479604806048160482604836048460485604866048760488604896049060491604926049360494604956049660497604986049960500605016050260503605046050560506605076050860509605106051160512605136051460515605166051760518605196052060521605226052360524605256052660527605286052960530605316053260533605346053560536605376053860539605406054160542605436054460545605466054760548605496055060551605526055360554605556055660557605586055960560605616056260563605646056560566605676056860569605706057160572605736057460575605766057760578605796058060581605826058360584605856058660587605886058960590605916059260593605946059560596605976059860599606006060160602606036060460605606066060760608606096061060611606126061360614606156061660617606186061960620606216062260623606246062560626606276062860629606306063160632606336063460635606366063760638606396064060641606426064360644606456064660647606486064960650606516065260653606546065560656606576065860659606606066160662606636066460665606666066760668606696067060671606726067360674606756067660677606786067960680606816068260683606846068560686606876068860689606906069160692606936069460695606966069760698606996070060701607026070360704607056070660707607086070960710607116071260713607146071560716607176071860719607206072160722607236072460725607266072760728607296073060731607326073360734607356073660737607386073960740607416074260743607446074560746607476074860749607506075160752607536075460755607566075760758607596076060761607626076360764607656076660767607686076960770607716077260773607746077560776607776077860779607806078160782607836078460785607866078760788607896079060791607926079360794607956079660797607986079960800608016080260803608046080560806608076080860809608106081160812608136081460815608166081760818608196082060821608226082360824608256082660827608286082960830608316083260833608346083560836608376083860839608406084160842608436084460845608466084760848608496085060851608526085360854608556085660857608586085960860608616086260863608646086560866608676086860869608706087160872608736087460875608766087760878608796088060881608826088360884608856088660887608886088960890608916089260893608946089560896608976089860899609006090160902609036090460905609066090760908609096091060911609126091360914609156091660917609186091960920609216092260923609246092560926609276092860929609306093160932609336093460935609366093760938609396094060941609426094360944609456094660947609486094960950609516095260953609546095560956609576095860959609606096160962609636096460965609666096760968609696097060971609726097360974609756097660977609786097960980609816098260983609846098560986609876098860989609906099160992609936099460995609966099760998609996100061001610026100361004610056100661007610086100961010610116101261013610146101561016610176101861019610206102161022610236102461025610266102761028610296103061031610326103361034610356103661037610386103961040610416104261043610446104561046610476104861049610506105161052610536105461055610566105761058610596106061061610626106361064610656106661067610686106961070610716107261073610746107561076610776107861079610806108161082610836108461085610866108761088610896109061091610926109361094610956109661097610986109961100611016110261103611046110561106611076110861109611106111161112611136111461115611166111761118611196112061121611226112361124611256112661127611286112961130611316113261133611346113561136611376113861139611406114161142611436114461145611466114761148611496115061151611526115361154611556115661157611586115961160611616116261163611646116561166611676116861169611706117161172611736117461175611766117761178611796118061181611826118361184611856118661187611886118961190611916119261193611946119561196611976119861199612006120161202612036120461205612066120761208612096121061211612126121361214612156121661217612186121961220612216122261223612246122561226612276122861229612306123161232612336123461235612366123761238612396124061241612426124361244612456124661247612486124961250612516125261253612546125561256612576125861259612606126161262612636126461265612666126761268612696127061271612726127361274612756127661277612786127961280612816128261283612846128561286612876128861289612906129161292612936129461295612966129761298612996130061301613026130361304613056130661307613086130961310613116131261313613146131561316613176131861319613206132161322613236132461325613266132761328613296133061331613326133361334613356133661337613386133961340613416134261343613446134561346613476134861349613506135161352613536135461355613566135761358613596136061361613626136361364613656136661367613686136961370613716137261373613746137561376613776137861379613806138161382613836138461385613866138761388613896139061391613926139361394613956139661397613986139961400614016140261403614046140561406614076140861409614106141161412614136141461415614166141761418614196142061421614226142361424614256142661427614286142961430614316143261433614346143561436614376143861439614406144161442614436144461445614466144761448614496145061451614526145361454614556145661457614586145961460614616146261463614646146561466614676146861469614706147161472614736147461475614766147761478614796148061481614826148361484614856148661487614886148961490614916149261493614946149561496614976149861499615006150161502615036150461505615066150761508615096151061511615126151361514615156151661517615186151961520615216152261523615246152561526615276152861529615306153161532615336153461535615366153761538615396154061541615426154361544615456154661547615486154961550615516155261553615546155561556615576155861559615606156161562615636156461565615666156761568615696157061571615726157361574615756157661577615786157961580615816158261583615846158561586615876158861589615906159161592615936159461595615966159761598615996160061601616026160361604616056160661607616086160961610616116161261613616146161561616616176161861619616206162161622616236162461625616266162761628616296163061631616326163361634616356163661637616386163961640616416164261643616446164561646616476164861649616506165161652616536165461655616566165761658616596166061661616626166361664616656166661667616686166961670616716167261673616746167561676616776167861679616806168161682616836168461685616866168761688616896169061691616926169361694616956169661697616986169961700617016170261703617046170561706617076170861709617106171161712617136171461715617166171761718617196172061721617226172361724617256172661727617286172961730617316173261733617346173561736617376173861739617406174161742617436174461745617466174761748617496175061751617526175361754617556175661757617586175961760617616176261763617646176561766617676176861769617706177161772617736177461775617766177761778617796178061781617826178361784617856178661787617886178961790617916179261793617946179561796617976179861799618006180161802618036180461805618066180761808618096181061811618126181361814618156181661817618186181961820618216182261823618246182561826618276182861829618306183161832618336183461835618366183761838618396184061841618426184361844618456184661847618486184961850618516185261853618546185561856618576185861859618606186161862618636186461865618666186761868618696187061871618726187361874618756187661877618786187961880618816188261883618846188561886618876188861889618906189161892618936189461895618966189761898618996190061901619026190361904619056190661907619086190961910619116191261913619146191561916619176191861919619206192161922619236192461925619266192761928619296193061931619326193361934619356193661937619386193961940619416194261943619446194561946619476194861949619506195161952619536195461955619566195761958619596196061961619626196361964619656196661967619686196961970619716197261973619746197561976619776197861979619806198161982619836198461985619866198761988619896199061991619926199361994619956199661997619986199962000620016200262003620046200562006620076200862009620106201162012620136201462015620166201762018620196202062021620226202362024620256202662027620286202962030620316203262033620346203562036620376203862039620406204162042620436204462045620466204762048620496205062051620526205362054620556205662057620586205962060620616206262063620646206562066620676206862069620706207162072620736207462075620766207762078620796208062081620826208362084620856208662087620886208962090620916209262093620946209562096620976209862099621006210162102621036210462105621066210762108621096211062111621126211362114621156211662117621186211962120621216212262123621246212562126621276212862129621306213162132621336213462135621366213762138621396214062141621426214362144621456214662147621486214962150621516215262153621546215562156621576215862159621606216162162621636216462165621666216762168621696217062171621726217362174621756217662177621786217962180621816218262183621846218562186621876218862189621906219162192621936219462195621966219762198621996220062201622026220362204622056220662207622086220962210622116221262213622146221562216622176221862219622206222162222622236222462225622266222762228622296223062231622326223362234622356223662237622386223962240622416224262243622446224562246622476224862249622506225162252622536225462255622566225762258622596226062261622626226362264622656226662267622686226962270622716227262273622746227562276622776227862279622806228162282622836228462285622866228762288622896229062291622926229362294622956229662297622986229962300623016230262303623046230562306623076230862309623106231162312623136231462315623166231762318623196232062321623226232362324623256232662327623286232962330623316233262333623346233562336623376233862339623406234162342623436234462345623466234762348623496235062351623526235362354623556235662357623586235962360623616236262363623646236562366623676236862369623706237162372623736237462375623766237762378623796238062381623826238362384623856238662387623886238962390623916239262393623946239562396623976239862399624006240162402624036240462405624066240762408624096241062411624126241362414624156241662417624186241962420624216242262423624246242562426624276242862429624306243162432624336243462435624366243762438624396244062441624426244362444624456244662447624486244962450624516245262453624546245562456624576245862459624606246162462624636246462465624666246762468624696247062471624726247362474624756247662477624786247962480624816248262483624846248562486624876248862489624906249162492624936249462495624966249762498624996250062501625026250362504625056250662507625086250962510625116251262513625146251562516625176251862519625206252162522625236252462525625266252762528625296253062531625326253362534625356253662537625386253962540625416254262543625446254562546625476254862549625506255162552625536255462555625566255762558625596256062561625626256362564625656256662567625686256962570625716257262573625746257562576625776257862579625806258162582625836258462585625866258762588625896259062591625926259362594625956259662597625986259962600626016260262603626046260562606626076260862609626106261162612626136261462615626166261762618626196262062621626226262362624626256262662627626286262962630626316263262633626346263562636626376263862639626406264162642626436264462645626466264762648626496265062651626526265362654626556265662657626586265962660626616266262663626646266562666626676266862669626706267162672626736267462675626766267762678626796268062681626826268362684626856268662687626886268962690626916269262693626946269562696626976269862699627006270162702627036270462705627066270762708627096271062711627126271362714627156271662717627186271962720627216272262723627246272562726627276272862729627306273162732627336273462735627366273762738627396274062741627426274362744627456274662747627486274962750627516275262753627546275562756627576275862759627606276162762627636276462765627666276762768627696277062771627726277362774627756277662777627786277962780627816278262783627846278562786627876278862789627906279162792627936279462795627966279762798627996280062801628026280362804628056280662807628086280962810628116281262813628146281562816628176281862819628206282162822628236282462825628266282762828628296283062831628326283362834628356283662837628386283962840628416284262843628446284562846628476284862849628506285162852628536285462855628566285762858628596286062861628626286362864628656286662867628686286962870628716287262873628746287562876628776287862879628806288162882628836288462885628866288762888628896289062891628926289362894628956289662897628986289962900629016290262903629046290562906629076290862909629106291162912629136291462915629166291762918629196292062921629226292362924629256292662927629286292962930629316293262933629346293562936629376293862939629406294162942629436294462945629466294762948629496295062951629526295362954629556295662957629586295962960629616296262963629646296562966629676296862969629706297162972629736297462975629766297762978629796298062981629826298362984629856298662987629886298962990629916299262993629946299562996629976299862999630006300163002630036300463005630066300763008630096301063011630126301363014630156301663017630186301963020630216302263023630246302563026630276302863029630306303163032630336303463035630366303763038630396304063041630426304363044630456304663047630486304963050630516305263053630546305563056630576305863059630606306163062630636306463065630666306763068630696307063071630726307363074630756307663077630786307963080630816308263083630846308563086630876308863089630906309163092630936309463095630966309763098630996310063101631026310363104631056310663107631086310963110631116311263113631146311563116631176311863119631206312163122631236312463125631266312763128631296313063131631326313363134631356313663137631386313963140631416314263143631446314563146631476314863149631506315163152631536315463155631566315763158631596316063161631626316363164631656316663167631686316963170631716317263173631746317563176631776317863179631806318163182631836318463185631866318763188631896319063191631926319363194631956319663197631986319963200632016320263203632046320563206632076320863209632106321163212632136321463215632166321763218632196322063221632226322363224632256322663227632286322963230632316323263233632346323563236632376323863239632406324163242632436324463245632466324763248632496325063251632526325363254632556325663257632586325963260632616326263263632646326563266632676326863269632706327163272632736327463275632766327763278632796328063281632826328363284632856328663287632886328963290632916329263293632946329563296632976329863299633006330163302633036330463305633066330763308633096331063311633126331363314633156331663317633186331963320633216332263323633246332563326633276332863329633306333163332633336333463335633366333763338633396334063341633426334363344633456334663347633486334963350633516335263353633546335563356633576335863359633606336163362633636336463365633666336763368633696337063371633726337363374633756337663377633786337963380633816338263383633846338563386633876338863389633906339163392633936339463395633966339763398633996340063401634026340363404634056340663407634086340963410634116341263413634146341563416634176341863419634206342163422634236342463425634266342763428634296343063431634326343363434634356343663437634386343963440634416344263443634446344563446634476344863449634506345163452634536345463455634566345763458634596346063461634626346363464634656346663467634686346963470634716347263473634746347563476634776347863479634806348163482634836348463485634866348763488634896349063491634926349363494634956349663497634986349963500635016350263503635046350563506635076350863509635106351163512635136351463515635166351763518635196352063521635226352363524635256352663527635286352963530635316353263533635346353563536635376353863539635406354163542635436354463545635466354763548635496355063551635526355363554635556355663557635586355963560635616356263563635646356563566635676356863569635706357163572635736357463575635766357763578635796358063581635826358363584635856358663587635886358963590635916359263593635946359563596635976359863599636006360163602636036360463605636066360763608636096361063611636126361363614636156361663617636186361963620636216362263623636246362563626636276362863629636306363163632636336363463635636366363763638636396364063641636426364363644636456364663647636486364963650636516365263653636546365563656636576365863659636606366163662636636366463665636666366763668636696367063671636726367363674636756367663677636786367963680636816368263683636846368563686636876368863689636906369163692636936369463695636966369763698636996370063701637026370363704637056370663707637086370963710637116371263713637146371563716637176371863719637206372163722637236372463725637266372763728637296373063731637326373363734637356373663737637386373963740637416374263743637446374563746637476374863749637506375163752637536375463755637566375763758637596376063761637626376363764637656376663767637686376963770637716377263773637746377563776637776377863779637806378163782637836378463785637866378763788637896379063791637926379363794637956379663797637986379963800638016380263803638046380563806638076380863809638106381163812638136381463815638166381763818638196382063821638226382363824638256382663827638286382963830638316383263833638346383563836638376383863839638406384163842638436384463845638466384763848638496385063851638526385363854638556385663857638586385963860638616386263863638646386563866638676386863869638706387163872638736387463875638766387763878638796388063881638826388363884638856388663887638886388963890638916389263893638946389563896638976389863899639006390163902639036390463905639066390763908639096391063911639126391363914639156391663917639186391963920639216392263923639246392563926639276392863929639306393163932639336393463935639366393763938639396394063941639426394363944639456394663947639486394963950639516395263953639546395563956639576395863959639606396163962639636396463965639666396763968639696397063971639726397363974639756397663977639786397963980639816398263983639846398563986639876398863989639906399163992639936399463995639966399763998639996400064001640026400364004640056400664007640086400964010640116401264013640146401564016640176401864019640206402164022640236402464025640266402764028640296403064031640326403364034640356403664037640386403964040640416404264043640446404564046640476404864049640506405164052640536405464055640566405764058640596406064061640626406364064640656406664067640686406964070640716407264073640746407564076640776407864079640806408164082640836408464085640866408764088640896409064091640926409364094640956409664097640986409964100641016410264103641046410564106641076410864109641106411164112641136411464115641166411764118641196412064121641226412364124641256412664127641286412964130641316413264133641346413564136641376413864139641406414164142641436414464145641466414764148641496415064151641526415364154641556415664157641586415964160641616416264163641646416564166641676416864169641706417164172641736417464175641766417764178641796418064181641826418364184641856418664187641886418964190641916419264193641946419564196641976419864199642006420164202642036420464205642066420764208642096421064211642126421364214642156421664217642186421964220642216422264223642246422564226642276422864229642306423164232642336423464235642366423764238642396424064241642426424364244642456424664247642486424964250642516425264253642546425564256642576425864259642606426164262642636426464265642666426764268642696427064271642726427364274642756427664277642786427964280642816428264283642846428564286642876428864289642906429164292642936429464295642966429764298642996430064301643026430364304643056430664307643086430964310643116431264313643146431564316643176431864319643206432164322643236432464325643266432764328643296433064331643326433364334643356433664337643386433964340643416434264343643446434564346643476434864349643506435164352643536435464355643566435764358643596436064361643626436364364643656436664367643686436964370643716437264373643746437564376643776437864379643806438164382643836438464385643866438764388643896439064391643926439364394643956439664397643986439964400644016440264403644046440564406644076440864409644106441164412644136441464415644166441764418644196442064421644226442364424644256442664427644286442964430644316443264433644346443564436644376443864439644406444164442644436444464445644466444764448644496445064451644526445364454644556445664457644586445964460644616446264463644646446564466644676446864469644706447164472644736447464475644766447764478644796448064481644826448364484644856448664487644886448964490644916449264493644946449564496644976449864499645006450164502645036450464505645066450764508645096451064511645126451364514645156451664517645186451964520645216452264523645246452564526645276452864529645306453164532645336453464535645366453764538645396454064541645426454364544645456454664547645486454964550645516455264553645546455564556645576455864559645606456164562645636456464565645666456764568645696457064571645726457364574645756457664577645786457964580645816458264583645846458564586645876458864589645906459164592645936459464595645966459764598645996460064601646026460364604646056460664607646086460964610646116461264613646146461564616646176461864619646206462164622646236462464625646266462764628646296463064631646326463364634646356463664637646386463964640646416464264643646446464564646646476464864649646506465164652646536465464655646566465764658646596466064661646626466364664646656466664667646686466964670646716467264673646746467564676646776467864679646806468164682646836468464685646866468764688646896469064691646926469364694646956469664697646986469964700647016470264703647046470564706647076470864709647106471164712647136471464715647166471764718647196472064721647226472364724647256472664727647286472964730647316473264733647346473564736647376473864739647406474164742647436474464745647466474764748647496475064751647526475364754647556475664757647586475964760647616476264763647646476564766647676476864769647706477164772647736477464775647766477764778647796478064781647826478364784647856478664787647886478964790647916479264793647946479564796647976479864799648006480164802648036480464805648066480764808648096481064811648126481364814648156481664817648186481964820648216482264823648246482564826648276482864829648306483164832648336483464835648366483764838648396484064841648426484364844648456484664847648486484964850648516485264853648546485564856648576485864859648606486164862648636486464865648666486764868648696487064871648726487364874648756487664877648786487964880648816488264883648846488564886648876488864889648906489164892648936489464895648966489764898648996490064901649026490364904649056490664907649086490964910649116491264913649146491564916649176491864919649206492164922649236492464925649266492764928649296493064931649326493364934649356493664937649386493964940649416494264943649446494564946649476494864949649506495164952649536495464955649566495764958649596496064961649626496364964649656496664967649686496964970649716497264973649746497564976649776497864979649806498164982649836498464985649866498764988649896499064991649926499364994649956499664997649986499965000650016500265003650046500565006650076500865009650106501165012650136501465015650166501765018650196502065021650226502365024650256502665027650286502965030650316503265033650346503565036650376503865039650406504165042650436504465045650466504765048650496505065051650526505365054650556505665057650586505965060650616506265063650646506565066650676506865069650706507165072650736507465075650766507765078650796508065081650826508365084650856508665087650886508965090650916509265093650946509565096650976509865099651006510165102651036510465105651066510765108651096511065111651126511365114651156511665117651186511965120651216512265123651246512565126651276512865129651306513165132651336513465135651366513765138651396514065141651426514365144651456514665147651486514965150651516515265153651546515565156651576515865159651606516165162651636516465165651666516765168651696517065171651726517365174651756517665177651786517965180651816518265183651846518565186651876518865189651906519165192651936519465195651966519765198651996520065201652026520365204652056520665207652086520965210652116521265213652146521565216652176521865219652206522165222652236522465225652266522765228652296523065231652326523365234652356523665237652386523965240652416524265243652446524565246652476524865249652506525165252652536525465255652566525765258652596526065261652626526365264652656526665267652686526965270652716527265273652746527565276652776527865279652806528165282652836528465285652866528765288652896529065291652926529365294652956529665297652986529965300653016530265303653046530565306653076530865309653106531165312653136531465315653166531765318653196532065321653226532365324653256532665327653286532965330653316533265333653346533565336653376533865339653406534165342653436534465345653466534765348653496535065351653526535365354653556535665357653586535965360653616536265363653646536565366653676536865369653706537165372653736537465375653766537765378653796538065381653826538365384653856538665387653886538965390653916539265393653946539565396653976539865399654006540165402654036540465405654066540765408654096541065411654126541365414654156541665417654186541965420654216542265423654246542565426654276542865429654306543165432654336543465435654366543765438654396544065441654426544365444654456544665447654486544965450654516545265453654546545565456654576545865459654606546165462654636546465465654666546765468654696547065471654726547365474654756547665477654786547965480654816548265483654846548565486654876548865489654906549165492654936549465495654966549765498654996550065501655026550365504655056550665507655086550965510655116551265513655146551565516655176551865519655206552165522655236552465525655266552765528655296553065531
  1. /*
  2. +----------------------------------------------------------------------+
  3. | Zend Engine |
  4. +----------------------------------------------------------------------+
  5. | Copyright (c) 1998-2018 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_DIM_OBJ 0x00400000
  315. #define SPEC_RULE_COMMUTATIVE 0x00800000
  316. #define SPEC_RULE_ISSET 0x01000000
  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. #undef OPLINE
  386. #undef DCL_OPLINE
  387. #undef USE_OPLINE
  388. #undef LOAD_OPLINE
  389. #undef LOAD_OPLINE_EX
  390. #undef SAVE_OPLINE
  391. #define DCL_OPLINE
  392. #ifdef ZEND_VM_IP_GLOBAL_REG
  393. # define OPLINE opline
  394. # define USE_OPLINE
  395. # define LOAD_OPLINE() opline = EX(opline)
  396. # define LOAD_NEXT_OPLINE() opline = EX(opline) + 1
  397. # define SAVE_OPLINE() EX(opline) = opline
  398. #else
  399. # define OPLINE EX(opline)
  400. # define USE_OPLINE const zend_op *opline = EX(opline);
  401. # define LOAD_OPLINE()
  402. # define LOAD_NEXT_OPLINE() ZEND_VM_INC_OPCODE()
  403. # define SAVE_OPLINE()
  404. #endif
  405. #undef HANDLE_EXCEPTION
  406. #undef HANDLE_EXCEPTION_LEAVE
  407. #define HANDLE_EXCEPTION() LOAD_OPLINE(); ZEND_VM_CONTINUE()
  408. #define HANDLE_EXCEPTION_LEAVE() LOAD_OPLINE(); ZEND_VM_LEAVE()
  409. #if defined(ZEND_VM_FP_GLOBAL_REG)
  410. # define ZEND_VM_ENTER_EX() ZEND_VM_INTERRUPT_CHECK(); ZEND_VM_CONTINUE()
  411. # define ZEND_VM_ENTER() execute_data = EG(current_execute_data); LOAD_OPLINE(); ZEND_VM_ENTER_EX()
  412. # define ZEND_VM_LEAVE() ZEND_VM_CONTINUE()
  413. #elif defined(ZEND_VM_IP_GLOBAL_REG)
  414. # define ZEND_VM_ENTER_EX() return 1
  415. # define ZEND_VM_ENTER() opline = EG(current_execute_data)->opline; ZEND_VM_ENTER_EX()
  416. # define ZEND_VM_LEAVE() return 2
  417. #else
  418. # define ZEND_VM_ENTER_EX() return 1
  419. # define ZEND_VM_ENTER() return 1
  420. # define ZEND_VM_LEAVE() return 2
  421. #endif
  422. #define ZEND_VM_INTERRUPT() ZEND_VM_TAIL_CALL(zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  423. #define ZEND_VM_LOOP_INTERRUPT() zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  424. #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));
  425. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS);
  426. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS);
  427. static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  428. {
  429. USE_OPLINE
  430. SAVE_OPLINE();
  431. zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
  432. ZVAL_UNDEF(EX_VAR(opline->result.var));
  433. HANDLE_EXCEPTION();
  434. }
  435. static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  436. {
  437. USE_OPLINE
  438. SAVE_OPLINE();
  439. zend_throw_error(NULL, "Using $this when not in object context");
  440. if ((opline+1)->opcode == ZEND_OP_DATA) {
  441. FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
  442. }
  443. FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var);
  444. UNDEF_RESULT();
  445. HANDLE_EXCEPTION();
  446. }
  447. static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_abstract_method_helper_SPEC(zend_function *fbc ZEND_OPCODE_HANDLER_ARGS_DC)
  448. {
  449. USE_OPLINE
  450. SAVE_OPLINE();
  451. zend_throw_error(NULL, "Cannot call abstract method %s::%s()", ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
  452. UNDEF_RESULT();
  453. HANDLE_EXCEPTION();
  454. }
  455. static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_undefined_function_helper_SPEC(zval *function_name ZEND_OPCODE_HANDLER_ARGS_DC)
  456. {
  457. SAVE_OPLINE();
  458. zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(function_name));
  459. HANDLE_EXCEPTION();
  460. }
  461. static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  462. {
  463. USE_OPLINE
  464. SAVE_OPLINE();
  465. zend_throw_error(NULL, "Cannot use temporary expression in write context");
  466. FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var);
  467. FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
  468. ZVAL_UNDEF(EX_VAR(opline->result.var));
  469. HANDLE_EXCEPTION();
  470. }
  471. static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  472. {
  473. USE_OPLINE
  474. SAVE_OPLINE();
  475. zend_throw_error(NULL, "Cannot use [] for reading");
  476. FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var);
  477. FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
  478. ZVAL_UNDEF(EX_VAR(opline->result.var));
  479. HANDLE_EXCEPTION();
  480. }
  481. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  482. {
  483. zend_execute_data *old_execute_data;
  484. uint32_t call_info = EX_CALL_INFO();
  485. if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED)) == 0)) {
  486. EG(current_execute_data) = EX(prev_execute_data);
  487. i_free_compiled_variables(execute_data);
  488. if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
  489. zend_object *object = Z_OBJ(execute_data->This);
  490. #if 0
  491. if (UNEXPECTED(EG(exception) != NULL) && (EX(opline)->op1.num & ZEND_CALL_CTOR)) {
  492. #else
  493. if (UNEXPECTED(EG(exception) != NULL) && (call_info & ZEND_CALL_CTOR)) {
  494. #endif
  495. GC_DELREF(object);
  496. zend_object_store_ctor_failed(object);
  497. }
  498. OBJ_RELEASE(object);
  499. } else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
  500. OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
  501. }
  502. EG(vm_stack_top) = (zval*)execute_data;
  503. execute_data = EX(prev_execute_data);
  504. if (UNEXPECTED(EG(exception) != NULL)) {
  505. zend_rethrow_exception(execute_data);
  506. HANDLE_EXCEPTION_LEAVE();
  507. }
  508. LOAD_NEXT_OPLINE();
  509. ZEND_VM_LEAVE();
  510. } else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
  511. EG(current_execute_data) = EX(prev_execute_data);
  512. i_free_compiled_variables(execute_data);
  513. if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
  514. zend_clean_and_cache_symbol_table(EX(symbol_table));
  515. }
  516. /* Free extra args before releasing the closure,
  517. * as that may free the op_array. */
  518. zend_vm_stack_free_extra_args_ex(call_info, execute_data);
  519. if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
  520. zend_object *object = Z_OBJ(execute_data->This);
  521. #if 0
  522. if (UNEXPECTED(EG(exception) != NULL) && (EX(opline)->op1.num & ZEND_CALL_CTOR)) {
  523. #else
  524. if (UNEXPECTED(EG(exception) != NULL) && (call_info & ZEND_CALL_CTOR)) {
  525. #endif
  526. GC_DELREF(object);
  527. zend_object_store_ctor_failed(object);
  528. }
  529. OBJ_RELEASE(object);
  530. } else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
  531. OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
  532. }
  533. old_execute_data = execute_data;
  534. execute_data = EX(prev_execute_data);
  535. zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
  536. if (UNEXPECTED(EG(exception) != NULL)) {
  537. zend_rethrow_exception(execute_data);
  538. HANDLE_EXCEPTION_LEAVE();
  539. }
  540. LOAD_NEXT_OPLINE();
  541. ZEND_VM_LEAVE();
  542. } else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
  543. zend_detach_symbol_table(execute_data);
  544. destroy_op_array(&EX(func)->op_array);
  545. efree_size(EX(func), sizeof(zend_op_array));
  546. old_execute_data = execute_data;
  547. execute_data = EG(current_execute_data) = EX(prev_execute_data);
  548. zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
  549. zend_attach_symbol_table(execute_data);
  550. if (UNEXPECTED(EG(exception) != NULL)) {
  551. zend_rethrow_exception(execute_data);
  552. HANDLE_EXCEPTION_LEAVE();
  553. }
  554. LOAD_NEXT_OPLINE();
  555. ZEND_VM_LEAVE();
  556. } else {
  557. if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
  558. EG(current_execute_data) = EX(prev_execute_data);
  559. i_free_compiled_variables(execute_data);
  560. if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS))) {
  561. if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
  562. zend_clean_and_cache_symbol_table(EX(symbol_table));
  563. }
  564. zend_vm_stack_free_extra_args_ex(call_info, execute_data);
  565. }
  566. if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
  567. OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
  568. }
  569. ZEND_VM_RETURN();
  570. } else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
  571. zend_array *symbol_table = EX(symbol_table);
  572. zend_detach_symbol_table(execute_data);
  573. old_execute_data = EX(prev_execute_data);
  574. while (old_execute_data) {
  575. if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
  576. if (old_execute_data->symbol_table == symbol_table) {
  577. zend_attach_symbol_table(old_execute_data);
  578. }
  579. break;
  580. }
  581. old_execute_data = old_execute_data->prev_execute_data;
  582. }
  583. EG(current_execute_data) = EX(prev_execute_data);
  584. ZEND_VM_RETURN();
  585. }
  586. }
  587. }
  588. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  589. {
  590. USE_OPLINE
  591. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
  592. }
  593. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  594. {
  595. USE_OPLINE
  596. zend_execute_data *call = EX(call);
  597. zend_function *fbc = call->func;
  598. zval *ret;
  599. zval retval;
  600. SAVE_OPLINE();
  601. EX(call) = call->prev_execute_data;
  602. call->prev_execute_data = execute_data;
  603. EG(current_execute_data) = call;
  604. ret = 0 ? EX_VAR(opline->result.var) : &retval;
  605. ZVAL_NULL(ret);
  606. fbc->internal_function.handler(call, ret);
  607. #if ZEND_DEBUG
  608. if (!EG(exception) && call->func) {
  609. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  610. zend_verify_internal_return_type(call->func, ret));
  611. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  612. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  613. }
  614. #endif
  615. EG(current_execute_data) = execute_data;
  616. zend_vm_stack_free_args(call);
  617. zend_vm_stack_free_call_frame(call);
  618. if (!0) {
  619. zval_ptr_dtor(ret);
  620. }
  621. if (UNEXPECTED(EG(exception) != NULL)) {
  622. zend_rethrow_exception(execute_data);
  623. HANDLE_EXCEPTION();
  624. }
  625. ZEND_VM_SET_OPCODE(opline + 1);
  626. ZEND_VM_CONTINUE();
  627. }
  628. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  629. {
  630. USE_OPLINE
  631. zend_execute_data *call = EX(call);
  632. zend_function *fbc = call->func;
  633. zval *ret;
  634. zval retval;
  635. SAVE_OPLINE();
  636. EX(call) = call->prev_execute_data;
  637. call->prev_execute_data = execute_data;
  638. EG(current_execute_data) = call;
  639. ret = 1 ? EX_VAR(opline->result.var) : &retval;
  640. ZVAL_NULL(ret);
  641. fbc->internal_function.handler(call, ret);
  642. #if ZEND_DEBUG
  643. if (!EG(exception) && call->func) {
  644. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  645. zend_verify_internal_return_type(call->func, ret));
  646. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  647. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  648. }
  649. #endif
  650. EG(current_execute_data) = execute_data;
  651. zend_vm_stack_free_args(call);
  652. zend_vm_stack_free_call_frame(call);
  653. if (!1) {
  654. zval_ptr_dtor(ret);
  655. }
  656. if (UNEXPECTED(EG(exception) != NULL)) {
  657. zend_rethrow_exception(execute_data);
  658. HANDLE_EXCEPTION();
  659. }
  660. ZEND_VM_SET_OPCODE(opline + 1);
  661. ZEND_VM_CONTINUE();
  662. }
  663. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  664. {
  665. USE_OPLINE
  666. zend_execute_data *call = EX(call);
  667. zend_function *fbc = call->func;
  668. zval *ret;
  669. SAVE_OPLINE();
  670. EX(call) = call->prev_execute_data;
  671. ret = NULL;
  672. if (0) {
  673. ret = EX_VAR(opline->result.var);
  674. ZVAL_NULL(ret);
  675. }
  676. call->prev_execute_data = execute_data;
  677. execute_data = call;
  678. i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
  679. LOAD_OPLINE();
  680. ZEND_VM_ENTER_EX();
  681. }
  682. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  683. {
  684. USE_OPLINE
  685. zend_execute_data *call = EX(call);
  686. zend_function *fbc = call->func;
  687. zval *ret;
  688. SAVE_OPLINE();
  689. EX(call) = call->prev_execute_data;
  690. ret = NULL;
  691. if (1) {
  692. ret = EX_VAR(opline->result.var);
  693. ZVAL_NULL(ret);
  694. }
  695. call->prev_execute_data = execute_data;
  696. execute_data = call;
  697. i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
  698. LOAD_OPLINE();
  699. ZEND_VM_ENTER_EX();
  700. }
  701. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  702. {
  703. USE_OPLINE
  704. zend_execute_data *call = EX(call);
  705. zend_function *fbc = call->func;
  706. zval *ret;
  707. SAVE_OPLINE();
  708. EX(call) = call->prev_execute_data;
  709. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
  710. ret = NULL;
  711. if (0) {
  712. ret = EX_VAR(opline->result.var);
  713. ZVAL_NULL(ret);
  714. }
  715. call->prev_execute_data = execute_data;
  716. execute_data = call;
  717. i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
  718. LOAD_OPLINE();
  719. ZEND_VM_ENTER_EX();
  720. } else {
  721. zval retval;
  722. ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
  723. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
  724. zend_deprecated_function(fbc);
  725. if (UNEXPECTED(EG(exception) != NULL)) {
  726. UNDEF_RESULT();
  727. HANDLE_EXCEPTION();
  728. }
  729. }
  730. call->prev_execute_data = execute_data;
  731. EG(current_execute_data) = call;
  732. if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
  733. && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
  734. zend_vm_stack_free_call_frame(call);
  735. zend_rethrow_exception(execute_data);
  736. UNDEF_RESULT();
  737. HANDLE_EXCEPTION();
  738. }
  739. ret = 0 ? EX_VAR(opline->result.var) : &retval;
  740. ZVAL_NULL(ret);
  741. fbc->internal_function.handler(call, ret);
  742. #if ZEND_DEBUG
  743. if (!EG(exception) && call->func) {
  744. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  745. zend_verify_internal_return_type(call->func, ret));
  746. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  747. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  748. }
  749. #endif
  750. EG(current_execute_data) = execute_data;
  751. zend_vm_stack_free_args(call);
  752. zend_vm_stack_free_call_frame(call);
  753. if (!0) {
  754. zval_ptr_dtor(ret);
  755. }
  756. }
  757. if (UNEXPECTED(EG(exception) != NULL)) {
  758. zend_rethrow_exception(execute_data);
  759. HANDLE_EXCEPTION();
  760. }
  761. ZEND_VM_SET_OPCODE(opline + 1);
  762. ZEND_VM_CONTINUE();
  763. }
  764. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  765. {
  766. USE_OPLINE
  767. zend_execute_data *call = EX(call);
  768. zend_function *fbc = call->func;
  769. zval *ret;
  770. SAVE_OPLINE();
  771. EX(call) = call->prev_execute_data;
  772. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
  773. ret = NULL;
  774. if (1) {
  775. ret = EX_VAR(opline->result.var);
  776. ZVAL_NULL(ret);
  777. }
  778. call->prev_execute_data = execute_data;
  779. execute_data = call;
  780. i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
  781. LOAD_OPLINE();
  782. ZEND_VM_ENTER_EX();
  783. } else {
  784. zval retval;
  785. ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
  786. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
  787. zend_deprecated_function(fbc);
  788. if (UNEXPECTED(EG(exception) != NULL)) {
  789. UNDEF_RESULT();
  790. HANDLE_EXCEPTION();
  791. }
  792. }
  793. call->prev_execute_data = execute_data;
  794. EG(current_execute_data) = call;
  795. if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
  796. && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
  797. zend_vm_stack_free_call_frame(call);
  798. zend_rethrow_exception(execute_data);
  799. UNDEF_RESULT();
  800. HANDLE_EXCEPTION();
  801. }
  802. ret = 1 ? EX_VAR(opline->result.var) : &retval;
  803. ZVAL_NULL(ret);
  804. fbc->internal_function.handler(call, ret);
  805. #if ZEND_DEBUG
  806. if (!EG(exception) && call->func) {
  807. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  808. zend_verify_internal_return_type(call->func, ret));
  809. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  810. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  811. }
  812. #endif
  813. EG(current_execute_data) = execute_data;
  814. zend_vm_stack_free_args(call);
  815. zend_vm_stack_free_call_frame(call);
  816. if (!1) {
  817. zval_ptr_dtor(ret);
  818. }
  819. }
  820. if (UNEXPECTED(EG(exception) != NULL)) {
  821. zend_rethrow_exception(execute_data);
  822. HANDLE_EXCEPTION();
  823. }
  824. ZEND_VM_SET_OPCODE(opline + 1);
  825. ZEND_VM_CONTINUE();
  826. }
  827. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  828. {
  829. USE_OPLINE
  830. zend_execute_data *call = EX(call);
  831. zend_function *fbc = call->func;
  832. zend_object *object;
  833. zval *ret;
  834. SAVE_OPLINE();
  835. EX(call) = call->prev_execute_data;
  836. if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) {
  837. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) {
  838. ZEND_VM_TAIL_CALL(zend_abstract_method_helper_SPEC(fbc ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  839. }
  840. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
  841. zend_deprecated_function(fbc);
  842. if (UNEXPECTED(EG(exception) != NULL)) {
  843. UNDEF_RESULT();
  844. HANDLE_EXCEPTION();
  845. }
  846. }
  847. }
  848. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
  849. ret = NULL;
  850. if (0) {
  851. ret = EX_VAR(opline->result.var);
  852. ZVAL_NULL(ret);
  853. }
  854. call->prev_execute_data = execute_data;
  855. execute_data = call;
  856. i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
  857. if (EXPECTED(zend_execute_ex == execute_ex)) {
  858. LOAD_OPLINE();
  859. ZEND_VM_ENTER_EX();
  860. } else {
  861. execute_data = EX(prev_execute_data);
  862. LOAD_OPLINE();
  863. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  864. zend_execute_ex(call);
  865. }
  866. } else if (EXPECTED(fbc->type < ZEND_USER_FUNCTION)) {
  867. zval retval;
  868. call->prev_execute_data = execute_data;
  869. EG(current_execute_data) = call;
  870. if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
  871. && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
  872. UNDEF_RESULT();
  873. goto fcall_end;
  874. }
  875. ret = 0 ? EX_VAR(opline->result.var) : &retval;
  876. ZVAL_NULL(ret);
  877. if (!zend_execute_internal) {
  878. /* saves one function call if zend_execute_internal is not used */
  879. fbc->internal_function.handler(call, ret);
  880. } else {
  881. zend_execute_internal(call, ret);
  882. }
  883. #if ZEND_DEBUG
  884. if (!EG(exception) && call->func) {
  885. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  886. zend_verify_internal_return_type(call->func, ret));
  887. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  888. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  889. }
  890. #endif
  891. EG(current_execute_data) = execute_data;
  892. zend_vm_stack_free_args(call);
  893. if (!0) {
  894. zval_ptr_dtor(ret);
  895. }
  896. } else { /* ZEND_OVERLOADED_FUNCTION */
  897. zval retval;
  898. ret = 0 ? EX_VAR(opline->result.var) : &retval;
  899. call->prev_execute_data = execute_data;
  900. if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) {
  901. UNDEF_RESULT();
  902. HANDLE_EXCEPTION();
  903. }
  904. if (!0) {
  905. zval_ptr_dtor(ret);
  906. }
  907. }
  908. fcall_end:
  909. if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
  910. object = Z_OBJ(call->This);
  911. #if 0
  912. if (UNEXPECTED(EG(exception) != NULL) && (opline->op1.num & ZEND_CALL_CTOR)) {
  913. #else
  914. if (UNEXPECTED(EG(exception) != NULL) && (ZEND_CALL_INFO(call) & ZEND_CALL_CTOR)) {
  915. #endif
  916. GC_DELREF(object);
  917. zend_object_store_ctor_failed(object);
  918. }
  919. OBJ_RELEASE(object);
  920. }
  921. zend_vm_stack_free_call_frame(call);
  922. if (UNEXPECTED(EG(exception) != NULL)) {
  923. zend_rethrow_exception(execute_data);
  924. HANDLE_EXCEPTION();
  925. }
  926. ZEND_VM_SET_OPCODE(opline + 1);
  927. ZEND_VM_CONTINUE();
  928. }
  929. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  930. {
  931. USE_OPLINE
  932. zend_execute_data *call = EX(call);
  933. zend_function *fbc = call->func;
  934. zend_object *object;
  935. zval *ret;
  936. SAVE_OPLINE();
  937. EX(call) = call->prev_execute_data;
  938. if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) {
  939. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) {
  940. ZEND_VM_TAIL_CALL(zend_abstract_method_helper_SPEC(fbc ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  941. }
  942. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
  943. zend_deprecated_function(fbc);
  944. if (UNEXPECTED(EG(exception) != NULL)) {
  945. UNDEF_RESULT();
  946. HANDLE_EXCEPTION();
  947. }
  948. }
  949. }
  950. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
  951. ret = NULL;
  952. if (1) {
  953. ret = EX_VAR(opline->result.var);
  954. ZVAL_NULL(ret);
  955. }
  956. call->prev_execute_data = execute_data;
  957. execute_data = call;
  958. i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
  959. if (EXPECTED(zend_execute_ex == execute_ex)) {
  960. LOAD_OPLINE();
  961. ZEND_VM_ENTER_EX();
  962. } else {
  963. execute_data = EX(prev_execute_data);
  964. LOAD_OPLINE();
  965. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  966. zend_execute_ex(call);
  967. }
  968. } else if (EXPECTED(fbc->type < ZEND_USER_FUNCTION)) {
  969. zval retval;
  970. call->prev_execute_data = execute_data;
  971. EG(current_execute_data) = call;
  972. if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
  973. && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
  974. UNDEF_RESULT();
  975. goto fcall_end;
  976. }
  977. ret = 1 ? EX_VAR(opline->result.var) : &retval;
  978. ZVAL_NULL(ret);
  979. if (!zend_execute_internal) {
  980. /* saves one function call if zend_execute_internal is not used */
  981. fbc->internal_function.handler(call, ret);
  982. } else {
  983. zend_execute_internal(call, ret);
  984. }
  985. #if ZEND_DEBUG
  986. if (!EG(exception) && call->func) {
  987. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  988. zend_verify_internal_return_type(call->func, ret));
  989. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  990. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  991. }
  992. #endif
  993. EG(current_execute_data) = execute_data;
  994. zend_vm_stack_free_args(call);
  995. if (!1) {
  996. zval_ptr_dtor(ret);
  997. }
  998. } else { /* ZEND_OVERLOADED_FUNCTION */
  999. zval retval;
  1000. ret = 1 ? EX_VAR(opline->result.var) : &retval;
  1001. call->prev_execute_data = execute_data;
  1002. if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) {
  1003. UNDEF_RESULT();
  1004. HANDLE_EXCEPTION();
  1005. }
  1006. if (!1) {
  1007. zval_ptr_dtor(ret);
  1008. }
  1009. }
  1010. fcall_end:
  1011. if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
  1012. object = Z_OBJ(call->This);
  1013. #if 0
  1014. if (UNEXPECTED(EG(exception) != NULL) && (opline->op1.num & ZEND_CALL_CTOR)) {
  1015. #else
  1016. if (UNEXPECTED(EG(exception) != NULL) && (ZEND_CALL_INFO(call) & ZEND_CALL_CTOR)) {
  1017. #endif
  1018. GC_DELREF(object);
  1019. zend_object_store_ctor_failed(object);
  1020. }
  1021. OBJ_RELEASE(object);
  1022. }
  1023. zend_vm_stack_free_call_frame(call);
  1024. if (UNEXPECTED(EG(exception) != NULL)) {
  1025. zend_rethrow_exception(execute_data);
  1026. HANDLE_EXCEPTION();
  1027. }
  1028. ZEND_VM_SET_OPCODE(opline + 1);
  1029. ZEND_VM_CONTINUE();
  1030. }
  1031. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1032. {
  1033. zval *return_value = EX(return_value);
  1034. if (EXPECTED(return_value)) {
  1035. USE_OPLINE
  1036. zend_generator *generator;
  1037. zend_execute_data *gen_execute_data;
  1038. uint32_t num_args, used_stack, call_info;
  1039. object_init_ex(return_value, zend_ce_generator);
  1040. /*
  1041. * Normally the execute_data is allocated on the VM stack (because it does
  1042. * not actually do any allocation and thus is faster). For generators
  1043. * though this behavior would be suboptimal, because the (rather large)
  1044. * structure would have to be copied back and forth every time execution is
  1045. * suspended or resumed. That's why for generators the execution context
  1046. * is allocated on heap.
  1047. */
  1048. num_args = EX_NUM_ARGS();
  1049. if (EXPECTED(num_args <= EX(func)->op_array.num_args)) {
  1050. used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var + EX(func)->op_array.T) * sizeof(zval);
  1051. gen_execute_data = (zend_execute_data*)emalloc(used_stack);
  1052. used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var) * sizeof(zval);
  1053. } else {
  1054. 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);
  1055. gen_execute_data = (zend_execute_data*)emalloc(used_stack);
  1056. }
  1057. memcpy(gen_execute_data, execute_data, used_stack);
  1058. /* Save execution context in generator object. */
  1059. generator = (zend_generator *) Z_OBJ_P(EX(return_value));
  1060. generator->execute_data = gen_execute_data;
  1061. generator->frozen_call_stack = NULL;
  1062. generator->execute_fake.opline = NULL;
  1063. generator->execute_fake.func = NULL;
  1064. generator->execute_fake.prev_execute_data = NULL;
  1065. ZVAL_OBJ(&generator->execute_fake.This, (zend_object *) generator);
  1066. gen_execute_data->opline = opline + 1;
  1067. /* EX(return_value) keeps pointer to zend_object (not a real zval) */
  1068. gen_execute_data->return_value = (zval*)generator;
  1069. call_info = Z_TYPE_INFO(EX(This));
  1070. if ((call_info & Z_TYPE_MASK) == IS_OBJECT
  1071. && (!(call_info & ((ZEND_CALL_CLOSURE|ZEND_CALL_RELEASE_THIS) << ZEND_CALL_INFO_SHIFT))
  1072. /* Bug #72523 */
  1073. || UNEXPECTED(zend_execute_ex != execute_ex))) {
  1074. ZEND_ADD_CALL_FLAG_EX(call_info, ZEND_CALL_RELEASE_THIS);
  1075. Z_ADDREF(gen_execute_data->This);
  1076. }
  1077. ZEND_ADD_CALL_FLAG_EX(call_info, (ZEND_CALL_TOP_FUNCTION | ZEND_CALL_ALLOCATED | ZEND_CALL_GENERATOR));
  1078. Z_TYPE_INFO(gen_execute_data->This) = call_info;
  1079. gen_execute_data->prev_execute_data = NULL;
  1080. call_info = EX_CALL_INFO();
  1081. EG(current_execute_data) = EX(prev_execute_data);
  1082. if (EXPECTED(!(call_info & (ZEND_CALL_TOP|ZEND_CALL_ALLOCATED)))) {
  1083. EG(vm_stack_top) = (zval*)execute_data;
  1084. execute_data = EX(prev_execute_data);
  1085. LOAD_NEXT_OPLINE();
  1086. ZEND_VM_LEAVE();
  1087. } else if (EXPECTED(!(call_info & ZEND_CALL_TOP))) {
  1088. zend_execute_data *old_execute_data = execute_data;
  1089. execute_data = EX(prev_execute_data);
  1090. zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
  1091. LOAD_NEXT_OPLINE();
  1092. ZEND_VM_LEAVE();
  1093. } else {
  1094. ZEND_VM_RETURN();
  1095. }
  1096. } else {
  1097. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  1098. }
  1099. }
  1100. static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  1101. {
  1102. USE_OPLINE
  1103. zval *arg;
  1104. uint32_t arg_num = opline->op2.num;
  1105. SAVE_OPLINE();
  1106. zend_throw_error(NULL, "Cannot pass parameter %d by reference", arg_num);
  1107. FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
  1108. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  1109. ZVAL_UNDEF(arg);
  1110. HANDLE_EXCEPTION();
  1111. }
  1112. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1113. {
  1114. USE_OPLINE
  1115. zend_free_op free_op1;
  1116. zval *args;
  1117. int arg_num;
  1118. SAVE_OPLINE();
  1119. args = get_zval_ptr_undef(opline->op1_type, opline->op1, &free_op1, BP_VAR_R);
  1120. arg_num = ZEND_CALL_NUM_ARGS(EX(call)) + 1;
  1121. send_again:
  1122. if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
  1123. HashTable *ht = Z_ARRVAL_P(args);
  1124. zval *arg, *top;
  1125. zend_string *name;
  1126. zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, zend_hash_num_elements(ht));
  1127. if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_REFCOUNT_P(args) > 1) {
  1128. uint32_t i;
  1129. int separate = 0;
  1130. /* check if any of arguments are going to be passed by reference */
  1131. for (i = 0; i < zend_hash_num_elements(ht); i++) {
  1132. if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num + i)) {
  1133. separate = 1;
  1134. break;
  1135. }
  1136. }
  1137. if (separate) {
  1138. SEPARATE_ARRAY(args);
  1139. ht = Z_ARRVAL_P(args);
  1140. }
  1141. }
  1142. ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
  1143. if (name) {
  1144. zend_throw_error(NULL, "Cannot unpack array with string keys");
  1145. FREE_OP(free_op1);
  1146. HANDLE_EXCEPTION();
  1147. }
  1148. top = ZEND_CALL_ARG(EX(call), arg_num);
  1149. if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  1150. if (Z_ISREF_P(arg)) {
  1151. Z_ADDREF_P(arg);
  1152. ZVAL_REF(top, Z_REF_P(arg));
  1153. } else if (opline->op1_type & (IS_VAR|IS_CV)) {
  1154. /* array is already separated above */
  1155. ZVAL_MAKE_REF_EX(arg, 2);
  1156. ZVAL_REF(top, Z_REF_P(arg));
  1157. } else {
  1158. Z_TRY_ADDREF_P(arg);
  1159. ZVAL_NEW_REF(top, arg);
  1160. }
  1161. } else {
  1162. ZVAL_COPY_DEREF(top, arg);
  1163. }
  1164. ZEND_CALL_NUM_ARGS(EX(call))++;
  1165. arg_num++;
  1166. } ZEND_HASH_FOREACH_END();
  1167. } else if (EXPECTED(Z_TYPE_P(args) == IS_OBJECT)) {
  1168. zend_class_entry *ce = Z_OBJCE_P(args);
  1169. zend_object_iterator *iter;
  1170. if (!ce || !ce->get_iterator) {
  1171. zend_error(E_WARNING, "Only arrays and Traversables can be unpacked");
  1172. } else {
  1173. iter = ce->get_iterator(ce, args, 0);
  1174. if (UNEXPECTED(!iter)) {
  1175. FREE_OP(free_op1);
  1176. if (!EG(exception)) {
  1177. zend_throw_exception_ex(
  1178. NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
  1179. );
  1180. }
  1181. HANDLE_EXCEPTION();
  1182. }
  1183. if (iter->funcs->rewind) {
  1184. iter->funcs->rewind(iter);
  1185. }
  1186. for (; iter->funcs->valid(iter) == SUCCESS; ++arg_num) {
  1187. zval *arg, *top;
  1188. if (UNEXPECTED(EG(exception) != NULL)) {
  1189. break;
  1190. }
  1191. arg = iter->funcs->get_current_data(iter);
  1192. if (UNEXPECTED(EG(exception) != NULL)) {
  1193. break;
  1194. }
  1195. if (iter->funcs->get_current_key) {
  1196. zval key;
  1197. iter->funcs->get_current_key(iter, &key);
  1198. if (UNEXPECTED(EG(exception) != NULL)) {
  1199. break;
  1200. }
  1201. if (UNEXPECTED(Z_TYPE(key) != IS_LONG)) {
  1202. zend_throw_error(NULL,
  1203. (Z_TYPE(key) == IS_STRING) ?
  1204. "Cannot unpack Traversable with string keys" :
  1205. "Cannot unpack Traversable with non-integer keys");
  1206. zval_ptr_dtor(&key);
  1207. break;
  1208. }
  1209. }
  1210. if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  1211. zend_error(
  1212. E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
  1213. " by unpacking a Traversable, passing by-value instead", arg_num,
  1214. EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
  1215. EX(call)->func->common.scope ? "::" : "",
  1216. ZSTR_VAL(EX(call)->func->common.function_name)
  1217. );
  1218. }
  1219. ZVAL_DEREF(arg);
  1220. Z_TRY_ADDREF_P(arg);
  1221. zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, 1);
  1222. top = ZEND_CALL_ARG(EX(call), arg_num);
  1223. ZVAL_COPY_VALUE(top, arg);
  1224. ZEND_CALL_NUM_ARGS(EX(call))++;
  1225. iter->funcs->move_forward(iter);
  1226. }
  1227. zend_iterator_dtor(iter);
  1228. }
  1229. } else if (EXPECTED(Z_ISREF_P(args))) {
  1230. args = Z_REFVAL_P(args);
  1231. goto send_again;
  1232. } else {
  1233. if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) {
  1234. GET_OP1_UNDEF_CV(args, BP_VAR_R);
  1235. }
  1236. zend_error(E_WARNING, "Only arrays and Traversables can be unpacked");
  1237. }
  1238. FREE_OP(free_op1);
  1239. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  1240. }
  1241. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1242. {
  1243. USE_OPLINE
  1244. zend_free_op free_op1;
  1245. zval *args;
  1246. SAVE_OPLINE();
  1247. args = get_zval_ptr(opline->op1_type, opline->op1, &free_op1, BP_VAR_R);
  1248. if (UNEXPECTED(Z_TYPE_P(args) != IS_ARRAY)) {
  1249. if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(args)) {
  1250. args = Z_REFVAL_P(args);
  1251. if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
  1252. goto send_array;
  1253. }
  1254. }
  1255. zend_internal_type_error(EX_USES_STRICT_TYPES(), "call_user_func_array() expects parameter 2 to be array, %s given", zend_get_type_by_const(Z_TYPE_P(args)));
  1256. if (ZEND_CALL_INFO(EX(call)) & ZEND_CALL_CLOSURE) {
  1257. OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(call)->func));
  1258. }
  1259. if (Z_TYPE(EX(call)->This) == IS_OBJECT) {
  1260. OBJ_RELEASE(Z_OBJ(EX(call)->This));
  1261. }
  1262. EX(call)->func = (zend_function*)&zend_pass_function;
  1263. Z_OBJ(EX(call)->This) = NULL;
  1264. ZEND_SET_CALL_INFO(EX(call), 0, ZEND_CALL_INFO(EX(call)) & ~ZEND_CALL_RELEASE_THIS);
  1265. FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var);
  1266. } else {
  1267. uint32_t arg_num;
  1268. HashTable *ht;
  1269. zval *arg, *param;
  1270. send_array:
  1271. ht = Z_ARRVAL_P(args);
  1272. if (opline->op2_type != IS_UNUSED) {
  1273. zend_free_op free_op2;
  1274. zval *op2 = get_zval_ptr_deref(opline->op2_type, opline->op2, &free_op2, BP_VAR_R);
  1275. uint32_t skip = opline->extended_value;
  1276. uint32_t count = zend_hash_num_elements(ht);
  1277. zend_long len = zval_get_long(op2);
  1278. if (len < 0) {
  1279. len += (zend_long)(count - skip);
  1280. }
  1281. if (skip < count && len > 0) {
  1282. if (len > (zend_long)(count - skip)) {
  1283. len = (zend_long)(count - skip);
  1284. }
  1285. zend_vm_stack_extend_call_frame(&EX(call), 0, len);
  1286. arg_num = 1;
  1287. param = ZEND_CALL_ARG(EX(call), 1);
  1288. ZEND_HASH_FOREACH_VAL(ht, arg) {
  1289. if (skip > 0) {
  1290. skip--;
  1291. continue;
  1292. } else if ((zend_long)(arg_num - 1) >= len) {
  1293. break;
  1294. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  1295. if (UNEXPECTED(!Z_ISREF_P(arg))) {
  1296. if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  1297. /* By-value send is not allowed -- emit a warning,
  1298. * but still perform the call. */
  1299. zend_param_must_be_ref(EX(call)->func, arg_num);
  1300. }
  1301. }
  1302. } else {
  1303. if (Z_ISREF_P(arg) &&
  1304. !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
  1305. /* don't separate references for __call */
  1306. arg = Z_REFVAL_P(arg);
  1307. }
  1308. }
  1309. ZVAL_COPY(param, arg);
  1310. ZEND_CALL_NUM_ARGS(EX(call))++;
  1311. arg_num++;
  1312. param++;
  1313. } ZEND_HASH_FOREACH_END();
  1314. }
  1315. FREE_OP(free_op2);
  1316. } else {
  1317. zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht));
  1318. arg_num = 1;
  1319. param = ZEND_CALL_ARG(EX(call), 1);
  1320. ZEND_HASH_FOREACH_VAL(ht, arg) {
  1321. if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  1322. if (UNEXPECTED(!Z_ISREF_P(arg))) {
  1323. if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  1324. /* By-value send is not allowed -- emit a warning,
  1325. * but still perform the call. */
  1326. zend_param_must_be_ref(EX(call)->func, arg_num);
  1327. }
  1328. }
  1329. } else {
  1330. if (Z_ISREF_P(arg) &&
  1331. !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
  1332. /* don't separate references for __call */
  1333. arg = Z_REFVAL_P(arg);
  1334. }
  1335. }
  1336. ZVAL_COPY(param, arg);
  1337. ZEND_CALL_NUM_ARGS(EX(call))++;
  1338. arg_num++;
  1339. param++;
  1340. } ZEND_HASH_FOREACH_END();
  1341. }
  1342. }
  1343. FREE_OP(free_op1);
  1344. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  1345. }
  1346. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1347. {
  1348. USE_OPLINE
  1349. ZVAL_LONG(EX_VAR(opline->result.var), EG(error_reporting));
  1350. if (EG(error_reporting)) {
  1351. do {
  1352. EG(error_reporting) = 0;
  1353. if (!EG(error_reporting_ini_entry)) {
  1354. zval *zv = zend_hash_find_ex(EG(ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), 1);
  1355. if (zv) {
  1356. EG(error_reporting_ini_entry) = (zend_ini_entry *)Z_PTR_P(zv);
  1357. } else {
  1358. break;
  1359. }
  1360. }
  1361. if (!EG(error_reporting_ini_entry)->modified) {
  1362. if (!EG(modified_ini_directives)) {
  1363. ALLOC_HASHTABLE(EG(modified_ini_directives));
  1364. zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
  1365. }
  1366. if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), EG(error_reporting_ini_entry)) != NULL)) {
  1367. EG(error_reporting_ini_entry)->orig_value = EG(error_reporting_ini_entry)->value;
  1368. EG(error_reporting_ini_entry)->orig_modifiable = EG(error_reporting_ini_entry)->modifiable;
  1369. EG(error_reporting_ini_entry)->modified = 1;
  1370. }
  1371. }
  1372. } while (0);
  1373. }
  1374. ZEND_VM_NEXT_OPCODE();
  1375. }
  1376. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1377. {
  1378. USE_OPLINE
  1379. if (!EG(no_extensions)) {
  1380. SAVE_OPLINE();
  1381. zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, execute_data);
  1382. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  1383. }
  1384. ZEND_VM_NEXT_OPCODE();
  1385. }
  1386. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1387. {
  1388. USE_OPLINE
  1389. if (!EG(no_extensions)) {
  1390. SAVE_OPLINE();
  1391. zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, execute_data);
  1392. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  1393. }
  1394. ZEND_VM_NEXT_OPCODE();
  1395. }
  1396. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1397. {
  1398. USE_OPLINE
  1399. if (!EG(no_extensions)) {
  1400. SAVE_OPLINE();
  1401. zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, execute_data);
  1402. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  1403. }
  1404. ZEND_VM_NEXT_OPCODE();
  1405. }
  1406. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1407. {
  1408. zval *zv;
  1409. zend_class_entry *ce;
  1410. USE_OPLINE
  1411. SAVE_OPLINE();
  1412. zv = zend_hash_find_ex(EG(class_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1);
  1413. ZEND_ASSERT(zv != NULL);
  1414. ce = Z_CE_P(zv);
  1415. Z_CE_P(EX_VAR(opline->result.var)) = ce;
  1416. if (ce->ce_flags & ZEND_ACC_ANON_BOUND) {
  1417. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  1418. ZEND_VM_CONTINUE();
  1419. }
  1420. if (!(ce->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_IMPLEMENT_INTERFACES|ZEND_ACC_IMPLEMENT_TRAITS))) {
  1421. zend_verify_abstract_class(ce);
  1422. }
  1423. ce->ce_flags |= ZEND_ACC_ANON_BOUND;
  1424. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  1425. }
  1426. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1427. {
  1428. USE_OPLINE
  1429. SAVE_OPLINE();
  1430. do_bind_function(&EX(func)->op_array, opline, EG(function_table), 0);
  1431. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  1432. }
  1433. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1434. {
  1435. USE_OPLINE
  1436. if ((uint32_t)++EG(ticks_count) >= opline->extended_value) {
  1437. EG(ticks_count) = 0;
  1438. if (zend_ticks_function) {
  1439. SAVE_OPLINE();
  1440. zend_ticks_function(opline->extended_value);
  1441. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  1442. }
  1443. }
  1444. ZEND_VM_NEXT_OPCODE();
  1445. }
  1446. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1447. {
  1448. USE_OPLINE
  1449. ZEND_VM_NEXT_OPCODE();
  1450. }
  1451. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1452. {
  1453. USE_OPLINE
  1454. ZEND_VM_NEXT_OPCODE();
  1455. }
  1456. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_TRAIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1457. {
  1458. USE_OPLINE
  1459. zend_class_entry *ce = Z_CE_P(EX_VAR(opline->op1.var));
  1460. zend_class_entry *trait;
  1461. SAVE_OPLINE();
  1462. trait = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)),
  1463. RT_CONSTANT(opline, opline->op2) + 1,
  1464. ZEND_FETCH_CLASS_TRAIT);
  1465. if (UNEXPECTED(trait == NULL)) {
  1466. ZEND_ASSERT(EG(exception));
  1467. HANDLE_EXCEPTION();
  1468. }
  1469. if (!(trait->ce_flags & ZEND_ACC_TRAIT)) {
  1470. zend_error_noreturn(E_ERROR, "%s cannot use %s - it is not a trait", ZSTR_VAL(ce->name), ZSTR_VAL(trait->name));
  1471. }
  1472. zend_do_implement_trait(ce, trait);
  1473. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  1474. }
  1475. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_TRAITS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1476. {
  1477. USE_OPLINE
  1478. zend_class_entry *ce = Z_CE_P(EX_VAR(opline->op1.var));
  1479. SAVE_OPLINE();
  1480. zend_do_bind_traits(ce);
  1481. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  1482. }
  1483. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_dispatch_try_catch_finally_helper_SPEC(uint32_t try_catch_offset, uint32_t op_num ZEND_OPCODE_HANDLER_ARGS_DC)
  1484. {
  1485. /* May be NULL during generator closing (only finally blocks are executed) */
  1486. zend_object *ex = EG(exception);
  1487. /* Walk try/catch/finally structures upwards, performing the necessary actions */
  1488. while (try_catch_offset != (uint32_t) -1) {
  1489. zend_try_catch_element *try_catch =
  1490. &EX(func)->op_array.try_catch_array[try_catch_offset];
  1491. if (op_num < try_catch->catch_op && ex) {
  1492. /* Go to catch block */
  1493. cleanup_live_vars(execute_data, op_num, try_catch->catch_op);
  1494. ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->catch_op], 0);
  1495. } else if (op_num < try_catch->finally_op) {
  1496. /* Go to finally block */
  1497. zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
  1498. cleanup_live_vars(execute_data, op_num, try_catch->finally_op);
  1499. Z_OBJ_P(fast_call) = EG(exception);
  1500. EG(exception) = NULL;
  1501. Z_OPLINE_NUM_P(fast_call) = (uint32_t)-1;
  1502. ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->finally_op], 0);
  1503. } else if (op_num < try_catch->finally_end) {
  1504. zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
  1505. /* cleanup incomplete RETURN statement */
  1506. if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
  1507. && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
  1508. zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);
  1509. zval_ptr_dtor(return_value);
  1510. }
  1511. /* Chain potential exception from wrapping finally block */
  1512. if (Z_OBJ_P(fast_call)) {
  1513. if (ex) {
  1514. zend_exception_set_previous(ex, Z_OBJ_P(fast_call));
  1515. } else {
  1516. EG(exception) = Z_OBJ_P(fast_call);
  1517. }
  1518. ex = Z_OBJ_P(fast_call);
  1519. }
  1520. }
  1521. try_catch_offset--;
  1522. }
  1523. /* Uncaught exception */
  1524. cleanup_live_vars(execute_data, op_num, 0);
  1525. if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
  1526. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  1527. zend_generator_close(generator, 1);
  1528. ZEND_VM_RETURN();
  1529. } else {
  1530. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  1531. }
  1532. }
  1533. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1534. {
  1535. const zend_op *throw_op = EG(opline_before_exception);
  1536. uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes;
  1537. int i, current_try_catch_offset = -1;
  1538. if ((throw_op->opcode == ZEND_FREE || throw_op->opcode == ZEND_FE_FREE)
  1539. && throw_op->extended_value & ZEND_FREE_ON_RETURN) {
  1540. /* exceptions thrown because of loop var destruction on return/break/...
  1541. * are logically thrown at the end of the foreach loop, so adjust the
  1542. * throw_op_num.
  1543. */
  1544. const zend_live_range *range = find_live_range(
  1545. &EX(func)->op_array, throw_op_num, throw_op->op1.var);
  1546. throw_op_num = range->end;
  1547. }
  1548. /* Find the innermost try/catch/finally the exception was thrown in */
  1549. for (i = 0; i < EX(func)->op_array.last_try_catch; i++) {
  1550. zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[i];
  1551. if (try_catch->try_op > throw_op_num) {
  1552. /* further blocks will not be relevant... */
  1553. break;
  1554. }
  1555. if (throw_op_num < try_catch->catch_op || throw_op_num < try_catch->finally_end) {
  1556. current_try_catch_offset = i;
  1557. }
  1558. }
  1559. cleanup_unfinished_calls(execute_data, throw_op_num);
  1560. if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) {
  1561. switch (throw_op->opcode) {
  1562. case ZEND_ADD_ARRAY_ELEMENT:
  1563. case ZEND_ROPE_INIT:
  1564. case ZEND_ROPE_ADD:
  1565. break; /* exception while building structures, live range handling will free those */
  1566. case ZEND_FETCH_CLASS:
  1567. case ZEND_DECLARE_CLASS:
  1568. case ZEND_DECLARE_INHERITED_CLASS:
  1569. case ZEND_DECLARE_ANON_CLASS:
  1570. case ZEND_DECLARE_ANON_INHERITED_CLASS:
  1571. break; /* return value is zend_class_entry pointer */
  1572. default:
  1573. zval_ptr_dtor_nogc(EX_VAR(throw_op->result.var));
  1574. }
  1575. }
  1576. ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, throw_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  1577. }
  1578. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1579. {
  1580. USE_OPLINE
  1581. SAVE_OPLINE();
  1582. zend_verify_abstract_class(Z_CE_P(EX_VAR(opline->op1.var)));
  1583. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  1584. }
  1585. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1586. {
  1587. USE_OPLINE
  1588. int ret;
  1589. SAVE_OPLINE();
  1590. ret = zend_user_opcode_handlers[opline->opcode](execute_data);
  1591. opline = EX(opline);
  1592. switch (ret) {
  1593. case ZEND_USER_OPCODE_CONTINUE:
  1594. ZEND_VM_CONTINUE();
  1595. case ZEND_USER_OPCODE_RETURN:
  1596. if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
  1597. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  1598. zend_generator_close(generator, 1);
  1599. ZEND_VM_RETURN();
  1600. } else {
  1601. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  1602. }
  1603. case ZEND_USER_OPCODE_ENTER:
  1604. ZEND_VM_ENTER();
  1605. case ZEND_USER_OPCODE_LEAVE:
  1606. ZEND_VM_LEAVE();
  1607. case ZEND_USER_OPCODE_DISPATCH:
  1608. ZEND_VM_DISPATCH(opline->opcode, opline);
  1609. default:
  1610. ZEND_VM_DISPATCH((zend_uchar)(ret & 0xff), opline);
  1611. }
  1612. }
  1613. static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  1614. {
  1615. USE_OPLINE
  1616. SAVE_OPLINE();
  1617. zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
  1618. FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var);
  1619. FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
  1620. UNDEF_RESULT();
  1621. HANDLE_EXCEPTION();
  1622. }
  1623. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1624. {
  1625. USE_OPLINE
  1626. zval *fast_call = EX_VAR(opline->op1.var);
  1627. SAVE_OPLINE();
  1628. /* cleanup incomplete RETURN statement */
  1629. if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
  1630. && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
  1631. zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);
  1632. zval_ptr_dtor(return_value);
  1633. }
  1634. /* cleanup delayed exception */
  1635. if (Z_OBJ_P(fast_call) != NULL) {
  1636. /* discard the previously thrown exception */
  1637. OBJ_RELEASE(Z_OBJ_P(fast_call));
  1638. Z_OBJ_P(fast_call) = NULL;
  1639. }
  1640. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  1641. }
  1642. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1643. {
  1644. USE_OPLINE
  1645. zval *fast_call = EX_VAR(opline->result.var);
  1646. Z_OBJ_P(fast_call) = NULL;
  1647. /* set return address */
  1648. Z_OPLINE_NUM_P(fast_call) = opline - EX(func)->op_array.opcodes;
  1649. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
  1650. }
  1651. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1652. {
  1653. USE_OPLINE
  1654. zval *fast_call = EX_VAR(opline->op1.var);
  1655. uint32_t current_try_catch_offset, current_op_num;
  1656. if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1) {
  1657. const zend_op *fast_ret = EX(func)->op_array.opcodes + Z_OPLINE_NUM_P(fast_call);
  1658. ZEND_VM_JMP_EX(fast_ret + 1, 0);
  1659. }
  1660. /* special case for unhandled exceptions */
  1661. EG(exception) = Z_OBJ_P(fast_call);
  1662. Z_OBJ_P(fast_call) = NULL;
  1663. current_try_catch_offset = opline->op2.num;
  1664. current_op_num = opline - EX(func)->op_array.opcodes;
  1665. ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, current_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  1666. }
  1667. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1668. {
  1669. USE_OPLINE
  1670. if (EG(assertions) <= 0) {
  1671. zend_op *target = OP_JMP_ADDR(opline, opline->op2);
  1672. if (RETURN_VALUE_USED(opline)) {
  1673. ZVAL_TRUE(EX_VAR(opline->result.var));
  1674. }
  1675. ZEND_VM_JMP_EX(target, 0);
  1676. } else {
  1677. ZEND_VM_NEXT_OPCODE();
  1678. }
  1679. }
  1680. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1681. {
  1682. zend_array *args;
  1683. zend_function *fbc = EX(func);
  1684. zval *ret = EX(return_value);
  1685. uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS);
  1686. uint32_t num_args = EX_NUM_ARGS();
  1687. zend_execute_data *call;
  1688. SAVE_OPLINE();
  1689. if (num_args) {
  1690. zval *p = ZEND_CALL_ARG(execute_data, 1);
  1691. zval *end = p + num_args;
  1692. args = zend_new_array(num_args);
  1693. zend_hash_real_init_packed(args);
  1694. ZEND_HASH_FILL_PACKED(args) {
  1695. do {
  1696. ZEND_HASH_FILL_ADD(p);
  1697. p++;
  1698. } while (p != end);
  1699. } ZEND_HASH_FILL_END();
  1700. }
  1701. call = execute_data;
  1702. execute_data = EG(current_execute_data) = EX(prev_execute_data);
  1703. call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
  1704. ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
  1705. ZEND_CALL_NUM_ARGS(call) = 2;
  1706. ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);
  1707. if (num_args) {
  1708. ZVAL_ARR(ZEND_CALL_ARG(call, 2), args);
  1709. } else {
  1710. ZVAL_EMPTY_ARRAY(ZEND_CALL_ARG(call, 2));
  1711. }
  1712. zend_free_trampoline(fbc);
  1713. fbc = call->func;
  1714. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
  1715. if (UNEXPECTED(!fbc->op_array.run_time_cache)) {
  1716. init_func_run_time_cache(&fbc->op_array);
  1717. }
  1718. execute_data = call;
  1719. i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
  1720. if (EXPECTED(zend_execute_ex == execute_ex)) {
  1721. LOAD_OPLINE();
  1722. ZEND_VM_ENTER_EX();
  1723. } else {
  1724. execute_data = EX(prev_execute_data);
  1725. LOAD_OPLINE();
  1726. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  1727. zend_execute_ex(call);
  1728. }
  1729. } else {
  1730. zval retval;
  1731. ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
  1732. EG(current_execute_data) = call;
  1733. if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
  1734. && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
  1735. zend_vm_stack_free_call_frame(call);
  1736. if (ret) {
  1737. ZVAL_UNDEF(ret);
  1738. }
  1739. goto call_trampoline_end;
  1740. }
  1741. if (ret == NULL) {
  1742. ZVAL_NULL(&retval);
  1743. ret = &retval;
  1744. }
  1745. if (!zend_execute_internal) {
  1746. /* saves one function call if zend_execute_internal is not used */
  1747. fbc->internal_function.handler(call, ret);
  1748. } else {
  1749. zend_execute_internal(call, ret);
  1750. }
  1751. #if ZEND_DEBUG
  1752. if (!EG(exception) && call->func) {
  1753. ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
  1754. zend_verify_internal_return_type(call->func, ret));
  1755. ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  1756. ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
  1757. }
  1758. #endif
  1759. EG(current_execute_data) = call->prev_execute_data;
  1760. zend_vm_stack_free_args(call);
  1761. if (ret == &retval) {
  1762. zval_ptr_dtor(ret);
  1763. }
  1764. }
  1765. call_trampoline_end:
  1766. execute_data = EG(current_execute_data);
  1767. if (!EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
  1768. ZEND_VM_RETURN();
  1769. }
  1770. if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
  1771. zend_object *object = Z_OBJ(call->This);
  1772. OBJ_RELEASE(object);
  1773. }
  1774. zend_vm_stack_free_call_frame(call);
  1775. if (UNEXPECTED(EG(exception) != NULL)) {
  1776. zend_rethrow_exception(execute_data);
  1777. HANDLE_EXCEPTION_LEAVE();
  1778. }
  1779. LOAD_OPLINE();
  1780. ZEND_VM_INC_OPCODE();
  1781. ZEND_VM_LEAVE();
  1782. }
  1783. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1784. {
  1785. USE_OPLINE
  1786. OPLINE = OP_JMP_ADDR(opline, opline->op1);
  1787. ZEND_VM_CONTINUE();
  1788. }
  1789. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
  1790. {
  1791. EG(vm_interrupt) = 0;
  1792. SAVE_OPLINE();
  1793. if (EG(timed_out)) {
  1794. zend_timeout(0);
  1795. } else if (zend_interrupt_function) {
  1796. zend_interrupt_function(execute_data);
  1797. ZEND_VM_ENTER();
  1798. }
  1799. ZEND_VM_CONTINUE();
  1800. }
  1801. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1802. {
  1803. USE_OPLINE
  1804. zend_function *fbc;
  1805. zval *function_name, *func;
  1806. zend_execute_data *call;
  1807. fbc = CACHED_PTR(opline->result.num);
  1808. if (UNEXPECTED(fbc == NULL)) {
  1809. function_name = (zval*)RT_CONSTANT(opline, opline->op2);
  1810. func = zend_hash_find_ex(EG(function_table), Z_STR_P(function_name+1), 1);
  1811. if (UNEXPECTED(func == NULL)) {
  1812. ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(function_name ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  1813. }
  1814. fbc = Z_FUNC_P(func);
  1815. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  1816. fbc = init_func_run_time_cache_ex(func);
  1817. }
  1818. CACHE_PTR(opline->result.num, fbc);
  1819. }
  1820. call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  1821. fbc, opline->extended_value, NULL, NULL);
  1822. call->prev_execute_data = EX(call);
  1823. EX(call) = call;
  1824. ZEND_VM_NEXT_OPCODE();
  1825. }
  1826. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1827. {
  1828. USE_OPLINE
  1829. zval *function_name;
  1830. zend_execute_data *call;
  1831. SAVE_OPLINE();
  1832. function_name = RT_CONSTANT(opline, opline->op2);
  1833. try_function_name:
  1834. if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  1835. call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
  1836. } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
  1837. call = zend_init_dynamic_call_object(function_name, opline->extended_value);
  1838. } else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
  1839. call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
  1840. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
  1841. function_name = Z_REFVAL_P(function_name);
  1842. goto try_function_name;
  1843. } else {
  1844. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  1845. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  1846. if (UNEXPECTED(EG(exception) != NULL)) {
  1847. HANDLE_EXCEPTION();
  1848. }
  1849. }
  1850. zend_throw_error(NULL, "Function name must be a string");
  1851. call = NULL;
  1852. }
  1853. if (UNEXPECTED(!call)) {
  1854. HANDLE_EXCEPTION();
  1855. }
  1856. if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
  1857. if (UNEXPECTED(EG(exception))) {
  1858. if (call) {
  1859. if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
  1860. zend_string_release_ex(call->func->common.function_name, 0);
  1861. zend_free_trampoline(call->func);
  1862. }
  1863. zend_vm_stack_free_call_frame(call);
  1864. }
  1865. HANDLE_EXCEPTION();
  1866. }
  1867. }
  1868. call->prev_execute_data = EX(call);
  1869. EX(call) = call;
  1870. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  1871. }
  1872. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1873. {
  1874. USE_OPLINE
  1875. zval *func_name;
  1876. zval *func;
  1877. zend_function *fbc;
  1878. zend_execute_data *call;
  1879. fbc = CACHED_PTR(opline->result.num);
  1880. if (UNEXPECTED(fbc == NULL)) {
  1881. func_name = (zval *)RT_CONSTANT(opline, opline->op2);
  1882. func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name + 1), 1);
  1883. if (func == NULL) {
  1884. func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name + 2), 1);
  1885. if (UNEXPECTED(func == NULL)) {
  1886. ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(func_name ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  1887. }
  1888. }
  1889. fbc = Z_FUNC_P(func);
  1890. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  1891. fbc = init_func_run_time_cache_ex(func);
  1892. }
  1893. CACHE_PTR(opline->result.num, fbc);
  1894. }
  1895. call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  1896. fbc, opline->extended_value, NULL, NULL);
  1897. call->prev_execute_data = EX(call);
  1898. EX(call) = call;
  1899. ZEND_VM_NEXT_OPCODE();
  1900. }
  1901. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1902. {
  1903. USE_OPLINE
  1904. zval *fname;
  1905. zval *func;
  1906. zend_function *fbc;
  1907. zend_execute_data *call;
  1908. fbc = CACHED_PTR(opline->result.num);
  1909. if (UNEXPECTED(fbc == NULL)) {
  1910. fname = RT_CONSTANT(opline, opline->op2);
  1911. func = zend_hash_find_ex(EG(function_table), Z_STR_P(fname), 1);
  1912. if (UNEXPECTED(func == NULL)) {
  1913. ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(fname ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  1914. }
  1915. fbc = Z_FUNC_P(func);
  1916. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  1917. fbc = init_func_run_time_cache_ex(func);
  1918. }
  1919. CACHE_PTR(opline->result.num, fbc);
  1920. }
  1921. call = zend_vm_stack_push_call_frame_ex(
  1922. opline->op1.num, ZEND_CALL_NESTED_FUNCTION,
  1923. fbc, opline->extended_value, NULL, NULL);
  1924. call->prev_execute_data = EX(call);
  1925. EX(call) = call;
  1926. ZEND_VM_NEXT_OPCODE();
  1927. }
  1928. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1929. {
  1930. USE_OPLINE
  1931. uint32_t arg_num;
  1932. zval *param;
  1933. ZEND_VM_REPEATABLE_OPCODE
  1934. arg_num = opline->op1.num;
  1935. param = EX_VAR(opline->result.var);
  1936. if (arg_num > EX_NUM_ARGS()) {
  1937. zval *default_value = RT_CONSTANT(opline, opline->op2);
  1938. if (Z_OPT_TYPE_P(default_value) == IS_CONSTANT_AST) {
  1939. zval *cache_val = (zval*)CACHE_ADDR(Z_CACHE_SLOT_P(default_value));
  1940. /* we keep in cache only not refcounted values */
  1941. if (Z_TYPE_P(cache_val) != IS_UNDEF) {
  1942. ZVAL_COPY_VALUE(param, cache_val);
  1943. } else {
  1944. SAVE_OPLINE();
  1945. ZVAL_COPY(param, default_value);
  1946. if (UNEXPECTED(zval_update_constant_ex(param, EX(func)->op_array.scope) != SUCCESS)) {
  1947. zval_ptr_dtor_nogc(param);
  1948. ZVAL_UNDEF(param);
  1949. HANDLE_EXCEPTION();
  1950. }
  1951. if (!Z_REFCOUNTED_P(param)) {
  1952. ZVAL_COPY_VALUE(cache_val, param);
  1953. }
  1954. }
  1955. } else {
  1956. ZVAL_COPY(param, default_value);
  1957. }
  1958. }
  1959. if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
  1960. zval *default_value = RT_CONSTANT(opline, opline->op2);
  1961. SAVE_OPLINE();
  1962. if (UNEXPECTED(!zend_verify_arg_type(EX(func), arg_num, param, default_value, CACHE_ADDR(opline->extended_value)) || EG(exception))) {
  1963. HANDLE_EXCEPTION();
  1964. }
  1965. }
  1966. ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
  1967. ZEND_VM_NEXT_OPCODE();
  1968. }
  1969. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1970. {
  1971. USE_OPLINE
  1972. zend_class_entry *ce = Z_CE_P(EX_VAR(opline->op1.var));
  1973. zend_class_entry *iface;
  1974. SAVE_OPLINE();
  1975. iface = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_INTERFACE);
  1976. if (UNEXPECTED(iface == NULL)) {
  1977. ZEND_ASSERT(EG(exception));
  1978. HANDLE_EXCEPTION();
  1979. }
  1980. if (UNEXPECTED((iface->ce_flags & ZEND_ACC_INTERFACE) == 0)) {
  1981. zend_error_noreturn(E_ERROR, "%s cannot implement %s - it is not an interface", ZSTR_VAL(ce->name), ZSTR_VAL(iface->name));
  1982. }
  1983. zend_do_implement_interface(ce, iface);
  1984. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  1985. }
  1986. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  1987. {
  1988. USE_OPLINE
  1989. zend_free_op free_op2;
  1990. zval *function_name;
  1991. zend_execute_data *call;
  1992. SAVE_OPLINE();
  1993. function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  1994. try_function_name:
  1995. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  1996. call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
  1997. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
  1998. call = zend_init_dynamic_call_object(function_name, opline->extended_value);
  1999. } else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
  2000. call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
  2001. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
  2002. function_name = Z_REFVAL_P(function_name);
  2003. goto try_function_name;
  2004. } else {
  2005. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  2006. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  2007. if (UNEXPECTED(EG(exception) != NULL)) {
  2008. HANDLE_EXCEPTION();
  2009. }
  2010. }
  2011. zend_throw_error(NULL, "Function name must be a string");
  2012. call = NULL;
  2013. }
  2014. zval_ptr_dtor_nogc(free_op2);
  2015. if (UNEXPECTED(!call)) {
  2016. HANDLE_EXCEPTION();
  2017. }
  2018. if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
  2019. if (UNEXPECTED(EG(exception))) {
  2020. if (call) {
  2021. if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
  2022. zend_string_release_ex(call->func->common.function_name, 0);
  2023. zend_free_trampoline(call->func);
  2024. }
  2025. zend_vm_stack_free_call_frame(call);
  2026. }
  2027. HANDLE_EXCEPTION();
  2028. }
  2029. }
  2030. call->prev_execute_data = EX(call);
  2031. EX(call) = call;
  2032. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2033. }
  2034. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2035. {
  2036. USE_OPLINE
  2037. uint32_t arg_num = opline->op1.num;
  2038. if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
  2039. SAVE_OPLINE();
  2040. zend_missing_arg_error(execute_data);
  2041. HANDLE_EXCEPTION();
  2042. } else if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
  2043. zval *param = EX_VAR(opline->result.var);
  2044. SAVE_OPLINE();
  2045. if (UNEXPECTED(!zend_verify_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num)) || EG(exception))) {
  2046. HANDLE_EXCEPTION();
  2047. }
  2048. }
  2049. ZEND_VM_NEXT_OPCODE();
  2050. }
  2051. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2052. {
  2053. USE_OPLINE
  2054. uint32_t arg_num = opline->op1.num;
  2055. uint32_t arg_count = EX_NUM_ARGS();
  2056. zval *params;
  2057. SAVE_OPLINE();
  2058. params = EX_VAR(opline->result.var);
  2059. if (arg_num <= arg_count) {
  2060. zval *param;
  2061. array_init_size(params, arg_count - arg_num + 1);
  2062. zend_hash_real_init_packed(Z_ARRVAL_P(params));
  2063. ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
  2064. param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
  2065. if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
  2066. ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_FREE_EXTRA_ARGS);
  2067. do {
  2068. zend_verify_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num));
  2069. if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
  2070. ZEND_HASH_FILL_ADD(param);
  2071. param++;
  2072. } while (++arg_num <= arg_count);
  2073. } else {
  2074. do {
  2075. if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
  2076. ZEND_HASH_FILL_ADD(param);
  2077. param++;
  2078. } while (++arg_num <= arg_count);
  2079. }
  2080. } ZEND_HASH_FILL_END();
  2081. } else {
  2082. ZVAL_EMPTY_ARRAY(params);
  2083. }
  2084. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2085. }
  2086. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2087. {
  2088. USE_OPLINE
  2089. zval *function_name;
  2090. zend_execute_data *call;
  2091. SAVE_OPLINE();
  2092. function_name = EX_VAR(opline->op2.var);
  2093. try_function_name:
  2094. if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  2095. call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
  2096. } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
  2097. call = zend_init_dynamic_call_object(function_name, opline->extended_value);
  2098. } else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
  2099. call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
  2100. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
  2101. function_name = Z_REFVAL_P(function_name);
  2102. goto try_function_name;
  2103. } else {
  2104. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  2105. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  2106. if (UNEXPECTED(EG(exception) != NULL)) {
  2107. HANDLE_EXCEPTION();
  2108. }
  2109. }
  2110. zend_throw_error(NULL, "Function name must be a string");
  2111. call = NULL;
  2112. }
  2113. if (UNEXPECTED(!call)) {
  2114. HANDLE_EXCEPTION();
  2115. }
  2116. if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
  2117. if (UNEXPECTED(EG(exception))) {
  2118. if (call) {
  2119. if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
  2120. zend_string_release_ex(call->func->common.function_name, 0);
  2121. zend_free_trampoline(call->func);
  2122. }
  2123. zend_vm_stack_free_call_frame(call);
  2124. }
  2125. HANDLE_EXCEPTION();
  2126. }
  2127. }
  2128. call->prev_execute_data = EX(call);
  2129. EX(call) = call;
  2130. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2131. }
  2132. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2133. {
  2134. USE_OPLINE
  2135. zval *op1;
  2136. op1 = RT_CONSTANT(opline, opline->op1);
  2137. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  2138. ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
  2139. ZEND_VM_NEXT_OPCODE();
  2140. }
  2141. SAVE_OPLINE();
  2142. bitwise_not_function(EX_VAR(opline->result.var),
  2143. RT_CONSTANT(opline, opline->op1));
  2144. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2145. }
  2146. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2147. {
  2148. USE_OPLINE
  2149. zval *val;
  2150. val = RT_CONSTANT(opline, opline->op1);
  2151. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  2152. ZVAL_FALSE(EX_VAR(opline->result.var));
  2153. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  2154. /* The result and op1 can be the same cv zval */
  2155. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  2156. ZVAL_TRUE(EX_VAR(opline->result.var));
  2157. if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  2158. SAVE_OPLINE();
  2159. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  2160. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2161. }
  2162. } else {
  2163. SAVE_OPLINE();
  2164. ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
  2165. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2166. }
  2167. ZEND_VM_NEXT_OPCODE();
  2168. }
  2169. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2170. {
  2171. USE_OPLINE
  2172. zval *z;
  2173. SAVE_OPLINE();
  2174. z = RT_CONSTANT(opline, opline->op1);
  2175. if (Z_TYPE_P(z) == IS_STRING) {
  2176. zend_string *str = Z_STR_P(z);
  2177. if (ZSTR_LEN(str) != 0) {
  2178. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  2179. }
  2180. } else {
  2181. zend_string *str = zval_get_string_func(z);
  2182. if (ZSTR_LEN(str) != 0) {
  2183. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  2184. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
  2185. GET_OP1_UNDEF_CV(z, BP_VAR_R);
  2186. }
  2187. zend_string_release_ex(str, 0);
  2188. }
  2189. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2190. }
  2191. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2192. {
  2193. USE_OPLINE
  2194. zval *val;
  2195. val = RT_CONSTANT(opline, opline->op1);
  2196. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  2197. ZEND_VM_NEXT_OPCODE();
  2198. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  2199. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  2200. SAVE_OPLINE();
  2201. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  2202. if (UNEXPECTED(EG(exception))) {
  2203. HANDLE_EXCEPTION();
  2204. }
  2205. }
  2206. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  2207. }
  2208. SAVE_OPLINE();
  2209. if (i_zend_is_true(val)) {
  2210. opline++;
  2211. } else {
  2212. opline = OP_JMP_ADDR(opline, opline->op2);
  2213. }
  2214. ZEND_VM_JMP(opline);
  2215. }
  2216. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2217. {
  2218. USE_OPLINE
  2219. zval *val;
  2220. val = RT_CONSTANT(opline, opline->op1);
  2221. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  2222. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  2223. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  2224. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  2225. SAVE_OPLINE();
  2226. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  2227. if (UNEXPECTED(EG(exception))) {
  2228. HANDLE_EXCEPTION();
  2229. }
  2230. }
  2231. ZEND_VM_NEXT_OPCODE();
  2232. }
  2233. SAVE_OPLINE();
  2234. if (i_zend_is_true(val)) {
  2235. opline = OP_JMP_ADDR(opline, opline->op2);
  2236. } else {
  2237. opline++;
  2238. }
  2239. ZEND_VM_JMP(opline);
  2240. }
  2241. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2242. {
  2243. USE_OPLINE
  2244. zval *val;
  2245. val = RT_CONSTANT(opline, opline->op1);
  2246. if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
  2247. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  2248. ZEND_VM_CONTINUE();
  2249. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  2250. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  2251. SAVE_OPLINE();
  2252. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  2253. if (UNEXPECTED(EG(exception))) {
  2254. HANDLE_EXCEPTION();
  2255. }
  2256. }
  2257. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  2258. }
  2259. SAVE_OPLINE();
  2260. if (i_zend_is_true(val)) {
  2261. opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
  2262. } else {
  2263. opline = OP_JMP_ADDR(opline, opline->op2);
  2264. }
  2265. ZEND_VM_JMP(opline);
  2266. }
  2267. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2268. {
  2269. USE_OPLINE
  2270. zval *val;
  2271. int ret;
  2272. val = RT_CONSTANT(opline, opline->op1);
  2273. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  2274. ZVAL_TRUE(EX_VAR(opline->result.var));
  2275. ZEND_VM_NEXT_OPCODE();
  2276. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  2277. ZVAL_FALSE(EX_VAR(opline->result.var));
  2278. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  2279. SAVE_OPLINE();
  2280. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  2281. if (UNEXPECTED(EG(exception))) {
  2282. HANDLE_EXCEPTION();
  2283. }
  2284. }
  2285. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  2286. }
  2287. SAVE_OPLINE();
  2288. ret = i_zend_is_true(val);
  2289. if (ret) {
  2290. ZVAL_TRUE(EX_VAR(opline->result.var));
  2291. opline++;
  2292. } else {
  2293. ZVAL_FALSE(EX_VAR(opline->result.var));
  2294. opline = OP_JMP_ADDR(opline, opline->op2);
  2295. }
  2296. ZEND_VM_JMP(opline);
  2297. }
  2298. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2299. {
  2300. USE_OPLINE
  2301. zval *val;
  2302. int ret;
  2303. val = RT_CONSTANT(opline, opline->op1);
  2304. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  2305. ZVAL_TRUE(EX_VAR(opline->result.var));
  2306. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  2307. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  2308. ZVAL_FALSE(EX_VAR(opline->result.var));
  2309. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  2310. SAVE_OPLINE();
  2311. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  2312. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2313. } else {
  2314. ZEND_VM_NEXT_OPCODE();
  2315. }
  2316. }
  2317. SAVE_OPLINE();
  2318. ret = i_zend_is_true(val);
  2319. if (ret) {
  2320. ZVAL_TRUE(EX_VAR(opline->result.var));
  2321. opline = OP_JMP_ADDR(opline, opline->op2);
  2322. } else {
  2323. ZVAL_FALSE(EX_VAR(opline->result.var));
  2324. opline++;
  2325. }
  2326. ZEND_VM_JMP(opline);
  2327. }
  2328. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2329. {
  2330. USE_OPLINE
  2331. zval *retval_ptr;
  2332. zval *return_value;
  2333. zend_free_op free_op1;
  2334. retval_ptr = RT_CONSTANT(opline, opline->op1);
  2335. return_value = EX(return_value);
  2336. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  2337. SAVE_OPLINE();
  2338. retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R);
  2339. if (return_value) {
  2340. ZVAL_NULL(return_value);
  2341. }
  2342. } else if (!return_value) {
  2343. if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
  2344. if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
  2345. SAVE_OPLINE();
  2346. rc_dtor_func(Z_COUNTED_P(free_op1));
  2347. }
  2348. }
  2349. } else {
  2350. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  2351. ZVAL_COPY_VALUE(return_value, retval_ptr);
  2352. if (IS_CONST == IS_CONST) {
  2353. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  2354. Z_ADDREF_P(return_value);
  2355. }
  2356. }
  2357. } else if (IS_CONST == IS_CV) {
  2358. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  2359. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  2360. ZVAL_COPY_VALUE(return_value, retval_ptr);
  2361. if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
  2362. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  2363. if (GC_MAY_LEAK(ref)) {
  2364. gc_possible_root(ref);
  2365. }
  2366. ZVAL_NULL(retval_ptr);
  2367. } else {
  2368. Z_ADDREF_P(return_value);
  2369. }
  2370. } else {
  2371. retval_ptr = Z_REFVAL_P(retval_ptr);
  2372. ZVAL_COPY(return_value, retval_ptr);
  2373. }
  2374. } else {
  2375. ZVAL_COPY_VALUE(return_value, retval_ptr);
  2376. }
  2377. } else /* if (IS_CONST == IS_VAR) */ {
  2378. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  2379. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  2380. retval_ptr = Z_REFVAL_P(retval_ptr);
  2381. ZVAL_COPY_VALUE(return_value, retval_ptr);
  2382. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  2383. efree_size(ref, sizeof(zend_reference));
  2384. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  2385. Z_ADDREF_P(retval_ptr);
  2386. }
  2387. } else {
  2388. ZVAL_COPY_VALUE(return_value, retval_ptr);
  2389. }
  2390. }
  2391. }
  2392. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  2393. }
  2394. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2395. {
  2396. USE_OPLINE
  2397. zval *retval_ptr;
  2398. SAVE_OPLINE();
  2399. do {
  2400. if ((IS_CONST & (IS_CONST|IS_TMP_VAR)) ||
  2401. (IS_CONST == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
  2402. /* Not supposed to happen, but we'll allow it */
  2403. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  2404. retval_ptr = RT_CONSTANT(opline, opline->op1);
  2405. if (!EX(return_value)) {
  2406. } else {
  2407. if (IS_CONST == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  2408. ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
  2409. break;
  2410. }
  2411. ZVAL_NEW_REF(EX(return_value), retval_ptr);
  2412. if (IS_CONST == IS_CONST) {
  2413. Z_TRY_ADDREF_P(retval_ptr);
  2414. }
  2415. }
  2416. break;
  2417. }
  2418. retval_ptr = NULL;
  2419. if (IS_CONST == IS_VAR) {
  2420. if (retval_ptr == &EG(uninitialized_zval) ||
  2421. (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr))) {
  2422. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  2423. if (EX(return_value)) {
  2424. ZVAL_NEW_REF(EX(return_value), retval_ptr);
  2425. } else {
  2426. }
  2427. break;
  2428. }
  2429. }
  2430. if (EX(return_value)) {
  2431. if (Z_ISREF_P(retval_ptr)) {
  2432. Z_ADDREF_P(retval_ptr);
  2433. } else {
  2434. ZVAL_MAKE_REF_EX(retval_ptr, 2);
  2435. }
  2436. ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
  2437. }
  2438. } while (0);
  2439. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  2440. }
  2441. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2442. {
  2443. USE_OPLINE
  2444. zval *retval;
  2445. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  2446. SAVE_OPLINE();
  2447. retval = RT_CONSTANT(opline, opline->op1);
  2448. /* Copy return value into generator->retval */
  2449. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  2450. ZVAL_COPY_VALUE(&generator->retval, retval);
  2451. if (IS_CONST == IS_CONST) {
  2452. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
  2453. Z_ADDREF(generator->retval);
  2454. }
  2455. }
  2456. } else if (IS_CONST == IS_CV) {
  2457. ZVAL_COPY_DEREF(&generator->retval, retval);
  2458. } else /* if (IS_CONST == IS_VAR) */ {
  2459. if (UNEXPECTED(Z_ISREF_P(retval))) {
  2460. zend_refcounted *ref = Z_COUNTED_P(retval);
  2461. retval = Z_REFVAL_P(retval);
  2462. ZVAL_COPY_VALUE(&generator->retval, retval);
  2463. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  2464. efree_size(ref, sizeof(zend_reference));
  2465. } else if (Z_OPT_REFCOUNTED_P(retval)) {
  2466. Z_ADDREF_P(retval);
  2467. }
  2468. } else {
  2469. ZVAL_COPY_VALUE(&generator->retval, retval);
  2470. }
  2471. }
  2472. /* Close the generator to free up resources */
  2473. zend_generator_close(generator, 1);
  2474. /* Pass execution back to handling code */
  2475. ZEND_VM_RETURN();
  2476. }
  2477. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2478. {
  2479. USE_OPLINE
  2480. zval *value;
  2481. SAVE_OPLINE();
  2482. value = RT_CONSTANT(opline, opline->op1);
  2483. do {
  2484. if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
  2485. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  2486. value = Z_REFVAL_P(value);
  2487. if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
  2488. break;
  2489. }
  2490. }
  2491. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  2492. GET_OP1_UNDEF_CV(value, BP_VAR_R);
  2493. if (UNEXPECTED(EG(exception) != NULL)) {
  2494. HANDLE_EXCEPTION();
  2495. }
  2496. }
  2497. zend_throw_error(NULL, "Can only throw objects");
  2498. HANDLE_EXCEPTION();
  2499. }
  2500. } while (0);
  2501. zend_exception_save();
  2502. if (IS_CONST != IS_TMP_VAR) {
  2503. Z_TRY_ADDREF_P(value);
  2504. }
  2505. zend_throw_exception_object(value);
  2506. zend_exception_restore();
  2507. HANDLE_EXCEPTION();
  2508. }
  2509. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2510. {
  2511. USE_OPLINE
  2512. zend_class_entry *ce, *catch_ce;
  2513. zend_object *exception;
  2514. zval *ex;
  2515. SAVE_OPLINE();
  2516. /* Check whether an exception has been thrown, if not, jump over code */
  2517. zend_exception_restore();
  2518. if (EG(exception) == NULL) {
  2519. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  2520. }
  2521. catch_ce = CACHED_PTR(opline->extended_value & ~ZEND_LAST_CATCH);
  2522. if (UNEXPECTED(catch_ce == NULL)) {
  2523. catch_ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
  2524. CACHE_PTR(opline->extended_value & ~ZEND_LAST_CATCH, catch_ce);
  2525. }
  2526. ce = EG(exception)->ce;
  2527. #ifdef HAVE_DTRACE
  2528. if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) {
  2529. DTRACE_EXCEPTION_CAUGHT((char *)ce->name);
  2530. }
  2531. #endif /* HAVE_DTRACE */
  2532. if (ce != catch_ce) {
  2533. if (!catch_ce || !instanceof_function(ce, catch_ce)) {
  2534. if (opline->extended_value & ZEND_LAST_CATCH) {
  2535. zend_rethrow_exception(execute_data);
  2536. HANDLE_EXCEPTION();
  2537. }
  2538. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  2539. }
  2540. }
  2541. exception = EG(exception);
  2542. ex = EX_VAR(opline->result.var);
  2543. if (UNEXPECTED(Z_ISREF_P(ex))) {
  2544. ex = Z_REFVAL_P(ex);
  2545. }
  2546. zval_ptr_dtor(ex);
  2547. ZVAL_OBJ(ex, EG(exception));
  2548. if (UNEXPECTED(EG(exception) != exception)) {
  2549. GC_ADDREF(EG(exception));
  2550. HANDLE_EXCEPTION();
  2551. } else {
  2552. EG(exception) = NULL;
  2553. ZEND_VM_NEXT_OPCODE();
  2554. }
  2555. }
  2556. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2557. {
  2558. USE_OPLINE
  2559. zval *value, *arg;
  2560. value = RT_CONSTANT(opline, opline->op1);
  2561. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  2562. ZVAL_COPY_VALUE(arg, value);
  2563. if (IS_CONST == IS_CONST) {
  2564. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  2565. Z_ADDREF_P(arg);
  2566. }
  2567. }
  2568. ZEND_VM_NEXT_OPCODE();
  2569. }
  2570. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2571. {
  2572. USE_OPLINE
  2573. zval *value, *arg;
  2574. uint32_t arg_num = opline->op2.num;
  2575. if (EXPECTED(0)) {
  2576. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  2577. goto send_val_by_ref;
  2578. }
  2579. } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  2580. send_val_by_ref:
  2581. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  2582. }
  2583. value = RT_CONSTANT(opline, opline->op1);
  2584. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  2585. ZVAL_COPY_VALUE(arg, value);
  2586. if (IS_CONST == IS_CONST) {
  2587. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  2588. Z_ADDREF_P(arg);
  2589. }
  2590. }
  2591. ZEND_VM_NEXT_OPCODE();
  2592. }
  2593. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2594. {
  2595. USE_OPLINE
  2596. zval *value, *arg;
  2597. uint32_t arg_num = opline->op2.num;
  2598. if (EXPECTED(1)) {
  2599. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  2600. goto send_val_by_ref;
  2601. }
  2602. } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  2603. send_val_by_ref:
  2604. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  2605. }
  2606. value = RT_CONSTANT(opline, opline->op1);
  2607. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  2608. ZVAL_COPY_VALUE(arg, value);
  2609. if (IS_CONST == IS_CONST) {
  2610. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  2611. Z_ADDREF_P(arg);
  2612. }
  2613. }
  2614. ZEND_VM_NEXT_OPCODE();
  2615. }
  2616. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2617. {
  2618. USE_OPLINE
  2619. zval *arg, *param;
  2620. SAVE_OPLINE();
  2621. arg = RT_CONSTANT(opline, opline->op1);
  2622. param = ZEND_CALL_VAR(EX(call), opline->result.var);
  2623. if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
  2624. zend_param_must_be_ref(EX(call)->func, opline->op2.num);
  2625. }
  2626. ZVAL_COPY(param, arg);
  2627. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2628. }
  2629. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2630. {
  2631. USE_OPLINE
  2632. zval *val;
  2633. val = RT_CONSTANT(opline, opline->op1);
  2634. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  2635. ZVAL_TRUE(EX_VAR(opline->result.var));
  2636. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  2637. /* The result and op1 can be the same cv zval */
  2638. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  2639. ZVAL_FALSE(EX_VAR(opline->result.var));
  2640. if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  2641. SAVE_OPLINE();
  2642. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  2643. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2644. }
  2645. } else {
  2646. SAVE_OPLINE();
  2647. ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
  2648. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2649. }
  2650. ZEND_VM_NEXT_OPCODE();
  2651. }
  2652. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2653. {
  2654. USE_OPLINE
  2655. zval *obj;
  2656. zend_class_entry *ce, *scope;
  2657. zend_function *clone;
  2658. zend_object_clone_obj_t clone_call;
  2659. SAVE_OPLINE();
  2660. obj = RT_CONSTANT(opline, opline->op1);
  2661. if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
  2662. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  2663. }
  2664. do {
  2665. if (IS_CONST == IS_CONST ||
  2666. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
  2667. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
  2668. obj = Z_REFVAL_P(obj);
  2669. if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
  2670. break;
  2671. }
  2672. }
  2673. ZVAL_UNDEF(EX_VAR(opline->result.var));
  2674. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
  2675. GET_OP1_UNDEF_CV(obj, BP_VAR_R);
  2676. if (UNEXPECTED(EG(exception) != NULL)) {
  2677. HANDLE_EXCEPTION();
  2678. }
  2679. }
  2680. zend_throw_error(NULL, "__clone method called on non-object");
  2681. HANDLE_EXCEPTION();
  2682. }
  2683. } while (0);
  2684. ce = Z_OBJCE_P(obj);
  2685. clone = ce->clone;
  2686. clone_call = Z_OBJ_HT_P(obj)->clone_obj;
  2687. if (UNEXPECTED(clone_call == NULL)) {
  2688. zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
  2689. ZVAL_UNDEF(EX_VAR(opline->result.var));
  2690. HANDLE_EXCEPTION();
  2691. }
  2692. if (clone) {
  2693. if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
  2694. /* Ensure that if we're calling a private function, we're allowed to do so.
  2695. */
  2696. scope = EX(func)->op_array.scope;
  2697. if (!zend_check_private(clone, scope, clone->common.function_name)) {
  2698. zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
  2699. ZVAL_UNDEF(EX_VAR(opline->result.var));
  2700. HANDLE_EXCEPTION();
  2701. }
  2702. } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
  2703. /* Ensure that if we're calling a protected function, we're allowed to do so.
  2704. */
  2705. scope = EX(func)->op_array.scope;
  2706. if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
  2707. zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
  2708. ZVAL_UNDEF(EX_VAR(opline->result.var));
  2709. HANDLE_EXCEPTION();
  2710. }
  2711. }
  2712. }
  2713. ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
  2714. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2715. }
  2716. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2717. {
  2718. USE_OPLINE
  2719. zval *expr;
  2720. zval *result = EX_VAR(opline->result.var);
  2721. HashTable *ht;
  2722. SAVE_OPLINE();
  2723. expr = RT_CONSTANT(opline, opline->op1);
  2724. switch (opline->extended_value) {
  2725. case IS_NULL:
  2726. ZVAL_NULL(result);
  2727. break;
  2728. case _IS_BOOL:
  2729. ZVAL_BOOL(result, zend_is_true(expr));
  2730. break;
  2731. case IS_LONG:
  2732. ZVAL_LONG(result, zval_get_long(expr));
  2733. break;
  2734. case IS_DOUBLE:
  2735. ZVAL_DOUBLE(result, zval_get_double(expr));
  2736. break;
  2737. case IS_STRING:
  2738. ZVAL_STR(result, zval_get_string(expr));
  2739. break;
  2740. default:
  2741. if (IS_CONST & (IS_VAR|IS_CV)) {
  2742. ZVAL_DEREF(expr);
  2743. }
  2744. /* If value is already of correct type, return it directly */
  2745. if (Z_TYPE_P(expr) == opline->extended_value) {
  2746. ZVAL_COPY_VALUE(result, expr);
  2747. if (IS_CONST == IS_CONST) {
  2748. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  2749. } else if (IS_CONST != IS_TMP_VAR) {
  2750. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  2751. }
  2752. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2753. }
  2754. if (opline->extended_value == IS_ARRAY) {
  2755. if (IS_CONST == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
  2756. if (Z_TYPE_P(expr) != IS_NULL) {
  2757. ZVAL_ARR(result, zend_new_array(1));
  2758. expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
  2759. if (IS_CONST == IS_CONST) {
  2760. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  2761. } else {
  2762. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  2763. }
  2764. } else {
  2765. ZVAL_EMPTY_ARRAY(result);
  2766. }
  2767. } else if (Z_OBJ_HT_P(expr)->get_properties) {
  2768. HashTable *obj_ht = Z_OBJ_HT_P(expr)->get_properties(expr);
  2769. if (obj_ht) {
  2770. /* fast copy */
  2771. obj_ht = zend_proptable_to_symtable(obj_ht,
  2772. (Z_OBJCE_P(expr)->default_properties_count ||
  2773. Z_OBJ_P(expr)->handlers != &std_object_handlers ||
  2774. GC_IS_RECURSIVE(obj_ht)));
  2775. ZVAL_ARR(result, obj_ht);
  2776. } else {
  2777. ZVAL_EMPTY_ARRAY(result);
  2778. }
  2779. } else {
  2780. ZVAL_COPY_VALUE(result, expr);
  2781. Z_ADDREF_P(result);
  2782. convert_to_array(result);
  2783. }
  2784. } else {
  2785. ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
  2786. if (Z_TYPE_P(expr) == IS_ARRAY) {
  2787. ht = zend_symtable_to_proptable(Z_ARR_P(expr));
  2788. if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
  2789. /* TODO: try not to duplicate immutable arrays as well ??? */
  2790. ht = zend_array_dup(ht);
  2791. }
  2792. Z_OBJ_P(result)->properties = ht;
  2793. } else if (Z_TYPE_P(expr) != IS_NULL) {
  2794. Z_OBJ_P(result)->properties = ht = zend_new_array(1);
  2795. expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
  2796. if (IS_CONST == IS_CONST) {
  2797. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  2798. } else {
  2799. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  2800. }
  2801. }
  2802. }
  2803. }
  2804. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2805. }
  2806. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2807. {
  2808. USE_OPLINE
  2809. zend_op_array *new_op_array;
  2810. zval *inc_filename;
  2811. SAVE_OPLINE();
  2812. inc_filename = RT_CONSTANT(opline, opline->op1);
  2813. new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
  2814. if (UNEXPECTED(EG(exception) != NULL)) {
  2815. if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
  2816. destroy_op_array(new_op_array);
  2817. efree_size(new_op_array, sizeof(zend_op_array));
  2818. }
  2819. UNDEF_RESULT();
  2820. HANDLE_EXCEPTION();
  2821. } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
  2822. if (RETURN_VALUE_USED(opline)) {
  2823. ZVAL_TRUE(EX_VAR(opline->result.var));
  2824. }
  2825. } else if (EXPECTED(new_op_array != NULL)) {
  2826. zval *return_value = NULL;
  2827. zend_execute_data *call;
  2828. if (RETURN_VALUE_USED(opline)) {
  2829. return_value = EX_VAR(opline->result.var);
  2830. ZVAL_NULL(return_value);
  2831. }
  2832. new_op_array->scope = EX(func)->op_array.scope;
  2833. call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
  2834. (zend_function*)new_op_array, 0,
  2835. Z_TYPE(EX(This)) != IS_OBJECT ? Z_CE(EX(This)) : NULL,
  2836. Z_TYPE(EX(This)) == IS_OBJECT ? Z_OBJ(EX(This)) : NULL);
  2837. if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
  2838. call->symbol_table = EX(symbol_table);
  2839. } else {
  2840. call->symbol_table = zend_rebuild_symbol_table();
  2841. }
  2842. call->prev_execute_data = execute_data;
  2843. i_init_code_execute_data(call, new_op_array, return_value);
  2844. if (EXPECTED(zend_execute_ex == execute_ex)) {
  2845. ZEND_VM_ENTER();
  2846. } else {
  2847. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  2848. zend_execute_ex(call);
  2849. zend_vm_stack_free_call_frame(call);
  2850. }
  2851. destroy_op_array(new_op_array);
  2852. efree_size(new_op_array, sizeof(zend_op_array));
  2853. if (UNEXPECTED(EG(exception) != NULL)) {
  2854. zend_rethrow_exception(execute_data);
  2855. UNDEF_RESULT();
  2856. HANDLE_EXCEPTION();
  2857. }
  2858. } else if (RETURN_VALUE_USED(opline)) {
  2859. ZVAL_FALSE(EX_VAR(opline->result.var));
  2860. }
  2861. ZEND_VM_NEXT_OPCODE();
  2862. }
  2863. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2864. {
  2865. USE_OPLINE
  2866. zval *array_ptr, *result;
  2867. SAVE_OPLINE();
  2868. array_ptr = RT_CONSTANT(opline, opline->op1);
  2869. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  2870. result = EX_VAR(opline->result.var);
  2871. ZVAL_COPY_VALUE(result, array_ptr);
  2872. if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
  2873. Z_ADDREF_P(array_ptr);
  2874. }
  2875. Z_FE_POS_P(result) = 0;
  2876. ZEND_VM_NEXT_OPCODE();
  2877. } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  2878. if (!Z_OBJCE_P(array_ptr)->get_iterator) {
  2879. result = EX_VAR(opline->result.var);
  2880. ZVAL_COPY_VALUE(result, array_ptr);
  2881. if (IS_CONST != IS_TMP_VAR) {
  2882. Z_ADDREF_P(array_ptr);
  2883. }
  2884. if (Z_OBJ_P(array_ptr)->properties
  2885. && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
  2886. if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
  2887. GC_DELREF(Z_OBJ_P(array_ptr)->properties);
  2888. }
  2889. Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
  2890. }
  2891. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
  2892. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2893. } else {
  2894. zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
  2895. if (UNEXPECTED(EG(exception))) {
  2896. HANDLE_EXCEPTION();
  2897. } else if (is_empty) {
  2898. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  2899. } else {
  2900. ZEND_VM_NEXT_OPCODE();
  2901. }
  2902. }
  2903. } else {
  2904. zend_error(E_WARNING, "Invalid argument supplied for foreach()");
  2905. ZVAL_UNDEF(EX_VAR(opline->result.var));
  2906. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  2907. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  2908. }
  2909. }
  2910. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2911. {
  2912. USE_OPLINE
  2913. zval *array_ptr, *array_ref;
  2914. SAVE_OPLINE();
  2915. if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
  2916. array_ref = array_ptr = NULL;
  2917. if (Z_ISREF_P(array_ref)) {
  2918. array_ptr = Z_REFVAL_P(array_ref);
  2919. }
  2920. } else {
  2921. array_ref = array_ptr = RT_CONSTANT(opline, opline->op1);
  2922. }
  2923. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  2924. if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
  2925. if (array_ptr == array_ref) {
  2926. ZVAL_NEW_REF(array_ref, array_ref);
  2927. array_ptr = Z_REFVAL_P(array_ref);
  2928. }
  2929. Z_ADDREF_P(array_ref);
  2930. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  2931. } else {
  2932. array_ref = EX_VAR(opline->result.var);
  2933. ZVAL_NEW_REF(array_ref, array_ptr);
  2934. array_ptr = Z_REFVAL_P(array_ref);
  2935. }
  2936. if (IS_CONST == IS_CONST) {
  2937. ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
  2938. } else {
  2939. SEPARATE_ARRAY(array_ptr);
  2940. }
  2941. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
  2942. if (IS_CONST == IS_VAR) {
  2943. }
  2944. ZEND_VM_NEXT_OPCODE();
  2945. } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  2946. if (!Z_OBJCE_P(array_ptr)->get_iterator) {
  2947. if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
  2948. if (array_ptr == array_ref) {
  2949. ZVAL_NEW_REF(array_ref, array_ref);
  2950. array_ptr = Z_REFVAL_P(array_ref);
  2951. }
  2952. Z_ADDREF_P(array_ref);
  2953. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  2954. } else {
  2955. array_ptr = EX_VAR(opline->result.var);
  2956. ZVAL_COPY_VALUE(array_ptr, array_ref);
  2957. }
  2958. if (Z_OBJ_P(array_ptr)->properties
  2959. && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
  2960. if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
  2961. GC_DELREF(Z_OBJ_P(array_ptr)->properties);
  2962. }
  2963. Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
  2964. }
  2965. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
  2966. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  2967. } else {
  2968. zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
  2969. if (IS_CONST == IS_VAR) {
  2970. } else {
  2971. }
  2972. if (UNEXPECTED(EG(exception))) {
  2973. HANDLE_EXCEPTION();
  2974. } else if (is_empty) {
  2975. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  2976. } else {
  2977. ZEND_VM_NEXT_OPCODE();
  2978. }
  2979. }
  2980. } else {
  2981. zend_error(E_WARNING, "Invalid argument supplied for foreach()");
  2982. ZVAL_UNDEF(EX_VAR(opline->result.var));
  2983. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  2984. if (IS_CONST == IS_VAR) {
  2985. } else {
  2986. }
  2987. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  2988. }
  2989. }
  2990. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  2991. {
  2992. USE_OPLINE
  2993. SAVE_OPLINE();
  2994. if (IS_CONST != IS_UNUSED) {
  2995. zval *ptr = RT_CONSTANT(opline, opline->op1);
  2996. do {
  2997. if (Z_TYPE_P(ptr) == IS_LONG) {
  2998. EG(exit_status) = Z_LVAL_P(ptr);
  2999. } else {
  3000. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
  3001. ptr = Z_REFVAL_P(ptr);
  3002. if (Z_TYPE_P(ptr) == IS_LONG) {
  3003. EG(exit_status) = Z_LVAL_P(ptr);
  3004. break;
  3005. }
  3006. }
  3007. zend_print_zval(ptr, 0);
  3008. }
  3009. } while (0);
  3010. }
  3011. zend_bailout();
  3012. ZEND_VM_NEXT_OPCODE(); /* Never reached */
  3013. }
  3014. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3015. {
  3016. USE_OPLINE
  3017. zval *value;
  3018. zval *ref = NULL;
  3019. int ret;
  3020. SAVE_OPLINE();
  3021. value = RT_CONSTANT(opline, opline->op1);
  3022. if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) {
  3023. if (IS_CONST == IS_VAR) {
  3024. ref = value;
  3025. }
  3026. value = Z_REFVAL_P(value);
  3027. }
  3028. ret = i_zend_is_true(value);
  3029. if (UNEXPECTED(EG(exception))) {
  3030. ZVAL_UNDEF(EX_VAR(opline->result.var));
  3031. HANDLE_EXCEPTION();
  3032. }
  3033. if (ret) {
  3034. zval *result = EX_VAR(opline->result.var);
  3035. ZVAL_COPY_VALUE(result, value);
  3036. if (IS_CONST == IS_CONST) {
  3037. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  3038. } else if (IS_CONST == IS_CV) {
  3039. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  3040. } else if (IS_CONST == IS_VAR && ref) {
  3041. zend_reference *r = Z_REF_P(ref);
  3042. if (UNEXPECTED(GC_DELREF(r) == 0)) {
  3043. efree_size(r, sizeof(zend_reference));
  3044. } else if (Z_OPT_REFCOUNTED_P(result)) {
  3045. Z_ADDREF_P(result);
  3046. }
  3047. }
  3048. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  3049. }
  3050. ZEND_VM_NEXT_OPCODE();
  3051. }
  3052. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3053. {
  3054. USE_OPLINE
  3055. zval *value;
  3056. zval *ref = NULL;
  3057. SAVE_OPLINE();
  3058. value = RT_CONSTANT(opline, opline->op1);
  3059. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  3060. if (IS_CONST & IS_VAR) {
  3061. ref = value;
  3062. }
  3063. value = Z_REFVAL_P(value);
  3064. }
  3065. if (Z_TYPE_P(value) > IS_NULL) {
  3066. zval *result = EX_VAR(opline->result.var);
  3067. ZVAL_COPY_VALUE(result, value);
  3068. if (IS_CONST == IS_CONST) {
  3069. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  3070. } else if (IS_CONST == IS_CV) {
  3071. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  3072. } else if ((IS_CONST & IS_VAR) && ref) {
  3073. zend_reference *r = Z_REF_P(ref);
  3074. if (UNEXPECTED(GC_DELREF(r) == 0)) {
  3075. efree_size(r, sizeof(zend_reference));
  3076. } else if (Z_OPT_REFCOUNTED_P(result)) {
  3077. Z_ADDREF_P(result);
  3078. }
  3079. }
  3080. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  3081. }
  3082. ZEND_VM_NEXT_OPCODE();
  3083. }
  3084. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3085. {
  3086. USE_OPLINE
  3087. zval *value;
  3088. zval *result = EX_VAR(opline->result.var);
  3089. value = RT_CONSTANT(opline, opline->op1);
  3090. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  3091. SAVE_OPLINE();
  3092. GET_OP1_UNDEF_CV(value, BP_VAR_R);
  3093. ZVAL_NULL(result);
  3094. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3095. }
  3096. if (IS_CONST == IS_CV) {
  3097. ZVAL_COPY_DEREF(result, value);
  3098. } else if (IS_CONST == IS_VAR) {
  3099. if (UNEXPECTED(Z_ISREF_P(value))) {
  3100. ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
  3101. if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
  3102. efree_size(Z_REF_P(value), sizeof(zend_reference));
  3103. } else if (Z_OPT_REFCOUNTED_P(result)) {
  3104. Z_ADDREF_P(result);
  3105. }
  3106. } else {
  3107. ZVAL_COPY_VALUE(result, value);
  3108. }
  3109. } else {
  3110. ZVAL_COPY_VALUE(result, value);
  3111. if (IS_CONST == IS_CONST) {
  3112. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
  3113. Z_ADDREF_P(result);
  3114. }
  3115. }
  3116. }
  3117. ZEND_VM_NEXT_OPCODE();
  3118. }
  3119. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3120. {
  3121. USE_OPLINE
  3122. SAVE_OPLINE();
  3123. Z_CE_P(EX_VAR(opline->result.var)) = do_bind_class(&EX(func)->op_array, opline, EG(class_table), 0);
  3124. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3125. }
  3126. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3127. {
  3128. USE_OPLINE
  3129. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  3130. zval *val;
  3131. SAVE_OPLINE();
  3132. val = RT_CONSTANT(opline, opline->op1);
  3133. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  3134. zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
  3135. UNDEF_RESULT();
  3136. HANDLE_EXCEPTION();
  3137. }
  3138. if (Z_TYPE_P(val) == IS_ARRAY) {
  3139. ZVAL_COPY_VALUE(&generator->values, val);
  3140. if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
  3141. Z_ADDREF_P(val);
  3142. }
  3143. Z_FE_POS(generator->values) = 0;
  3144. } else if (IS_CONST != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
  3145. zend_class_entry *ce = Z_OBJCE_P(val);
  3146. if (ce == zend_ce_generator) {
  3147. zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
  3148. if (IS_CONST != IS_TMP_VAR) {
  3149. Z_ADDREF_P(val);
  3150. }
  3151. if (Z_ISUNDEF(new_gen->retval)) {
  3152. if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
  3153. zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
  3154. zval_ptr_dtor(val);
  3155. UNDEF_RESULT();
  3156. HANDLE_EXCEPTION();
  3157. } else {
  3158. zend_generator_yield_from(generator, new_gen);
  3159. }
  3160. } else if (UNEXPECTED(new_gen->execute_data == NULL)) {
  3161. zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
  3162. zval_ptr_dtor(val);
  3163. UNDEF_RESULT();
  3164. HANDLE_EXCEPTION();
  3165. } else {
  3166. if (RETURN_VALUE_USED(opline)) {
  3167. ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
  3168. }
  3169. ZEND_VM_NEXT_OPCODE();
  3170. }
  3171. } else {
  3172. zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
  3173. if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
  3174. if (!EG(exception)) {
  3175. zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
  3176. }
  3177. UNDEF_RESULT();
  3178. HANDLE_EXCEPTION();
  3179. }
  3180. iter->index = 0;
  3181. if (iter->funcs->rewind) {
  3182. iter->funcs->rewind(iter);
  3183. if (UNEXPECTED(EG(exception) != NULL)) {
  3184. OBJ_RELEASE(&iter->std);
  3185. UNDEF_RESULT();
  3186. HANDLE_EXCEPTION();
  3187. }
  3188. }
  3189. ZVAL_OBJ(&generator->values, &iter->std);
  3190. }
  3191. } else {
  3192. zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
  3193. UNDEF_RESULT();
  3194. HANDLE_EXCEPTION();
  3195. }
  3196. /* This is the default return value
  3197. * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
  3198. if (RETURN_VALUE_USED(opline)) {
  3199. ZVAL_NULL(EX_VAR(opline->result.var));
  3200. }
  3201. /* This generator has no send target (though the generator we delegate to might have one) */
  3202. generator->send_target = NULL;
  3203. /* We increment to the next op, so we are at the correct position when the
  3204. * generator is resumed. */
  3205. ZEND_VM_INC_OPCODE();
  3206. /* The GOTO VM uses a local opline variable. We need to set the opline
  3207. * variable in execute_data so we don't resume at an old position. */
  3208. SAVE_OPLINE();
  3209. ZEND_VM_RETURN();
  3210. }
  3211. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3212. {
  3213. USE_OPLINE
  3214. zval *value;
  3215. value = RT_CONSTANT(opline, opline->op1);
  3216. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  3217. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  3218. ZEND_VM_NEXT_OPCODE();
  3219. } else {
  3220. zend_bool strict;
  3221. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
  3222. value = Z_REFVAL_P(value);
  3223. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  3224. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  3225. ZEND_VM_NEXT_OPCODE();
  3226. }
  3227. }
  3228. SAVE_OPLINE();
  3229. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  3230. value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
  3231. }
  3232. strict = EX_USES_STRICT_TYPES();
  3233. do {
  3234. if (EXPECTED(!strict)) {
  3235. zend_string *str;
  3236. zval tmp;
  3237. ZVAL_COPY(&tmp, value);
  3238. if (zend_parse_arg_str_weak(&tmp, &str)) {
  3239. ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
  3240. zval_ptr_dtor(&tmp);
  3241. break;
  3242. }
  3243. zval_ptr_dtor(&tmp);
  3244. }
  3245. zend_internal_type_error(strict, "strlen() expects parameter 1 to be string, %s given", zend_get_type_by_const(Z_TYPE_P(value)));
  3246. ZVAL_NULL(EX_VAR(opline->result.var));
  3247. } while (0);
  3248. }
  3249. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3250. }
  3251. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3252. {
  3253. USE_OPLINE
  3254. zval *value;
  3255. int result = 0;
  3256. value = RT_CONSTANT(opline, opline->op1);
  3257. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  3258. type_check_resource:
  3259. if (EXPECTED(Z_TYPE_P(value) != IS_RESOURCE)
  3260. || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
  3261. result = 1;
  3262. }
  3263. } else if ((IS_CONST & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
  3264. value = Z_REFVAL_P(value);
  3265. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  3266. goto type_check_resource;
  3267. }
  3268. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  3269. result = ((1 << IS_NULL) & opline->extended_value) != 0;
  3270. SAVE_OPLINE();
  3271. GET_OP1_UNDEF_CV(value, BP_VAR_R);
  3272. ZEND_VM_SMART_BRANCH(result, 1);
  3273. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  3274. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3275. }
  3276. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  3277. SAVE_OPLINE();
  3278. ZEND_VM_SMART_BRANCH(result, 1);
  3279. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  3280. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3281. } else {
  3282. ZEND_VM_SMART_BRANCH(result, 0);
  3283. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  3284. ZEND_VM_NEXT_OPCODE();
  3285. }
  3286. }
  3287. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3288. {
  3289. USE_OPLINE
  3290. zend_constant *c;
  3291. int result;
  3292. c = CACHED_PTR(opline->extended_value);
  3293. do {
  3294. if (EXPECTED(c != NULL)) {
  3295. if (!IS_SPECIAL_CACHE_VAL(c)) {
  3296. result = 1;
  3297. break;
  3298. } else if (EXPECTED(zend_hash_num_elements(EG(zend_constants)) == DECODE_SPECIAL_CACHE_NUM(c))) {
  3299. result = 0;
  3300. break;
  3301. }
  3302. }
  3303. if (zend_quick_check_constant(RT_CONSTANT(opline, opline->op1) OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
  3304. CACHE_PTR(opline->extended_value, ENCODE_SPECIAL_CACHE_NUM(zend_hash_num_elements(EG(zend_constants))));
  3305. result = 0;
  3306. } else {
  3307. result = 1;
  3308. }
  3309. } while (0);
  3310. ZEND_VM_SMART_BRANCH(result, 0);
  3311. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  3312. ZEND_VM_NEXT_OPCODE();
  3313. }
  3314. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3315. {
  3316. USE_OPLINE
  3317. zval *value;
  3318. value = RT_CONSTANT(opline, opline->op1);
  3319. ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
  3320. ZEND_VM_NEXT_OPCODE();
  3321. }
  3322. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3323. {
  3324. USE_OPLINE
  3325. zval *value;
  3326. value = RT_CONSTANT(opline, opline->op1);
  3327. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
  3328. ZEND_VM_NEXT_OPCODE();
  3329. }
  3330. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3331. {
  3332. USE_OPLINE
  3333. zval *value, *arg;
  3334. value = RT_CONSTANT(opline, opline->op1);
  3335. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  3336. ZVAL_COPY_VALUE(arg, value);
  3337. ZEND_VM_NEXT_OPCODE();
  3338. }
  3339. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3340. {
  3341. USE_OPLINE
  3342. zval *value, *arg;
  3343. uint32_t arg_num = opline->op2.num;
  3344. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  3345. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3346. }
  3347. value = RT_CONSTANT(opline, opline->op1);
  3348. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  3349. ZVAL_COPY_VALUE(arg, value);
  3350. ZEND_VM_NEXT_OPCODE();
  3351. }
  3352. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3353. {
  3354. USE_OPLINE
  3355. zval *op1, *op2, *result;
  3356. op1 = RT_CONSTANT(opline, opline->op1);
  3357. op2 = RT_CONSTANT(opline, opline->op2);
  3358. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  3359. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  3360. result = EX_VAR(opline->result.var);
  3361. fast_long_add_function(result, op1, op2);
  3362. ZEND_VM_NEXT_OPCODE();
  3363. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  3364. result = EX_VAR(opline->result.var);
  3365. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
  3366. ZEND_VM_NEXT_OPCODE();
  3367. }
  3368. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  3369. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  3370. result = EX_VAR(opline->result.var);
  3371. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
  3372. ZEND_VM_NEXT_OPCODE();
  3373. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  3374. result = EX_VAR(opline->result.var);
  3375. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
  3376. ZEND_VM_NEXT_OPCODE();
  3377. }
  3378. }
  3379. SAVE_OPLINE();
  3380. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  3381. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  3382. }
  3383. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  3384. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  3385. }
  3386. add_function(EX_VAR(opline->result.var), op1, op2);
  3387. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3388. }
  3389. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3390. {
  3391. USE_OPLINE
  3392. zval *op1, *op2, *result;
  3393. op1 = RT_CONSTANT(opline, opline->op1);
  3394. op2 = RT_CONSTANT(opline, opline->op2);
  3395. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  3396. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  3397. result = EX_VAR(opline->result.var);
  3398. fast_long_sub_function(result, op1, op2);
  3399. ZEND_VM_NEXT_OPCODE();
  3400. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  3401. result = EX_VAR(opline->result.var);
  3402. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
  3403. ZEND_VM_NEXT_OPCODE();
  3404. }
  3405. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  3406. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  3407. result = EX_VAR(opline->result.var);
  3408. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  3409. ZEND_VM_NEXT_OPCODE();
  3410. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  3411. result = EX_VAR(opline->result.var);
  3412. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
  3413. ZEND_VM_NEXT_OPCODE();
  3414. }
  3415. }
  3416. SAVE_OPLINE();
  3417. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  3418. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  3419. }
  3420. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  3421. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  3422. }
  3423. sub_function(EX_VAR(opline->result.var), op1, op2);
  3424. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3425. }
  3426. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3427. {
  3428. USE_OPLINE
  3429. zval *op1, *op2, *result;
  3430. op1 = RT_CONSTANT(opline, opline->op1);
  3431. op2 = RT_CONSTANT(opline, opline->op2);
  3432. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  3433. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  3434. zend_long overflow;
  3435. result = EX_VAR(opline->result.var);
  3436. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  3437. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  3438. ZEND_VM_NEXT_OPCODE();
  3439. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  3440. result = EX_VAR(opline->result.var);
  3441. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
  3442. ZEND_VM_NEXT_OPCODE();
  3443. }
  3444. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  3445. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  3446. result = EX_VAR(opline->result.var);
  3447. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
  3448. ZEND_VM_NEXT_OPCODE();
  3449. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  3450. result = EX_VAR(opline->result.var);
  3451. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
  3452. ZEND_VM_NEXT_OPCODE();
  3453. }
  3454. }
  3455. SAVE_OPLINE();
  3456. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  3457. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  3458. }
  3459. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  3460. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  3461. }
  3462. mul_function(EX_VAR(opline->result.var), op1, op2);
  3463. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3464. }
  3465. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3466. {
  3467. USE_OPLINE
  3468. zval *op1, *op2;
  3469. SAVE_OPLINE();
  3470. op1 = RT_CONSTANT(opline, opline->op1);
  3471. op2 = RT_CONSTANT(opline, opline->op2);
  3472. fast_div_function(EX_VAR(opline->result.var), op1, op2);
  3473. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3474. }
  3475. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3476. {
  3477. USE_OPLINE
  3478. zval *op1, *op2, *result;
  3479. op1 = RT_CONSTANT(opline, opline->op1);
  3480. op2 = RT_CONSTANT(opline, opline->op2);
  3481. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  3482. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  3483. result = EX_VAR(opline->result.var);
  3484. if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
  3485. ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  3486. } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
  3487. /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
  3488. ZVAL_LONG(result, 0);
  3489. } else {
  3490. ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
  3491. }
  3492. ZEND_VM_NEXT_OPCODE();
  3493. }
  3494. }
  3495. SAVE_OPLINE();
  3496. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  3497. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  3498. }
  3499. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  3500. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  3501. }
  3502. mod_function(EX_VAR(opline->result.var), op1, op2);
  3503. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3504. }
  3505. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3506. {
  3507. USE_OPLINE
  3508. zval *op1, *op2;
  3509. op1 = RT_CONSTANT(opline, opline->op1);
  3510. op2 = RT_CONSTANT(opline, opline->op2);
  3511. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  3512. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  3513. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  3514. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
  3515. ZEND_VM_NEXT_OPCODE();
  3516. }
  3517. SAVE_OPLINE();
  3518. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  3519. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  3520. }
  3521. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  3522. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  3523. }
  3524. shift_left_function(EX_VAR(opline->result.var), op1, op2);
  3525. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3526. }
  3527. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3528. {
  3529. USE_OPLINE
  3530. zval *op1, *op2;
  3531. op1 = RT_CONSTANT(opline, opline->op1);
  3532. op2 = RT_CONSTANT(opline, opline->op2);
  3533. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  3534. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  3535. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  3536. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
  3537. ZEND_VM_NEXT_OPCODE();
  3538. }
  3539. SAVE_OPLINE();
  3540. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  3541. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  3542. }
  3543. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  3544. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  3545. }
  3546. shift_right_function(EX_VAR(opline->result.var), op1, op2);
  3547. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3548. }
  3549. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3550. {
  3551. USE_OPLINE
  3552. zval *op1, *op2;
  3553. SAVE_OPLINE();
  3554. op1 = RT_CONSTANT(opline, opline->op1);
  3555. op2 = RT_CONSTANT(opline, opline->op2);
  3556. pow_function(EX_VAR(opline->result.var), op1, op2);
  3557. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3558. }
  3559. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3560. {
  3561. USE_OPLINE
  3562. zval *op1, *op2;
  3563. int result;
  3564. SAVE_OPLINE();
  3565. op1 = RT_CONSTANT(opline, opline->op1);
  3566. op2 = RT_CONSTANT(opline, opline->op2);
  3567. result = fast_is_identical_function(op1, op2);
  3568. ZEND_VM_SMART_BRANCH(result, 1);
  3569. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  3570. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3571. }
  3572. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3573. {
  3574. USE_OPLINE
  3575. zval *op1, *op2;
  3576. int result;
  3577. SAVE_OPLINE();
  3578. op1 = RT_CONSTANT(opline, opline->op1);
  3579. op2 = RT_CONSTANT(opline, opline->op2);
  3580. result = fast_is_not_identical_function(op1, op2);
  3581. ZEND_VM_SMART_BRANCH(result, 1);
  3582. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  3583. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3584. }
  3585. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3586. {
  3587. USE_OPLINE
  3588. zval *op1, *op2, *result;
  3589. op1 = RT_CONSTANT(opline, opline->op1);
  3590. op2 = RT_CONSTANT(opline, opline->op2);
  3591. do {
  3592. int result;
  3593. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  3594. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  3595. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  3596. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  3597. result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
  3598. } else {
  3599. break;
  3600. }
  3601. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  3602. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  3603. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  3604. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  3605. result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
  3606. } else {
  3607. break;
  3608. }
  3609. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  3610. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  3611. result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  3612. } else {
  3613. break;
  3614. }
  3615. } else {
  3616. break;
  3617. }
  3618. ZEND_VM_SMART_BRANCH(result, 0);
  3619. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  3620. ZEND_VM_NEXT_OPCODE();
  3621. } while (0);
  3622. SAVE_OPLINE();
  3623. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  3624. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  3625. }
  3626. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  3627. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  3628. }
  3629. result = EX_VAR(opline->result.var);
  3630. compare_function(result, op1, op2);
  3631. ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
  3632. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3633. }
  3634. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3635. {
  3636. USE_OPLINE
  3637. zval *op1, *op2, *result;
  3638. op1 = RT_CONSTANT(opline, opline->op1);
  3639. op2 = RT_CONSTANT(opline, opline->op2);
  3640. do {
  3641. int result;
  3642. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  3643. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  3644. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  3645. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  3646. result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
  3647. } else {
  3648. break;
  3649. }
  3650. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  3651. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  3652. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  3653. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  3654. result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
  3655. } else {
  3656. break;
  3657. }
  3658. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  3659. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  3660. result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  3661. } else {
  3662. break;
  3663. }
  3664. } else {
  3665. break;
  3666. }
  3667. ZEND_VM_SMART_BRANCH(result, 0);
  3668. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  3669. ZEND_VM_NEXT_OPCODE();
  3670. } while (0);
  3671. SAVE_OPLINE();
  3672. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  3673. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  3674. }
  3675. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  3676. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  3677. }
  3678. result = EX_VAR(opline->result.var);
  3679. compare_function(result, op1, op2);
  3680. ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
  3681. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3682. }
  3683. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3684. {
  3685. USE_OPLINE
  3686. zval *op1, *op2, *result;
  3687. op1 = RT_CONSTANT(opline, opline->op1);
  3688. op2 = RT_CONSTANT(opline, opline->op2);
  3689. do {
  3690. int result;
  3691. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  3692. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  3693. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  3694. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  3695. result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
  3696. } else {
  3697. break;
  3698. }
  3699. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  3700. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  3701. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  3702. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  3703. result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
  3704. } else {
  3705. break;
  3706. }
  3707. } else {
  3708. break;
  3709. }
  3710. ZEND_VM_SMART_BRANCH(result, 0);
  3711. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  3712. ZEND_VM_NEXT_OPCODE();
  3713. } while (0);
  3714. SAVE_OPLINE();
  3715. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  3716. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  3717. }
  3718. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  3719. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  3720. }
  3721. result = EX_VAR(opline->result.var);
  3722. compare_function(result, op1, op2);
  3723. ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
  3724. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3725. }
  3726. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3727. {
  3728. USE_OPLINE
  3729. zval *op1, *op2, *result;
  3730. op1 = RT_CONSTANT(opline, opline->op1);
  3731. op2 = RT_CONSTANT(opline, opline->op2);
  3732. do {
  3733. int result;
  3734. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  3735. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  3736. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  3737. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  3738. result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
  3739. } else {
  3740. break;
  3741. }
  3742. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  3743. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  3744. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  3745. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  3746. result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
  3747. } else {
  3748. break;
  3749. }
  3750. } else {
  3751. break;
  3752. }
  3753. ZEND_VM_SMART_BRANCH(result, 0);
  3754. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  3755. ZEND_VM_NEXT_OPCODE();
  3756. } while (0);
  3757. SAVE_OPLINE();
  3758. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  3759. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  3760. }
  3761. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  3762. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  3763. }
  3764. result = EX_VAR(opline->result.var);
  3765. compare_function(result, op1, op2);
  3766. ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
  3767. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3768. }
  3769. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3770. {
  3771. USE_OPLINE
  3772. zval *op1, *op2;
  3773. SAVE_OPLINE();
  3774. op1 = RT_CONSTANT(opline, opline->op1);
  3775. op2 = RT_CONSTANT(opline, opline->op2);
  3776. compare_function(EX_VAR(opline->result.var), op1, op2);
  3777. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3778. }
  3779. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3780. {
  3781. USE_OPLINE
  3782. zval *op1, *op2;
  3783. op1 = RT_CONSTANT(opline, opline->op1);
  3784. op2 = RT_CONSTANT(opline, opline->op2);
  3785. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  3786. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  3787. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
  3788. ZEND_VM_NEXT_OPCODE();
  3789. }
  3790. SAVE_OPLINE();
  3791. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  3792. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  3793. }
  3794. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  3795. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  3796. }
  3797. bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
  3798. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3799. }
  3800. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3801. {
  3802. USE_OPLINE
  3803. zval *op1, *op2;
  3804. op1 = RT_CONSTANT(opline, opline->op1);
  3805. op2 = RT_CONSTANT(opline, opline->op2);
  3806. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  3807. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  3808. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
  3809. ZEND_VM_NEXT_OPCODE();
  3810. }
  3811. SAVE_OPLINE();
  3812. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  3813. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  3814. }
  3815. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  3816. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  3817. }
  3818. bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
  3819. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3820. }
  3821. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3822. {
  3823. USE_OPLINE
  3824. zval *op1, *op2;
  3825. op1 = RT_CONSTANT(opline, opline->op1);
  3826. op2 = RT_CONSTANT(opline, opline->op2);
  3827. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  3828. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  3829. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
  3830. ZEND_VM_NEXT_OPCODE();
  3831. }
  3832. SAVE_OPLINE();
  3833. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  3834. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  3835. }
  3836. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  3837. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  3838. }
  3839. bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
  3840. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3841. }
  3842. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3843. {
  3844. USE_OPLINE
  3845. zval *op1, *op2;
  3846. SAVE_OPLINE();
  3847. op1 = RT_CONSTANT(opline, opline->op1);
  3848. op2 = RT_CONSTANT(opline, opline->op2);
  3849. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  3850. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3851. }
  3852. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CONST_CONST(int type ZEND_OPCODE_HANDLER_ARGS_DC)
  3853. {
  3854. USE_OPLINE
  3855. zval *varname;
  3856. zval *retval;
  3857. zend_string *name, *tmp_name;
  3858. zend_class_entry *ce;
  3859. SAVE_OPLINE();
  3860. do {
  3861. if (IS_CONST == IS_CONST) {
  3862. if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) {
  3863. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  3864. break;
  3865. } else {
  3866. zval *class_name = RT_CONSTANT(opline, opline->op2);
  3867. if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) {
  3868. ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  3869. if (UNEXPECTED(ce == NULL)) {
  3870. retval = NULL;
  3871. break;
  3872. }
  3873. if (IS_CONST != IS_CONST) {
  3874. CACHE_PTR(opline->extended_value, ce);
  3875. }
  3876. }
  3877. }
  3878. } else {
  3879. if (IS_CONST == IS_UNUSED) {
  3880. ce = zend_fetch_class(NULL, opline->op2.num);
  3881. if (UNEXPECTED(ce == NULL)) {
  3882. retval = NULL;
  3883. break;
  3884. }
  3885. } else {
  3886. ce = Z_CE_P(EX_VAR(opline->op2.var));
  3887. }
  3888. if (IS_CONST == IS_CONST &&
  3889. EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  3890. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  3891. break;
  3892. }
  3893. }
  3894. varname = RT_CONSTANT(opline, opline->op1);
  3895. if (IS_CONST == IS_CONST) {
  3896. name = Z_STR_P(varname);
  3897. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  3898. name = Z_STR_P(varname);
  3899. tmp_name = NULL;
  3900. } else {
  3901. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  3902. zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC);
  3903. }
  3904. name = zval_get_tmp_string(varname, &tmp_name);
  3905. }
  3906. retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
  3907. if (IS_CONST != IS_CONST) {
  3908. zend_tmp_string_release(tmp_name);
  3909. }
  3910. if (IS_CONST == IS_CONST && EXPECTED(retval)) {
  3911. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval);
  3912. }
  3913. } while (0);
  3914. if (UNEXPECTED(retval == NULL)) {
  3915. if (EG(exception)) {
  3916. ZVAL_UNDEF(EX_VAR(opline->result.var));
  3917. HANDLE_EXCEPTION();
  3918. } else {
  3919. ZEND_ASSERT(type == BP_VAR_IS);
  3920. retval = &EG(uninitialized_zval);
  3921. }
  3922. }
  3923. if (type == BP_VAR_R || type == BP_VAR_IS) {
  3924. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  3925. } else {
  3926. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  3927. }
  3928. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3929. }
  3930. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3931. {
  3932. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  3933. }
  3934. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3935. {
  3936. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  3937. }
  3938. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3939. {
  3940. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  3941. }
  3942. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3943. {
  3944. int fetch_type =
  3945. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  3946. BP_VAR_W : BP_VAR_R;
  3947. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  3948. }
  3949. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3950. {
  3951. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  3952. }
  3953. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3954. {
  3955. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  3956. }
  3957. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3958. {
  3959. USE_OPLINE
  3960. zval *container, *dim, *value, *result;
  3961. SAVE_OPLINE();
  3962. container = RT_CONSTANT(opline, opline->op1);
  3963. dim = RT_CONSTANT(opline, opline->op2);
  3964. if (IS_CONST != IS_CONST) {
  3965. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  3966. fetch_dim_r_array:
  3967. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
  3968. result = EX_VAR(opline->result.var);
  3969. ZVAL_COPY_DEREF(result, value);
  3970. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  3971. container = Z_REFVAL_P(container);
  3972. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  3973. goto fetch_dim_r_array;
  3974. } else {
  3975. goto fetch_dim_r_slow;
  3976. }
  3977. } else {
  3978. fetch_dim_r_slow:
  3979. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  3980. dim++;
  3981. }
  3982. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  3983. }
  3984. } else {
  3985. zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  3986. }
  3987. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3988. }
  3989. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3990. {
  3991. USE_OPLINE
  3992. zval *container;
  3993. SAVE_OPLINE();
  3994. container = RT_CONSTANT(opline, opline->op1);
  3995. zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  3996. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  3997. }
  3998. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  3999. {
  4000. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  4001. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  4002. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  4003. }
  4004. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  4005. } else {
  4006. if (IS_CONST == IS_UNUSED) {
  4007. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  4008. }
  4009. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  4010. }
  4011. }
  4012. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4013. {
  4014. USE_OPLINE
  4015. zval *container;
  4016. zval *offset;
  4017. void **cache_slot = NULL;
  4018. SAVE_OPLINE();
  4019. container = RT_CONSTANT(opline, opline->op1);
  4020. if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  4021. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  4022. }
  4023. offset = RT_CONSTANT(opline, opline->op2);
  4024. if (IS_CONST == IS_CONST ||
  4025. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  4026. do {
  4027. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  4028. container = Z_REFVAL_P(container);
  4029. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  4030. break;
  4031. }
  4032. }
  4033. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  4034. GET_OP1_UNDEF_CV(container, BP_VAR_R);
  4035. }
  4036. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  4037. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  4038. }
  4039. goto fetch_obj_r_no_object;
  4040. } while (0);
  4041. }
  4042. /* here we are sure we are dealing with an object */
  4043. do {
  4044. zend_object *zobj = Z_OBJ_P(container);
  4045. zval *retval;
  4046. if (IS_CONST == IS_CONST) {
  4047. cache_slot = CACHE_ADDR(opline->extended_value);
  4048. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  4049. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  4050. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  4051. retval = OBJ_PROP(zobj, prop_offset);
  4052. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  4053. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  4054. break;
  4055. }
  4056. } else if (EXPECTED(zobj->properties != NULL)) {
  4057. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  4058. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  4059. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  4060. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  4061. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  4062. (EXPECTED(p->key == Z_STR_P(offset)) ||
  4063. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  4064. EXPECTED(p->key != NULL) &&
  4065. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  4066. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
  4067. break;
  4068. }
  4069. }
  4070. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  4071. }
  4072. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  4073. if (EXPECTED(retval)) {
  4074. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  4075. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  4076. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  4077. break;
  4078. }
  4079. }
  4080. }
  4081. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
  4082. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  4083. }
  4084. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  4085. fetch_obj_r_no_object:
  4086. zend_wrong_property_read(offset);
  4087. ZVAL_NULL(EX_VAR(opline->result.var));
  4088. } else {
  4089. retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  4090. if (retval != EX_VAR(opline->result.var)) {
  4091. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  4092. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  4093. zend_unwrap_reference(retval);
  4094. }
  4095. }
  4096. } while (0);
  4097. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4098. }
  4099. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4100. {
  4101. USE_OPLINE
  4102. zval *container;
  4103. zval *offset;
  4104. void **cache_slot = NULL;
  4105. SAVE_OPLINE();
  4106. container = RT_CONSTANT(opline, opline->op1);
  4107. if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  4108. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  4109. }
  4110. offset = RT_CONSTANT(opline, opline->op2);
  4111. if (IS_CONST == IS_CONST ||
  4112. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  4113. do {
  4114. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  4115. container = Z_REFVAL_P(container);
  4116. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  4117. break;
  4118. }
  4119. }
  4120. goto fetch_obj_is_no_object;
  4121. } while (0);
  4122. }
  4123. /* here we are sure we are dealing with an object */
  4124. do {
  4125. zend_object *zobj = Z_OBJ_P(container);
  4126. zval *retval;
  4127. if (IS_CONST == IS_CONST) {
  4128. cache_slot = CACHE_ADDR(opline->extended_value);
  4129. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  4130. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  4131. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  4132. retval = OBJ_PROP(zobj, prop_offset);
  4133. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  4134. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  4135. break;
  4136. }
  4137. } else if (EXPECTED(zobj->properties != NULL)) {
  4138. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  4139. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  4140. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  4141. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  4142. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  4143. (EXPECTED(p->key == Z_STR_P(offset)) ||
  4144. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  4145. EXPECTED(p->key != NULL) &&
  4146. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  4147. ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
  4148. break;
  4149. }
  4150. }
  4151. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  4152. }
  4153. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  4154. if (EXPECTED(retval)) {
  4155. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  4156. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  4157. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  4158. break;
  4159. }
  4160. }
  4161. }
  4162. }
  4163. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  4164. fetch_obj_is_no_object:
  4165. ZVAL_NULL(EX_VAR(opline->result.var));
  4166. } else {
  4167. retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  4168. if (retval != EX_VAR(opline->result.var)) {
  4169. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  4170. }
  4171. }
  4172. } while (0);
  4173. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4174. }
  4175. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4176. {
  4177. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  4178. /* Behave like FETCH_OBJ_W */
  4179. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  4180. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  4181. }
  4182. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  4183. } else {
  4184. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  4185. }
  4186. }
  4187. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4188. {
  4189. USE_OPLINE
  4190. zval *container;
  4191. SAVE_OPLINE();
  4192. container = RT_CONSTANT(opline, opline->op1);
  4193. zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  4194. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4195. }
  4196. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4197. {
  4198. USE_OPLINE
  4199. zval *op1, *op2;
  4200. zend_string *op1_str, *op2_str, *str;
  4201. op1 = RT_CONSTANT(opline, opline->op1);
  4202. op2 = RT_CONSTANT(opline, opline->op2);
  4203. if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  4204. (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  4205. zend_string *op1_str = Z_STR_P(op1);
  4206. zend_string *op2_str = Z_STR_P(op2);
  4207. zend_string *str;
  4208. if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  4209. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  4210. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  4211. } else {
  4212. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  4213. }
  4214. } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  4215. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  4216. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  4217. } else {
  4218. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  4219. }
  4220. } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
  4221. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  4222. size_t len = ZSTR_LEN(op1_str);
  4223. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  4224. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  4225. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  4226. } else {
  4227. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  4228. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  4229. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  4230. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  4231. }
  4232. ZEND_VM_NEXT_OPCODE();
  4233. }
  4234. SAVE_OPLINE();
  4235. if (IS_CONST == IS_CONST) {
  4236. op1_str = Z_STR_P(op1);
  4237. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  4238. op1_str = zend_string_copy(Z_STR_P(op1));
  4239. } else {
  4240. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  4241. GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  4242. }
  4243. op1_str = zval_get_string_func(op1);
  4244. }
  4245. if (IS_CONST == IS_CONST) {
  4246. op2_str = Z_STR_P(op2);
  4247. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  4248. op2_str = zend_string_copy(Z_STR_P(op2));
  4249. } else {
  4250. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  4251. GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  4252. }
  4253. op2_str = zval_get_string_func(op2);
  4254. }
  4255. do {
  4256. if (IS_CONST != IS_CONST) {
  4257. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  4258. if (IS_CONST == IS_CONST) {
  4259. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  4260. GC_ADDREF(op2_str);
  4261. }
  4262. }
  4263. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  4264. zend_string_release_ex(op1_str, 0);
  4265. break;
  4266. }
  4267. }
  4268. if (IS_CONST != IS_CONST) {
  4269. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  4270. if (IS_CONST == IS_CONST) {
  4271. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  4272. GC_ADDREF(op1_str);
  4273. }
  4274. }
  4275. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  4276. zend_string_release_ex(op2_str, 0);
  4277. break;
  4278. }
  4279. }
  4280. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  4281. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  4282. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  4283. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  4284. if (IS_CONST != IS_CONST) {
  4285. zend_string_release_ex(op1_str, 0);
  4286. }
  4287. if (IS_CONST != IS_CONST) {
  4288. zend_string_release_ex(op2_str, 0);
  4289. }
  4290. } while (0);
  4291. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4292. }
  4293. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4294. {
  4295. USE_OPLINE
  4296. zval *function_name;
  4297. zend_free_op free_op1;
  4298. zval *object;
  4299. zend_function *fbc;
  4300. zend_class_entry *called_scope;
  4301. zend_object *obj;
  4302. zend_execute_data *call;
  4303. uint32_t call_info;
  4304. SAVE_OPLINE();
  4305. object = RT_CONSTANT(opline, opline->op1);
  4306. if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  4307. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  4308. }
  4309. if (IS_CONST != IS_CONST) {
  4310. function_name = RT_CONSTANT(opline, opline->op2);
  4311. }
  4312. if (IS_CONST != IS_CONST &&
  4313. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  4314. do {
  4315. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  4316. function_name = Z_REFVAL_P(function_name);
  4317. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  4318. break;
  4319. }
  4320. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  4321. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  4322. if (UNEXPECTED(EG(exception) != NULL)) {
  4323. HANDLE_EXCEPTION();
  4324. }
  4325. }
  4326. zend_throw_error(NULL, "Method name must be a string");
  4327. HANDLE_EXCEPTION();
  4328. } while (0);
  4329. }
  4330. if (IS_CONST != IS_UNUSED) {
  4331. do {
  4332. if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  4333. if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  4334. object = Z_REFVAL_P(object);
  4335. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  4336. break;
  4337. }
  4338. }
  4339. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  4340. object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
  4341. if (UNEXPECTED(EG(exception) != NULL)) {
  4342. if (IS_CONST != IS_CONST) {
  4343. }
  4344. HANDLE_EXCEPTION();
  4345. }
  4346. }
  4347. if (IS_CONST == IS_CONST) {
  4348. function_name = RT_CONSTANT(opline, opline->op2);
  4349. }
  4350. zend_invalid_method_call(object, function_name);
  4351. HANDLE_EXCEPTION();
  4352. }
  4353. } while (0);
  4354. }
  4355. obj = Z_OBJ_P(object);
  4356. called_scope = obj->ce;
  4357. if (IS_CONST == IS_CONST &&
  4358. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  4359. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  4360. } else {
  4361. zend_object *orig_obj = obj;
  4362. if (UNEXPECTED(obj->handlers->get_method == NULL)) {
  4363. zend_throw_error(NULL, "Object does not support method calls");
  4364. HANDLE_EXCEPTION();
  4365. }
  4366. if (IS_CONST == IS_CONST) {
  4367. function_name = RT_CONSTANT(opline, opline->op2);
  4368. }
  4369. /* First, locate the function. */
  4370. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  4371. if (UNEXPECTED(fbc == NULL)) {
  4372. if (EXPECTED(!EG(exception))) {
  4373. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  4374. }
  4375. HANDLE_EXCEPTION();
  4376. }
  4377. if (IS_CONST == IS_CONST &&
  4378. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  4379. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  4380. EXPECTED(obj == orig_obj)) {
  4381. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  4382. }
  4383. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  4384. /* Reset "object" to trigger reference counting */
  4385. object = NULL;
  4386. }
  4387. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  4388. init_func_run_time_cache(&fbc->op_array);
  4389. }
  4390. }
  4391. if (IS_CONST != IS_CONST) {
  4392. }
  4393. call_info = ZEND_CALL_NESTED_FUNCTION;
  4394. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  4395. obj = NULL;
  4396. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
  4397. HANDLE_EXCEPTION();
  4398. }
  4399. } else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  4400. /* CV may be changed indirectly (e.g. when it's a reference) */
  4401. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
  4402. if (IS_CONST == IS_CV) {
  4403. GC_ADDREF(obj); /* For $this pointer */
  4404. } else if (free_op1 != object) {
  4405. GC_ADDREF(obj); /* For $this pointer */
  4406. }
  4407. }
  4408. call = zend_vm_stack_push_call_frame(call_info,
  4409. fbc, opline->extended_value, called_scope, obj);
  4410. call->prev_execute_data = EX(call);
  4411. EX(call) = call;
  4412. ZEND_VM_NEXT_OPCODE();
  4413. }
  4414. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4415. {
  4416. USE_OPLINE
  4417. zval *function_name;
  4418. zend_class_entry *ce;
  4419. zend_object *object;
  4420. zend_function *fbc;
  4421. zend_execute_data *call;
  4422. SAVE_OPLINE();
  4423. if (IS_CONST == IS_CONST) {
  4424. /* no function found. try a static method in class */
  4425. ce = CACHED_PTR(opline->result.num);
  4426. if (UNEXPECTED(ce == NULL)) {
  4427. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  4428. if (UNEXPECTED(ce == NULL)) {
  4429. ZEND_ASSERT(EG(exception));
  4430. HANDLE_EXCEPTION();
  4431. }
  4432. if (IS_CONST != IS_CONST) {
  4433. CACHE_PTR(opline->result.num, ce);
  4434. }
  4435. }
  4436. } else if (IS_CONST == IS_UNUSED) {
  4437. ce = zend_fetch_class(NULL, opline->op1.num);
  4438. if (UNEXPECTED(ce == NULL)) {
  4439. ZEND_ASSERT(EG(exception));
  4440. HANDLE_EXCEPTION();
  4441. }
  4442. } else {
  4443. ce = Z_CE_P(EX_VAR(opline->op1.var));
  4444. }
  4445. if (IS_CONST == IS_CONST &&
  4446. IS_CONST == IS_CONST &&
  4447. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  4448. /* nothing to do */
  4449. } else if (IS_CONST != IS_CONST &&
  4450. IS_CONST == IS_CONST &&
  4451. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  4452. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  4453. } else if (IS_CONST != IS_UNUSED) {
  4454. function_name = RT_CONSTANT(opline, opline->op2);
  4455. if (IS_CONST != IS_CONST) {
  4456. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  4457. do {
  4458. if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  4459. function_name = Z_REFVAL_P(function_name);
  4460. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  4461. break;
  4462. }
  4463. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  4464. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  4465. if (UNEXPECTED(EG(exception) != NULL)) {
  4466. HANDLE_EXCEPTION();
  4467. }
  4468. }
  4469. zend_throw_error(NULL, "Function name must be a string");
  4470. HANDLE_EXCEPTION();
  4471. } while (0);
  4472. }
  4473. }
  4474. if (ce->get_static_method) {
  4475. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  4476. } else {
  4477. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  4478. }
  4479. if (UNEXPECTED(fbc == NULL)) {
  4480. if (EXPECTED(!EG(exception))) {
  4481. zend_undefined_method(ce, Z_STR_P(function_name));
  4482. }
  4483. HANDLE_EXCEPTION();
  4484. }
  4485. if (IS_CONST == IS_CONST &&
  4486. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  4487. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
  4488. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  4489. }
  4490. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  4491. init_func_run_time_cache(&fbc->op_array);
  4492. }
  4493. if (IS_CONST != IS_CONST) {
  4494. }
  4495. } else {
  4496. if (UNEXPECTED(ce->constructor == NULL)) {
  4497. zend_throw_error(NULL, "Cannot call constructor");
  4498. HANDLE_EXCEPTION();
  4499. }
  4500. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  4501. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  4502. HANDLE_EXCEPTION();
  4503. }
  4504. fbc = ce->constructor;
  4505. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  4506. init_func_run_time_cache(&fbc->op_array);
  4507. }
  4508. }
  4509. object = NULL;
  4510. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  4511. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  4512. object = Z_OBJ(EX(This));
  4513. ce = object->ce;
  4514. } else {
  4515. zend_non_static_method_call(fbc);
  4516. if (UNEXPECTED(EG(exception) != NULL)) {
  4517. HANDLE_EXCEPTION();
  4518. }
  4519. }
  4520. }
  4521. if (IS_CONST == IS_UNUSED) {
  4522. /* previous opcode is ZEND_FETCH_CLASS */
  4523. if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  4524. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
  4525. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  4526. ce = Z_OBJCE(EX(This));
  4527. } else {
  4528. ce = Z_CE(EX(This));
  4529. }
  4530. }
  4531. }
  4532. call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  4533. fbc, opline->extended_value, ce, object);
  4534. call->prev_execute_data = EX(call);
  4535. EX(call) = call;
  4536. ZEND_VM_NEXT_OPCODE();
  4537. }
  4538. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4539. {
  4540. USE_OPLINE
  4541. zval *function_name;
  4542. zend_fcall_info_cache fcc;
  4543. char *error = NULL;
  4544. zend_function *func;
  4545. zend_class_entry *called_scope;
  4546. zend_object *object;
  4547. zend_execute_data *call;
  4548. uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
  4549. SAVE_OPLINE();
  4550. function_name = RT_CONSTANT(opline, opline->op2);
  4551. if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
  4552. func = fcc.function_handler;
  4553. called_scope = fcc.called_scope;
  4554. object = fcc.object;
  4555. if (error) {
  4556. efree(error);
  4557. /* This is the only soft error is_callable() can generate */
  4558. zend_non_static_method_call(func);
  4559. if (UNEXPECTED(EG(exception) != NULL)) {
  4560. HANDLE_EXCEPTION();
  4561. }
  4562. }
  4563. if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
  4564. /* Delay closure destruction until its invocation */
  4565. GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
  4566. call_info |= ZEND_CALL_CLOSURE;
  4567. if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
  4568. call_info |= ZEND_CALL_FAKE_CLOSURE;
  4569. }
  4570. } else if (object) {
  4571. call_info |= ZEND_CALL_RELEASE_THIS;
  4572. GC_ADDREF(object); /* For $this pointer */
  4573. }
  4574. if ((IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
  4575. if (call_info & ZEND_CALL_CLOSURE) {
  4576. zend_object_release(ZEND_CLOSURE_OBJECT(func));
  4577. }
  4578. if (call_info & ZEND_CALL_RELEASE_THIS) {
  4579. zend_object_release(object);
  4580. }
  4581. HANDLE_EXCEPTION();
  4582. }
  4583. if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) {
  4584. init_func_run_time_cache(&func->op_array);
  4585. }
  4586. } else {
  4587. zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
  4588. efree(error);
  4589. if (UNEXPECTED(EG(exception))) {
  4590. HANDLE_EXCEPTION();
  4591. }
  4592. func = (zend_function*)&zend_pass_function;
  4593. called_scope = NULL;
  4594. object = NULL;
  4595. }
  4596. call = zend_vm_stack_push_call_frame(call_info,
  4597. func, opline->extended_value, called_scope, object);
  4598. call->prev_execute_data = EX(call);
  4599. EX(call) = call;
  4600. ZEND_VM_NEXT_OPCODE();
  4601. }
  4602. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4603. {
  4604. zend_class_entry *ce, *scope;
  4605. zend_class_constant *c;
  4606. zval *value, *zv;
  4607. USE_OPLINE
  4608. SAVE_OPLINE();
  4609. do {
  4610. if (IS_CONST == IS_CONST) {
  4611. if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
  4612. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  4613. break;
  4614. } else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
  4615. ce = CACHED_PTR(opline->extended_value);
  4616. } else {
  4617. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  4618. if (UNEXPECTED(ce == NULL)) {
  4619. ZEND_ASSERT(EG(exception));
  4620. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4621. HANDLE_EXCEPTION();
  4622. }
  4623. }
  4624. } else {
  4625. if (IS_CONST == IS_UNUSED) {
  4626. ce = zend_fetch_class(NULL, opline->op1.num);
  4627. if (UNEXPECTED(ce == NULL)) {
  4628. ZEND_ASSERT(EG(exception));
  4629. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4630. HANDLE_EXCEPTION();
  4631. }
  4632. } else {
  4633. ce = Z_CE_P(EX_VAR(opline->op1.var));
  4634. }
  4635. if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  4636. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  4637. break;
  4638. }
  4639. }
  4640. zv = zend_hash_find_ex(&ce->constants_table, Z_STR_P(RT_CONSTANT(opline, opline->op2)), 1);
  4641. if (EXPECTED(zv != NULL)) {
  4642. c = Z_PTR_P(zv);
  4643. scope = EX(func)->op_array.scope;
  4644. if (!zend_verify_const_access(c, scope)) {
  4645. zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
  4646. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4647. HANDLE_EXCEPTION();
  4648. }
  4649. value = &c->value;
  4650. if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
  4651. zval_update_constant_ex(value, c->ce);
  4652. if (UNEXPECTED(EG(exception) != NULL)) {
  4653. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4654. HANDLE_EXCEPTION();
  4655. }
  4656. }
  4657. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
  4658. } else {
  4659. zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
  4660. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4661. HANDLE_EXCEPTION();
  4662. }
  4663. } while (0);
  4664. ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
  4665. ZEND_VM_NEXT_OPCODE();
  4666. }
  4667. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4668. {
  4669. USE_OPLINE
  4670. zval *expr_ptr, new_expr;
  4671. SAVE_OPLINE();
  4672. if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
  4673. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  4674. expr_ptr = NULL;
  4675. if (Z_ISREF_P(expr_ptr)) {
  4676. Z_ADDREF_P(expr_ptr);
  4677. } else {
  4678. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  4679. }
  4680. } else {
  4681. expr_ptr = RT_CONSTANT(opline, opline->op1);
  4682. if (IS_CONST == IS_TMP_VAR) {
  4683. /* pass */
  4684. } else if (IS_CONST == IS_CONST) {
  4685. Z_TRY_ADDREF_P(expr_ptr);
  4686. } else if (IS_CONST == IS_CV) {
  4687. ZVAL_DEREF(expr_ptr);
  4688. Z_TRY_ADDREF_P(expr_ptr);
  4689. } else /* if (IS_CONST == IS_VAR) */ {
  4690. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  4691. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  4692. expr_ptr = Z_REFVAL_P(expr_ptr);
  4693. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  4694. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  4695. expr_ptr = &new_expr;
  4696. efree_size(ref, sizeof(zend_reference));
  4697. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  4698. Z_ADDREF_P(expr_ptr);
  4699. }
  4700. }
  4701. }
  4702. }
  4703. if (IS_CONST != IS_UNUSED) {
  4704. zval *offset = RT_CONSTANT(opline, opline->op2);
  4705. zend_string *str;
  4706. zend_ulong hval;
  4707. add_again:
  4708. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  4709. str = Z_STR_P(offset);
  4710. if (IS_CONST != IS_CONST) {
  4711. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  4712. goto num_index;
  4713. }
  4714. }
  4715. str_index:
  4716. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  4717. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  4718. hval = Z_LVAL_P(offset);
  4719. num_index:
  4720. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  4721. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  4722. offset = Z_REFVAL_P(offset);
  4723. goto add_again;
  4724. } else if (Z_TYPE_P(offset) == IS_NULL) {
  4725. str = ZSTR_EMPTY_ALLOC();
  4726. goto str_index;
  4727. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  4728. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  4729. goto num_index;
  4730. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  4731. hval = 0;
  4732. goto num_index;
  4733. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  4734. hval = 1;
  4735. goto num_index;
  4736. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  4737. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  4738. str = ZSTR_EMPTY_ALLOC();
  4739. goto str_index;
  4740. } else {
  4741. zend_illegal_offset();
  4742. zval_ptr_dtor_nogc(expr_ptr);
  4743. }
  4744. } else {
  4745. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  4746. zend_cannot_add_element();
  4747. zval_ptr_dtor_nogc(expr_ptr);
  4748. }
  4749. }
  4750. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4751. }
  4752. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4753. {
  4754. zval *array;
  4755. uint32_t size;
  4756. USE_OPLINE
  4757. array = EX_VAR(opline->result.var);
  4758. if (IS_CONST != IS_UNUSED) {
  4759. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  4760. ZVAL_ARR(array, zend_new_array(size));
  4761. /* Explicitly initialize array as not-packed if flag is set */
  4762. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  4763. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  4764. }
  4765. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  4766. } else {
  4767. ZVAL_EMPTY_ARRAY(array);
  4768. ZEND_VM_NEXT_OPCODE();
  4769. }
  4770. }
  4771. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4772. {
  4773. USE_OPLINE
  4774. zval *varname;
  4775. zend_string *name, *tmp_name;
  4776. zend_class_entry *ce;
  4777. SAVE_OPLINE();
  4778. if (IS_CONST == IS_CONST) {
  4779. ce = CACHED_PTR(opline->extended_value);
  4780. if (UNEXPECTED(ce == NULL)) {
  4781. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  4782. if (UNEXPECTED(ce == NULL)) {
  4783. ZEND_ASSERT(EG(exception));
  4784. HANDLE_EXCEPTION();
  4785. }
  4786. /*CACHE_PTR(opline->extended_value, ce);*/
  4787. }
  4788. } else if (IS_CONST == IS_UNUSED) {
  4789. ce = zend_fetch_class(NULL, opline->op2.num);
  4790. if (UNEXPECTED(ce == NULL)) {
  4791. ZEND_ASSERT(EG(exception));
  4792. HANDLE_EXCEPTION();
  4793. }
  4794. } else {
  4795. ce = Z_CE_P(EX_VAR(opline->op2.var));
  4796. }
  4797. varname = RT_CONSTANT(opline, opline->op1);
  4798. if (IS_CONST == IS_CONST) {
  4799. name = Z_STR_P(varname);
  4800. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  4801. name = Z_STR_P(varname);
  4802. tmp_name = NULL;
  4803. } else {
  4804. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  4805. varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
  4806. }
  4807. name = zval_get_tmp_string(varname, &tmp_name);
  4808. }
  4809. zend_std_unset_static_property(ce, name);
  4810. if (IS_CONST != IS_CONST) {
  4811. zend_tmp_string_release(tmp_name);
  4812. }
  4813. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4814. }
  4815. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4816. {
  4817. USE_OPLINE
  4818. zval *value;
  4819. int result;
  4820. zval *varname;
  4821. zend_string *name, *tmp_name;
  4822. zend_class_entry *ce;
  4823. SAVE_OPLINE();
  4824. if (IS_CONST == IS_CONST) {
  4825. if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) {
  4826. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  4827. goto is_static_prop_return;
  4828. } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) {
  4829. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  4830. if (UNEXPECTED(ce == NULL)) {
  4831. ZEND_ASSERT(EG(exception));
  4832. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4833. HANDLE_EXCEPTION();
  4834. }
  4835. if (IS_CONST != IS_CONST) {
  4836. CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce);
  4837. }
  4838. }
  4839. } else {
  4840. if (IS_CONST == IS_UNUSED) {
  4841. ce = zend_fetch_class(NULL, opline->op2.num);
  4842. if (UNEXPECTED(ce == NULL)) {
  4843. ZEND_ASSERT(EG(exception));
  4844. ZVAL_UNDEF(EX_VAR(opline->result.var));
  4845. HANDLE_EXCEPTION();
  4846. }
  4847. } else {
  4848. ce = Z_CE_P(EX_VAR(opline->op2.var));
  4849. }
  4850. if (IS_CONST == IS_CONST &&
  4851. EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) {
  4852. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  4853. goto is_static_prop_return;
  4854. }
  4855. }
  4856. varname = RT_CONSTANT(opline, opline->op1);
  4857. if (IS_CONST == IS_CONST) {
  4858. name = Z_STR_P(varname);
  4859. } else {
  4860. name = zval_get_tmp_string(varname, &tmp_name);
  4861. }
  4862. value = zend_std_get_static_property(ce, name, 1);
  4863. if (IS_CONST == IS_CONST && value) {
  4864. CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value);
  4865. }
  4866. if (IS_CONST != IS_CONST) {
  4867. zend_tmp_string_release(tmp_name);
  4868. }
  4869. is_static_prop_return:
  4870. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  4871. result = value && Z_TYPE_P(value) > IS_NULL &&
  4872. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  4873. } else {
  4874. result = !value || !i_zend_is_true(value);
  4875. }
  4876. ZEND_VM_SMART_BRANCH(result, 1);
  4877. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  4878. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4879. }
  4880. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4881. {
  4882. USE_OPLINE
  4883. zval *container;
  4884. int result;
  4885. zend_ulong hval;
  4886. zval *offset;
  4887. SAVE_OPLINE();
  4888. container = RT_CONSTANT(opline, opline->op1);
  4889. offset = RT_CONSTANT(opline, opline->op2);
  4890. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  4891. HashTable *ht;
  4892. zval *value;
  4893. zend_string *str;
  4894. isset_dim_obj_array:
  4895. ht = Z_ARRVAL_P(container);
  4896. isset_again:
  4897. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  4898. str = Z_STR_P(offset);
  4899. if (IS_CONST != IS_CONST) {
  4900. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  4901. goto num_index_prop;
  4902. }
  4903. }
  4904. value = zend_hash_find_ex_ind(ht, str, IS_CONST == IS_CONST);
  4905. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  4906. hval = Z_LVAL_P(offset);
  4907. num_index_prop:
  4908. value = zend_hash_index_find(ht, hval);
  4909. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  4910. offset = Z_REFVAL_P(offset);
  4911. goto isset_again;
  4912. } else {
  4913. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  4914. }
  4915. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  4916. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  4917. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  4918. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  4919. } else {
  4920. result = (value == NULL || !i_zend_is_true(value));
  4921. }
  4922. goto isset_dim_obj_exit;
  4923. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  4924. container = Z_REFVAL_P(container);
  4925. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  4926. goto isset_dim_obj_array;
  4927. }
  4928. }
  4929. if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  4930. offset++;
  4931. }
  4932. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  4933. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  4934. } else {
  4935. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  4936. }
  4937. isset_dim_obj_exit:
  4938. ZEND_VM_SMART_BRANCH(result, 1);
  4939. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  4940. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4941. }
  4942. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4943. {
  4944. USE_OPLINE
  4945. zval *container;
  4946. int result;
  4947. zval *offset;
  4948. SAVE_OPLINE();
  4949. container = RT_CONSTANT(opline, opline->op1);
  4950. if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  4951. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  4952. }
  4953. offset = RT_CONSTANT(opline, opline->op2);
  4954. if (IS_CONST == IS_CONST ||
  4955. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  4956. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  4957. container = Z_REFVAL_P(container);
  4958. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  4959. goto isset_no_object;
  4960. }
  4961. } else {
  4962. goto isset_no_object;
  4963. }
  4964. }
  4965. if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
  4966. zend_wrong_property_check(offset);
  4967. isset_no_object:
  4968. result = (opline->extended_value & ZEND_ISEMPTY);
  4969. } else {
  4970. result =
  4971. (opline->extended_value & ZEND_ISEMPTY) ^
  4972. Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  4973. }
  4974. ZEND_VM_SMART_BRANCH(result, 1);
  4975. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  4976. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4977. }
  4978. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_INHERITED_CLASS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4979. {
  4980. zend_class_entry *parent;
  4981. USE_OPLINE
  4982. SAVE_OPLINE();
  4983. parent = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)),
  4984. RT_CONSTANT(opline, opline->op2) + 1,
  4985. ZEND_FETCH_CLASS_EXCEPTION);
  4986. if (UNEXPECTED(parent == NULL)) {
  4987. ZEND_ASSERT(EG(exception));
  4988. HANDLE_EXCEPTION();
  4989. }
  4990. Z_CE_P(EX_VAR(opline->result.var)) = do_bind_inherited_class(&EX(func)->op_array, opline, EG(class_table), parent, 0);
  4991. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  4992. }
  4993. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  4994. {
  4995. USE_OPLINE
  4996. zval *zce, *orig_zce;
  4997. zend_class_entry *parent;
  4998. SAVE_OPLINE();
  4999. if ((zce = zend_hash_find_ex(EG(class_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1)) == NULL ||
  5000. ((orig_zce = zend_hash_find_ex(EG(class_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)+1), 1)) != NULL &&
  5001. Z_CE_P(zce) != Z_CE_P(orig_zce))) {
  5002. parent = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)),
  5003. RT_CONSTANT(opline, opline->op2) + 1,
  5004. ZEND_FETCH_CLASS_EXCEPTION);
  5005. if (UNEXPECTED(parent == NULL)) {
  5006. ZEND_ASSERT(EG(exception));
  5007. HANDLE_EXCEPTION();
  5008. }
  5009. do_bind_inherited_class(&EX(func)->op_array, opline, EG(class_table), parent, 0);
  5010. }
  5011. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5012. }
  5013. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5014. {
  5015. zval *zv;
  5016. zend_class_entry *ce, *parent;
  5017. USE_OPLINE
  5018. SAVE_OPLINE();
  5019. zv = zend_hash_find_ex(EG(class_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1);
  5020. ZEND_ASSERT(zv != NULL);
  5021. ce = Z_CE_P(zv);
  5022. Z_CE_P(EX_VAR(opline->result.var)) = ce;
  5023. if (ce->ce_flags & ZEND_ACC_ANON_BOUND) {
  5024. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  5025. ZEND_VM_CONTINUE();
  5026. }
  5027. parent = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)),
  5028. RT_CONSTANT(opline, opline->op2) + 1,
  5029. ZEND_FETCH_CLASS_EXCEPTION);
  5030. if (UNEXPECTED(parent == NULL)) {
  5031. ZEND_ASSERT(EG(exception));
  5032. HANDLE_EXCEPTION();
  5033. }
  5034. zend_do_inheritance(ce, parent);
  5035. ce->ce_flags |= ZEND_ACC_ANON_BOUND;
  5036. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5037. }
  5038. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5039. {
  5040. USE_OPLINE
  5041. zval *name;
  5042. zval *val;
  5043. zend_constant c;
  5044. SAVE_OPLINE();
  5045. name = RT_CONSTANT(opline, opline->op1);
  5046. val = RT_CONSTANT(opline, opline->op2);
  5047. ZVAL_COPY(&c.value, val);
  5048. if (Z_OPT_CONSTANT(c.value)) {
  5049. if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) {
  5050. zval_ptr_dtor_nogc(&c.value);
  5051. HANDLE_EXCEPTION();
  5052. }
  5053. }
  5054. /* non persistent, case sensitive */
  5055. ZEND_CONSTANT_SET_FLAGS(&c, CONST_CS, PHP_USER_CONSTANT);
  5056. c.name = zend_string_copy(Z_STR_P(name));
  5057. if (zend_register_constant(&c) == FAILURE) {
  5058. }
  5059. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5060. }
  5061. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5062. {
  5063. USE_OPLINE
  5064. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  5065. SAVE_OPLINE();
  5066. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  5067. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5068. }
  5069. /* Destroy the previously yielded value */
  5070. zval_ptr_dtor(&generator->value);
  5071. /* Destroy the previously yielded key */
  5072. zval_ptr_dtor(&generator->key);
  5073. /* Set the new yielded value */
  5074. if (IS_CONST != IS_UNUSED) {
  5075. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  5076. /* Constants and temporary variables aren't yieldable by reference,
  5077. * but we still allow them with a notice. */
  5078. if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
  5079. zval *value;
  5080. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  5081. value = RT_CONSTANT(opline, opline->op1);
  5082. ZVAL_COPY_VALUE(&generator->value, value);
  5083. if (IS_CONST == IS_CONST) {
  5084. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  5085. Z_ADDREF(generator->value);
  5086. }
  5087. }
  5088. } else {
  5089. zval *value_ptr = NULL;
  5090. /* If a function call result is yielded and the function did
  5091. * not return by reference we throw a notice. */
  5092. if (IS_CONST == IS_VAR &&
  5093. (value_ptr == &EG(uninitialized_zval) ||
  5094. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  5095. !Z_ISREF_P(value_ptr)))) {
  5096. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  5097. ZVAL_COPY(&generator->value, value_ptr);
  5098. } else {
  5099. if (Z_ISREF_P(value_ptr)) {
  5100. Z_ADDREF_P(value_ptr);
  5101. } else {
  5102. ZVAL_MAKE_REF_EX(value_ptr, 2);
  5103. }
  5104. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  5105. }
  5106. }
  5107. } else {
  5108. zval *value = RT_CONSTANT(opline, opline->op1);
  5109. /* Consts, temporary variables and references need copying */
  5110. if (IS_CONST == IS_CONST) {
  5111. ZVAL_COPY_VALUE(&generator->value, value);
  5112. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  5113. Z_ADDREF(generator->value);
  5114. }
  5115. } else if (IS_CONST == IS_TMP_VAR) {
  5116. ZVAL_COPY_VALUE(&generator->value, value);
  5117. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  5118. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  5119. } else {
  5120. ZVAL_COPY_VALUE(&generator->value, value);
  5121. if (IS_CONST == IS_CV) {
  5122. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  5123. }
  5124. }
  5125. }
  5126. } else {
  5127. /* If no value was specified yield null */
  5128. ZVAL_NULL(&generator->value);
  5129. }
  5130. /* Set the new yielded key */
  5131. if (IS_CONST != IS_UNUSED) {
  5132. zval *key = RT_CONSTANT(opline, opline->op2);
  5133. /* Consts, temporary variables and references need copying */
  5134. if (IS_CONST == IS_CONST) {
  5135. ZVAL_COPY_VALUE(&generator->key, key);
  5136. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  5137. Z_ADDREF(generator->key);
  5138. }
  5139. } else if (IS_CONST == IS_TMP_VAR) {
  5140. ZVAL_COPY_VALUE(&generator->key, key);
  5141. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  5142. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  5143. } else {
  5144. ZVAL_COPY_VALUE(&generator->key, key);
  5145. if (IS_CONST == IS_CV) {
  5146. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  5147. }
  5148. }
  5149. if (Z_TYPE(generator->key) == IS_LONG
  5150. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  5151. ) {
  5152. generator->largest_used_integer_key = Z_LVAL(generator->key);
  5153. }
  5154. } else {
  5155. /* If no key was specified we use auto-increment keys */
  5156. generator->largest_used_integer_key++;
  5157. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  5158. }
  5159. if (RETURN_VALUE_USED(opline)) {
  5160. /* If the return value of yield is used set the send
  5161. * target and initialize it to NULL */
  5162. generator->send_target = EX_VAR(opline->result.var);
  5163. ZVAL_NULL(generator->send_target);
  5164. } else {
  5165. generator->send_target = NULL;
  5166. }
  5167. /* We increment to the next op, so we are at the correct position when the
  5168. * generator is resumed. */
  5169. ZEND_VM_INC_OPCODE();
  5170. /* The GOTO VM uses a local opline variable. We need to set the opline
  5171. * variable in execute_data so we don't resume at an old position. */
  5172. SAVE_OPLINE();
  5173. ZEND_VM_RETURN();
  5174. }
  5175. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5176. {
  5177. USE_OPLINE
  5178. zval *op, *jump_zv;
  5179. HashTable *jumptable;
  5180. op = RT_CONSTANT(opline, opline->op1);
  5181. jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  5182. if (Z_TYPE_P(op) != IS_LONG) {
  5183. ZVAL_DEREF(op);
  5184. if (Z_TYPE_P(op) != IS_LONG) {
  5185. /* Wrong type, fall back to ZEND_CASE chain */
  5186. ZEND_VM_NEXT_OPCODE();
  5187. }
  5188. }
  5189. jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
  5190. if (jump_zv != NULL) {
  5191. ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
  5192. ZEND_VM_CONTINUE();
  5193. } else {
  5194. /* default */
  5195. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  5196. ZEND_VM_CONTINUE();
  5197. }
  5198. }
  5199. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5200. {
  5201. USE_OPLINE
  5202. zval *op, *jump_zv;
  5203. HashTable *jumptable;
  5204. op = RT_CONSTANT(opline, opline->op1);
  5205. jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  5206. if (Z_TYPE_P(op) != IS_STRING) {
  5207. if (IS_CONST == IS_CONST) {
  5208. /* Wrong type, fall back to ZEND_CASE chain */
  5209. ZEND_VM_NEXT_OPCODE();
  5210. } else {
  5211. ZVAL_DEREF(op);
  5212. if (Z_TYPE_P(op) != IS_STRING) {
  5213. /* Wrong type, fall back to ZEND_CASE chain */
  5214. ZEND_VM_NEXT_OPCODE();
  5215. }
  5216. }
  5217. }
  5218. jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
  5219. if (jump_zv != NULL) {
  5220. ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
  5221. ZEND_VM_CONTINUE();
  5222. } else {
  5223. /* default */
  5224. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  5225. ZEND_VM_CONTINUE();
  5226. }
  5227. }
  5228. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5229. {
  5230. USE_OPLINE
  5231. zval *op1;
  5232. HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  5233. int result;
  5234. SAVE_OPLINE();
  5235. op1 = RT_CONSTANT(opline, opline->op1);
  5236. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  5237. result = zend_hash_exists(ht, Z_STR_P(op1));
  5238. } else if (opline->extended_value) {
  5239. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  5240. result = zend_hash_index_exists(ht, Z_LVAL_P(op1));
  5241. } else {
  5242. result = 0;
  5243. }
  5244. } else if (Z_TYPE_P(op1) <= IS_FALSE) {
  5245. result = zend_hash_exists(ht, ZSTR_EMPTY_ALLOC());
  5246. } else {
  5247. zend_string *key;
  5248. zval key_tmp, result_tmp;
  5249. result = 0;
  5250. ZEND_HASH_FOREACH_STR_KEY(ht, key) {
  5251. ZVAL_STR(&key_tmp, key);
  5252. compare_function(&result_tmp, op1, &key_tmp);
  5253. if (Z_LVAL(result_tmp) == 0) {
  5254. result = 1;
  5255. break;
  5256. }
  5257. } ZEND_HASH_FOREACH_END();
  5258. }
  5259. ZEND_VM_SMART_BRANCH(result, 1);
  5260. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  5261. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5262. }
  5263. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5264. {
  5265. USE_OPLINE
  5266. zval *op1, *op2, *result;
  5267. op1 = RT_CONSTANT(opline, opline->op1);
  5268. op2 = EX_VAR(opline->op2.var);
  5269. result = EX_VAR(opline->result.var);
  5270. ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
  5271. ZEND_VM_NEXT_OPCODE();
  5272. }
  5273. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5274. {
  5275. USE_OPLINE
  5276. zval *op1, *op2, *result;
  5277. op1 = RT_CONSTANT(opline, opline->op1);
  5278. op2 = EX_VAR(opline->op2.var);
  5279. result = EX_VAR(opline->result.var);
  5280. fast_long_sub_function(result, op1, op2);
  5281. ZEND_VM_NEXT_OPCODE();
  5282. }
  5283. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5284. {
  5285. USE_OPLINE
  5286. zval *op1, *op2, *result;
  5287. op1 = RT_CONSTANT(opline, opline->op1);
  5288. op2 = EX_VAR(opline->op2.var);
  5289. result = EX_VAR(opline->result.var);
  5290. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  5291. ZEND_VM_NEXT_OPCODE();
  5292. }
  5293. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5294. {
  5295. USE_OPLINE
  5296. zval *op1, *op2;
  5297. int result;
  5298. op1 = RT_CONSTANT(opline, opline->op1);
  5299. op2 = EX_VAR(opline->op2.var);
  5300. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  5301. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  5302. ZEND_VM_NEXT_OPCODE();
  5303. }
  5304. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5305. {
  5306. USE_OPLINE
  5307. zval *op1, *op2;
  5308. int result;
  5309. op1 = RT_CONSTANT(opline, opline->op1);
  5310. op2 = EX_VAR(opline->op2.var);
  5311. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  5312. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  5313. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  5314. ZEND_VM_NEXT_OPCODE();
  5315. }
  5316. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5317. {
  5318. USE_OPLINE
  5319. zval *op1, *op2;
  5320. int result;
  5321. op1 = RT_CONSTANT(opline, opline->op1);
  5322. op2 = EX_VAR(opline->op2.var);
  5323. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  5324. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  5325. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  5326. ZEND_VM_NEXT_OPCODE();
  5327. }
  5328. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5329. {
  5330. USE_OPLINE
  5331. zval *op1, *op2;
  5332. int result;
  5333. op1 = RT_CONSTANT(opline, opline->op1);
  5334. op2 = EX_VAR(opline->op2.var);
  5335. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  5336. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  5337. ZEND_VM_NEXT_OPCODE();
  5338. }
  5339. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5340. {
  5341. USE_OPLINE
  5342. zval *op1, *op2;
  5343. int result;
  5344. op1 = RT_CONSTANT(opline, opline->op1);
  5345. op2 = EX_VAR(opline->op2.var);
  5346. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  5347. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  5348. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  5349. ZEND_VM_NEXT_OPCODE();
  5350. }
  5351. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5352. {
  5353. USE_OPLINE
  5354. zval *op1, *op2;
  5355. int result;
  5356. op1 = RT_CONSTANT(opline, opline->op1);
  5357. op2 = EX_VAR(opline->op2.var);
  5358. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  5359. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  5360. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  5361. ZEND_VM_NEXT_OPCODE();
  5362. }
  5363. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5364. {
  5365. USE_OPLINE
  5366. zval *op1, *op2;
  5367. int result;
  5368. op1 = RT_CONSTANT(opline, opline->op1);
  5369. op2 = EX_VAR(opline->op2.var);
  5370. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  5371. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  5372. ZEND_VM_NEXT_OPCODE();
  5373. }
  5374. 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)
  5375. {
  5376. USE_OPLINE
  5377. zval *op1, *op2;
  5378. int result;
  5379. op1 = RT_CONSTANT(opline, opline->op1);
  5380. op2 = EX_VAR(opline->op2.var);
  5381. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  5382. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  5383. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  5384. ZEND_VM_NEXT_OPCODE();
  5385. }
  5386. 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)
  5387. {
  5388. USE_OPLINE
  5389. zval *op1, *op2;
  5390. int result;
  5391. op1 = RT_CONSTANT(opline, opline->op1);
  5392. op2 = EX_VAR(opline->op2.var);
  5393. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  5394. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  5395. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  5396. ZEND_VM_NEXT_OPCODE();
  5397. }
  5398. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5399. {
  5400. USE_OPLINE
  5401. zval *op1, *op2;
  5402. int result;
  5403. op1 = RT_CONSTANT(opline, opline->op1);
  5404. op2 = EX_VAR(opline->op2.var);
  5405. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  5406. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  5407. ZEND_VM_NEXT_OPCODE();
  5408. }
  5409. 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)
  5410. {
  5411. USE_OPLINE
  5412. zval *op1, *op2;
  5413. int result;
  5414. op1 = RT_CONSTANT(opline, opline->op1);
  5415. op2 = EX_VAR(opline->op2.var);
  5416. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  5417. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  5418. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  5419. ZEND_VM_NEXT_OPCODE();
  5420. }
  5421. 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)
  5422. {
  5423. USE_OPLINE
  5424. zval *op1, *op2;
  5425. int result;
  5426. op1 = RT_CONSTANT(opline, opline->op1);
  5427. op2 = EX_VAR(opline->op2.var);
  5428. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  5429. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  5430. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  5431. ZEND_VM_NEXT_OPCODE();
  5432. }
  5433. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5434. {
  5435. USE_OPLINE
  5436. zval *container, *dim, *value;
  5437. zend_long offset;
  5438. HashTable *ht;
  5439. container = RT_CONSTANT(opline, opline->op1);
  5440. dim = EX_VAR(opline->op2.var);
  5441. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  5442. fetch_dim_r_index_array:
  5443. if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
  5444. offset = Z_LVAL_P(dim);
  5445. } else {
  5446. offset = zval_get_long(dim);
  5447. }
  5448. ht = Z_ARRVAL_P(container);
  5449. ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
  5450. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  5451. if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
  5452. SAVE_OPLINE();
  5453. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5454. } else {
  5455. ZEND_VM_NEXT_OPCODE();
  5456. }
  5457. } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  5458. container = Z_REFVAL_P(container);
  5459. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  5460. goto fetch_dim_r_index_array;
  5461. } else {
  5462. goto fetch_dim_r_index_slow;
  5463. }
  5464. } else {
  5465. fetch_dim_r_index_slow:
  5466. SAVE_OPLINE();
  5467. if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  5468. dim++;
  5469. }
  5470. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  5471. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5472. }
  5473. fetch_dim_r_index_undef:
  5474. ZVAL_NULL(EX_VAR(opline->result.var));
  5475. SAVE_OPLINE();
  5476. zend_undefined_offset(offset);
  5477. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5478. }
  5479. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5480. {
  5481. USE_OPLINE
  5482. zend_free_op free_op2;
  5483. zval *op1, *op2, *result;
  5484. op1 = RT_CONSTANT(opline, opline->op1);
  5485. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  5486. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  5487. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5488. result = EX_VAR(opline->result.var);
  5489. fast_long_add_function(result, op1, op2);
  5490. ZEND_VM_NEXT_OPCODE();
  5491. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  5492. result = EX_VAR(opline->result.var);
  5493. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
  5494. ZEND_VM_NEXT_OPCODE();
  5495. }
  5496. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  5497. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  5498. result = EX_VAR(opline->result.var);
  5499. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
  5500. ZEND_VM_NEXT_OPCODE();
  5501. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5502. result = EX_VAR(opline->result.var);
  5503. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
  5504. ZEND_VM_NEXT_OPCODE();
  5505. }
  5506. }
  5507. SAVE_OPLINE();
  5508. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  5509. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  5510. }
  5511. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  5512. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  5513. }
  5514. add_function(EX_VAR(opline->result.var), op1, op2);
  5515. zval_ptr_dtor_nogc(free_op2);
  5516. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5517. }
  5518. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5519. {
  5520. USE_OPLINE
  5521. zend_free_op free_op2;
  5522. zval *op1, *op2, *result;
  5523. op1 = RT_CONSTANT(opline, opline->op1);
  5524. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  5525. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  5526. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5527. result = EX_VAR(opline->result.var);
  5528. fast_long_sub_function(result, op1, op2);
  5529. ZEND_VM_NEXT_OPCODE();
  5530. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  5531. result = EX_VAR(opline->result.var);
  5532. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
  5533. ZEND_VM_NEXT_OPCODE();
  5534. }
  5535. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  5536. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  5537. result = EX_VAR(opline->result.var);
  5538. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  5539. ZEND_VM_NEXT_OPCODE();
  5540. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5541. result = EX_VAR(opline->result.var);
  5542. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
  5543. ZEND_VM_NEXT_OPCODE();
  5544. }
  5545. }
  5546. SAVE_OPLINE();
  5547. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  5548. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  5549. }
  5550. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  5551. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  5552. }
  5553. sub_function(EX_VAR(opline->result.var), op1, op2);
  5554. zval_ptr_dtor_nogc(free_op2);
  5555. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5556. }
  5557. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5558. {
  5559. USE_OPLINE
  5560. zend_free_op free_op2;
  5561. zval *op1, *op2;
  5562. SAVE_OPLINE();
  5563. op1 = RT_CONSTANT(opline, opline->op1);
  5564. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  5565. fast_div_function(EX_VAR(opline->result.var), op1, op2);
  5566. zval_ptr_dtor_nogc(free_op2);
  5567. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5568. }
  5569. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5570. {
  5571. USE_OPLINE
  5572. zend_free_op free_op2;
  5573. zval *op1, *op2, *result;
  5574. op1 = RT_CONSTANT(opline, opline->op1);
  5575. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  5576. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  5577. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5578. result = EX_VAR(opline->result.var);
  5579. if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
  5580. ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5581. } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
  5582. /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
  5583. ZVAL_LONG(result, 0);
  5584. } else {
  5585. ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
  5586. }
  5587. ZEND_VM_NEXT_OPCODE();
  5588. }
  5589. }
  5590. SAVE_OPLINE();
  5591. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  5592. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  5593. }
  5594. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  5595. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  5596. }
  5597. mod_function(EX_VAR(opline->result.var), op1, op2);
  5598. zval_ptr_dtor_nogc(free_op2);
  5599. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5600. }
  5601. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5602. {
  5603. USE_OPLINE
  5604. zend_free_op free_op2;
  5605. zval *op1, *op2;
  5606. op1 = RT_CONSTANT(opline, opline->op1);
  5607. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  5608. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  5609. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  5610. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  5611. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
  5612. ZEND_VM_NEXT_OPCODE();
  5613. }
  5614. SAVE_OPLINE();
  5615. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  5616. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  5617. }
  5618. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  5619. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  5620. }
  5621. shift_left_function(EX_VAR(opline->result.var), op1, op2);
  5622. zval_ptr_dtor_nogc(free_op2);
  5623. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5624. }
  5625. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5626. {
  5627. USE_OPLINE
  5628. zend_free_op free_op2;
  5629. zval *op1, *op2;
  5630. op1 = RT_CONSTANT(opline, opline->op1);
  5631. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  5632. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  5633. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  5634. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  5635. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
  5636. ZEND_VM_NEXT_OPCODE();
  5637. }
  5638. SAVE_OPLINE();
  5639. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  5640. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  5641. }
  5642. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  5643. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  5644. }
  5645. shift_right_function(EX_VAR(opline->result.var), op1, op2);
  5646. zval_ptr_dtor_nogc(free_op2);
  5647. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5648. }
  5649. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5650. {
  5651. USE_OPLINE
  5652. zend_free_op free_op2;
  5653. zval *op1, *op2;
  5654. SAVE_OPLINE();
  5655. op1 = RT_CONSTANT(opline, opline->op1);
  5656. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  5657. pow_function(EX_VAR(opline->result.var), op1, op2);
  5658. zval_ptr_dtor_nogc(free_op2);
  5659. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5660. }
  5661. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5662. {
  5663. USE_OPLINE
  5664. zend_free_op free_op2;
  5665. zval *op1, *op2;
  5666. op1 = RT_CONSTANT(opline, opline->op1);
  5667. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  5668. if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  5669. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  5670. zend_string *op1_str = Z_STR_P(op1);
  5671. zend_string *op2_str = Z_STR_P(op2);
  5672. zend_string *str;
  5673. if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  5674. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  5675. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  5676. } else {
  5677. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  5678. }
  5679. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  5680. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  5681. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  5682. } else {
  5683. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  5684. }
  5685. zval_ptr_dtor_nogc(free_op2);
  5686. } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
  5687. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  5688. size_t len = ZSTR_LEN(op1_str);
  5689. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  5690. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  5691. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  5692. zval_ptr_dtor_nogc(free_op2);
  5693. } else {
  5694. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  5695. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  5696. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  5697. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  5698. zval_ptr_dtor_nogc(free_op2);
  5699. }
  5700. ZEND_VM_NEXT_OPCODE();
  5701. } else {
  5702. SAVE_OPLINE();
  5703. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  5704. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  5705. }
  5706. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  5707. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  5708. }
  5709. concat_function(EX_VAR(opline->result.var), op1, op2);
  5710. zval_ptr_dtor_nogc(free_op2);
  5711. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5712. }
  5713. }
  5714. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5715. {
  5716. USE_OPLINE
  5717. zend_free_op free_op2;
  5718. zval *op1, *op2, *result;
  5719. op1 = RT_CONSTANT(opline, opline->op1);
  5720. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  5721. do {
  5722. int result;
  5723. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  5724. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5725. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  5726. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  5727. result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
  5728. } else {
  5729. break;
  5730. }
  5731. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  5732. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  5733. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  5734. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5735. result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
  5736. } else {
  5737. break;
  5738. }
  5739. } else {
  5740. break;
  5741. }
  5742. ZEND_VM_SMART_BRANCH(result, 0);
  5743. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  5744. ZEND_VM_NEXT_OPCODE();
  5745. } while (0);
  5746. SAVE_OPLINE();
  5747. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  5748. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  5749. }
  5750. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  5751. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  5752. }
  5753. result = EX_VAR(opline->result.var);
  5754. compare_function(result, op1, op2);
  5755. ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
  5756. zval_ptr_dtor_nogc(free_op2);
  5757. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5758. }
  5759. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5760. {
  5761. USE_OPLINE
  5762. zend_free_op free_op2;
  5763. zval *op1, *op2, *result;
  5764. op1 = RT_CONSTANT(opline, opline->op1);
  5765. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  5766. do {
  5767. int result;
  5768. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  5769. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5770. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  5771. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  5772. result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
  5773. } else {
  5774. break;
  5775. }
  5776. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  5777. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  5778. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  5779. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  5780. result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
  5781. } else {
  5782. break;
  5783. }
  5784. } else {
  5785. break;
  5786. }
  5787. ZEND_VM_SMART_BRANCH(result, 0);
  5788. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  5789. ZEND_VM_NEXT_OPCODE();
  5790. } while (0);
  5791. SAVE_OPLINE();
  5792. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  5793. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  5794. }
  5795. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  5796. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  5797. }
  5798. result = EX_VAR(opline->result.var);
  5799. compare_function(result, op1, op2);
  5800. ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
  5801. zval_ptr_dtor_nogc(free_op2);
  5802. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5803. }
  5804. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5805. {
  5806. USE_OPLINE
  5807. zend_free_op free_op2;
  5808. zval *op1, *op2;
  5809. SAVE_OPLINE();
  5810. op1 = RT_CONSTANT(opline, opline->op1);
  5811. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  5812. compare_function(EX_VAR(opline->result.var), op1, op2);
  5813. zval_ptr_dtor_nogc(free_op2);
  5814. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5815. }
  5816. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5817. {
  5818. USE_OPLINE
  5819. zend_free_op free_op2;
  5820. zval *container, *dim, *value, *result;
  5821. SAVE_OPLINE();
  5822. container = RT_CONSTANT(opline, opline->op1);
  5823. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  5824. if (IS_CONST != IS_CONST) {
  5825. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  5826. fetch_dim_r_array:
  5827. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
  5828. result = EX_VAR(opline->result.var);
  5829. ZVAL_COPY_DEREF(result, value);
  5830. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  5831. container = Z_REFVAL_P(container);
  5832. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  5833. goto fetch_dim_r_array;
  5834. } else {
  5835. goto fetch_dim_r_slow;
  5836. }
  5837. } else {
  5838. fetch_dim_r_slow:
  5839. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  5840. dim++;
  5841. }
  5842. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  5843. }
  5844. } else {
  5845. zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  5846. }
  5847. zval_ptr_dtor_nogc(free_op2);
  5848. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5849. }
  5850. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5851. {
  5852. USE_OPLINE
  5853. zend_free_op free_op2;
  5854. zval *container;
  5855. SAVE_OPLINE();
  5856. container = RT_CONSTANT(opline, opline->op1);
  5857. zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  5858. zval_ptr_dtor_nogc(free_op2);
  5859. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5860. }
  5861. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5862. {
  5863. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  5864. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  5865. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5866. }
  5867. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5868. } else {
  5869. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  5870. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5871. }
  5872. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5873. }
  5874. }
  5875. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5876. {
  5877. USE_OPLINE
  5878. zval *container;
  5879. zend_free_op free_op2;
  5880. zval *offset;
  5881. void **cache_slot = NULL;
  5882. SAVE_OPLINE();
  5883. container = RT_CONSTANT(opline, opline->op1);
  5884. if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  5885. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5886. }
  5887. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  5888. if (IS_CONST == IS_CONST ||
  5889. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  5890. do {
  5891. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  5892. container = Z_REFVAL_P(container);
  5893. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  5894. break;
  5895. }
  5896. }
  5897. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  5898. GET_OP1_UNDEF_CV(container, BP_VAR_R);
  5899. }
  5900. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  5901. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  5902. }
  5903. goto fetch_obj_r_no_object;
  5904. } while (0);
  5905. }
  5906. /* here we are sure we are dealing with an object */
  5907. do {
  5908. zend_object *zobj = Z_OBJ_P(container);
  5909. zval *retval;
  5910. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  5911. cache_slot = CACHE_ADDR(opline->extended_value);
  5912. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  5913. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  5914. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  5915. retval = OBJ_PROP(zobj, prop_offset);
  5916. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  5917. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  5918. break;
  5919. }
  5920. } else if (EXPECTED(zobj->properties != NULL)) {
  5921. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  5922. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  5923. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  5924. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  5925. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  5926. (EXPECTED(p->key == Z_STR_P(offset)) ||
  5927. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  5928. EXPECTED(p->key != NULL) &&
  5929. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  5930. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
  5931. break;
  5932. }
  5933. }
  5934. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  5935. }
  5936. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  5937. if (EXPECTED(retval)) {
  5938. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  5939. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  5940. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  5941. break;
  5942. }
  5943. }
  5944. }
  5945. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
  5946. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  5947. }
  5948. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  5949. fetch_obj_r_no_object:
  5950. zend_wrong_property_read(offset);
  5951. ZVAL_NULL(EX_VAR(opline->result.var));
  5952. } else {
  5953. retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  5954. if (retval != EX_VAR(opline->result.var)) {
  5955. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  5956. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  5957. zend_unwrap_reference(retval);
  5958. }
  5959. }
  5960. } while (0);
  5961. zval_ptr_dtor_nogc(free_op2);
  5962. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  5963. }
  5964. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  5965. {
  5966. USE_OPLINE
  5967. zval *container;
  5968. zend_free_op free_op2;
  5969. zval *offset;
  5970. void **cache_slot = NULL;
  5971. SAVE_OPLINE();
  5972. container = RT_CONSTANT(opline, opline->op1);
  5973. if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  5974. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  5975. }
  5976. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  5977. if (IS_CONST == IS_CONST ||
  5978. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  5979. do {
  5980. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  5981. container = Z_REFVAL_P(container);
  5982. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  5983. break;
  5984. }
  5985. }
  5986. goto fetch_obj_is_no_object;
  5987. } while (0);
  5988. }
  5989. /* here we are sure we are dealing with an object */
  5990. do {
  5991. zend_object *zobj = Z_OBJ_P(container);
  5992. zval *retval;
  5993. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  5994. cache_slot = CACHE_ADDR(opline->extended_value);
  5995. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  5996. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  5997. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  5998. retval = OBJ_PROP(zobj, prop_offset);
  5999. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  6000. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  6001. break;
  6002. }
  6003. } else if (EXPECTED(zobj->properties != NULL)) {
  6004. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  6005. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  6006. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  6007. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  6008. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  6009. (EXPECTED(p->key == Z_STR_P(offset)) ||
  6010. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  6011. EXPECTED(p->key != NULL) &&
  6012. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  6013. ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
  6014. break;
  6015. }
  6016. }
  6017. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  6018. }
  6019. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  6020. if (EXPECTED(retval)) {
  6021. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  6022. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  6023. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  6024. break;
  6025. }
  6026. }
  6027. }
  6028. }
  6029. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  6030. fetch_obj_is_no_object:
  6031. ZVAL_NULL(EX_VAR(opline->result.var));
  6032. } else {
  6033. retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  6034. if (retval != EX_VAR(opline->result.var)) {
  6035. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  6036. }
  6037. }
  6038. } while (0);
  6039. zval_ptr_dtor_nogc(free_op2);
  6040. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  6041. }
  6042. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6043. {
  6044. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  6045. /* Behave like FETCH_OBJ_W */
  6046. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  6047. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  6048. }
  6049. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  6050. } else {
  6051. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  6052. }
  6053. }
  6054. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6055. {
  6056. USE_OPLINE
  6057. zend_free_op free_op2;
  6058. zval *container;
  6059. SAVE_OPLINE();
  6060. container = RT_CONSTANT(opline, opline->op1);
  6061. zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  6062. zval_ptr_dtor_nogc(free_op2);
  6063. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  6064. }
  6065. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6066. {
  6067. USE_OPLINE
  6068. zend_free_op free_op2;
  6069. zval *op1, *op2;
  6070. zend_string *op1_str, *op2_str, *str;
  6071. op1 = RT_CONSTANT(opline, opline->op1);
  6072. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  6073. if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  6074. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  6075. zend_string *op1_str = Z_STR_P(op1);
  6076. zend_string *op2_str = Z_STR_P(op2);
  6077. zend_string *str;
  6078. if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  6079. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  6080. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  6081. } else {
  6082. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  6083. }
  6084. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  6085. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  6086. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  6087. } else {
  6088. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  6089. }
  6090. zval_ptr_dtor_nogc(free_op2);
  6091. } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
  6092. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  6093. size_t len = ZSTR_LEN(op1_str);
  6094. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  6095. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  6096. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  6097. zval_ptr_dtor_nogc(free_op2);
  6098. } else {
  6099. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  6100. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  6101. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  6102. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  6103. zval_ptr_dtor_nogc(free_op2);
  6104. }
  6105. ZEND_VM_NEXT_OPCODE();
  6106. }
  6107. SAVE_OPLINE();
  6108. if (IS_CONST == IS_CONST) {
  6109. op1_str = Z_STR_P(op1);
  6110. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  6111. op1_str = zend_string_copy(Z_STR_P(op1));
  6112. } else {
  6113. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  6114. GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  6115. }
  6116. op1_str = zval_get_string_func(op1);
  6117. }
  6118. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  6119. op2_str = Z_STR_P(op2);
  6120. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  6121. op2_str = zend_string_copy(Z_STR_P(op2));
  6122. } else {
  6123. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  6124. GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  6125. }
  6126. op2_str = zval_get_string_func(op2);
  6127. }
  6128. do {
  6129. if (IS_CONST != IS_CONST) {
  6130. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  6131. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  6132. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  6133. GC_ADDREF(op2_str);
  6134. }
  6135. }
  6136. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  6137. zend_string_release_ex(op1_str, 0);
  6138. break;
  6139. }
  6140. }
  6141. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  6142. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  6143. if (IS_CONST == IS_CONST) {
  6144. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  6145. GC_ADDREF(op1_str);
  6146. }
  6147. }
  6148. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  6149. zend_string_release_ex(op2_str, 0);
  6150. break;
  6151. }
  6152. }
  6153. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  6154. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  6155. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  6156. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  6157. if (IS_CONST != IS_CONST) {
  6158. zend_string_release_ex(op1_str, 0);
  6159. }
  6160. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  6161. zend_string_release_ex(op2_str, 0);
  6162. }
  6163. } while (0);
  6164. zval_ptr_dtor_nogc(free_op2);
  6165. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  6166. }
  6167. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6168. {
  6169. USE_OPLINE
  6170. zval *function_name;
  6171. zend_free_op free_op1, free_op2;
  6172. zval *object;
  6173. zend_function *fbc;
  6174. zend_class_entry *called_scope;
  6175. zend_object *obj;
  6176. zend_execute_data *call;
  6177. uint32_t call_info;
  6178. SAVE_OPLINE();
  6179. object = RT_CONSTANT(opline, opline->op1);
  6180. if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  6181. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  6182. }
  6183. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  6184. function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  6185. }
  6186. if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
  6187. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  6188. do {
  6189. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  6190. function_name = Z_REFVAL_P(function_name);
  6191. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  6192. break;
  6193. }
  6194. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  6195. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  6196. if (UNEXPECTED(EG(exception) != NULL)) {
  6197. HANDLE_EXCEPTION();
  6198. }
  6199. }
  6200. zend_throw_error(NULL, "Method name must be a string");
  6201. zval_ptr_dtor_nogc(free_op2);
  6202. HANDLE_EXCEPTION();
  6203. } while (0);
  6204. }
  6205. if (IS_CONST != IS_UNUSED) {
  6206. do {
  6207. if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  6208. if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  6209. object = Z_REFVAL_P(object);
  6210. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  6211. break;
  6212. }
  6213. }
  6214. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  6215. object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
  6216. if (UNEXPECTED(EG(exception) != NULL)) {
  6217. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  6218. zval_ptr_dtor_nogc(free_op2);
  6219. }
  6220. HANDLE_EXCEPTION();
  6221. }
  6222. }
  6223. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  6224. function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  6225. }
  6226. zend_invalid_method_call(object, function_name);
  6227. zval_ptr_dtor_nogc(free_op2);
  6228. HANDLE_EXCEPTION();
  6229. }
  6230. } while (0);
  6231. }
  6232. obj = Z_OBJ_P(object);
  6233. called_scope = obj->ce;
  6234. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  6235. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  6236. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  6237. } else {
  6238. zend_object *orig_obj = obj;
  6239. if (UNEXPECTED(obj->handlers->get_method == NULL)) {
  6240. zend_throw_error(NULL, "Object does not support method calls");
  6241. zval_ptr_dtor_nogc(free_op2);
  6242. HANDLE_EXCEPTION();
  6243. }
  6244. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  6245. function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  6246. }
  6247. /* First, locate the function. */
  6248. 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));
  6249. if (UNEXPECTED(fbc == NULL)) {
  6250. if (EXPECTED(!EG(exception))) {
  6251. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  6252. }
  6253. zval_ptr_dtor_nogc(free_op2);
  6254. HANDLE_EXCEPTION();
  6255. }
  6256. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  6257. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  6258. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  6259. EXPECTED(obj == orig_obj)) {
  6260. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  6261. }
  6262. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  6263. /* Reset "object" to trigger reference counting */
  6264. object = NULL;
  6265. }
  6266. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  6267. init_func_run_time_cache(&fbc->op_array);
  6268. }
  6269. }
  6270. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  6271. zval_ptr_dtor_nogc(free_op2);
  6272. }
  6273. call_info = ZEND_CALL_NESTED_FUNCTION;
  6274. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  6275. obj = NULL;
  6276. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
  6277. HANDLE_EXCEPTION();
  6278. }
  6279. } else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  6280. /* CV may be changed indirectly (e.g. when it's a reference) */
  6281. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
  6282. if (IS_CONST == IS_CV) {
  6283. GC_ADDREF(obj); /* For $this pointer */
  6284. } else if (free_op1 != object) {
  6285. GC_ADDREF(obj); /* For $this pointer */
  6286. }
  6287. }
  6288. call = zend_vm_stack_push_call_frame(call_info,
  6289. fbc, opline->extended_value, called_scope, obj);
  6290. call->prev_execute_data = EX(call);
  6291. EX(call) = call;
  6292. ZEND_VM_NEXT_OPCODE();
  6293. }
  6294. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6295. {
  6296. USE_OPLINE
  6297. zval *function_name;
  6298. zend_class_entry *ce;
  6299. zend_object *object;
  6300. zend_function *fbc;
  6301. zend_execute_data *call;
  6302. SAVE_OPLINE();
  6303. if (IS_CONST == IS_CONST) {
  6304. /* no function found. try a static method in class */
  6305. ce = CACHED_PTR(opline->result.num);
  6306. if (UNEXPECTED(ce == NULL)) {
  6307. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  6308. if (UNEXPECTED(ce == NULL)) {
  6309. ZEND_ASSERT(EG(exception));
  6310. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  6311. HANDLE_EXCEPTION();
  6312. }
  6313. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  6314. CACHE_PTR(opline->result.num, ce);
  6315. }
  6316. }
  6317. } else if (IS_CONST == IS_UNUSED) {
  6318. ce = zend_fetch_class(NULL, opline->op1.num);
  6319. if (UNEXPECTED(ce == NULL)) {
  6320. ZEND_ASSERT(EG(exception));
  6321. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  6322. HANDLE_EXCEPTION();
  6323. }
  6324. } else {
  6325. ce = Z_CE_P(EX_VAR(opline->op1.var));
  6326. }
  6327. if (IS_CONST == IS_CONST &&
  6328. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  6329. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  6330. /* nothing to do */
  6331. } else if (IS_CONST != IS_CONST &&
  6332. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  6333. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  6334. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  6335. } else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  6336. zend_free_op free_op2;
  6337. function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  6338. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  6339. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  6340. do {
  6341. if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  6342. function_name = Z_REFVAL_P(function_name);
  6343. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  6344. break;
  6345. }
  6346. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  6347. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  6348. if (UNEXPECTED(EG(exception) != NULL)) {
  6349. HANDLE_EXCEPTION();
  6350. }
  6351. }
  6352. zend_throw_error(NULL, "Function name must be a string");
  6353. zval_ptr_dtor_nogc(free_op2);
  6354. HANDLE_EXCEPTION();
  6355. } while (0);
  6356. }
  6357. }
  6358. if (ce->get_static_method) {
  6359. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  6360. } else {
  6361. 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));
  6362. }
  6363. if (UNEXPECTED(fbc == NULL)) {
  6364. if (EXPECTED(!EG(exception))) {
  6365. zend_undefined_method(ce, Z_STR_P(function_name));
  6366. }
  6367. zval_ptr_dtor_nogc(free_op2);
  6368. HANDLE_EXCEPTION();
  6369. }
  6370. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  6371. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  6372. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
  6373. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  6374. }
  6375. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  6376. init_func_run_time_cache(&fbc->op_array);
  6377. }
  6378. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  6379. zval_ptr_dtor_nogc(free_op2);
  6380. }
  6381. } else {
  6382. if (UNEXPECTED(ce->constructor == NULL)) {
  6383. zend_throw_error(NULL, "Cannot call constructor");
  6384. HANDLE_EXCEPTION();
  6385. }
  6386. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  6387. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  6388. HANDLE_EXCEPTION();
  6389. }
  6390. fbc = ce->constructor;
  6391. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  6392. init_func_run_time_cache(&fbc->op_array);
  6393. }
  6394. }
  6395. object = NULL;
  6396. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  6397. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  6398. object = Z_OBJ(EX(This));
  6399. ce = object->ce;
  6400. } else {
  6401. zend_non_static_method_call(fbc);
  6402. if (UNEXPECTED(EG(exception) != NULL)) {
  6403. HANDLE_EXCEPTION();
  6404. }
  6405. }
  6406. }
  6407. if (IS_CONST == IS_UNUSED) {
  6408. /* previous opcode is ZEND_FETCH_CLASS */
  6409. if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  6410. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
  6411. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  6412. ce = Z_OBJCE(EX(This));
  6413. } else {
  6414. ce = Z_CE(EX(This));
  6415. }
  6416. }
  6417. }
  6418. call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  6419. fbc, opline->extended_value, ce, object);
  6420. call->prev_execute_data = EX(call);
  6421. EX(call) = call;
  6422. ZEND_VM_NEXT_OPCODE();
  6423. }
  6424. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6425. {
  6426. USE_OPLINE
  6427. zend_free_op free_op2;
  6428. zval *function_name;
  6429. zend_fcall_info_cache fcc;
  6430. char *error = NULL;
  6431. zend_function *func;
  6432. zend_class_entry *called_scope;
  6433. zend_object *object;
  6434. zend_execute_data *call;
  6435. uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
  6436. SAVE_OPLINE();
  6437. function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  6438. if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
  6439. func = fcc.function_handler;
  6440. called_scope = fcc.called_scope;
  6441. object = fcc.object;
  6442. if (error) {
  6443. efree(error);
  6444. /* This is the only soft error is_callable() can generate */
  6445. zend_non_static_method_call(func);
  6446. if (UNEXPECTED(EG(exception) != NULL)) {
  6447. zval_ptr_dtor_nogc(free_op2);
  6448. HANDLE_EXCEPTION();
  6449. }
  6450. }
  6451. if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
  6452. /* Delay closure destruction until its invocation */
  6453. GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
  6454. call_info |= ZEND_CALL_CLOSURE;
  6455. if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
  6456. call_info |= ZEND_CALL_FAKE_CLOSURE;
  6457. }
  6458. } else if (object) {
  6459. call_info |= ZEND_CALL_RELEASE_THIS;
  6460. GC_ADDREF(object); /* For $this pointer */
  6461. }
  6462. zval_ptr_dtor_nogc(free_op2);
  6463. if (((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
  6464. if (call_info & ZEND_CALL_CLOSURE) {
  6465. zend_object_release(ZEND_CLOSURE_OBJECT(func));
  6466. }
  6467. if (call_info & ZEND_CALL_RELEASE_THIS) {
  6468. zend_object_release(object);
  6469. }
  6470. HANDLE_EXCEPTION();
  6471. }
  6472. if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) {
  6473. init_func_run_time_cache(&func->op_array);
  6474. }
  6475. } else {
  6476. zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
  6477. efree(error);
  6478. zval_ptr_dtor_nogc(free_op2);
  6479. if (UNEXPECTED(EG(exception))) {
  6480. HANDLE_EXCEPTION();
  6481. }
  6482. func = (zend_function*)&zend_pass_function;
  6483. called_scope = NULL;
  6484. object = NULL;
  6485. }
  6486. call = zend_vm_stack_push_call_frame(call_info,
  6487. func, opline->extended_value, called_scope, object);
  6488. call->prev_execute_data = EX(call);
  6489. EX(call) = call;
  6490. ZEND_VM_NEXT_OPCODE();
  6491. }
  6492. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6493. {
  6494. USE_OPLINE
  6495. zval *expr_ptr, new_expr;
  6496. SAVE_OPLINE();
  6497. if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
  6498. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  6499. expr_ptr = NULL;
  6500. if (Z_ISREF_P(expr_ptr)) {
  6501. Z_ADDREF_P(expr_ptr);
  6502. } else {
  6503. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  6504. }
  6505. } else {
  6506. expr_ptr = RT_CONSTANT(opline, opline->op1);
  6507. if (IS_CONST == IS_TMP_VAR) {
  6508. /* pass */
  6509. } else if (IS_CONST == IS_CONST) {
  6510. Z_TRY_ADDREF_P(expr_ptr);
  6511. } else if (IS_CONST == IS_CV) {
  6512. ZVAL_DEREF(expr_ptr);
  6513. Z_TRY_ADDREF_P(expr_ptr);
  6514. } else /* if (IS_CONST == IS_VAR) */ {
  6515. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  6516. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  6517. expr_ptr = Z_REFVAL_P(expr_ptr);
  6518. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  6519. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  6520. expr_ptr = &new_expr;
  6521. efree_size(ref, sizeof(zend_reference));
  6522. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  6523. Z_ADDREF_P(expr_ptr);
  6524. }
  6525. }
  6526. }
  6527. }
  6528. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  6529. zend_free_op free_op2;
  6530. zval *offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  6531. zend_string *str;
  6532. zend_ulong hval;
  6533. add_again:
  6534. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  6535. str = Z_STR_P(offset);
  6536. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  6537. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  6538. goto num_index;
  6539. }
  6540. }
  6541. str_index:
  6542. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  6543. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  6544. hval = Z_LVAL_P(offset);
  6545. num_index:
  6546. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  6547. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  6548. offset = Z_REFVAL_P(offset);
  6549. goto add_again;
  6550. } else if (Z_TYPE_P(offset) == IS_NULL) {
  6551. str = ZSTR_EMPTY_ALLOC();
  6552. goto str_index;
  6553. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  6554. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  6555. goto num_index;
  6556. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  6557. hval = 0;
  6558. goto num_index;
  6559. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  6560. hval = 1;
  6561. goto num_index;
  6562. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  6563. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  6564. str = ZSTR_EMPTY_ALLOC();
  6565. goto str_index;
  6566. } else {
  6567. zend_illegal_offset();
  6568. zval_ptr_dtor_nogc(expr_ptr);
  6569. }
  6570. zval_ptr_dtor_nogc(free_op2);
  6571. } else {
  6572. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  6573. zend_cannot_add_element();
  6574. zval_ptr_dtor_nogc(expr_ptr);
  6575. }
  6576. }
  6577. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  6578. }
  6579. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6580. {
  6581. zval *array;
  6582. uint32_t size;
  6583. USE_OPLINE
  6584. array = EX_VAR(opline->result.var);
  6585. if (IS_CONST != IS_UNUSED) {
  6586. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  6587. ZVAL_ARR(array, zend_new_array(size));
  6588. /* Explicitly initialize array as not-packed if flag is set */
  6589. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  6590. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  6591. }
  6592. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  6593. } else {
  6594. ZVAL_EMPTY_ARRAY(array);
  6595. ZEND_VM_NEXT_OPCODE();
  6596. }
  6597. }
  6598. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6599. {
  6600. USE_OPLINE
  6601. zend_free_op free_op2;
  6602. zval *container;
  6603. int result;
  6604. zend_ulong hval;
  6605. zval *offset;
  6606. SAVE_OPLINE();
  6607. container = RT_CONSTANT(opline, opline->op1);
  6608. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  6609. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  6610. HashTable *ht;
  6611. zval *value;
  6612. zend_string *str;
  6613. isset_dim_obj_array:
  6614. ht = Z_ARRVAL_P(container);
  6615. isset_again:
  6616. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  6617. str = Z_STR_P(offset);
  6618. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  6619. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  6620. goto num_index_prop;
  6621. }
  6622. }
  6623. value = zend_hash_find_ex_ind(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
  6624. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  6625. hval = Z_LVAL_P(offset);
  6626. num_index_prop:
  6627. value = zend_hash_index_find(ht, hval);
  6628. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  6629. offset = Z_REFVAL_P(offset);
  6630. goto isset_again;
  6631. } else {
  6632. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  6633. }
  6634. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  6635. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  6636. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  6637. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  6638. } else {
  6639. result = (value == NULL || !i_zend_is_true(value));
  6640. }
  6641. goto isset_dim_obj_exit;
  6642. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  6643. container = Z_REFVAL_P(container);
  6644. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  6645. goto isset_dim_obj_array;
  6646. }
  6647. }
  6648. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  6649. offset++;
  6650. }
  6651. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  6652. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  6653. } else {
  6654. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  6655. }
  6656. isset_dim_obj_exit:
  6657. zval_ptr_dtor_nogc(free_op2);
  6658. ZEND_VM_SMART_BRANCH(result, 1);
  6659. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  6660. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  6661. }
  6662. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6663. {
  6664. USE_OPLINE
  6665. zend_free_op free_op2;
  6666. zval *container;
  6667. int result;
  6668. zval *offset;
  6669. SAVE_OPLINE();
  6670. container = RT_CONSTANT(opline, opline->op1);
  6671. if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  6672. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  6673. }
  6674. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  6675. if (IS_CONST == IS_CONST ||
  6676. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  6677. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  6678. container = Z_REFVAL_P(container);
  6679. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  6680. goto isset_no_object;
  6681. }
  6682. } else {
  6683. goto isset_no_object;
  6684. }
  6685. }
  6686. if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
  6687. zend_wrong_property_check(offset);
  6688. isset_no_object:
  6689. result = (opline->extended_value & ZEND_ISEMPTY);
  6690. } else {
  6691. result =
  6692. (opline->extended_value & ZEND_ISEMPTY) ^
  6693. Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  6694. }
  6695. zval_ptr_dtor_nogc(free_op2);
  6696. ZEND_VM_SMART_BRANCH(result, 1);
  6697. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  6698. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  6699. }
  6700. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6701. {
  6702. USE_OPLINE
  6703. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  6704. SAVE_OPLINE();
  6705. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  6706. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  6707. }
  6708. /* Destroy the previously yielded value */
  6709. zval_ptr_dtor(&generator->value);
  6710. /* Destroy the previously yielded key */
  6711. zval_ptr_dtor(&generator->key);
  6712. /* Set the new yielded value */
  6713. if (IS_CONST != IS_UNUSED) {
  6714. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  6715. /* Constants and temporary variables aren't yieldable by reference,
  6716. * but we still allow them with a notice. */
  6717. if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
  6718. zval *value;
  6719. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  6720. value = RT_CONSTANT(opline, opline->op1);
  6721. ZVAL_COPY_VALUE(&generator->value, value);
  6722. if (IS_CONST == IS_CONST) {
  6723. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  6724. Z_ADDREF(generator->value);
  6725. }
  6726. }
  6727. } else {
  6728. zval *value_ptr = NULL;
  6729. /* If a function call result is yielded and the function did
  6730. * not return by reference we throw a notice. */
  6731. if (IS_CONST == IS_VAR &&
  6732. (value_ptr == &EG(uninitialized_zval) ||
  6733. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  6734. !Z_ISREF_P(value_ptr)))) {
  6735. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  6736. ZVAL_COPY(&generator->value, value_ptr);
  6737. } else {
  6738. if (Z_ISREF_P(value_ptr)) {
  6739. Z_ADDREF_P(value_ptr);
  6740. } else {
  6741. ZVAL_MAKE_REF_EX(value_ptr, 2);
  6742. }
  6743. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  6744. }
  6745. }
  6746. } else {
  6747. zval *value = RT_CONSTANT(opline, opline->op1);
  6748. /* Consts, temporary variables and references need copying */
  6749. if (IS_CONST == IS_CONST) {
  6750. ZVAL_COPY_VALUE(&generator->value, value);
  6751. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  6752. Z_ADDREF(generator->value);
  6753. }
  6754. } else if (IS_CONST == IS_TMP_VAR) {
  6755. ZVAL_COPY_VALUE(&generator->value, value);
  6756. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  6757. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  6758. } else {
  6759. ZVAL_COPY_VALUE(&generator->value, value);
  6760. if (IS_CONST == IS_CV) {
  6761. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  6762. }
  6763. }
  6764. }
  6765. } else {
  6766. /* If no value was specified yield null */
  6767. ZVAL_NULL(&generator->value);
  6768. }
  6769. /* Set the new yielded key */
  6770. if (IS_TMP_VAR != IS_UNUSED) {
  6771. zend_free_op free_op2;
  6772. zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  6773. /* Consts, temporary variables and references need copying */
  6774. if (IS_TMP_VAR == IS_CONST) {
  6775. ZVAL_COPY_VALUE(&generator->key, key);
  6776. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  6777. Z_ADDREF(generator->key);
  6778. }
  6779. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  6780. ZVAL_COPY_VALUE(&generator->key, key);
  6781. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  6782. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  6783. } else {
  6784. ZVAL_COPY_VALUE(&generator->key, key);
  6785. if (IS_TMP_VAR == IS_CV) {
  6786. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  6787. }
  6788. }
  6789. if (Z_TYPE(generator->key) == IS_LONG
  6790. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  6791. ) {
  6792. generator->largest_used_integer_key = Z_LVAL(generator->key);
  6793. }
  6794. } else {
  6795. /* If no key was specified we use auto-increment keys */
  6796. generator->largest_used_integer_key++;
  6797. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  6798. }
  6799. if (RETURN_VALUE_USED(opline)) {
  6800. /* If the return value of yield is used set the send
  6801. * target and initialize it to NULL */
  6802. generator->send_target = EX_VAR(opline->result.var);
  6803. ZVAL_NULL(generator->send_target);
  6804. } else {
  6805. generator->send_target = NULL;
  6806. }
  6807. /* We increment to the next op, so we are at the correct position when the
  6808. * generator is resumed. */
  6809. ZEND_VM_INC_OPCODE();
  6810. /* The GOTO VM uses a local opline variable. We need to set the opline
  6811. * variable in execute_data so we don't resume at an old position. */
  6812. SAVE_OPLINE();
  6813. ZEND_VM_RETURN();
  6814. }
  6815. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CONST_VAR(int type ZEND_OPCODE_HANDLER_ARGS_DC)
  6816. {
  6817. USE_OPLINE
  6818. zval *varname;
  6819. zval *retval;
  6820. zend_string *name, *tmp_name;
  6821. zend_class_entry *ce;
  6822. SAVE_OPLINE();
  6823. do {
  6824. if (IS_VAR == IS_CONST) {
  6825. if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) {
  6826. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  6827. break;
  6828. } else {
  6829. zval *class_name = RT_CONSTANT(opline, opline->op2);
  6830. if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) {
  6831. ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  6832. if (UNEXPECTED(ce == NULL)) {
  6833. retval = NULL;
  6834. break;
  6835. }
  6836. if (IS_CONST != IS_CONST) {
  6837. CACHE_PTR(opline->extended_value, ce);
  6838. }
  6839. }
  6840. }
  6841. } else {
  6842. if (IS_VAR == IS_UNUSED) {
  6843. ce = zend_fetch_class(NULL, opline->op2.num);
  6844. if (UNEXPECTED(ce == NULL)) {
  6845. retval = NULL;
  6846. break;
  6847. }
  6848. } else {
  6849. ce = Z_CE_P(EX_VAR(opline->op2.var));
  6850. }
  6851. if (IS_CONST == IS_CONST &&
  6852. EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  6853. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  6854. break;
  6855. }
  6856. }
  6857. varname = RT_CONSTANT(opline, opline->op1);
  6858. if (IS_CONST == IS_CONST) {
  6859. name = Z_STR_P(varname);
  6860. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  6861. name = Z_STR_P(varname);
  6862. tmp_name = NULL;
  6863. } else {
  6864. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  6865. zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC);
  6866. }
  6867. name = zval_get_tmp_string(varname, &tmp_name);
  6868. }
  6869. retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
  6870. if (IS_CONST != IS_CONST) {
  6871. zend_tmp_string_release(tmp_name);
  6872. }
  6873. if (IS_CONST == IS_CONST && EXPECTED(retval)) {
  6874. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval);
  6875. }
  6876. } while (0);
  6877. if (UNEXPECTED(retval == NULL)) {
  6878. if (EG(exception)) {
  6879. ZVAL_UNDEF(EX_VAR(opline->result.var));
  6880. HANDLE_EXCEPTION();
  6881. } else {
  6882. ZEND_ASSERT(type == BP_VAR_IS);
  6883. retval = &EG(uninitialized_zval);
  6884. }
  6885. }
  6886. if (type == BP_VAR_R || type == BP_VAR_IS) {
  6887. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  6888. } else {
  6889. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  6890. }
  6891. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  6892. }
  6893. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6894. {
  6895. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6896. }
  6897. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6898. {
  6899. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6900. }
  6901. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6902. {
  6903. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6904. }
  6905. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6906. {
  6907. int fetch_type =
  6908. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  6909. BP_VAR_W : BP_VAR_R;
  6910. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6911. }
  6912. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6913. {
  6914. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6915. }
  6916. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6917. {
  6918. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  6919. }
  6920. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6921. {
  6922. USE_OPLINE
  6923. zval *varname;
  6924. zend_string *name, *tmp_name;
  6925. zend_class_entry *ce;
  6926. SAVE_OPLINE();
  6927. if (IS_VAR == IS_CONST) {
  6928. ce = CACHED_PTR(opline->extended_value);
  6929. if (UNEXPECTED(ce == NULL)) {
  6930. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  6931. if (UNEXPECTED(ce == NULL)) {
  6932. ZEND_ASSERT(EG(exception));
  6933. HANDLE_EXCEPTION();
  6934. }
  6935. /*CACHE_PTR(opline->extended_value, ce);*/
  6936. }
  6937. } else if (IS_VAR == IS_UNUSED) {
  6938. ce = zend_fetch_class(NULL, opline->op2.num);
  6939. if (UNEXPECTED(ce == NULL)) {
  6940. ZEND_ASSERT(EG(exception));
  6941. HANDLE_EXCEPTION();
  6942. }
  6943. } else {
  6944. ce = Z_CE_P(EX_VAR(opline->op2.var));
  6945. }
  6946. varname = RT_CONSTANT(opline, opline->op1);
  6947. if (IS_CONST == IS_CONST) {
  6948. name = Z_STR_P(varname);
  6949. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  6950. name = Z_STR_P(varname);
  6951. tmp_name = NULL;
  6952. } else {
  6953. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  6954. varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
  6955. }
  6956. name = zval_get_tmp_string(varname, &tmp_name);
  6957. }
  6958. zend_std_unset_static_property(ce, name);
  6959. if (IS_CONST != IS_CONST) {
  6960. zend_tmp_string_release(tmp_name);
  6961. }
  6962. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  6963. }
  6964. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  6965. {
  6966. USE_OPLINE
  6967. zval *value;
  6968. int result;
  6969. zval *varname;
  6970. zend_string *name, *tmp_name;
  6971. zend_class_entry *ce;
  6972. SAVE_OPLINE();
  6973. if (IS_VAR == IS_CONST) {
  6974. if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) {
  6975. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  6976. goto is_static_prop_return;
  6977. } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) {
  6978. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  6979. if (UNEXPECTED(ce == NULL)) {
  6980. ZEND_ASSERT(EG(exception));
  6981. ZVAL_UNDEF(EX_VAR(opline->result.var));
  6982. HANDLE_EXCEPTION();
  6983. }
  6984. if (IS_CONST != IS_CONST) {
  6985. CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce);
  6986. }
  6987. }
  6988. } else {
  6989. if (IS_VAR == IS_UNUSED) {
  6990. ce = zend_fetch_class(NULL, opline->op2.num);
  6991. if (UNEXPECTED(ce == NULL)) {
  6992. ZEND_ASSERT(EG(exception));
  6993. ZVAL_UNDEF(EX_VAR(opline->result.var));
  6994. HANDLE_EXCEPTION();
  6995. }
  6996. } else {
  6997. ce = Z_CE_P(EX_VAR(opline->op2.var));
  6998. }
  6999. if (IS_CONST == IS_CONST &&
  7000. EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) {
  7001. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  7002. goto is_static_prop_return;
  7003. }
  7004. }
  7005. varname = RT_CONSTANT(opline, opline->op1);
  7006. if (IS_CONST == IS_CONST) {
  7007. name = Z_STR_P(varname);
  7008. } else {
  7009. name = zval_get_tmp_string(varname, &tmp_name);
  7010. }
  7011. value = zend_std_get_static_property(ce, name, 1);
  7012. if (IS_CONST == IS_CONST && value) {
  7013. CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value);
  7014. }
  7015. if (IS_CONST != IS_CONST) {
  7016. zend_tmp_string_release(tmp_name);
  7017. }
  7018. is_static_prop_return:
  7019. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  7020. result = value && Z_TYPE_P(value) > IS_NULL &&
  7021. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  7022. } else {
  7023. result = !value || !i_zend_is_true(value);
  7024. }
  7025. ZEND_VM_SMART_BRANCH(result, 1);
  7026. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  7027. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7028. }
  7029. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7030. {
  7031. USE_OPLINE
  7032. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  7033. SAVE_OPLINE();
  7034. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  7035. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7036. }
  7037. /* Destroy the previously yielded value */
  7038. zval_ptr_dtor(&generator->value);
  7039. /* Destroy the previously yielded key */
  7040. zval_ptr_dtor(&generator->key);
  7041. /* Set the new yielded value */
  7042. if (IS_CONST != IS_UNUSED) {
  7043. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  7044. /* Constants and temporary variables aren't yieldable by reference,
  7045. * but we still allow them with a notice. */
  7046. if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
  7047. zval *value;
  7048. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  7049. value = RT_CONSTANT(opline, opline->op1);
  7050. ZVAL_COPY_VALUE(&generator->value, value);
  7051. if (IS_CONST == IS_CONST) {
  7052. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  7053. Z_ADDREF(generator->value);
  7054. }
  7055. }
  7056. } else {
  7057. zval *value_ptr = NULL;
  7058. /* If a function call result is yielded and the function did
  7059. * not return by reference we throw a notice. */
  7060. if (IS_CONST == IS_VAR &&
  7061. (value_ptr == &EG(uninitialized_zval) ||
  7062. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  7063. !Z_ISREF_P(value_ptr)))) {
  7064. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  7065. ZVAL_COPY(&generator->value, value_ptr);
  7066. } else {
  7067. if (Z_ISREF_P(value_ptr)) {
  7068. Z_ADDREF_P(value_ptr);
  7069. } else {
  7070. ZVAL_MAKE_REF_EX(value_ptr, 2);
  7071. }
  7072. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  7073. }
  7074. }
  7075. } else {
  7076. zval *value = RT_CONSTANT(opline, opline->op1);
  7077. /* Consts, temporary variables and references need copying */
  7078. if (IS_CONST == IS_CONST) {
  7079. ZVAL_COPY_VALUE(&generator->value, value);
  7080. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  7081. Z_ADDREF(generator->value);
  7082. }
  7083. } else if (IS_CONST == IS_TMP_VAR) {
  7084. ZVAL_COPY_VALUE(&generator->value, value);
  7085. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  7086. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  7087. } else {
  7088. ZVAL_COPY_VALUE(&generator->value, value);
  7089. if (IS_CONST == IS_CV) {
  7090. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  7091. }
  7092. }
  7093. }
  7094. } else {
  7095. /* If no value was specified yield null */
  7096. ZVAL_NULL(&generator->value);
  7097. }
  7098. /* Set the new yielded key */
  7099. if (IS_VAR != IS_UNUSED) {
  7100. zend_free_op free_op2;
  7101. zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  7102. /* Consts, temporary variables and references need copying */
  7103. if (IS_VAR == IS_CONST) {
  7104. ZVAL_COPY_VALUE(&generator->key, key);
  7105. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  7106. Z_ADDREF(generator->key);
  7107. }
  7108. } else if (IS_VAR == IS_TMP_VAR) {
  7109. ZVAL_COPY_VALUE(&generator->key, key);
  7110. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  7111. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  7112. zval_ptr_dtor_nogc(free_op2);
  7113. } else {
  7114. ZVAL_COPY_VALUE(&generator->key, key);
  7115. if (IS_VAR == IS_CV) {
  7116. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  7117. }
  7118. }
  7119. if (Z_TYPE(generator->key) == IS_LONG
  7120. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  7121. ) {
  7122. generator->largest_used_integer_key = Z_LVAL(generator->key);
  7123. }
  7124. } else {
  7125. /* If no key was specified we use auto-increment keys */
  7126. generator->largest_used_integer_key++;
  7127. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  7128. }
  7129. if (RETURN_VALUE_USED(opline)) {
  7130. /* If the return value of yield is used set the send
  7131. * target and initialize it to NULL */
  7132. generator->send_target = EX_VAR(opline->result.var);
  7133. ZVAL_NULL(generator->send_target);
  7134. } else {
  7135. generator->send_target = NULL;
  7136. }
  7137. /* We increment to the next op, so we are at the correct position when the
  7138. * generator is resumed. */
  7139. ZEND_VM_INC_OPCODE();
  7140. /* The GOTO VM uses a local opline variable. We need to set the opline
  7141. * variable in execute_data so we don't resume at an old position. */
  7142. SAVE_OPLINE();
  7143. ZEND_VM_RETURN();
  7144. }
  7145. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
  7146. {
  7147. USE_OPLINE
  7148. zval *varname;
  7149. zval *retval;
  7150. zend_string *name, *tmp_name;
  7151. HashTable *target_symbol_table;
  7152. SAVE_OPLINE();
  7153. varname = RT_CONSTANT(opline, opline->op1);
  7154. if (IS_CONST == IS_CONST) {
  7155. name = Z_STR_P(varname);
  7156. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  7157. name = Z_STR_P(varname);
  7158. tmp_name = NULL;
  7159. } else {
  7160. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  7161. GET_OP1_UNDEF_CV(varname, BP_VAR_R);
  7162. }
  7163. name = zval_get_tmp_string(varname, &tmp_name);
  7164. }
  7165. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  7166. retval = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
  7167. if (retval == NULL) {
  7168. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  7169. fetch_this:
  7170. zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
  7171. if (IS_CONST != IS_CONST) {
  7172. zend_tmp_string_release(tmp_name);
  7173. }
  7174. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7175. }
  7176. if (type == BP_VAR_W) {
  7177. retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
  7178. } else if (type == BP_VAR_IS) {
  7179. retval = &EG(uninitialized_zval);
  7180. } else {
  7181. zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
  7182. if (type == BP_VAR_RW) {
  7183. retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
  7184. } else {
  7185. retval = &EG(uninitialized_zval);
  7186. }
  7187. }
  7188. /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
  7189. } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
  7190. retval = Z_INDIRECT_P(retval);
  7191. if (Z_TYPE_P(retval) == IS_UNDEF) {
  7192. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  7193. goto fetch_this;
  7194. }
  7195. if (type == BP_VAR_W) {
  7196. ZVAL_NULL(retval);
  7197. } else if (type == BP_VAR_IS) {
  7198. retval = &EG(uninitialized_zval);
  7199. } else {
  7200. zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
  7201. if (type == BP_VAR_RW) {
  7202. ZVAL_NULL(retval);
  7203. } else {
  7204. retval = &EG(uninitialized_zval);
  7205. }
  7206. }
  7207. }
  7208. }
  7209. if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
  7210. }
  7211. if (IS_CONST != IS_CONST) {
  7212. zend_tmp_string_release(tmp_name);
  7213. }
  7214. ZEND_ASSERT(retval != NULL);
  7215. if (type == BP_VAR_R || type == BP_VAR_IS) {
  7216. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  7217. } else {
  7218. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  7219. }
  7220. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7221. }
  7222. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7223. {
  7224. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  7225. }
  7226. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7227. {
  7228. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  7229. }
  7230. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7231. {
  7232. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  7233. }
  7234. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7235. {
  7236. int fetch_type =
  7237. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  7238. BP_VAR_W : BP_VAR_R;
  7239. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  7240. }
  7241. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7242. {
  7243. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  7244. }
  7245. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7246. {
  7247. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  7248. }
  7249. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
  7250. {
  7251. USE_OPLINE
  7252. zval *varname;
  7253. zval *retval;
  7254. zend_string *name, *tmp_name;
  7255. zend_class_entry *ce;
  7256. SAVE_OPLINE();
  7257. do {
  7258. if (IS_UNUSED == IS_CONST) {
  7259. if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) {
  7260. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  7261. break;
  7262. } else {
  7263. zval *class_name = RT_CONSTANT(opline, opline->op2);
  7264. if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) {
  7265. ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  7266. if (UNEXPECTED(ce == NULL)) {
  7267. retval = NULL;
  7268. break;
  7269. }
  7270. if (IS_CONST != IS_CONST) {
  7271. CACHE_PTR(opline->extended_value, ce);
  7272. }
  7273. }
  7274. }
  7275. } else {
  7276. if (IS_UNUSED == IS_UNUSED) {
  7277. ce = zend_fetch_class(NULL, opline->op2.num);
  7278. if (UNEXPECTED(ce == NULL)) {
  7279. retval = NULL;
  7280. break;
  7281. }
  7282. } else {
  7283. ce = Z_CE_P(EX_VAR(opline->op2.var));
  7284. }
  7285. if (IS_CONST == IS_CONST &&
  7286. EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  7287. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  7288. break;
  7289. }
  7290. }
  7291. varname = RT_CONSTANT(opline, opline->op1);
  7292. if (IS_CONST == IS_CONST) {
  7293. name = Z_STR_P(varname);
  7294. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  7295. name = Z_STR_P(varname);
  7296. tmp_name = NULL;
  7297. } else {
  7298. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  7299. zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC);
  7300. }
  7301. name = zval_get_tmp_string(varname, &tmp_name);
  7302. }
  7303. retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
  7304. if (IS_CONST != IS_CONST) {
  7305. zend_tmp_string_release(tmp_name);
  7306. }
  7307. if (IS_CONST == IS_CONST && EXPECTED(retval)) {
  7308. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval);
  7309. }
  7310. } while (0);
  7311. if (UNEXPECTED(retval == NULL)) {
  7312. if (EG(exception)) {
  7313. ZVAL_UNDEF(EX_VAR(opline->result.var));
  7314. HANDLE_EXCEPTION();
  7315. } else {
  7316. ZEND_ASSERT(type == BP_VAR_IS);
  7317. retval = &EG(uninitialized_zval);
  7318. }
  7319. }
  7320. if (type == BP_VAR_R || type == BP_VAR_IS) {
  7321. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  7322. } else {
  7323. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  7324. }
  7325. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7326. }
  7327. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7328. {
  7329. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  7330. }
  7331. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7332. {
  7333. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  7334. }
  7335. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7336. {
  7337. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  7338. }
  7339. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7340. {
  7341. int fetch_type =
  7342. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  7343. BP_VAR_W : BP_VAR_R;
  7344. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  7345. }
  7346. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7347. {
  7348. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  7349. }
  7350. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7351. {
  7352. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  7353. }
  7354. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7355. {
  7356. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  7357. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  7358. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7359. }
  7360. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7361. } else {
  7362. if (IS_UNUSED == IS_UNUSED) {
  7363. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7364. }
  7365. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7366. }
  7367. }
  7368. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7369. {
  7370. USE_OPLINE
  7371. zval *function_name;
  7372. zend_class_entry *ce;
  7373. zend_object *object;
  7374. zend_function *fbc;
  7375. zend_execute_data *call;
  7376. SAVE_OPLINE();
  7377. if (IS_CONST == IS_CONST) {
  7378. /* no function found. try a static method in class */
  7379. ce = CACHED_PTR(opline->result.num);
  7380. if (UNEXPECTED(ce == NULL)) {
  7381. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  7382. if (UNEXPECTED(ce == NULL)) {
  7383. ZEND_ASSERT(EG(exception));
  7384. HANDLE_EXCEPTION();
  7385. }
  7386. if (IS_UNUSED != IS_CONST) {
  7387. CACHE_PTR(opline->result.num, ce);
  7388. }
  7389. }
  7390. } else if (IS_CONST == IS_UNUSED) {
  7391. ce = zend_fetch_class(NULL, opline->op1.num);
  7392. if (UNEXPECTED(ce == NULL)) {
  7393. ZEND_ASSERT(EG(exception));
  7394. HANDLE_EXCEPTION();
  7395. }
  7396. } else {
  7397. ce = Z_CE_P(EX_VAR(opline->op1.var));
  7398. }
  7399. if (IS_CONST == IS_CONST &&
  7400. IS_UNUSED == IS_CONST &&
  7401. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  7402. /* nothing to do */
  7403. } else if (IS_CONST != IS_CONST &&
  7404. IS_UNUSED == IS_CONST &&
  7405. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  7406. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  7407. } else if (IS_UNUSED != IS_UNUSED) {
  7408. function_name = NULL;
  7409. if (IS_UNUSED != IS_CONST) {
  7410. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  7411. do {
  7412. if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  7413. function_name = Z_REFVAL_P(function_name);
  7414. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  7415. break;
  7416. }
  7417. } else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  7418. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  7419. if (UNEXPECTED(EG(exception) != NULL)) {
  7420. HANDLE_EXCEPTION();
  7421. }
  7422. }
  7423. zend_throw_error(NULL, "Function name must be a string");
  7424. HANDLE_EXCEPTION();
  7425. } while (0);
  7426. }
  7427. }
  7428. if (ce->get_static_method) {
  7429. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  7430. } else {
  7431. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  7432. }
  7433. if (UNEXPECTED(fbc == NULL)) {
  7434. if (EXPECTED(!EG(exception))) {
  7435. zend_undefined_method(ce, Z_STR_P(function_name));
  7436. }
  7437. HANDLE_EXCEPTION();
  7438. }
  7439. if (IS_UNUSED == IS_CONST &&
  7440. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  7441. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
  7442. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  7443. }
  7444. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  7445. init_func_run_time_cache(&fbc->op_array);
  7446. }
  7447. if (IS_UNUSED != IS_CONST) {
  7448. }
  7449. } else {
  7450. if (UNEXPECTED(ce->constructor == NULL)) {
  7451. zend_throw_error(NULL, "Cannot call constructor");
  7452. HANDLE_EXCEPTION();
  7453. }
  7454. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  7455. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  7456. HANDLE_EXCEPTION();
  7457. }
  7458. fbc = ce->constructor;
  7459. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  7460. init_func_run_time_cache(&fbc->op_array);
  7461. }
  7462. }
  7463. object = NULL;
  7464. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  7465. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  7466. object = Z_OBJ(EX(This));
  7467. ce = object->ce;
  7468. } else {
  7469. zend_non_static_method_call(fbc);
  7470. if (UNEXPECTED(EG(exception) != NULL)) {
  7471. HANDLE_EXCEPTION();
  7472. }
  7473. }
  7474. }
  7475. if (IS_CONST == IS_UNUSED) {
  7476. /* previous opcode is ZEND_FETCH_CLASS */
  7477. if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  7478. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
  7479. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  7480. ce = Z_OBJCE(EX(This));
  7481. } else {
  7482. ce = Z_CE(EX(This));
  7483. }
  7484. }
  7485. }
  7486. call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  7487. fbc, opline->extended_value, ce, object);
  7488. call->prev_execute_data = EX(call);
  7489. EX(call) = call;
  7490. ZEND_VM_NEXT_OPCODE();
  7491. }
  7492. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7493. {
  7494. USE_OPLINE
  7495. SAVE_OPLINE();
  7496. if (IS_CONST == IS_UNUSED) {
  7497. zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
  7498. } else {
  7499. /* prevents "undefined variable opline" errors */
  7500. #if 0 || (IS_CONST != IS_UNUSED)
  7501. zval *retval_ref, *retval_ptr;
  7502. zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
  7503. retval_ref = retval_ptr = RT_CONSTANT(opline, opline->op1);
  7504. if (IS_CONST == IS_CONST) {
  7505. ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
  7506. retval_ref = retval_ptr = EX_VAR(opline->result.var);
  7507. } else if (IS_CONST == IS_VAR) {
  7508. if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
  7509. retval_ptr = Z_INDIRECT_P(retval_ptr);
  7510. }
  7511. ZVAL_DEREF(retval_ptr);
  7512. } else if (IS_CONST == IS_CV) {
  7513. ZVAL_DEREF(retval_ptr);
  7514. }
  7515. if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type)
  7516. && ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE
  7517. && ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE
  7518. && !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr))
  7519. && !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  7520. && retval_ref != retval_ptr)
  7521. ) {
  7522. /* A cast might happen - unwrap the reference if this is a by-value return */
  7523. if (Z_REFCOUNT_P(retval_ref) == 1) {
  7524. ZVAL_UNREF(retval_ref);
  7525. } else {
  7526. Z_DELREF_P(retval_ref);
  7527. ZVAL_COPY(retval_ref, retval_ptr);
  7528. }
  7529. retval_ptr = retval_ref;
  7530. }
  7531. zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
  7532. #endif
  7533. }
  7534. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7535. }
  7536. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7537. {
  7538. USE_OPLINE
  7539. zval *result;
  7540. zend_function *constructor;
  7541. zend_class_entry *ce;
  7542. zend_execute_data *call;
  7543. SAVE_OPLINE();
  7544. if (IS_CONST == IS_CONST) {
  7545. ce = CACHED_PTR(opline->op2.num);
  7546. if (UNEXPECTED(ce == NULL)) {
  7547. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  7548. if (UNEXPECTED(ce == NULL)) {
  7549. ZEND_ASSERT(EG(exception));
  7550. ZVAL_UNDEF(EX_VAR(opline->result.var));
  7551. HANDLE_EXCEPTION();
  7552. }
  7553. CACHE_PTR(opline->op2.num, ce);
  7554. }
  7555. } else if (IS_CONST == IS_UNUSED) {
  7556. ce = zend_fetch_class(NULL, opline->op1.num);
  7557. if (UNEXPECTED(ce == NULL)) {
  7558. ZEND_ASSERT(EG(exception));
  7559. ZVAL_UNDEF(EX_VAR(opline->result.var));
  7560. HANDLE_EXCEPTION();
  7561. }
  7562. } else {
  7563. ce = Z_CE_P(EX_VAR(opline->op1.var));
  7564. }
  7565. result = EX_VAR(opline->result.var);
  7566. if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
  7567. ZVAL_UNDEF(result);
  7568. HANDLE_EXCEPTION();
  7569. }
  7570. constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
  7571. if (constructor == NULL) {
  7572. if (UNEXPECTED(EG(exception))) {
  7573. HANDLE_EXCEPTION();
  7574. }
  7575. /* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
  7576. * opcode is DO_FCALL in case EXT instructions are used. */
  7577. if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
  7578. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  7579. }
  7580. /* Perform a dummy function call */
  7581. call = zend_vm_stack_push_call_frame(
  7582. ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
  7583. opline->extended_value, NULL, NULL);
  7584. } else {
  7585. if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!constructor->op_array.run_time_cache)) {
  7586. init_func_run_time_cache(&constructor->op_array);
  7587. }
  7588. /* We are not handling overloaded classes right now */
  7589. call = zend_vm_stack_push_call_frame(
  7590. ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_CTOR,
  7591. constructor,
  7592. opline->extended_value,
  7593. ce,
  7594. Z_OBJ_P(result));
  7595. Z_ADDREF_P(result);
  7596. }
  7597. call->prev_execute_data = EX(call);
  7598. EX(call) = call;
  7599. ZEND_VM_NEXT_OPCODE();
  7600. }
  7601. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7602. {
  7603. USE_OPLINE
  7604. zval *expr_ptr, new_expr;
  7605. SAVE_OPLINE();
  7606. if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
  7607. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  7608. expr_ptr = NULL;
  7609. if (Z_ISREF_P(expr_ptr)) {
  7610. Z_ADDREF_P(expr_ptr);
  7611. } else {
  7612. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  7613. }
  7614. } else {
  7615. expr_ptr = RT_CONSTANT(opline, opline->op1);
  7616. if (IS_CONST == IS_TMP_VAR) {
  7617. /* pass */
  7618. } else if (IS_CONST == IS_CONST) {
  7619. Z_TRY_ADDREF_P(expr_ptr);
  7620. } else if (IS_CONST == IS_CV) {
  7621. ZVAL_DEREF(expr_ptr);
  7622. Z_TRY_ADDREF_P(expr_ptr);
  7623. } else /* if (IS_CONST == IS_VAR) */ {
  7624. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  7625. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  7626. expr_ptr = Z_REFVAL_P(expr_ptr);
  7627. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  7628. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  7629. expr_ptr = &new_expr;
  7630. efree_size(ref, sizeof(zend_reference));
  7631. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  7632. Z_ADDREF_P(expr_ptr);
  7633. }
  7634. }
  7635. }
  7636. }
  7637. if (IS_UNUSED != IS_UNUSED) {
  7638. zval *offset = NULL;
  7639. zend_string *str;
  7640. zend_ulong hval;
  7641. add_again:
  7642. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  7643. str = Z_STR_P(offset);
  7644. if (IS_UNUSED != IS_CONST) {
  7645. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  7646. goto num_index;
  7647. }
  7648. }
  7649. str_index:
  7650. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  7651. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  7652. hval = Z_LVAL_P(offset);
  7653. num_index:
  7654. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  7655. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  7656. offset = Z_REFVAL_P(offset);
  7657. goto add_again;
  7658. } else if (Z_TYPE_P(offset) == IS_NULL) {
  7659. str = ZSTR_EMPTY_ALLOC();
  7660. goto str_index;
  7661. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  7662. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  7663. goto num_index;
  7664. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  7665. hval = 0;
  7666. goto num_index;
  7667. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  7668. hval = 1;
  7669. goto num_index;
  7670. } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  7671. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  7672. str = ZSTR_EMPTY_ALLOC();
  7673. goto str_index;
  7674. } else {
  7675. zend_illegal_offset();
  7676. zval_ptr_dtor_nogc(expr_ptr);
  7677. }
  7678. } else {
  7679. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  7680. zend_cannot_add_element();
  7681. zval_ptr_dtor_nogc(expr_ptr);
  7682. }
  7683. }
  7684. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7685. }
  7686. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7687. {
  7688. zval *array;
  7689. uint32_t size;
  7690. USE_OPLINE
  7691. array = EX_VAR(opline->result.var);
  7692. if (IS_CONST != IS_UNUSED) {
  7693. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  7694. ZVAL_ARR(array, zend_new_array(size));
  7695. /* Explicitly initialize array as not-packed if flag is set */
  7696. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  7697. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  7698. }
  7699. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7700. } else {
  7701. ZVAL_EMPTY_ARRAY(array);
  7702. ZEND_VM_NEXT_OPCODE();
  7703. }
  7704. }
  7705. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7706. {
  7707. USE_OPLINE
  7708. zval *varname;
  7709. zend_string *name, *tmp_name;
  7710. HashTable *target_symbol_table;
  7711. SAVE_OPLINE();
  7712. varname = RT_CONSTANT(opline, opline->op1);
  7713. if (IS_CONST == IS_CONST) {
  7714. name = Z_STR_P(varname);
  7715. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  7716. name = Z_STR_P(varname);
  7717. tmp_name = NULL;
  7718. } else {
  7719. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  7720. varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
  7721. }
  7722. name = zval_get_tmp_string(varname, &tmp_name);
  7723. }
  7724. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  7725. zend_hash_del_ind(target_symbol_table, name);
  7726. if (IS_CONST != IS_CONST) {
  7727. zend_tmp_string_release(tmp_name);
  7728. }
  7729. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7730. }
  7731. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7732. {
  7733. USE_OPLINE
  7734. zval *varname;
  7735. zend_string *name, *tmp_name;
  7736. zend_class_entry *ce;
  7737. SAVE_OPLINE();
  7738. if (IS_UNUSED == IS_CONST) {
  7739. ce = CACHED_PTR(opline->extended_value);
  7740. if (UNEXPECTED(ce == NULL)) {
  7741. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  7742. if (UNEXPECTED(ce == NULL)) {
  7743. ZEND_ASSERT(EG(exception));
  7744. HANDLE_EXCEPTION();
  7745. }
  7746. /*CACHE_PTR(opline->extended_value, ce);*/
  7747. }
  7748. } else if (IS_UNUSED == IS_UNUSED) {
  7749. ce = zend_fetch_class(NULL, opline->op2.num);
  7750. if (UNEXPECTED(ce == NULL)) {
  7751. ZEND_ASSERT(EG(exception));
  7752. HANDLE_EXCEPTION();
  7753. }
  7754. } else {
  7755. ce = Z_CE_P(EX_VAR(opline->op2.var));
  7756. }
  7757. varname = RT_CONSTANT(opline, opline->op1);
  7758. if (IS_CONST == IS_CONST) {
  7759. name = Z_STR_P(varname);
  7760. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  7761. name = Z_STR_P(varname);
  7762. tmp_name = NULL;
  7763. } else {
  7764. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  7765. varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
  7766. }
  7767. name = zval_get_tmp_string(varname, &tmp_name);
  7768. }
  7769. zend_std_unset_static_property(ce, name);
  7770. if (IS_CONST != IS_CONST) {
  7771. zend_tmp_string_release(tmp_name);
  7772. }
  7773. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7774. }
  7775. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7776. {
  7777. USE_OPLINE
  7778. zval *value;
  7779. int result;
  7780. zval *varname;
  7781. zend_string *name, *tmp_name;
  7782. HashTable *target_symbol_table;
  7783. SAVE_OPLINE();
  7784. varname = RT_CONSTANT(opline, opline->op1);
  7785. if (IS_CONST == IS_CONST) {
  7786. name = Z_STR_P(varname);
  7787. } else {
  7788. name = zval_get_tmp_string(varname, &tmp_name);
  7789. }
  7790. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  7791. value = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
  7792. if (IS_CONST != IS_CONST) {
  7793. zend_tmp_string_release(tmp_name);
  7794. }
  7795. if (!value) {
  7796. result = (opline->extended_value & ZEND_ISEMPTY);
  7797. } else {
  7798. if (Z_TYPE_P(value) == IS_INDIRECT) {
  7799. value = Z_INDIRECT_P(value);
  7800. }
  7801. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  7802. if (Z_ISREF_P(value)) {
  7803. value = Z_REFVAL_P(value);
  7804. }
  7805. result = Z_TYPE_P(value) > IS_NULL;
  7806. } else {
  7807. result = !i_zend_is_true(value);
  7808. }
  7809. }
  7810. ZEND_VM_SMART_BRANCH(result, 1);
  7811. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  7812. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7813. }
  7814. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7815. {
  7816. USE_OPLINE
  7817. zval *value;
  7818. int result;
  7819. zval *varname;
  7820. zend_string *name, *tmp_name;
  7821. zend_class_entry *ce;
  7822. SAVE_OPLINE();
  7823. if (IS_UNUSED == IS_CONST) {
  7824. if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) {
  7825. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  7826. goto is_static_prop_return;
  7827. } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) {
  7828. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  7829. if (UNEXPECTED(ce == NULL)) {
  7830. ZEND_ASSERT(EG(exception));
  7831. ZVAL_UNDEF(EX_VAR(opline->result.var));
  7832. HANDLE_EXCEPTION();
  7833. }
  7834. if (IS_CONST != IS_CONST) {
  7835. CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce);
  7836. }
  7837. }
  7838. } else {
  7839. if (IS_UNUSED == IS_UNUSED) {
  7840. ce = zend_fetch_class(NULL, opline->op2.num);
  7841. if (UNEXPECTED(ce == NULL)) {
  7842. ZEND_ASSERT(EG(exception));
  7843. ZVAL_UNDEF(EX_VAR(opline->result.var));
  7844. HANDLE_EXCEPTION();
  7845. }
  7846. } else {
  7847. ce = Z_CE_P(EX_VAR(opline->op2.var));
  7848. }
  7849. if (IS_CONST == IS_CONST &&
  7850. EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) {
  7851. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  7852. goto is_static_prop_return;
  7853. }
  7854. }
  7855. varname = RT_CONSTANT(opline, opline->op1);
  7856. if (IS_CONST == IS_CONST) {
  7857. name = Z_STR_P(varname);
  7858. } else {
  7859. name = zval_get_tmp_string(varname, &tmp_name);
  7860. }
  7861. value = zend_std_get_static_property(ce, name, 1);
  7862. if (IS_CONST == IS_CONST && value) {
  7863. CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value);
  7864. }
  7865. if (IS_CONST != IS_CONST) {
  7866. zend_tmp_string_release(tmp_name);
  7867. }
  7868. is_static_prop_return:
  7869. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  7870. result = value && Z_TYPE_P(value) > IS_NULL &&
  7871. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  7872. } else {
  7873. result = !value || !i_zend_is_true(value);
  7874. }
  7875. ZEND_VM_SMART_BRANCH(result, 1);
  7876. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  7877. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  7878. }
  7879. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7880. {
  7881. USE_OPLINE
  7882. zval *zfunc;
  7883. zval *object;
  7884. zend_class_entry *called_scope;
  7885. zend_function *fbc;
  7886. zfunc = zend_hash_find_ex(EG(function_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1);
  7887. ZEND_ASSERT(zfunc != NULL && Z_FUNC_P(zfunc)->type == ZEND_USER_FUNCTION);
  7888. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  7889. called_scope = Z_OBJCE(EX(This));
  7890. if (UNEXPECTED((Z_FUNC_P(zfunc)->common.fn_flags & ZEND_ACC_STATIC) ||
  7891. (EX(func)->common.fn_flags & ZEND_ACC_STATIC))) {
  7892. object = NULL;
  7893. } else {
  7894. object = &EX(This);
  7895. }
  7896. } else {
  7897. called_scope = Z_CE(EX(This));
  7898. object = NULL;
  7899. }
  7900. zend_create_closure(EX_VAR(opline->result.var), Z_FUNC_P(zfunc),
  7901. EX(func)->op_array.scope, called_scope, object);
  7902. ZEND_VM_NEXT_OPCODE();
  7903. }
  7904. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  7905. {
  7906. USE_OPLINE
  7907. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  7908. SAVE_OPLINE();
  7909. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  7910. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  7911. }
  7912. /* Destroy the previously yielded value */
  7913. zval_ptr_dtor(&generator->value);
  7914. /* Destroy the previously yielded key */
  7915. zval_ptr_dtor(&generator->key);
  7916. /* Set the new yielded value */
  7917. if (IS_CONST != IS_UNUSED) {
  7918. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  7919. /* Constants and temporary variables aren't yieldable by reference,
  7920. * but we still allow them with a notice. */
  7921. if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
  7922. zval *value;
  7923. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  7924. value = RT_CONSTANT(opline, opline->op1);
  7925. ZVAL_COPY_VALUE(&generator->value, value);
  7926. if (IS_CONST == IS_CONST) {
  7927. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  7928. Z_ADDREF(generator->value);
  7929. }
  7930. }
  7931. } else {
  7932. zval *value_ptr = NULL;
  7933. /* If a function call result is yielded and the function did
  7934. * not return by reference we throw a notice. */
  7935. if (IS_CONST == IS_VAR &&
  7936. (value_ptr == &EG(uninitialized_zval) ||
  7937. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  7938. !Z_ISREF_P(value_ptr)))) {
  7939. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  7940. ZVAL_COPY(&generator->value, value_ptr);
  7941. } else {
  7942. if (Z_ISREF_P(value_ptr)) {
  7943. Z_ADDREF_P(value_ptr);
  7944. } else {
  7945. ZVAL_MAKE_REF_EX(value_ptr, 2);
  7946. }
  7947. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  7948. }
  7949. }
  7950. } else {
  7951. zval *value = RT_CONSTANT(opline, opline->op1);
  7952. /* Consts, temporary variables and references need copying */
  7953. if (IS_CONST == IS_CONST) {
  7954. ZVAL_COPY_VALUE(&generator->value, value);
  7955. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  7956. Z_ADDREF(generator->value);
  7957. }
  7958. } else if (IS_CONST == IS_TMP_VAR) {
  7959. ZVAL_COPY_VALUE(&generator->value, value);
  7960. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  7961. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  7962. } else {
  7963. ZVAL_COPY_VALUE(&generator->value, value);
  7964. if (IS_CONST == IS_CV) {
  7965. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  7966. }
  7967. }
  7968. }
  7969. } else {
  7970. /* If no value was specified yield null */
  7971. ZVAL_NULL(&generator->value);
  7972. }
  7973. /* Set the new yielded key */
  7974. if (IS_UNUSED != IS_UNUSED) {
  7975. zval *key = NULL;
  7976. /* Consts, temporary variables and references need copying */
  7977. if (IS_UNUSED == IS_CONST) {
  7978. ZVAL_COPY_VALUE(&generator->key, key);
  7979. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  7980. Z_ADDREF(generator->key);
  7981. }
  7982. } else if (IS_UNUSED == IS_TMP_VAR) {
  7983. ZVAL_COPY_VALUE(&generator->key, key);
  7984. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  7985. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  7986. } else {
  7987. ZVAL_COPY_VALUE(&generator->key, key);
  7988. if (IS_UNUSED == IS_CV) {
  7989. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  7990. }
  7991. }
  7992. if (Z_TYPE(generator->key) == IS_LONG
  7993. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  7994. ) {
  7995. generator->largest_used_integer_key = Z_LVAL(generator->key);
  7996. }
  7997. } else {
  7998. /* If no key was specified we use auto-increment keys */
  7999. generator->largest_used_integer_key++;
  8000. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  8001. }
  8002. if (RETURN_VALUE_USED(opline)) {
  8003. /* If the return value of yield is used set the send
  8004. * target and initialize it to NULL */
  8005. generator->send_target = EX_VAR(opline->result.var);
  8006. ZVAL_NULL(generator->send_target);
  8007. } else {
  8008. generator->send_target = NULL;
  8009. }
  8010. /* We increment to the next op, so we are at the correct position when the
  8011. * generator is resumed. */
  8012. ZEND_VM_INC_OPCODE();
  8013. /* The GOTO VM uses a local opline variable. We need to set the opline
  8014. * variable in execute_data so we don't resume at an old position. */
  8015. SAVE_OPLINE();
  8016. ZEND_VM_RETURN();
  8017. }
  8018. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8019. {
  8020. USE_OPLINE
  8021. zval *op1;
  8022. zend_long count;
  8023. SAVE_OPLINE();
  8024. op1 = RT_CONSTANT(opline, opline->op1);
  8025. do {
  8026. if (Z_TYPE_P(op1) == IS_ARRAY) {
  8027. count = zend_array_count(Z_ARRVAL_P(op1));
  8028. break;
  8029. } else if (Z_TYPE_P(op1) == IS_OBJECT) {
  8030. /* first, we check if the handler is defined */
  8031. if (Z_OBJ_HT_P(op1)->count_elements) {
  8032. if (SUCCESS == Z_OBJ_HT_P(op1)->count_elements(op1, &count)) {
  8033. break;
  8034. }
  8035. }
  8036. /* if not and the object implements Countable we call its count() method */
  8037. if (instanceof_function(Z_OBJCE_P(op1), zend_ce_countable)) {
  8038. zval retval;
  8039. zend_call_method_with_0_params(op1, NULL, NULL, "count", &retval);
  8040. count = zval_get_long(&retval);
  8041. zval_ptr_dtor(&retval);
  8042. break;
  8043. }
  8044. /* If There's no handler and it doesn't implement Countable then add a warning */
  8045. count = 1;
  8046. } else if (Z_TYPE_P(op1) == IS_NULL) {
  8047. count = 0;
  8048. } else {
  8049. count = 1;
  8050. }
  8051. zend_error(E_WARNING, "count(): Parameter must be an array or an object that implements Countable");
  8052. } while (0);
  8053. ZVAL_LONG(EX_VAR(opline->result.var), count);
  8054. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8055. }
  8056. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8057. {
  8058. USE_OPLINE
  8059. if (IS_CONST == IS_UNUSED) {
  8060. if (UNEXPECTED(!EX(func)->common.scope)) {
  8061. SAVE_OPLINE();
  8062. zend_error(E_WARNING, "get_class() called without object from outside a class");
  8063. ZVAL_FALSE(EX_VAR(opline->result.var));
  8064. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8065. } else {
  8066. ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
  8067. ZEND_VM_NEXT_OPCODE();
  8068. }
  8069. } else {
  8070. zval *op1;
  8071. SAVE_OPLINE();
  8072. op1 = RT_CONSTANT(opline, opline->op1);
  8073. if (Z_TYPE_P(op1) == IS_OBJECT) {
  8074. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
  8075. } else {
  8076. zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1)));
  8077. ZVAL_FALSE(EX_VAR(opline->result.var));
  8078. }
  8079. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8080. }
  8081. }
  8082. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8083. {
  8084. USE_OPLINE
  8085. zval *op1;
  8086. zend_string *type;
  8087. SAVE_OPLINE();
  8088. op1 = RT_CONSTANT(opline, opline->op1);
  8089. type = zend_zval_get_type(op1);
  8090. if (EXPECTED(type)) {
  8091. ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
  8092. } else {
  8093. ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
  8094. }
  8095. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8096. }
  8097. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8098. {
  8099. USE_OPLINE
  8100. zend_array *ht;
  8101. uint32_t arg_count, result_size, skip;
  8102. arg_count = EX_NUM_ARGS();
  8103. if (IS_CONST == IS_CONST) {
  8104. skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
  8105. if (arg_count < skip) {
  8106. result_size = 0;
  8107. } else {
  8108. result_size = arg_count - skip;
  8109. }
  8110. } else {
  8111. skip = 0;
  8112. result_size = arg_count;
  8113. }
  8114. if (result_size) {
  8115. uint32_t first_extra_arg = EX(func)->op_array.num_args;
  8116. ht = zend_new_array(result_size);
  8117. ZVAL_ARR(EX_VAR(opline->result.var), ht);
  8118. zend_hash_real_init_packed(ht);
  8119. ZEND_HASH_FILL_PACKED(ht) {
  8120. zval *p, *q;
  8121. uint32_t i = skip;
  8122. p = EX_VAR_NUM(i);
  8123. if (arg_count > first_extra_arg) {
  8124. while (i < first_extra_arg) {
  8125. q = p;
  8126. if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
  8127. ZVAL_DEREF(q);
  8128. if (Z_OPT_REFCOUNTED_P(q)) {
  8129. Z_ADDREF_P(q);
  8130. }
  8131. } else {
  8132. q = &EG(uninitialized_zval);
  8133. }
  8134. ZEND_HASH_FILL_ADD(q);
  8135. p++;
  8136. i++;
  8137. }
  8138. if (skip < first_extra_arg) {
  8139. skip = 0;
  8140. } else {
  8141. skip -= first_extra_arg;
  8142. }
  8143. p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
  8144. }
  8145. while (i < arg_count) {
  8146. q = p;
  8147. if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
  8148. ZVAL_DEREF(q);
  8149. if (Z_OPT_REFCOUNTED_P(q)) {
  8150. Z_ADDREF_P(q);
  8151. }
  8152. } else {
  8153. q = &EG(uninitialized_zval);
  8154. }
  8155. ZEND_HASH_FILL_ADD(q);
  8156. p++;
  8157. i++;
  8158. }
  8159. } ZEND_HASH_FILL_END();
  8160. ht->nNumOfElements = result_size;
  8161. } else {
  8162. ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
  8163. }
  8164. ZEND_VM_NEXT_OPCODE();
  8165. }
  8166. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8167. {
  8168. USE_OPLINE
  8169. zval *op1, *op2, *result;
  8170. op1 = RT_CONSTANT(opline, opline->op1);
  8171. op2 = EX_VAR(opline->op2.var);
  8172. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  8173. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  8174. result = EX_VAR(opline->result.var);
  8175. fast_long_add_function(result, op1, op2);
  8176. ZEND_VM_NEXT_OPCODE();
  8177. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  8178. result = EX_VAR(opline->result.var);
  8179. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
  8180. ZEND_VM_NEXT_OPCODE();
  8181. }
  8182. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  8183. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  8184. result = EX_VAR(opline->result.var);
  8185. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
  8186. ZEND_VM_NEXT_OPCODE();
  8187. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  8188. result = EX_VAR(opline->result.var);
  8189. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
  8190. ZEND_VM_NEXT_OPCODE();
  8191. }
  8192. }
  8193. SAVE_OPLINE();
  8194. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  8195. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  8196. }
  8197. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  8198. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  8199. }
  8200. add_function(EX_VAR(opline->result.var), op1, op2);
  8201. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8202. }
  8203. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8204. {
  8205. USE_OPLINE
  8206. zval *op1, *op2, *result;
  8207. op1 = RT_CONSTANT(opline, opline->op1);
  8208. op2 = EX_VAR(opline->op2.var);
  8209. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  8210. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  8211. result = EX_VAR(opline->result.var);
  8212. fast_long_sub_function(result, op1, op2);
  8213. ZEND_VM_NEXT_OPCODE();
  8214. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  8215. result = EX_VAR(opline->result.var);
  8216. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
  8217. ZEND_VM_NEXT_OPCODE();
  8218. }
  8219. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  8220. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  8221. result = EX_VAR(opline->result.var);
  8222. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  8223. ZEND_VM_NEXT_OPCODE();
  8224. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  8225. result = EX_VAR(opline->result.var);
  8226. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
  8227. ZEND_VM_NEXT_OPCODE();
  8228. }
  8229. }
  8230. SAVE_OPLINE();
  8231. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  8232. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  8233. }
  8234. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  8235. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  8236. }
  8237. sub_function(EX_VAR(opline->result.var), op1, op2);
  8238. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8239. }
  8240. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8241. {
  8242. USE_OPLINE
  8243. zval *op1, *op2;
  8244. SAVE_OPLINE();
  8245. op1 = RT_CONSTANT(opline, opline->op1);
  8246. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  8247. fast_div_function(EX_VAR(opline->result.var), op1, op2);
  8248. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8249. }
  8250. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8251. {
  8252. USE_OPLINE
  8253. zval *op1, *op2, *result;
  8254. op1 = RT_CONSTANT(opline, opline->op1);
  8255. op2 = EX_VAR(opline->op2.var);
  8256. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  8257. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  8258. result = EX_VAR(opline->result.var);
  8259. if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
  8260. ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8261. } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
  8262. /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
  8263. ZVAL_LONG(result, 0);
  8264. } else {
  8265. ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
  8266. }
  8267. ZEND_VM_NEXT_OPCODE();
  8268. }
  8269. }
  8270. SAVE_OPLINE();
  8271. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  8272. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  8273. }
  8274. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  8275. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  8276. }
  8277. mod_function(EX_VAR(opline->result.var), op1, op2);
  8278. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8279. }
  8280. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8281. {
  8282. USE_OPLINE
  8283. zval *op1, *op2;
  8284. op1 = RT_CONSTANT(opline, opline->op1);
  8285. op2 = EX_VAR(opline->op2.var);
  8286. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  8287. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  8288. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  8289. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
  8290. ZEND_VM_NEXT_OPCODE();
  8291. }
  8292. SAVE_OPLINE();
  8293. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  8294. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  8295. }
  8296. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  8297. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  8298. }
  8299. shift_left_function(EX_VAR(opline->result.var), op1, op2);
  8300. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8301. }
  8302. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8303. {
  8304. USE_OPLINE
  8305. zval *op1, *op2;
  8306. op1 = RT_CONSTANT(opline, opline->op1);
  8307. op2 = EX_VAR(opline->op2.var);
  8308. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  8309. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  8310. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  8311. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
  8312. ZEND_VM_NEXT_OPCODE();
  8313. }
  8314. SAVE_OPLINE();
  8315. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  8316. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  8317. }
  8318. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  8319. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  8320. }
  8321. shift_right_function(EX_VAR(opline->result.var), op1, op2);
  8322. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8323. }
  8324. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8325. {
  8326. USE_OPLINE
  8327. zval *op1, *op2;
  8328. SAVE_OPLINE();
  8329. op1 = RT_CONSTANT(opline, opline->op1);
  8330. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  8331. pow_function(EX_VAR(opline->result.var), op1, op2);
  8332. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8333. }
  8334. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8335. {
  8336. USE_OPLINE
  8337. zval *op1, *op2;
  8338. op1 = RT_CONSTANT(opline, opline->op1);
  8339. op2 = EX_VAR(opline->op2.var);
  8340. if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  8341. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  8342. zend_string *op1_str = Z_STR_P(op1);
  8343. zend_string *op2_str = Z_STR_P(op2);
  8344. zend_string *str;
  8345. if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  8346. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  8347. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  8348. } else {
  8349. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  8350. }
  8351. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  8352. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  8353. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  8354. } else {
  8355. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  8356. }
  8357. } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
  8358. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  8359. size_t len = ZSTR_LEN(op1_str);
  8360. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  8361. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  8362. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  8363. } else {
  8364. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  8365. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  8366. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  8367. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  8368. }
  8369. ZEND_VM_NEXT_OPCODE();
  8370. } else {
  8371. SAVE_OPLINE();
  8372. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  8373. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  8374. }
  8375. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  8376. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  8377. }
  8378. concat_function(EX_VAR(opline->result.var), op1, op2);
  8379. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8380. }
  8381. }
  8382. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8383. {
  8384. USE_OPLINE
  8385. zval *op1, *op2, *result;
  8386. op1 = RT_CONSTANT(opline, opline->op1);
  8387. op2 = EX_VAR(opline->op2.var);
  8388. do {
  8389. int result;
  8390. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  8391. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  8392. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  8393. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  8394. result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
  8395. } else {
  8396. break;
  8397. }
  8398. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  8399. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  8400. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  8401. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  8402. result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
  8403. } else {
  8404. break;
  8405. }
  8406. } else {
  8407. break;
  8408. }
  8409. ZEND_VM_SMART_BRANCH(result, 0);
  8410. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  8411. ZEND_VM_NEXT_OPCODE();
  8412. } while (0);
  8413. SAVE_OPLINE();
  8414. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  8415. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  8416. }
  8417. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  8418. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  8419. }
  8420. result = EX_VAR(opline->result.var);
  8421. compare_function(result, op1, op2);
  8422. ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
  8423. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8424. }
  8425. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8426. {
  8427. USE_OPLINE
  8428. zval *op1, *op2, *result;
  8429. op1 = RT_CONSTANT(opline, opline->op1);
  8430. op2 = EX_VAR(opline->op2.var);
  8431. do {
  8432. int result;
  8433. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  8434. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  8435. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  8436. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  8437. result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
  8438. } else {
  8439. break;
  8440. }
  8441. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  8442. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  8443. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  8444. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  8445. result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
  8446. } else {
  8447. break;
  8448. }
  8449. } else {
  8450. break;
  8451. }
  8452. ZEND_VM_SMART_BRANCH(result, 0);
  8453. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  8454. ZEND_VM_NEXT_OPCODE();
  8455. } while (0);
  8456. SAVE_OPLINE();
  8457. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  8458. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  8459. }
  8460. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  8461. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  8462. }
  8463. result = EX_VAR(opline->result.var);
  8464. compare_function(result, op1, op2);
  8465. ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
  8466. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8467. }
  8468. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8469. {
  8470. USE_OPLINE
  8471. zval *op1, *op2;
  8472. SAVE_OPLINE();
  8473. op1 = RT_CONSTANT(opline, opline->op1);
  8474. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  8475. compare_function(EX_VAR(opline->result.var), op1, op2);
  8476. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8477. }
  8478. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8479. {
  8480. USE_OPLINE
  8481. zval *container, *dim, *value, *result;
  8482. SAVE_OPLINE();
  8483. container = RT_CONSTANT(opline, opline->op1);
  8484. dim = EX_VAR(opline->op2.var);
  8485. if (IS_CONST != IS_CONST) {
  8486. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  8487. fetch_dim_r_array:
  8488. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
  8489. result = EX_VAR(opline->result.var);
  8490. ZVAL_COPY_DEREF(result, value);
  8491. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  8492. container = Z_REFVAL_P(container);
  8493. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  8494. goto fetch_dim_r_array;
  8495. } else {
  8496. goto fetch_dim_r_slow;
  8497. }
  8498. } else {
  8499. fetch_dim_r_slow:
  8500. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  8501. dim++;
  8502. }
  8503. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  8504. }
  8505. } else {
  8506. zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
  8507. }
  8508. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8509. }
  8510. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8511. {
  8512. USE_OPLINE
  8513. zval *container;
  8514. SAVE_OPLINE();
  8515. container = RT_CONSTANT(opline, opline->op1);
  8516. zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  8517. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8518. }
  8519. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8520. {
  8521. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  8522. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  8523. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8524. }
  8525. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8526. } else {
  8527. if (IS_CV == IS_UNUSED) {
  8528. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8529. }
  8530. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8531. }
  8532. }
  8533. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8534. {
  8535. USE_OPLINE
  8536. zval *container;
  8537. zval *offset;
  8538. void **cache_slot = NULL;
  8539. SAVE_OPLINE();
  8540. container = RT_CONSTANT(opline, opline->op1);
  8541. if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  8542. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8543. }
  8544. offset = EX_VAR(opline->op2.var);
  8545. if (IS_CONST == IS_CONST ||
  8546. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  8547. do {
  8548. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  8549. container = Z_REFVAL_P(container);
  8550. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  8551. break;
  8552. }
  8553. }
  8554. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  8555. GET_OP1_UNDEF_CV(container, BP_VAR_R);
  8556. }
  8557. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  8558. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  8559. }
  8560. goto fetch_obj_r_no_object;
  8561. } while (0);
  8562. }
  8563. /* here we are sure we are dealing with an object */
  8564. do {
  8565. zend_object *zobj = Z_OBJ_P(container);
  8566. zval *retval;
  8567. if (IS_CV == IS_CONST) {
  8568. cache_slot = CACHE_ADDR(opline->extended_value);
  8569. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  8570. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  8571. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  8572. retval = OBJ_PROP(zobj, prop_offset);
  8573. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  8574. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  8575. break;
  8576. }
  8577. } else if (EXPECTED(zobj->properties != NULL)) {
  8578. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  8579. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  8580. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  8581. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  8582. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  8583. (EXPECTED(p->key == Z_STR_P(offset)) ||
  8584. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  8585. EXPECTED(p->key != NULL) &&
  8586. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  8587. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
  8588. break;
  8589. }
  8590. }
  8591. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  8592. }
  8593. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  8594. if (EXPECTED(retval)) {
  8595. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  8596. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  8597. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  8598. break;
  8599. }
  8600. }
  8601. }
  8602. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
  8603. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  8604. }
  8605. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  8606. fetch_obj_r_no_object:
  8607. zend_wrong_property_read(offset);
  8608. ZVAL_NULL(EX_VAR(opline->result.var));
  8609. } else {
  8610. retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  8611. if (retval != EX_VAR(opline->result.var)) {
  8612. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  8613. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  8614. zend_unwrap_reference(retval);
  8615. }
  8616. }
  8617. } while (0);
  8618. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8619. }
  8620. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8621. {
  8622. USE_OPLINE
  8623. zval *container;
  8624. zval *offset;
  8625. void **cache_slot = NULL;
  8626. SAVE_OPLINE();
  8627. container = RT_CONSTANT(opline, opline->op1);
  8628. if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  8629. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8630. }
  8631. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  8632. if (IS_CONST == IS_CONST ||
  8633. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  8634. do {
  8635. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  8636. container = Z_REFVAL_P(container);
  8637. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  8638. break;
  8639. }
  8640. }
  8641. goto fetch_obj_is_no_object;
  8642. } while (0);
  8643. }
  8644. /* here we are sure we are dealing with an object */
  8645. do {
  8646. zend_object *zobj = Z_OBJ_P(container);
  8647. zval *retval;
  8648. if (IS_CV == IS_CONST) {
  8649. cache_slot = CACHE_ADDR(opline->extended_value);
  8650. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  8651. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  8652. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  8653. retval = OBJ_PROP(zobj, prop_offset);
  8654. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  8655. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  8656. break;
  8657. }
  8658. } else if (EXPECTED(zobj->properties != NULL)) {
  8659. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  8660. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  8661. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  8662. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  8663. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  8664. (EXPECTED(p->key == Z_STR_P(offset)) ||
  8665. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  8666. EXPECTED(p->key != NULL) &&
  8667. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  8668. ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
  8669. break;
  8670. }
  8671. }
  8672. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  8673. }
  8674. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  8675. if (EXPECTED(retval)) {
  8676. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  8677. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  8678. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  8679. break;
  8680. }
  8681. }
  8682. }
  8683. }
  8684. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  8685. fetch_obj_is_no_object:
  8686. ZVAL_NULL(EX_VAR(opline->result.var));
  8687. } else {
  8688. retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  8689. if (retval != EX_VAR(opline->result.var)) {
  8690. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  8691. }
  8692. }
  8693. } while (0);
  8694. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8695. }
  8696. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8697. {
  8698. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  8699. /* Behave like FETCH_OBJ_W */
  8700. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  8701. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8702. }
  8703. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8704. } else {
  8705. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8706. }
  8707. }
  8708. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8709. {
  8710. USE_OPLINE
  8711. zval *container;
  8712. SAVE_OPLINE();
  8713. container = RT_CONSTANT(opline, opline->op1);
  8714. zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  8715. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8716. }
  8717. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8718. {
  8719. USE_OPLINE
  8720. zval *op1, *op2;
  8721. zend_string *op1_str, *op2_str, *str;
  8722. op1 = RT_CONSTANT(opline, opline->op1);
  8723. op2 = EX_VAR(opline->op2.var);
  8724. if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  8725. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  8726. zend_string *op1_str = Z_STR_P(op1);
  8727. zend_string *op2_str = Z_STR_P(op2);
  8728. zend_string *str;
  8729. if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  8730. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  8731. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  8732. } else {
  8733. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  8734. }
  8735. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  8736. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  8737. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  8738. } else {
  8739. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  8740. }
  8741. } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
  8742. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  8743. size_t len = ZSTR_LEN(op1_str);
  8744. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  8745. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  8746. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  8747. } else {
  8748. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  8749. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  8750. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  8751. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  8752. }
  8753. ZEND_VM_NEXT_OPCODE();
  8754. }
  8755. SAVE_OPLINE();
  8756. if (IS_CONST == IS_CONST) {
  8757. op1_str = Z_STR_P(op1);
  8758. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  8759. op1_str = zend_string_copy(Z_STR_P(op1));
  8760. } else {
  8761. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  8762. GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  8763. }
  8764. op1_str = zval_get_string_func(op1);
  8765. }
  8766. if (IS_CV == IS_CONST) {
  8767. op2_str = Z_STR_P(op2);
  8768. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  8769. op2_str = zend_string_copy(Z_STR_P(op2));
  8770. } else {
  8771. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  8772. GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  8773. }
  8774. op2_str = zval_get_string_func(op2);
  8775. }
  8776. do {
  8777. if (IS_CONST != IS_CONST) {
  8778. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  8779. if (IS_CV == IS_CONST) {
  8780. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  8781. GC_ADDREF(op2_str);
  8782. }
  8783. }
  8784. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  8785. zend_string_release_ex(op1_str, 0);
  8786. break;
  8787. }
  8788. }
  8789. if (IS_CV != IS_CONST) {
  8790. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  8791. if (IS_CONST == IS_CONST) {
  8792. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  8793. GC_ADDREF(op1_str);
  8794. }
  8795. }
  8796. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  8797. zend_string_release_ex(op2_str, 0);
  8798. break;
  8799. }
  8800. }
  8801. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  8802. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  8803. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  8804. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  8805. if (IS_CONST != IS_CONST) {
  8806. zend_string_release_ex(op1_str, 0);
  8807. }
  8808. if (IS_CV != IS_CONST) {
  8809. zend_string_release_ex(op2_str, 0);
  8810. }
  8811. } while (0);
  8812. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  8813. }
  8814. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8815. {
  8816. USE_OPLINE
  8817. zval *function_name;
  8818. zend_free_op free_op1;
  8819. zval *object;
  8820. zend_function *fbc;
  8821. zend_class_entry *called_scope;
  8822. zend_object *obj;
  8823. zend_execute_data *call;
  8824. uint32_t call_info;
  8825. SAVE_OPLINE();
  8826. object = RT_CONSTANT(opline, opline->op1);
  8827. if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  8828. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  8829. }
  8830. if (IS_CV != IS_CONST) {
  8831. function_name = EX_VAR(opline->op2.var);
  8832. }
  8833. if (IS_CV != IS_CONST &&
  8834. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  8835. do {
  8836. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  8837. function_name = Z_REFVAL_P(function_name);
  8838. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  8839. break;
  8840. }
  8841. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  8842. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  8843. if (UNEXPECTED(EG(exception) != NULL)) {
  8844. HANDLE_EXCEPTION();
  8845. }
  8846. }
  8847. zend_throw_error(NULL, "Method name must be a string");
  8848. HANDLE_EXCEPTION();
  8849. } while (0);
  8850. }
  8851. if (IS_CONST != IS_UNUSED) {
  8852. do {
  8853. if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  8854. if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  8855. object = Z_REFVAL_P(object);
  8856. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  8857. break;
  8858. }
  8859. }
  8860. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  8861. object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
  8862. if (UNEXPECTED(EG(exception) != NULL)) {
  8863. if (IS_CV != IS_CONST) {
  8864. }
  8865. HANDLE_EXCEPTION();
  8866. }
  8867. }
  8868. if (IS_CV == IS_CONST) {
  8869. function_name = EX_VAR(opline->op2.var);
  8870. }
  8871. zend_invalid_method_call(object, function_name);
  8872. HANDLE_EXCEPTION();
  8873. }
  8874. } while (0);
  8875. }
  8876. obj = Z_OBJ_P(object);
  8877. called_scope = obj->ce;
  8878. if (IS_CV == IS_CONST &&
  8879. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  8880. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  8881. } else {
  8882. zend_object *orig_obj = obj;
  8883. if (UNEXPECTED(obj->handlers->get_method == NULL)) {
  8884. zend_throw_error(NULL, "Object does not support method calls");
  8885. HANDLE_EXCEPTION();
  8886. }
  8887. if (IS_CV == IS_CONST) {
  8888. function_name = EX_VAR(opline->op2.var);
  8889. }
  8890. /* First, locate the function. */
  8891. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  8892. if (UNEXPECTED(fbc == NULL)) {
  8893. if (EXPECTED(!EG(exception))) {
  8894. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  8895. }
  8896. HANDLE_EXCEPTION();
  8897. }
  8898. if (IS_CV == IS_CONST &&
  8899. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  8900. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  8901. EXPECTED(obj == orig_obj)) {
  8902. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  8903. }
  8904. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  8905. /* Reset "object" to trigger reference counting */
  8906. object = NULL;
  8907. }
  8908. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  8909. init_func_run_time_cache(&fbc->op_array);
  8910. }
  8911. }
  8912. if (IS_CV != IS_CONST) {
  8913. }
  8914. call_info = ZEND_CALL_NESTED_FUNCTION;
  8915. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  8916. obj = NULL;
  8917. if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
  8918. HANDLE_EXCEPTION();
  8919. }
  8920. } else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  8921. /* CV may be changed indirectly (e.g. when it's a reference) */
  8922. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
  8923. if (IS_CONST == IS_CV) {
  8924. GC_ADDREF(obj); /* For $this pointer */
  8925. } else if (free_op1 != object) {
  8926. GC_ADDREF(obj); /* For $this pointer */
  8927. }
  8928. }
  8929. call = zend_vm_stack_push_call_frame(call_info,
  8930. fbc, opline->extended_value, called_scope, obj);
  8931. call->prev_execute_data = EX(call);
  8932. EX(call) = call;
  8933. ZEND_VM_NEXT_OPCODE();
  8934. }
  8935. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  8936. {
  8937. USE_OPLINE
  8938. zval *function_name;
  8939. zend_class_entry *ce;
  8940. zend_object *object;
  8941. zend_function *fbc;
  8942. zend_execute_data *call;
  8943. SAVE_OPLINE();
  8944. if (IS_CONST == IS_CONST) {
  8945. /* no function found. try a static method in class */
  8946. ce = CACHED_PTR(opline->result.num);
  8947. if (UNEXPECTED(ce == NULL)) {
  8948. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  8949. if (UNEXPECTED(ce == NULL)) {
  8950. ZEND_ASSERT(EG(exception));
  8951. HANDLE_EXCEPTION();
  8952. }
  8953. if (IS_CV != IS_CONST) {
  8954. CACHE_PTR(opline->result.num, ce);
  8955. }
  8956. }
  8957. } else if (IS_CONST == IS_UNUSED) {
  8958. ce = zend_fetch_class(NULL, opline->op1.num);
  8959. if (UNEXPECTED(ce == NULL)) {
  8960. ZEND_ASSERT(EG(exception));
  8961. HANDLE_EXCEPTION();
  8962. }
  8963. } else {
  8964. ce = Z_CE_P(EX_VAR(opline->op1.var));
  8965. }
  8966. if (IS_CONST == IS_CONST &&
  8967. IS_CV == IS_CONST &&
  8968. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  8969. /* nothing to do */
  8970. } else if (IS_CONST != IS_CONST &&
  8971. IS_CV == IS_CONST &&
  8972. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  8973. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  8974. } else if (IS_CV != IS_UNUSED) {
  8975. function_name = EX_VAR(opline->op2.var);
  8976. if (IS_CV != IS_CONST) {
  8977. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  8978. do {
  8979. if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  8980. function_name = Z_REFVAL_P(function_name);
  8981. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  8982. break;
  8983. }
  8984. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  8985. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  8986. if (UNEXPECTED(EG(exception) != NULL)) {
  8987. HANDLE_EXCEPTION();
  8988. }
  8989. }
  8990. zend_throw_error(NULL, "Function name must be a string");
  8991. HANDLE_EXCEPTION();
  8992. } while (0);
  8993. }
  8994. }
  8995. if (ce->get_static_method) {
  8996. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  8997. } else {
  8998. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  8999. }
  9000. if (UNEXPECTED(fbc == NULL)) {
  9001. if (EXPECTED(!EG(exception))) {
  9002. zend_undefined_method(ce, Z_STR_P(function_name));
  9003. }
  9004. HANDLE_EXCEPTION();
  9005. }
  9006. if (IS_CV == IS_CONST &&
  9007. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  9008. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
  9009. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  9010. }
  9011. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  9012. init_func_run_time_cache(&fbc->op_array);
  9013. }
  9014. if (IS_CV != IS_CONST) {
  9015. }
  9016. } else {
  9017. if (UNEXPECTED(ce->constructor == NULL)) {
  9018. zend_throw_error(NULL, "Cannot call constructor");
  9019. HANDLE_EXCEPTION();
  9020. }
  9021. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  9022. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  9023. HANDLE_EXCEPTION();
  9024. }
  9025. fbc = ce->constructor;
  9026. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  9027. init_func_run_time_cache(&fbc->op_array);
  9028. }
  9029. }
  9030. object = NULL;
  9031. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  9032. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  9033. object = Z_OBJ(EX(This));
  9034. ce = object->ce;
  9035. } else {
  9036. zend_non_static_method_call(fbc);
  9037. if (UNEXPECTED(EG(exception) != NULL)) {
  9038. HANDLE_EXCEPTION();
  9039. }
  9040. }
  9041. }
  9042. if (IS_CONST == IS_UNUSED) {
  9043. /* previous opcode is ZEND_FETCH_CLASS */
  9044. if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  9045. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
  9046. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  9047. ce = Z_OBJCE(EX(This));
  9048. } else {
  9049. ce = Z_CE(EX(This));
  9050. }
  9051. }
  9052. }
  9053. call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  9054. fbc, opline->extended_value, ce, object);
  9055. call->prev_execute_data = EX(call);
  9056. EX(call) = call;
  9057. ZEND_VM_NEXT_OPCODE();
  9058. }
  9059. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9060. {
  9061. USE_OPLINE
  9062. zval *function_name;
  9063. zend_fcall_info_cache fcc;
  9064. char *error = NULL;
  9065. zend_function *func;
  9066. zend_class_entry *called_scope;
  9067. zend_object *object;
  9068. zend_execute_data *call;
  9069. uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
  9070. SAVE_OPLINE();
  9071. function_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  9072. if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
  9073. func = fcc.function_handler;
  9074. called_scope = fcc.called_scope;
  9075. object = fcc.object;
  9076. if (error) {
  9077. efree(error);
  9078. /* This is the only soft error is_callable() can generate */
  9079. zend_non_static_method_call(func);
  9080. if (UNEXPECTED(EG(exception) != NULL)) {
  9081. HANDLE_EXCEPTION();
  9082. }
  9083. }
  9084. if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
  9085. /* Delay closure destruction until its invocation */
  9086. GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
  9087. call_info |= ZEND_CALL_CLOSURE;
  9088. if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
  9089. call_info |= ZEND_CALL_FAKE_CLOSURE;
  9090. }
  9091. } else if (object) {
  9092. call_info |= ZEND_CALL_RELEASE_THIS;
  9093. GC_ADDREF(object); /* For $this pointer */
  9094. }
  9095. if ((IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
  9096. if (call_info & ZEND_CALL_CLOSURE) {
  9097. zend_object_release(ZEND_CLOSURE_OBJECT(func));
  9098. }
  9099. if (call_info & ZEND_CALL_RELEASE_THIS) {
  9100. zend_object_release(object);
  9101. }
  9102. HANDLE_EXCEPTION();
  9103. }
  9104. if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) {
  9105. init_func_run_time_cache(&func->op_array);
  9106. }
  9107. } else {
  9108. zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
  9109. efree(error);
  9110. if (UNEXPECTED(EG(exception))) {
  9111. HANDLE_EXCEPTION();
  9112. }
  9113. func = (zend_function*)&zend_pass_function;
  9114. called_scope = NULL;
  9115. object = NULL;
  9116. }
  9117. call = zend_vm_stack_push_call_frame(call_info,
  9118. func, opline->extended_value, called_scope, object);
  9119. call->prev_execute_data = EX(call);
  9120. EX(call) = call;
  9121. ZEND_VM_NEXT_OPCODE();
  9122. }
  9123. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9124. {
  9125. USE_OPLINE
  9126. zval *expr_ptr, new_expr;
  9127. SAVE_OPLINE();
  9128. if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
  9129. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  9130. expr_ptr = NULL;
  9131. if (Z_ISREF_P(expr_ptr)) {
  9132. Z_ADDREF_P(expr_ptr);
  9133. } else {
  9134. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  9135. }
  9136. } else {
  9137. expr_ptr = RT_CONSTANT(opline, opline->op1);
  9138. if (IS_CONST == IS_TMP_VAR) {
  9139. /* pass */
  9140. } else if (IS_CONST == IS_CONST) {
  9141. Z_TRY_ADDREF_P(expr_ptr);
  9142. } else if (IS_CONST == IS_CV) {
  9143. ZVAL_DEREF(expr_ptr);
  9144. Z_TRY_ADDREF_P(expr_ptr);
  9145. } else /* if (IS_CONST == IS_VAR) */ {
  9146. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  9147. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  9148. expr_ptr = Z_REFVAL_P(expr_ptr);
  9149. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  9150. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  9151. expr_ptr = &new_expr;
  9152. efree_size(ref, sizeof(zend_reference));
  9153. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  9154. Z_ADDREF_P(expr_ptr);
  9155. }
  9156. }
  9157. }
  9158. }
  9159. if (IS_CV != IS_UNUSED) {
  9160. zval *offset = EX_VAR(opline->op2.var);
  9161. zend_string *str;
  9162. zend_ulong hval;
  9163. add_again:
  9164. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  9165. str = Z_STR_P(offset);
  9166. if (IS_CV != IS_CONST) {
  9167. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  9168. goto num_index;
  9169. }
  9170. }
  9171. str_index:
  9172. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  9173. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  9174. hval = Z_LVAL_P(offset);
  9175. num_index:
  9176. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  9177. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  9178. offset = Z_REFVAL_P(offset);
  9179. goto add_again;
  9180. } else if (Z_TYPE_P(offset) == IS_NULL) {
  9181. str = ZSTR_EMPTY_ALLOC();
  9182. goto str_index;
  9183. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  9184. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  9185. goto num_index;
  9186. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  9187. hval = 0;
  9188. goto num_index;
  9189. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  9190. hval = 1;
  9191. goto num_index;
  9192. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  9193. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  9194. str = ZSTR_EMPTY_ALLOC();
  9195. goto str_index;
  9196. } else {
  9197. zend_illegal_offset();
  9198. zval_ptr_dtor_nogc(expr_ptr);
  9199. }
  9200. } else {
  9201. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  9202. zend_cannot_add_element();
  9203. zval_ptr_dtor_nogc(expr_ptr);
  9204. }
  9205. }
  9206. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9207. }
  9208. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9209. {
  9210. zval *array;
  9211. uint32_t size;
  9212. USE_OPLINE
  9213. array = EX_VAR(opline->result.var);
  9214. if (IS_CONST != IS_UNUSED) {
  9215. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  9216. ZVAL_ARR(array, zend_new_array(size));
  9217. /* Explicitly initialize array as not-packed if flag is set */
  9218. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  9219. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  9220. }
  9221. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9222. } else {
  9223. ZVAL_EMPTY_ARRAY(array);
  9224. ZEND_VM_NEXT_OPCODE();
  9225. }
  9226. }
  9227. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9228. {
  9229. USE_OPLINE
  9230. zval *container;
  9231. int result;
  9232. zend_ulong hval;
  9233. zval *offset;
  9234. SAVE_OPLINE();
  9235. container = RT_CONSTANT(opline, opline->op1);
  9236. offset = EX_VAR(opline->op2.var);
  9237. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  9238. HashTable *ht;
  9239. zval *value;
  9240. zend_string *str;
  9241. isset_dim_obj_array:
  9242. ht = Z_ARRVAL_P(container);
  9243. isset_again:
  9244. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  9245. str = Z_STR_P(offset);
  9246. if (IS_CV != IS_CONST) {
  9247. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  9248. goto num_index_prop;
  9249. }
  9250. }
  9251. value = zend_hash_find_ex_ind(ht, str, IS_CV == IS_CONST);
  9252. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  9253. hval = Z_LVAL_P(offset);
  9254. num_index_prop:
  9255. value = zend_hash_index_find(ht, hval);
  9256. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  9257. offset = Z_REFVAL_P(offset);
  9258. goto isset_again;
  9259. } else {
  9260. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  9261. }
  9262. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  9263. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  9264. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  9265. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  9266. } else {
  9267. result = (value == NULL || !i_zend_is_true(value));
  9268. }
  9269. goto isset_dim_obj_exit;
  9270. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  9271. container = Z_REFVAL_P(container);
  9272. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  9273. goto isset_dim_obj_array;
  9274. }
  9275. }
  9276. if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  9277. offset++;
  9278. }
  9279. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  9280. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  9281. } else {
  9282. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  9283. }
  9284. isset_dim_obj_exit:
  9285. ZEND_VM_SMART_BRANCH(result, 1);
  9286. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9287. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9288. }
  9289. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9290. {
  9291. USE_OPLINE
  9292. zval *container;
  9293. int result;
  9294. zval *offset;
  9295. SAVE_OPLINE();
  9296. container = RT_CONSTANT(opline, opline->op1);
  9297. if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  9298. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9299. }
  9300. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  9301. if (IS_CONST == IS_CONST ||
  9302. (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  9303. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  9304. container = Z_REFVAL_P(container);
  9305. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  9306. goto isset_no_object;
  9307. }
  9308. } else {
  9309. goto isset_no_object;
  9310. }
  9311. }
  9312. if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
  9313. zend_wrong_property_check(offset);
  9314. isset_no_object:
  9315. result = (opline->extended_value & ZEND_ISEMPTY);
  9316. } else {
  9317. result =
  9318. (opline->extended_value & ZEND_ISEMPTY) ^
  9319. Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  9320. }
  9321. ZEND_VM_SMART_BRANCH(result, 1);
  9322. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9323. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9324. }
  9325. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9326. {
  9327. USE_OPLINE
  9328. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  9329. SAVE_OPLINE();
  9330. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  9331. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  9332. }
  9333. /* Destroy the previously yielded value */
  9334. zval_ptr_dtor(&generator->value);
  9335. /* Destroy the previously yielded key */
  9336. zval_ptr_dtor(&generator->key);
  9337. /* Set the new yielded value */
  9338. if (IS_CONST != IS_UNUSED) {
  9339. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  9340. /* Constants and temporary variables aren't yieldable by reference,
  9341. * but we still allow them with a notice. */
  9342. if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
  9343. zval *value;
  9344. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  9345. value = RT_CONSTANT(opline, opline->op1);
  9346. ZVAL_COPY_VALUE(&generator->value, value);
  9347. if (IS_CONST == IS_CONST) {
  9348. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  9349. Z_ADDREF(generator->value);
  9350. }
  9351. }
  9352. } else {
  9353. zval *value_ptr = NULL;
  9354. /* If a function call result is yielded and the function did
  9355. * not return by reference we throw a notice. */
  9356. if (IS_CONST == IS_VAR &&
  9357. (value_ptr == &EG(uninitialized_zval) ||
  9358. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  9359. !Z_ISREF_P(value_ptr)))) {
  9360. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  9361. ZVAL_COPY(&generator->value, value_ptr);
  9362. } else {
  9363. if (Z_ISREF_P(value_ptr)) {
  9364. Z_ADDREF_P(value_ptr);
  9365. } else {
  9366. ZVAL_MAKE_REF_EX(value_ptr, 2);
  9367. }
  9368. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  9369. }
  9370. }
  9371. } else {
  9372. zval *value = RT_CONSTANT(opline, opline->op1);
  9373. /* Consts, temporary variables and references need copying */
  9374. if (IS_CONST == IS_CONST) {
  9375. ZVAL_COPY_VALUE(&generator->value, value);
  9376. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  9377. Z_ADDREF(generator->value);
  9378. }
  9379. } else if (IS_CONST == IS_TMP_VAR) {
  9380. ZVAL_COPY_VALUE(&generator->value, value);
  9381. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  9382. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  9383. } else {
  9384. ZVAL_COPY_VALUE(&generator->value, value);
  9385. if (IS_CONST == IS_CV) {
  9386. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  9387. }
  9388. }
  9389. }
  9390. } else {
  9391. /* If no value was specified yield null */
  9392. ZVAL_NULL(&generator->value);
  9393. }
  9394. /* Set the new yielded key */
  9395. if (IS_CV != IS_UNUSED) {
  9396. zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  9397. /* Consts, temporary variables and references need copying */
  9398. if (IS_CV == IS_CONST) {
  9399. ZVAL_COPY_VALUE(&generator->key, key);
  9400. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  9401. Z_ADDREF(generator->key);
  9402. }
  9403. } else if (IS_CV == IS_TMP_VAR) {
  9404. ZVAL_COPY_VALUE(&generator->key, key);
  9405. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  9406. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  9407. } else {
  9408. ZVAL_COPY_VALUE(&generator->key, key);
  9409. if (IS_CV == IS_CV) {
  9410. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  9411. }
  9412. }
  9413. if (Z_TYPE(generator->key) == IS_LONG
  9414. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  9415. ) {
  9416. generator->largest_used_integer_key = Z_LVAL(generator->key);
  9417. }
  9418. } else {
  9419. /* If no key was specified we use auto-increment keys */
  9420. generator->largest_used_integer_key++;
  9421. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  9422. }
  9423. if (RETURN_VALUE_USED(opline)) {
  9424. /* If the return value of yield is used set the send
  9425. * target and initialize it to NULL */
  9426. generator->send_target = EX_VAR(opline->result.var);
  9427. ZVAL_NULL(generator->send_target);
  9428. } else {
  9429. generator->send_target = NULL;
  9430. }
  9431. /* We increment to the next op, so we are at the correct position when the
  9432. * generator is resumed. */
  9433. ZEND_VM_INC_OPCODE();
  9434. /* The GOTO VM uses a local opline variable. We need to set the opline
  9435. * variable in execute_data so we don't resume at an old position. */
  9436. SAVE_OPLINE();
  9437. ZEND_VM_RETURN();
  9438. }
  9439. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9440. {
  9441. USE_OPLINE
  9442. zval *value;
  9443. value = EX_VAR(opline->op1.var);
  9444. ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
  9445. ZEND_VM_NEXT_OPCODE();
  9446. }
  9447. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9448. {
  9449. USE_OPLINE
  9450. zval *value;
  9451. value = EX_VAR(opline->op1.var);
  9452. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
  9453. ZEND_VM_NEXT_OPCODE();
  9454. }
  9455. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9456. {
  9457. USE_OPLINE
  9458. zval *container;
  9459. SAVE_OPLINE();
  9460. container = EX_VAR(opline->op1.var);
  9461. zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  9462. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  9463. }
  9464. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9465. {
  9466. USE_OPLINE
  9467. zval *op, *jump_zv;
  9468. HashTable *jumptable;
  9469. op = EX_VAR(opline->op1.var);
  9470. jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  9471. if (Z_TYPE_P(op) != IS_LONG) {
  9472. ZVAL_DEREF(op);
  9473. if (Z_TYPE_P(op) != IS_LONG) {
  9474. /* Wrong type, fall back to ZEND_CASE chain */
  9475. ZEND_VM_NEXT_OPCODE();
  9476. }
  9477. }
  9478. jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
  9479. if (jump_zv != NULL) {
  9480. ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
  9481. ZEND_VM_CONTINUE();
  9482. } else {
  9483. /* default */
  9484. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  9485. ZEND_VM_CONTINUE();
  9486. }
  9487. }
  9488. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9489. {
  9490. USE_OPLINE
  9491. zval *op, *jump_zv;
  9492. HashTable *jumptable;
  9493. op = EX_VAR(opline->op1.var);
  9494. jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  9495. if (Z_TYPE_P(op) != IS_STRING) {
  9496. if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
  9497. /* Wrong type, fall back to ZEND_CASE chain */
  9498. ZEND_VM_NEXT_OPCODE();
  9499. } else {
  9500. ZVAL_DEREF(op);
  9501. if (Z_TYPE_P(op) != IS_STRING) {
  9502. /* Wrong type, fall back to ZEND_CASE chain */
  9503. ZEND_VM_NEXT_OPCODE();
  9504. }
  9505. }
  9506. }
  9507. jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
  9508. if (jump_zv != NULL) {
  9509. ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
  9510. ZEND_VM_CONTINUE();
  9511. } else {
  9512. /* default */
  9513. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  9514. ZEND_VM_CONTINUE();
  9515. }
  9516. }
  9517. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9518. {
  9519. USE_OPLINE
  9520. zval *op1, *op2, *result;
  9521. op1 = EX_VAR(opline->op1.var);
  9522. op2 = RT_CONSTANT(opline, opline->op2);
  9523. result = EX_VAR(opline->result.var);
  9524. ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
  9525. ZEND_VM_NEXT_OPCODE();
  9526. }
  9527. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9528. {
  9529. USE_OPLINE
  9530. zval *op1, *op2, *result;
  9531. op1 = EX_VAR(opline->op1.var);
  9532. op2 = RT_CONSTANT(opline, opline->op2);
  9533. result = EX_VAR(opline->result.var);
  9534. fast_long_add_function(result, op1, op2);
  9535. ZEND_VM_NEXT_OPCODE();
  9536. }
  9537. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9538. {
  9539. USE_OPLINE
  9540. zval *op1, *op2, *result;
  9541. op1 = EX_VAR(opline->op1.var);
  9542. op2 = RT_CONSTANT(opline, opline->op2);
  9543. result = EX_VAR(opline->result.var);
  9544. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
  9545. ZEND_VM_NEXT_OPCODE();
  9546. }
  9547. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9548. {
  9549. USE_OPLINE
  9550. zval *op1, *op2, *result;
  9551. op1 = EX_VAR(opline->op1.var);
  9552. op2 = RT_CONSTANT(opline, opline->op2);
  9553. result = EX_VAR(opline->result.var);
  9554. ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
  9555. ZEND_VM_NEXT_OPCODE();
  9556. }
  9557. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9558. {
  9559. USE_OPLINE
  9560. zval *op1, *op2, *result;
  9561. op1 = EX_VAR(opline->op1.var);
  9562. op2 = RT_CONSTANT(opline, opline->op2);
  9563. result = EX_VAR(opline->result.var);
  9564. fast_long_sub_function(result, op1, op2);
  9565. ZEND_VM_NEXT_OPCODE();
  9566. }
  9567. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9568. {
  9569. USE_OPLINE
  9570. zval *op1, *op2, *result;
  9571. op1 = EX_VAR(opline->op1.var);
  9572. op2 = RT_CONSTANT(opline, opline->op2);
  9573. result = EX_VAR(opline->result.var);
  9574. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  9575. ZEND_VM_NEXT_OPCODE();
  9576. }
  9577. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9578. {
  9579. USE_OPLINE
  9580. zval *op1, *op2, *result;
  9581. op1 = EX_VAR(opline->op1.var);
  9582. op2 = RT_CONSTANT(opline, opline->op2);
  9583. result = EX_VAR(opline->result.var);
  9584. ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
  9585. ZEND_VM_NEXT_OPCODE();
  9586. }
  9587. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9588. {
  9589. USE_OPLINE
  9590. zval *op1, *op2, *result;
  9591. zend_long overflow;
  9592. op1 = EX_VAR(opline->op1.var);
  9593. op2 = RT_CONSTANT(opline, opline->op2);
  9594. result = EX_VAR(opline->result.var);
  9595. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  9596. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  9597. ZEND_VM_NEXT_OPCODE();
  9598. }
  9599. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9600. {
  9601. USE_OPLINE
  9602. zval *op1, *op2, *result;
  9603. op1 = EX_VAR(opline->op1.var);
  9604. op2 = RT_CONSTANT(opline, opline->op2);
  9605. result = EX_VAR(opline->result.var);
  9606. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
  9607. ZEND_VM_NEXT_OPCODE();
  9608. }
  9609. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9610. {
  9611. USE_OPLINE
  9612. zval *op1, *op2;
  9613. int result;
  9614. op1 = EX_VAR(opline->op1.var);
  9615. op2 = RT_CONSTANT(opline, opline->op2);
  9616. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  9617. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9618. ZEND_VM_NEXT_OPCODE();
  9619. }
  9620. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9621. {
  9622. USE_OPLINE
  9623. zval *op1, *op2;
  9624. int result;
  9625. op1 = EX_VAR(opline->op1.var);
  9626. op2 = RT_CONSTANT(opline, opline->op2);
  9627. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  9628. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  9629. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9630. ZEND_VM_NEXT_OPCODE();
  9631. }
  9632. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9633. {
  9634. USE_OPLINE
  9635. zval *op1, *op2;
  9636. int result;
  9637. op1 = EX_VAR(opline->op1.var);
  9638. op2 = RT_CONSTANT(opline, opline->op2);
  9639. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  9640. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  9641. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9642. ZEND_VM_NEXT_OPCODE();
  9643. }
  9644. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9645. {
  9646. USE_OPLINE
  9647. zval *op1, *op2;
  9648. int result;
  9649. op1 = EX_VAR(opline->op1.var);
  9650. op2 = RT_CONSTANT(opline, opline->op2);
  9651. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  9652. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9653. ZEND_VM_NEXT_OPCODE();
  9654. }
  9655. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9656. {
  9657. USE_OPLINE
  9658. zval *op1, *op2;
  9659. int result;
  9660. op1 = EX_VAR(opline->op1.var);
  9661. op2 = RT_CONSTANT(opline, opline->op2);
  9662. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  9663. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  9664. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9665. ZEND_VM_NEXT_OPCODE();
  9666. }
  9667. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9668. {
  9669. USE_OPLINE
  9670. zval *op1, *op2;
  9671. int result;
  9672. op1 = EX_VAR(opline->op1.var);
  9673. op2 = RT_CONSTANT(opline, opline->op2);
  9674. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  9675. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  9676. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9677. ZEND_VM_NEXT_OPCODE();
  9678. }
  9679. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9680. {
  9681. USE_OPLINE
  9682. zval *op1, *op2;
  9683. int result;
  9684. op1 = EX_VAR(opline->op1.var);
  9685. op2 = RT_CONSTANT(opline, opline->op2);
  9686. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  9687. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9688. ZEND_VM_NEXT_OPCODE();
  9689. }
  9690. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9691. {
  9692. USE_OPLINE
  9693. zval *op1, *op2;
  9694. int result;
  9695. op1 = EX_VAR(opline->op1.var);
  9696. op2 = RT_CONSTANT(opline, opline->op2);
  9697. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  9698. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  9699. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9700. ZEND_VM_NEXT_OPCODE();
  9701. }
  9702. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9703. {
  9704. USE_OPLINE
  9705. zval *op1, *op2;
  9706. int result;
  9707. op1 = EX_VAR(opline->op1.var);
  9708. op2 = RT_CONSTANT(opline, opline->op2);
  9709. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  9710. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  9711. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9712. ZEND_VM_NEXT_OPCODE();
  9713. }
  9714. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9715. {
  9716. USE_OPLINE
  9717. zval *op1, *op2;
  9718. int result;
  9719. op1 = EX_VAR(opline->op1.var);
  9720. op2 = RT_CONSTANT(opline, opline->op2);
  9721. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  9722. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9723. ZEND_VM_NEXT_OPCODE();
  9724. }
  9725. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9726. {
  9727. USE_OPLINE
  9728. zval *op1, *op2;
  9729. int result;
  9730. op1 = EX_VAR(opline->op1.var);
  9731. op2 = RT_CONSTANT(opline, opline->op2);
  9732. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  9733. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  9734. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9735. ZEND_VM_NEXT_OPCODE();
  9736. }
  9737. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9738. {
  9739. USE_OPLINE
  9740. zval *op1, *op2;
  9741. int result;
  9742. op1 = EX_VAR(opline->op1.var);
  9743. op2 = RT_CONSTANT(opline, opline->op2);
  9744. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  9745. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  9746. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9747. ZEND_VM_NEXT_OPCODE();
  9748. }
  9749. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9750. {
  9751. USE_OPLINE
  9752. zval *op1, *op2;
  9753. int result;
  9754. op1 = EX_VAR(opline->op1.var);
  9755. op2 = RT_CONSTANT(opline, opline->op2);
  9756. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  9757. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9758. ZEND_VM_NEXT_OPCODE();
  9759. }
  9760. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9761. {
  9762. USE_OPLINE
  9763. zval *op1, *op2;
  9764. int result;
  9765. op1 = EX_VAR(opline->op1.var);
  9766. op2 = RT_CONSTANT(opline, opline->op2);
  9767. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  9768. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  9769. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9770. ZEND_VM_NEXT_OPCODE();
  9771. }
  9772. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9773. {
  9774. USE_OPLINE
  9775. zval *op1, *op2;
  9776. int result;
  9777. op1 = EX_VAR(opline->op1.var);
  9778. op2 = RT_CONSTANT(opline, opline->op2);
  9779. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  9780. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  9781. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9782. ZEND_VM_NEXT_OPCODE();
  9783. }
  9784. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9785. {
  9786. USE_OPLINE
  9787. zval *op1, *op2;
  9788. int result;
  9789. op1 = EX_VAR(opline->op1.var);
  9790. op2 = RT_CONSTANT(opline, opline->op2);
  9791. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  9792. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9793. ZEND_VM_NEXT_OPCODE();
  9794. }
  9795. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9796. {
  9797. USE_OPLINE
  9798. zval *op1, *op2;
  9799. int result;
  9800. op1 = EX_VAR(opline->op1.var);
  9801. op2 = RT_CONSTANT(opline, opline->op2);
  9802. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  9803. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  9804. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9805. ZEND_VM_NEXT_OPCODE();
  9806. }
  9807. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9808. {
  9809. USE_OPLINE
  9810. zval *op1, *op2;
  9811. int result;
  9812. op1 = EX_VAR(opline->op1.var);
  9813. op2 = RT_CONSTANT(opline, opline->op2);
  9814. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  9815. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  9816. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9817. ZEND_VM_NEXT_OPCODE();
  9818. }
  9819. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9820. {
  9821. USE_OPLINE
  9822. zval *op1, *op2;
  9823. int result;
  9824. op1 = EX_VAR(opline->op1.var);
  9825. op2 = RT_CONSTANT(opline, opline->op2);
  9826. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  9827. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9828. ZEND_VM_NEXT_OPCODE();
  9829. }
  9830. 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)
  9831. {
  9832. USE_OPLINE
  9833. zval *op1, *op2;
  9834. int result;
  9835. op1 = EX_VAR(opline->op1.var);
  9836. op2 = RT_CONSTANT(opline, opline->op2);
  9837. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  9838. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  9839. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9840. ZEND_VM_NEXT_OPCODE();
  9841. }
  9842. 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)
  9843. {
  9844. USE_OPLINE
  9845. zval *op1, *op2;
  9846. int result;
  9847. op1 = EX_VAR(opline->op1.var);
  9848. op2 = RT_CONSTANT(opline, opline->op2);
  9849. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  9850. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  9851. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9852. ZEND_VM_NEXT_OPCODE();
  9853. }
  9854. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9855. {
  9856. USE_OPLINE
  9857. zval *op1, *op2;
  9858. int result;
  9859. op1 = EX_VAR(opline->op1.var);
  9860. op2 = RT_CONSTANT(opline, opline->op2);
  9861. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  9862. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9863. ZEND_VM_NEXT_OPCODE();
  9864. }
  9865. 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)
  9866. {
  9867. USE_OPLINE
  9868. zval *op1, *op2;
  9869. int result;
  9870. op1 = EX_VAR(opline->op1.var);
  9871. op2 = RT_CONSTANT(opline, opline->op2);
  9872. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  9873. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  9874. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9875. ZEND_VM_NEXT_OPCODE();
  9876. }
  9877. 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)
  9878. {
  9879. USE_OPLINE
  9880. zval *op1, *op2;
  9881. int result;
  9882. op1 = EX_VAR(opline->op1.var);
  9883. op2 = RT_CONSTANT(opline, opline->op2);
  9884. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  9885. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  9886. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9887. ZEND_VM_NEXT_OPCODE();
  9888. }
  9889. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9890. {
  9891. USE_OPLINE
  9892. zval *op1, *op2, *result;
  9893. op1 = EX_VAR(opline->op1.var);
  9894. op2 = EX_VAR(opline->op2.var);
  9895. result = EX_VAR(opline->result.var);
  9896. ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
  9897. ZEND_VM_NEXT_OPCODE();
  9898. }
  9899. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9900. {
  9901. USE_OPLINE
  9902. zval *op1, *op2, *result;
  9903. op1 = EX_VAR(opline->op1.var);
  9904. op2 = EX_VAR(opline->op2.var);
  9905. result = EX_VAR(opline->result.var);
  9906. fast_long_add_function(result, op1, op2);
  9907. ZEND_VM_NEXT_OPCODE();
  9908. }
  9909. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9910. {
  9911. USE_OPLINE
  9912. zval *op1, *op2, *result;
  9913. op1 = EX_VAR(opline->op1.var);
  9914. op2 = EX_VAR(opline->op2.var);
  9915. result = EX_VAR(opline->result.var);
  9916. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
  9917. ZEND_VM_NEXT_OPCODE();
  9918. }
  9919. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9920. {
  9921. USE_OPLINE
  9922. zval *op1, *op2, *result;
  9923. op1 = EX_VAR(opline->op1.var);
  9924. op2 = EX_VAR(opline->op2.var);
  9925. result = EX_VAR(opline->result.var);
  9926. ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
  9927. ZEND_VM_NEXT_OPCODE();
  9928. }
  9929. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9930. {
  9931. USE_OPLINE
  9932. zval *op1, *op2, *result;
  9933. op1 = EX_VAR(opline->op1.var);
  9934. op2 = EX_VAR(opline->op2.var);
  9935. result = EX_VAR(opline->result.var);
  9936. fast_long_sub_function(result, op1, op2);
  9937. ZEND_VM_NEXT_OPCODE();
  9938. }
  9939. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9940. {
  9941. USE_OPLINE
  9942. zval *op1, *op2, *result;
  9943. op1 = EX_VAR(opline->op1.var);
  9944. op2 = EX_VAR(opline->op2.var);
  9945. result = EX_VAR(opline->result.var);
  9946. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  9947. ZEND_VM_NEXT_OPCODE();
  9948. }
  9949. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9950. {
  9951. USE_OPLINE
  9952. zval *op1, *op2, *result;
  9953. op1 = EX_VAR(opline->op1.var);
  9954. op2 = EX_VAR(opline->op2.var);
  9955. result = EX_VAR(opline->result.var);
  9956. ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
  9957. ZEND_VM_NEXT_OPCODE();
  9958. }
  9959. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9960. {
  9961. USE_OPLINE
  9962. zval *op1, *op2, *result;
  9963. zend_long overflow;
  9964. op1 = EX_VAR(opline->op1.var);
  9965. op2 = EX_VAR(opline->op2.var);
  9966. result = EX_VAR(opline->result.var);
  9967. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  9968. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  9969. ZEND_VM_NEXT_OPCODE();
  9970. }
  9971. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9972. {
  9973. USE_OPLINE
  9974. zval *op1, *op2, *result;
  9975. op1 = EX_VAR(opline->op1.var);
  9976. op2 = EX_VAR(opline->op2.var);
  9977. result = EX_VAR(opline->result.var);
  9978. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
  9979. ZEND_VM_NEXT_OPCODE();
  9980. }
  9981. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9982. {
  9983. USE_OPLINE
  9984. zval *op1, *op2;
  9985. int result;
  9986. op1 = EX_VAR(opline->op1.var);
  9987. op2 = EX_VAR(opline->op2.var);
  9988. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  9989. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  9990. ZEND_VM_NEXT_OPCODE();
  9991. }
  9992. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  9993. {
  9994. USE_OPLINE
  9995. zval *op1, *op2;
  9996. int result;
  9997. op1 = EX_VAR(opline->op1.var);
  9998. op2 = EX_VAR(opline->op2.var);
  9999. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  10000. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  10001. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10002. ZEND_VM_NEXT_OPCODE();
  10003. }
  10004. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10005. {
  10006. USE_OPLINE
  10007. zval *op1, *op2;
  10008. int result;
  10009. op1 = EX_VAR(opline->op1.var);
  10010. op2 = EX_VAR(opline->op2.var);
  10011. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  10012. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  10013. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10014. ZEND_VM_NEXT_OPCODE();
  10015. }
  10016. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10017. {
  10018. USE_OPLINE
  10019. zval *op1, *op2;
  10020. int result;
  10021. op1 = EX_VAR(opline->op1.var);
  10022. op2 = EX_VAR(opline->op2.var);
  10023. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  10024. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10025. ZEND_VM_NEXT_OPCODE();
  10026. }
  10027. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10028. {
  10029. USE_OPLINE
  10030. zval *op1, *op2;
  10031. int result;
  10032. op1 = EX_VAR(opline->op1.var);
  10033. op2 = EX_VAR(opline->op2.var);
  10034. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  10035. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  10036. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10037. ZEND_VM_NEXT_OPCODE();
  10038. }
  10039. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10040. {
  10041. USE_OPLINE
  10042. zval *op1, *op2;
  10043. int result;
  10044. op1 = EX_VAR(opline->op1.var);
  10045. op2 = EX_VAR(opline->op2.var);
  10046. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  10047. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  10048. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10049. ZEND_VM_NEXT_OPCODE();
  10050. }
  10051. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10052. {
  10053. USE_OPLINE
  10054. zval *op1, *op2;
  10055. int result;
  10056. op1 = EX_VAR(opline->op1.var);
  10057. op2 = EX_VAR(opline->op2.var);
  10058. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  10059. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10060. ZEND_VM_NEXT_OPCODE();
  10061. }
  10062. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10063. {
  10064. USE_OPLINE
  10065. zval *op1, *op2;
  10066. int result;
  10067. op1 = EX_VAR(opline->op1.var);
  10068. op2 = EX_VAR(opline->op2.var);
  10069. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  10070. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  10071. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10072. ZEND_VM_NEXT_OPCODE();
  10073. }
  10074. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10075. {
  10076. USE_OPLINE
  10077. zval *op1, *op2;
  10078. int result;
  10079. op1 = EX_VAR(opline->op1.var);
  10080. op2 = EX_VAR(opline->op2.var);
  10081. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  10082. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  10083. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10084. ZEND_VM_NEXT_OPCODE();
  10085. }
  10086. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10087. {
  10088. USE_OPLINE
  10089. zval *op1, *op2;
  10090. int result;
  10091. op1 = EX_VAR(opline->op1.var);
  10092. op2 = EX_VAR(opline->op2.var);
  10093. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  10094. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10095. ZEND_VM_NEXT_OPCODE();
  10096. }
  10097. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10098. {
  10099. USE_OPLINE
  10100. zval *op1, *op2;
  10101. int result;
  10102. op1 = EX_VAR(opline->op1.var);
  10103. op2 = EX_VAR(opline->op2.var);
  10104. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  10105. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  10106. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10107. ZEND_VM_NEXT_OPCODE();
  10108. }
  10109. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10110. {
  10111. USE_OPLINE
  10112. zval *op1, *op2;
  10113. int result;
  10114. op1 = EX_VAR(opline->op1.var);
  10115. op2 = EX_VAR(opline->op2.var);
  10116. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  10117. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  10118. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10119. ZEND_VM_NEXT_OPCODE();
  10120. }
  10121. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10122. {
  10123. USE_OPLINE
  10124. zval *op1, *op2;
  10125. int result;
  10126. op1 = EX_VAR(opline->op1.var);
  10127. op2 = EX_VAR(opline->op2.var);
  10128. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  10129. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10130. ZEND_VM_NEXT_OPCODE();
  10131. }
  10132. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10133. {
  10134. USE_OPLINE
  10135. zval *op1, *op2;
  10136. int result;
  10137. op1 = EX_VAR(opline->op1.var);
  10138. op2 = EX_VAR(opline->op2.var);
  10139. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  10140. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  10141. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10142. ZEND_VM_NEXT_OPCODE();
  10143. }
  10144. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10145. {
  10146. USE_OPLINE
  10147. zval *op1, *op2;
  10148. int result;
  10149. op1 = EX_VAR(opline->op1.var);
  10150. op2 = EX_VAR(opline->op2.var);
  10151. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  10152. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  10153. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10154. ZEND_VM_NEXT_OPCODE();
  10155. }
  10156. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10157. {
  10158. USE_OPLINE
  10159. zval *op1, *op2;
  10160. int result;
  10161. op1 = EX_VAR(opline->op1.var);
  10162. op2 = EX_VAR(opline->op2.var);
  10163. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  10164. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10165. ZEND_VM_NEXT_OPCODE();
  10166. }
  10167. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10168. {
  10169. USE_OPLINE
  10170. zval *op1, *op2;
  10171. int result;
  10172. op1 = EX_VAR(opline->op1.var);
  10173. op2 = EX_VAR(opline->op2.var);
  10174. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  10175. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  10176. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10177. ZEND_VM_NEXT_OPCODE();
  10178. }
  10179. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10180. {
  10181. USE_OPLINE
  10182. zval *op1, *op2;
  10183. int result;
  10184. op1 = EX_VAR(opline->op1.var);
  10185. op2 = EX_VAR(opline->op2.var);
  10186. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  10187. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  10188. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10189. ZEND_VM_NEXT_OPCODE();
  10190. }
  10191. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10192. {
  10193. USE_OPLINE
  10194. zval *op1, *op2;
  10195. int result;
  10196. op1 = EX_VAR(opline->op1.var);
  10197. op2 = EX_VAR(opline->op2.var);
  10198. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  10199. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10200. ZEND_VM_NEXT_OPCODE();
  10201. }
  10202. 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)
  10203. {
  10204. USE_OPLINE
  10205. zval *op1, *op2;
  10206. int result;
  10207. op1 = EX_VAR(opline->op1.var);
  10208. op2 = EX_VAR(opline->op2.var);
  10209. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  10210. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  10211. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10212. ZEND_VM_NEXT_OPCODE();
  10213. }
  10214. 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)
  10215. {
  10216. USE_OPLINE
  10217. zval *op1, *op2;
  10218. int result;
  10219. op1 = EX_VAR(opline->op1.var);
  10220. op2 = EX_VAR(opline->op2.var);
  10221. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  10222. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  10223. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10224. ZEND_VM_NEXT_OPCODE();
  10225. }
  10226. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10227. {
  10228. USE_OPLINE
  10229. zval *op1, *op2;
  10230. int result;
  10231. op1 = EX_VAR(opline->op1.var);
  10232. op2 = EX_VAR(opline->op2.var);
  10233. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  10234. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10235. ZEND_VM_NEXT_OPCODE();
  10236. }
  10237. 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)
  10238. {
  10239. USE_OPLINE
  10240. zval *op1, *op2;
  10241. int result;
  10242. op1 = EX_VAR(opline->op1.var);
  10243. op2 = EX_VAR(opline->op2.var);
  10244. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  10245. ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
  10246. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10247. ZEND_VM_NEXT_OPCODE();
  10248. }
  10249. 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)
  10250. {
  10251. USE_OPLINE
  10252. zval *op1, *op2;
  10253. int result;
  10254. op1 = EX_VAR(opline->op1.var);
  10255. op2 = EX_VAR(opline->op2.var);
  10256. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  10257. ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
  10258. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10259. ZEND_VM_NEXT_OPCODE();
  10260. }
  10261. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10262. {
  10263. USE_OPLINE
  10264. zend_free_op free_op2;
  10265. zval *container;
  10266. SAVE_OPLINE();
  10267. container = EX_VAR(opline->op1.var);
  10268. zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  10269. zval_ptr_dtor_nogc(free_op2);
  10270. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10271. }
  10272. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10273. {
  10274. USE_OPLINE
  10275. zval *container;
  10276. SAVE_OPLINE();
  10277. container = EX_VAR(opline->op1.var);
  10278. zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  10279. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10280. }
  10281. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10282. {
  10283. USE_OPLINE
  10284. zend_free_op free_op1;
  10285. zval *op1;
  10286. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10287. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10288. ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
  10289. ZEND_VM_NEXT_OPCODE();
  10290. }
  10291. SAVE_OPLINE();
  10292. bitwise_not_function(EX_VAR(opline->result.var),
  10293. _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC));
  10294. zval_ptr_dtor_nogc(free_op1);
  10295. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10296. }
  10297. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10298. {
  10299. USE_OPLINE
  10300. zval *val;
  10301. zend_free_op free_op1;
  10302. val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10303. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  10304. ZVAL_FALSE(EX_VAR(opline->result.var));
  10305. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  10306. /* The result and op1 can be the same cv zval */
  10307. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  10308. ZVAL_TRUE(EX_VAR(opline->result.var));
  10309. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  10310. SAVE_OPLINE();
  10311. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  10312. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10313. }
  10314. } else {
  10315. SAVE_OPLINE();
  10316. ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
  10317. zval_ptr_dtor_nogc(free_op1);
  10318. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10319. }
  10320. ZEND_VM_NEXT_OPCODE();
  10321. }
  10322. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10323. {
  10324. USE_OPLINE
  10325. zend_free_op free_op1;
  10326. zval *z;
  10327. SAVE_OPLINE();
  10328. z = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10329. if (Z_TYPE_P(z) == IS_STRING) {
  10330. zend_string *str = Z_STR_P(z);
  10331. if (ZSTR_LEN(str) != 0) {
  10332. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  10333. }
  10334. } else {
  10335. zend_string *str = zval_get_string_func(z);
  10336. if (ZSTR_LEN(str) != 0) {
  10337. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  10338. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
  10339. GET_OP1_UNDEF_CV(z, BP_VAR_R);
  10340. }
  10341. zend_string_release_ex(str, 0);
  10342. }
  10343. zval_ptr_dtor_nogc(free_op1);
  10344. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10345. }
  10346. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10347. {
  10348. USE_OPLINE
  10349. zend_free_op free_op1;
  10350. zval *val;
  10351. val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10352. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  10353. ZEND_VM_NEXT_OPCODE();
  10354. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  10355. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  10356. SAVE_OPLINE();
  10357. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  10358. if (UNEXPECTED(EG(exception))) {
  10359. HANDLE_EXCEPTION();
  10360. }
  10361. }
  10362. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  10363. }
  10364. SAVE_OPLINE();
  10365. if (i_zend_is_true(val)) {
  10366. opline++;
  10367. } else {
  10368. opline = OP_JMP_ADDR(opline, opline->op2);
  10369. }
  10370. zval_ptr_dtor_nogc(free_op1);
  10371. ZEND_VM_JMP(opline);
  10372. }
  10373. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10374. {
  10375. USE_OPLINE
  10376. zend_free_op free_op1;
  10377. zval *val;
  10378. val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10379. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  10380. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  10381. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  10382. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  10383. SAVE_OPLINE();
  10384. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  10385. if (UNEXPECTED(EG(exception))) {
  10386. HANDLE_EXCEPTION();
  10387. }
  10388. }
  10389. ZEND_VM_NEXT_OPCODE();
  10390. }
  10391. SAVE_OPLINE();
  10392. if (i_zend_is_true(val)) {
  10393. opline = OP_JMP_ADDR(opline, opline->op2);
  10394. } else {
  10395. opline++;
  10396. }
  10397. zval_ptr_dtor_nogc(free_op1);
  10398. ZEND_VM_JMP(opline);
  10399. }
  10400. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10401. {
  10402. USE_OPLINE
  10403. zend_free_op free_op1;
  10404. zval *val;
  10405. val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10406. if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
  10407. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  10408. ZEND_VM_CONTINUE();
  10409. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  10410. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  10411. SAVE_OPLINE();
  10412. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  10413. if (UNEXPECTED(EG(exception))) {
  10414. HANDLE_EXCEPTION();
  10415. }
  10416. }
  10417. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  10418. }
  10419. SAVE_OPLINE();
  10420. if (i_zend_is_true(val)) {
  10421. opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
  10422. } else {
  10423. opline = OP_JMP_ADDR(opline, opline->op2);
  10424. }
  10425. zval_ptr_dtor_nogc(free_op1);
  10426. ZEND_VM_JMP(opline);
  10427. }
  10428. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10429. {
  10430. USE_OPLINE
  10431. zend_free_op free_op1;
  10432. zval *val;
  10433. int ret;
  10434. val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10435. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  10436. ZVAL_TRUE(EX_VAR(opline->result.var));
  10437. ZEND_VM_NEXT_OPCODE();
  10438. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  10439. ZVAL_FALSE(EX_VAR(opline->result.var));
  10440. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  10441. SAVE_OPLINE();
  10442. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  10443. if (UNEXPECTED(EG(exception))) {
  10444. HANDLE_EXCEPTION();
  10445. }
  10446. }
  10447. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  10448. }
  10449. SAVE_OPLINE();
  10450. ret = i_zend_is_true(val);
  10451. zval_ptr_dtor_nogc(free_op1);
  10452. if (ret) {
  10453. ZVAL_TRUE(EX_VAR(opline->result.var));
  10454. opline++;
  10455. } else {
  10456. ZVAL_FALSE(EX_VAR(opline->result.var));
  10457. opline = OP_JMP_ADDR(opline, opline->op2);
  10458. }
  10459. ZEND_VM_JMP(opline);
  10460. }
  10461. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10462. {
  10463. USE_OPLINE
  10464. zend_free_op free_op1;
  10465. zval *val;
  10466. int ret;
  10467. val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10468. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  10469. ZVAL_TRUE(EX_VAR(opline->result.var));
  10470. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  10471. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  10472. ZVAL_FALSE(EX_VAR(opline->result.var));
  10473. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  10474. SAVE_OPLINE();
  10475. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  10476. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10477. } else {
  10478. ZEND_VM_NEXT_OPCODE();
  10479. }
  10480. }
  10481. SAVE_OPLINE();
  10482. ret = i_zend_is_true(val);
  10483. zval_ptr_dtor_nogc(free_op1);
  10484. if (ret) {
  10485. ZVAL_TRUE(EX_VAR(opline->result.var));
  10486. opline = OP_JMP_ADDR(opline, opline->op2);
  10487. } else {
  10488. ZVAL_FALSE(EX_VAR(opline->result.var));
  10489. opline++;
  10490. }
  10491. ZEND_VM_JMP(opline);
  10492. }
  10493. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10494. {
  10495. USE_OPLINE
  10496. SAVE_OPLINE();
  10497. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  10498. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10499. }
  10500. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10501. {
  10502. zval *var;
  10503. USE_OPLINE
  10504. SAVE_OPLINE();
  10505. var = EX_VAR(opline->op1.var);
  10506. if (Z_TYPE_P(var) != IS_ARRAY && Z_FE_ITER_P(var) != (uint32_t)-1) {
  10507. zend_hash_iterator_del(Z_FE_ITER_P(var));
  10508. }
  10509. zval_ptr_dtor_nogc(var);
  10510. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10511. }
  10512. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10513. {
  10514. USE_OPLINE
  10515. zval *value, *arg;
  10516. zend_free_op free_op1;
  10517. value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10518. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  10519. ZVAL_COPY_VALUE(arg, value);
  10520. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  10521. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  10522. Z_ADDREF_P(arg);
  10523. }
  10524. }
  10525. ZEND_VM_NEXT_OPCODE();
  10526. }
  10527. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10528. {
  10529. USE_OPLINE
  10530. zval *val;
  10531. zend_free_op free_op1;
  10532. val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10533. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  10534. ZVAL_TRUE(EX_VAR(opline->result.var));
  10535. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  10536. /* The result and op1 can be the same cv zval */
  10537. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  10538. ZVAL_FALSE(EX_VAR(opline->result.var));
  10539. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  10540. SAVE_OPLINE();
  10541. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  10542. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10543. }
  10544. } else {
  10545. SAVE_OPLINE();
  10546. ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
  10547. zval_ptr_dtor_nogc(free_op1);
  10548. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10549. }
  10550. ZEND_VM_NEXT_OPCODE();
  10551. }
  10552. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10553. {
  10554. USE_OPLINE
  10555. zend_free_op free_op1;
  10556. zval *obj;
  10557. zend_class_entry *ce, *scope;
  10558. zend_function *clone;
  10559. zend_object_clone_obj_t clone_call;
  10560. SAVE_OPLINE();
  10561. obj = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10562. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
  10563. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  10564. }
  10565. do {
  10566. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  10567. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
  10568. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
  10569. obj = Z_REFVAL_P(obj);
  10570. if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
  10571. break;
  10572. }
  10573. }
  10574. ZVAL_UNDEF(EX_VAR(opline->result.var));
  10575. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
  10576. GET_OP1_UNDEF_CV(obj, BP_VAR_R);
  10577. if (UNEXPECTED(EG(exception) != NULL)) {
  10578. HANDLE_EXCEPTION();
  10579. }
  10580. }
  10581. zend_throw_error(NULL, "__clone method called on non-object");
  10582. zval_ptr_dtor_nogc(free_op1);
  10583. HANDLE_EXCEPTION();
  10584. }
  10585. } while (0);
  10586. ce = Z_OBJCE_P(obj);
  10587. clone = ce->clone;
  10588. clone_call = Z_OBJ_HT_P(obj)->clone_obj;
  10589. if (UNEXPECTED(clone_call == NULL)) {
  10590. zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
  10591. zval_ptr_dtor_nogc(free_op1);
  10592. ZVAL_UNDEF(EX_VAR(opline->result.var));
  10593. HANDLE_EXCEPTION();
  10594. }
  10595. if (clone) {
  10596. if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
  10597. /* Ensure that if we're calling a private function, we're allowed to do so.
  10598. */
  10599. scope = EX(func)->op_array.scope;
  10600. if (!zend_check_private(clone, scope, clone->common.function_name)) {
  10601. zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
  10602. zval_ptr_dtor_nogc(free_op1);
  10603. ZVAL_UNDEF(EX_VAR(opline->result.var));
  10604. HANDLE_EXCEPTION();
  10605. }
  10606. } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
  10607. /* Ensure that if we're calling a protected function, we're allowed to do so.
  10608. */
  10609. scope = EX(func)->op_array.scope;
  10610. if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
  10611. zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
  10612. zval_ptr_dtor_nogc(free_op1);
  10613. ZVAL_UNDEF(EX_VAR(opline->result.var));
  10614. HANDLE_EXCEPTION();
  10615. }
  10616. }
  10617. }
  10618. ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
  10619. zval_ptr_dtor_nogc(free_op1);
  10620. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10621. }
  10622. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10623. {
  10624. USE_OPLINE
  10625. zend_op_array *new_op_array;
  10626. zend_free_op free_op1;
  10627. zval *inc_filename;
  10628. SAVE_OPLINE();
  10629. inc_filename = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10630. new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
  10631. zval_ptr_dtor_nogc(free_op1);
  10632. if (UNEXPECTED(EG(exception) != NULL)) {
  10633. if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
  10634. destroy_op_array(new_op_array);
  10635. efree_size(new_op_array, sizeof(zend_op_array));
  10636. }
  10637. UNDEF_RESULT();
  10638. HANDLE_EXCEPTION();
  10639. } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
  10640. if (RETURN_VALUE_USED(opline)) {
  10641. ZVAL_TRUE(EX_VAR(opline->result.var));
  10642. }
  10643. } else if (EXPECTED(new_op_array != NULL)) {
  10644. zval *return_value = NULL;
  10645. zend_execute_data *call;
  10646. if (RETURN_VALUE_USED(opline)) {
  10647. return_value = EX_VAR(opline->result.var);
  10648. ZVAL_NULL(return_value);
  10649. }
  10650. new_op_array->scope = EX(func)->op_array.scope;
  10651. call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
  10652. (zend_function*)new_op_array, 0,
  10653. Z_TYPE(EX(This)) != IS_OBJECT ? Z_CE(EX(This)) : NULL,
  10654. Z_TYPE(EX(This)) == IS_OBJECT ? Z_OBJ(EX(This)) : NULL);
  10655. if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
  10656. call->symbol_table = EX(symbol_table);
  10657. } else {
  10658. call->symbol_table = zend_rebuild_symbol_table();
  10659. }
  10660. call->prev_execute_data = execute_data;
  10661. i_init_code_execute_data(call, new_op_array, return_value);
  10662. if (EXPECTED(zend_execute_ex == execute_ex)) {
  10663. ZEND_VM_ENTER();
  10664. } else {
  10665. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  10666. zend_execute_ex(call);
  10667. zend_vm_stack_free_call_frame(call);
  10668. }
  10669. destroy_op_array(new_op_array);
  10670. efree_size(new_op_array, sizeof(zend_op_array));
  10671. if (UNEXPECTED(EG(exception) != NULL)) {
  10672. zend_rethrow_exception(execute_data);
  10673. UNDEF_RESULT();
  10674. HANDLE_EXCEPTION();
  10675. }
  10676. } else if (RETURN_VALUE_USED(opline)) {
  10677. ZVAL_FALSE(EX_VAR(opline->result.var));
  10678. }
  10679. ZEND_VM_NEXT_OPCODE();
  10680. }
  10681. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10682. {
  10683. USE_OPLINE
  10684. SAVE_OPLINE();
  10685. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  10686. zend_free_op free_op1;
  10687. zval *ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10688. do {
  10689. if (Z_TYPE_P(ptr) == IS_LONG) {
  10690. EG(exit_status) = Z_LVAL_P(ptr);
  10691. } else {
  10692. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
  10693. ptr = Z_REFVAL_P(ptr);
  10694. if (Z_TYPE_P(ptr) == IS_LONG) {
  10695. EG(exit_status) = Z_LVAL_P(ptr);
  10696. break;
  10697. }
  10698. }
  10699. zend_print_zval(ptr, 0);
  10700. }
  10701. } while (0);
  10702. zval_ptr_dtor_nogc(free_op1);
  10703. }
  10704. zend_bailout();
  10705. ZEND_VM_NEXT_OPCODE(); /* Never reached */
  10706. }
  10707. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10708. {
  10709. USE_OPLINE
  10710. zend_free_op free_op1;
  10711. zval *value;
  10712. zval *ref = NULL;
  10713. SAVE_OPLINE();
  10714. value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10715. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  10716. if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
  10717. ref = value;
  10718. }
  10719. value = Z_REFVAL_P(value);
  10720. }
  10721. if (Z_TYPE_P(value) > IS_NULL) {
  10722. zval *result = EX_VAR(opline->result.var);
  10723. ZVAL_COPY_VALUE(result, value);
  10724. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  10725. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  10726. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  10727. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  10728. } else if (((IS_TMP_VAR|IS_VAR) & IS_VAR) && ref) {
  10729. zend_reference *r = Z_REF_P(ref);
  10730. if (UNEXPECTED(GC_DELREF(r) == 0)) {
  10731. efree_size(r, sizeof(zend_reference));
  10732. } else if (Z_OPT_REFCOUNTED_P(result)) {
  10733. Z_ADDREF_P(result);
  10734. }
  10735. }
  10736. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  10737. }
  10738. zval_ptr_dtor_nogc(free_op1);
  10739. ZEND_VM_NEXT_OPCODE();
  10740. }
  10741. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10742. {
  10743. USE_OPLINE
  10744. zval *value;
  10745. zend_free_op free_op1;
  10746. value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10747. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  10748. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  10749. zval_ptr_dtor_nogc(free_op1);
  10750. ZEND_VM_NEXT_OPCODE();
  10751. } else {
  10752. zend_bool strict;
  10753. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
  10754. value = Z_REFVAL_P(value);
  10755. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  10756. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  10757. zval_ptr_dtor_nogc(free_op1);
  10758. ZEND_VM_NEXT_OPCODE();
  10759. }
  10760. }
  10761. SAVE_OPLINE();
  10762. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  10763. value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
  10764. }
  10765. strict = EX_USES_STRICT_TYPES();
  10766. do {
  10767. if (EXPECTED(!strict)) {
  10768. zend_string *str;
  10769. zval tmp;
  10770. ZVAL_COPY(&tmp, value);
  10771. if (zend_parse_arg_str_weak(&tmp, &str)) {
  10772. ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
  10773. zval_ptr_dtor(&tmp);
  10774. break;
  10775. }
  10776. zval_ptr_dtor(&tmp);
  10777. }
  10778. zend_internal_type_error(strict, "strlen() expects parameter 1 to be string, %s given", zend_get_type_by_const(Z_TYPE_P(value)));
  10779. ZVAL_NULL(EX_VAR(opline->result.var));
  10780. } while (0);
  10781. }
  10782. zval_ptr_dtor_nogc(free_op1);
  10783. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10784. }
  10785. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10786. {
  10787. USE_OPLINE
  10788. zval *value;
  10789. int result = 0;
  10790. zend_free_op free_op1;
  10791. value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10792. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  10793. type_check_resource:
  10794. if (EXPECTED(Z_TYPE_P(value) != IS_RESOURCE)
  10795. || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
  10796. result = 1;
  10797. }
  10798. } else if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
  10799. value = Z_REFVAL_P(value);
  10800. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  10801. goto type_check_resource;
  10802. }
  10803. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  10804. result = ((1 << IS_NULL) & opline->extended_value) != 0;
  10805. SAVE_OPLINE();
  10806. GET_OP1_UNDEF_CV(value, BP_VAR_R);
  10807. ZEND_VM_SMART_BRANCH(result, 1);
  10808. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10809. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10810. }
  10811. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  10812. SAVE_OPLINE();
  10813. zval_ptr_dtor_nogc(free_op1);
  10814. ZEND_VM_SMART_BRANCH(result, 1);
  10815. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10816. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10817. } else {
  10818. ZEND_VM_SMART_BRANCH(result, 0);
  10819. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  10820. ZEND_VM_NEXT_OPCODE();
  10821. }
  10822. }
  10823. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10824. {
  10825. USE_OPLINE
  10826. zend_free_op free_op1;
  10827. zval *op1, *op2, *result;
  10828. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10829. op2 = RT_CONSTANT(opline, opline->op2);
  10830. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10831. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10832. result = EX_VAR(opline->result.var);
  10833. fast_long_add_function(result, op1, op2);
  10834. ZEND_VM_NEXT_OPCODE();
  10835. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10836. result = EX_VAR(opline->result.var);
  10837. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
  10838. ZEND_VM_NEXT_OPCODE();
  10839. }
  10840. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10841. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10842. result = EX_VAR(opline->result.var);
  10843. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
  10844. ZEND_VM_NEXT_OPCODE();
  10845. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10846. result = EX_VAR(opline->result.var);
  10847. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
  10848. ZEND_VM_NEXT_OPCODE();
  10849. }
  10850. }
  10851. SAVE_OPLINE();
  10852. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  10853. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  10854. }
  10855. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  10856. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  10857. }
  10858. add_function(EX_VAR(opline->result.var), op1, op2);
  10859. zval_ptr_dtor_nogc(free_op1);
  10860. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10861. }
  10862. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10863. {
  10864. USE_OPLINE
  10865. zend_free_op free_op1;
  10866. zval *op1, *op2, *result;
  10867. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10868. op2 = RT_CONSTANT(opline, opline->op2);
  10869. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10870. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10871. result = EX_VAR(opline->result.var);
  10872. fast_long_sub_function(result, op1, op2);
  10873. ZEND_VM_NEXT_OPCODE();
  10874. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10875. result = EX_VAR(opline->result.var);
  10876. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
  10877. ZEND_VM_NEXT_OPCODE();
  10878. }
  10879. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10880. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10881. result = EX_VAR(opline->result.var);
  10882. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  10883. ZEND_VM_NEXT_OPCODE();
  10884. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10885. result = EX_VAR(opline->result.var);
  10886. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
  10887. ZEND_VM_NEXT_OPCODE();
  10888. }
  10889. }
  10890. SAVE_OPLINE();
  10891. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  10892. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  10893. }
  10894. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  10895. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  10896. }
  10897. sub_function(EX_VAR(opline->result.var), op1, op2);
  10898. zval_ptr_dtor_nogc(free_op1);
  10899. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10900. }
  10901. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10902. {
  10903. USE_OPLINE
  10904. zend_free_op free_op1;
  10905. zval *op1, *op2, *result;
  10906. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10907. op2 = RT_CONSTANT(opline, opline->op2);
  10908. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10909. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10910. zend_long overflow;
  10911. result = EX_VAR(opline->result.var);
  10912. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  10913. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  10914. ZEND_VM_NEXT_OPCODE();
  10915. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10916. result = EX_VAR(opline->result.var);
  10917. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
  10918. ZEND_VM_NEXT_OPCODE();
  10919. }
  10920. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  10921. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  10922. result = EX_VAR(opline->result.var);
  10923. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
  10924. ZEND_VM_NEXT_OPCODE();
  10925. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10926. result = EX_VAR(opline->result.var);
  10927. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
  10928. ZEND_VM_NEXT_OPCODE();
  10929. }
  10930. }
  10931. SAVE_OPLINE();
  10932. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  10933. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  10934. }
  10935. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  10936. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  10937. }
  10938. mul_function(EX_VAR(opline->result.var), op1, op2);
  10939. zval_ptr_dtor_nogc(free_op1);
  10940. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10941. }
  10942. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10943. {
  10944. USE_OPLINE
  10945. zend_free_op free_op1;
  10946. zval *op1, *op2;
  10947. SAVE_OPLINE();
  10948. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10949. op2 = RT_CONSTANT(opline, opline->op2);
  10950. fast_div_function(EX_VAR(opline->result.var), op1, op2);
  10951. zval_ptr_dtor_nogc(free_op1);
  10952. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10953. }
  10954. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10955. {
  10956. USE_OPLINE
  10957. zend_free_op free_op1;
  10958. zval *op1, *op2, *result;
  10959. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10960. op2 = RT_CONSTANT(opline, opline->op2);
  10961. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  10962. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  10963. result = EX_VAR(opline->result.var);
  10964. if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
  10965. ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  10966. } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
  10967. /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
  10968. ZVAL_LONG(result, 0);
  10969. } else {
  10970. ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
  10971. }
  10972. ZEND_VM_NEXT_OPCODE();
  10973. }
  10974. }
  10975. SAVE_OPLINE();
  10976. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  10977. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  10978. }
  10979. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  10980. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  10981. }
  10982. mod_function(EX_VAR(opline->result.var), op1, op2);
  10983. zval_ptr_dtor_nogc(free_op1);
  10984. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  10985. }
  10986. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  10987. {
  10988. USE_OPLINE
  10989. zend_free_op free_op1;
  10990. zval *op1, *op2;
  10991. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  10992. op2 = RT_CONSTANT(opline, opline->op2);
  10993. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  10994. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  10995. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  10996. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
  10997. ZEND_VM_NEXT_OPCODE();
  10998. }
  10999. SAVE_OPLINE();
  11000. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  11001. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  11002. }
  11003. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  11004. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  11005. }
  11006. shift_left_function(EX_VAR(opline->result.var), op1, op2);
  11007. zval_ptr_dtor_nogc(free_op1);
  11008. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11009. }
  11010. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11011. {
  11012. USE_OPLINE
  11013. zend_free_op free_op1;
  11014. zval *op1, *op2;
  11015. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11016. op2 = RT_CONSTANT(opline, opline->op2);
  11017. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  11018. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  11019. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  11020. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
  11021. ZEND_VM_NEXT_OPCODE();
  11022. }
  11023. SAVE_OPLINE();
  11024. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  11025. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  11026. }
  11027. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  11028. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  11029. }
  11030. shift_right_function(EX_VAR(opline->result.var), op1, op2);
  11031. zval_ptr_dtor_nogc(free_op1);
  11032. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11033. }
  11034. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11035. {
  11036. USE_OPLINE
  11037. zend_free_op free_op1;
  11038. zval *op1, *op2;
  11039. SAVE_OPLINE();
  11040. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11041. op2 = RT_CONSTANT(opline, opline->op2);
  11042. pow_function(EX_VAR(opline->result.var), op1, op2);
  11043. zval_ptr_dtor_nogc(free_op1);
  11044. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11045. }
  11046. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11047. {
  11048. USE_OPLINE
  11049. zend_free_op free_op1;
  11050. zval *op1, *op2;
  11051. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11052. op2 = RT_CONSTANT(opline, opline->op2);
  11053. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  11054. (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  11055. zend_string *op1_str = Z_STR_P(op1);
  11056. zend_string *op2_str = Z_STR_P(op2);
  11057. zend_string *str;
  11058. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  11059. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  11060. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  11061. } else {
  11062. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  11063. }
  11064. zval_ptr_dtor_nogc(free_op1);
  11065. } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  11066. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  11067. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  11068. } else {
  11069. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  11070. }
  11071. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  11072. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  11073. size_t len = ZSTR_LEN(op1_str);
  11074. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  11075. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  11076. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  11077. } else {
  11078. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  11079. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  11080. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  11081. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  11082. zval_ptr_dtor_nogc(free_op1);
  11083. }
  11084. ZEND_VM_NEXT_OPCODE();
  11085. } else {
  11086. SAVE_OPLINE();
  11087. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  11088. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  11089. }
  11090. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  11091. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  11092. }
  11093. concat_function(EX_VAR(opline->result.var), op1, op2);
  11094. zval_ptr_dtor_nogc(free_op1);
  11095. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11096. }
  11097. }
  11098. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11099. {
  11100. USE_OPLINE
  11101. zend_free_op free_op1;
  11102. zval *op1, *op2, *result;
  11103. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11104. op2 = RT_CONSTANT(opline, opline->op2);
  11105. do {
  11106. int result;
  11107. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  11108. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  11109. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  11110. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  11111. result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
  11112. } else {
  11113. break;
  11114. }
  11115. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  11116. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  11117. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  11118. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  11119. result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
  11120. } else {
  11121. break;
  11122. }
  11123. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  11124. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  11125. result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  11126. zval_ptr_dtor_nogc(free_op1);
  11127. } else {
  11128. break;
  11129. }
  11130. } else {
  11131. break;
  11132. }
  11133. ZEND_VM_SMART_BRANCH(result, 0);
  11134. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  11135. ZEND_VM_NEXT_OPCODE();
  11136. } while (0);
  11137. SAVE_OPLINE();
  11138. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  11139. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  11140. }
  11141. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  11142. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  11143. }
  11144. result = EX_VAR(opline->result.var);
  11145. compare_function(result, op1, op2);
  11146. ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
  11147. zval_ptr_dtor_nogc(free_op1);
  11148. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11149. }
  11150. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11151. {
  11152. USE_OPLINE
  11153. zend_free_op free_op1;
  11154. zval *op1, *op2, *result;
  11155. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11156. op2 = RT_CONSTANT(opline, opline->op2);
  11157. do {
  11158. int result;
  11159. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  11160. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  11161. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  11162. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  11163. result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
  11164. } else {
  11165. break;
  11166. }
  11167. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  11168. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  11169. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  11170. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  11171. result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
  11172. } else {
  11173. break;
  11174. }
  11175. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  11176. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  11177. result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  11178. zval_ptr_dtor_nogc(free_op1);
  11179. } else {
  11180. break;
  11181. }
  11182. } else {
  11183. break;
  11184. }
  11185. ZEND_VM_SMART_BRANCH(result, 0);
  11186. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  11187. ZEND_VM_NEXT_OPCODE();
  11188. } while (0);
  11189. SAVE_OPLINE();
  11190. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  11191. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  11192. }
  11193. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  11194. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  11195. }
  11196. result = EX_VAR(opline->result.var);
  11197. compare_function(result, op1, op2);
  11198. ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
  11199. zval_ptr_dtor_nogc(free_op1);
  11200. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11201. }
  11202. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11203. {
  11204. USE_OPLINE
  11205. zend_free_op free_op1;
  11206. zval *op1, *op2, *result;
  11207. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11208. op2 = RT_CONSTANT(opline, opline->op2);
  11209. do {
  11210. int result;
  11211. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11212. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11213. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  11214. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11215. result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
  11216. } else {
  11217. break;
  11218. }
  11219. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11220. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11221. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  11222. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11223. result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
  11224. } else {
  11225. break;
  11226. }
  11227. } else {
  11228. break;
  11229. }
  11230. ZEND_VM_SMART_BRANCH(result, 0);
  11231. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  11232. ZEND_VM_NEXT_OPCODE();
  11233. } while (0);
  11234. SAVE_OPLINE();
  11235. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  11236. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  11237. }
  11238. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  11239. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  11240. }
  11241. result = EX_VAR(opline->result.var);
  11242. compare_function(result, op1, op2);
  11243. ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
  11244. zval_ptr_dtor_nogc(free_op1);
  11245. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11246. }
  11247. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11248. {
  11249. USE_OPLINE
  11250. zend_free_op free_op1;
  11251. zval *op1, *op2, *result;
  11252. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11253. op2 = RT_CONSTANT(opline, opline->op2);
  11254. do {
  11255. int result;
  11256. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  11257. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11258. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  11259. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11260. result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
  11261. } else {
  11262. break;
  11263. }
  11264. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  11265. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  11266. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  11267. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11268. result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
  11269. } else {
  11270. break;
  11271. }
  11272. } else {
  11273. break;
  11274. }
  11275. ZEND_VM_SMART_BRANCH(result, 0);
  11276. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  11277. ZEND_VM_NEXT_OPCODE();
  11278. } while (0);
  11279. SAVE_OPLINE();
  11280. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  11281. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  11282. }
  11283. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  11284. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  11285. }
  11286. result = EX_VAR(opline->result.var);
  11287. compare_function(result, op1, op2);
  11288. ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
  11289. zval_ptr_dtor_nogc(free_op1);
  11290. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11291. }
  11292. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11293. {
  11294. USE_OPLINE
  11295. zend_free_op free_op1;
  11296. zval *op1, *op2;
  11297. SAVE_OPLINE();
  11298. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11299. op2 = RT_CONSTANT(opline, opline->op2);
  11300. compare_function(EX_VAR(opline->result.var), op1, op2);
  11301. zval_ptr_dtor_nogc(free_op1);
  11302. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11303. }
  11304. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11305. {
  11306. USE_OPLINE
  11307. zend_free_op free_op1;
  11308. zval *op1, *op2;
  11309. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11310. op2 = RT_CONSTANT(opline, opline->op2);
  11311. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  11312. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11313. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
  11314. ZEND_VM_NEXT_OPCODE();
  11315. }
  11316. SAVE_OPLINE();
  11317. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  11318. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  11319. }
  11320. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  11321. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  11322. }
  11323. bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
  11324. zval_ptr_dtor_nogc(free_op1);
  11325. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11326. }
  11327. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11328. {
  11329. USE_OPLINE
  11330. zend_free_op free_op1;
  11331. zval *op1, *op2;
  11332. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11333. op2 = RT_CONSTANT(opline, opline->op2);
  11334. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  11335. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11336. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
  11337. ZEND_VM_NEXT_OPCODE();
  11338. }
  11339. SAVE_OPLINE();
  11340. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  11341. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  11342. }
  11343. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  11344. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  11345. }
  11346. bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
  11347. zval_ptr_dtor_nogc(free_op1);
  11348. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11349. }
  11350. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11351. {
  11352. USE_OPLINE
  11353. zend_free_op free_op1;
  11354. zval *op1, *op2;
  11355. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11356. op2 = RT_CONSTANT(opline, opline->op2);
  11357. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  11358. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  11359. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
  11360. ZEND_VM_NEXT_OPCODE();
  11361. }
  11362. SAVE_OPLINE();
  11363. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  11364. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  11365. }
  11366. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  11367. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  11368. }
  11369. bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
  11370. zval_ptr_dtor_nogc(free_op1);
  11371. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11372. }
  11373. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11374. {
  11375. USE_OPLINE
  11376. zend_free_op free_op1;
  11377. zval *op1, *op2;
  11378. SAVE_OPLINE();
  11379. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11380. op2 = RT_CONSTANT(opline, opline->op2);
  11381. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  11382. zval_ptr_dtor_nogc(free_op1);
  11383. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11384. }
  11385. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(int type ZEND_OPCODE_HANDLER_ARGS_DC)
  11386. {
  11387. USE_OPLINE
  11388. zend_free_op free_op1;
  11389. zval *varname;
  11390. zval *retval;
  11391. zend_string *name, *tmp_name;
  11392. zend_class_entry *ce;
  11393. SAVE_OPLINE();
  11394. do {
  11395. if (IS_CONST == IS_CONST) {
  11396. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) {
  11397. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  11398. break;
  11399. } else {
  11400. zval *class_name = RT_CONSTANT(opline, opline->op2);
  11401. if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) {
  11402. ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  11403. if (UNEXPECTED(ce == NULL)) {
  11404. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  11405. retval = NULL;
  11406. break;
  11407. }
  11408. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  11409. CACHE_PTR(opline->extended_value, ce);
  11410. }
  11411. }
  11412. }
  11413. } else {
  11414. if (IS_CONST == IS_UNUSED) {
  11415. ce = zend_fetch_class(NULL, opline->op2.num);
  11416. if (UNEXPECTED(ce == NULL)) {
  11417. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  11418. retval = NULL;
  11419. break;
  11420. }
  11421. } else {
  11422. ce = Z_CE_P(EX_VAR(opline->op2.var));
  11423. }
  11424. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  11425. EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  11426. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  11427. break;
  11428. }
  11429. }
  11430. varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11431. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  11432. name = Z_STR_P(varname);
  11433. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  11434. name = Z_STR_P(varname);
  11435. tmp_name = NULL;
  11436. } else {
  11437. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  11438. zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC);
  11439. }
  11440. name = zval_get_tmp_string(varname, &tmp_name);
  11441. }
  11442. retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
  11443. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  11444. zend_tmp_string_release(tmp_name);
  11445. }
  11446. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(retval)) {
  11447. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval);
  11448. }
  11449. zval_ptr_dtor_nogc(free_op1);
  11450. } while (0);
  11451. if (UNEXPECTED(retval == NULL)) {
  11452. if (EG(exception)) {
  11453. ZVAL_UNDEF(EX_VAR(opline->result.var));
  11454. HANDLE_EXCEPTION();
  11455. } else {
  11456. ZEND_ASSERT(type == BP_VAR_IS);
  11457. retval = &EG(uninitialized_zval);
  11458. }
  11459. }
  11460. if (type == BP_VAR_R || type == BP_VAR_IS) {
  11461. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  11462. } else {
  11463. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  11464. }
  11465. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11466. }
  11467. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11468. {
  11469. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11470. }
  11471. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11472. {
  11473. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11474. }
  11475. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11476. {
  11477. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11478. }
  11479. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11480. {
  11481. int fetch_type =
  11482. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  11483. BP_VAR_W : BP_VAR_R;
  11484. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11485. }
  11486. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11487. {
  11488. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11489. }
  11490. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11491. {
  11492. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  11493. }
  11494. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11495. {
  11496. USE_OPLINE
  11497. zend_free_op free_op1;
  11498. zval *container, *dim, *value, *result;
  11499. SAVE_OPLINE();
  11500. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11501. dim = RT_CONSTANT(opline, opline->op2);
  11502. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  11503. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  11504. fetch_dim_r_array:
  11505. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
  11506. result = EX_VAR(opline->result.var);
  11507. ZVAL_COPY_DEREF(result, value);
  11508. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  11509. container = Z_REFVAL_P(container);
  11510. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  11511. goto fetch_dim_r_array;
  11512. } else {
  11513. goto fetch_dim_r_slow;
  11514. }
  11515. } else {
  11516. fetch_dim_r_slow:
  11517. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  11518. dim++;
  11519. }
  11520. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  11521. }
  11522. } else {
  11523. zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  11524. }
  11525. zval_ptr_dtor_nogc(free_op1);
  11526. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11527. }
  11528. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11529. {
  11530. USE_OPLINE
  11531. zend_free_op free_op1;
  11532. zval *container;
  11533. SAVE_OPLINE();
  11534. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11535. zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  11536. zval_ptr_dtor_nogc(free_op1);
  11537. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11538. }
  11539. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11540. {
  11541. USE_OPLINE
  11542. zend_free_op free_op1;
  11543. zval *container;
  11544. zval *offset;
  11545. void **cache_slot = NULL;
  11546. SAVE_OPLINE();
  11547. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11548. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  11549. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  11550. }
  11551. offset = RT_CONSTANT(opline, opline->op2);
  11552. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  11553. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  11554. do {
  11555. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  11556. container = Z_REFVAL_P(container);
  11557. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  11558. break;
  11559. }
  11560. }
  11561. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  11562. GET_OP1_UNDEF_CV(container, BP_VAR_R);
  11563. }
  11564. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  11565. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  11566. }
  11567. goto fetch_obj_r_no_object;
  11568. } while (0);
  11569. }
  11570. /* here we are sure we are dealing with an object */
  11571. do {
  11572. zend_object *zobj = Z_OBJ_P(container);
  11573. zval *retval;
  11574. if (IS_CONST == IS_CONST) {
  11575. cache_slot = CACHE_ADDR(opline->extended_value);
  11576. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  11577. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  11578. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  11579. retval = OBJ_PROP(zobj, prop_offset);
  11580. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  11581. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  11582. break;
  11583. }
  11584. } else if (EXPECTED(zobj->properties != NULL)) {
  11585. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  11586. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  11587. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  11588. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  11589. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  11590. (EXPECTED(p->key == Z_STR_P(offset)) ||
  11591. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  11592. EXPECTED(p->key != NULL) &&
  11593. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  11594. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
  11595. break;
  11596. }
  11597. }
  11598. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  11599. }
  11600. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  11601. if (EXPECTED(retval)) {
  11602. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  11603. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  11604. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  11605. break;
  11606. }
  11607. }
  11608. }
  11609. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
  11610. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  11611. }
  11612. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  11613. fetch_obj_r_no_object:
  11614. zend_wrong_property_read(offset);
  11615. ZVAL_NULL(EX_VAR(opline->result.var));
  11616. } else {
  11617. retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  11618. if (retval != EX_VAR(opline->result.var)) {
  11619. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  11620. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  11621. zend_unwrap_reference(retval);
  11622. }
  11623. }
  11624. } while (0);
  11625. zval_ptr_dtor_nogc(free_op1);
  11626. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11627. }
  11628. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11629. {
  11630. USE_OPLINE
  11631. zend_free_op free_op1;
  11632. zval *container;
  11633. zval *offset;
  11634. void **cache_slot = NULL;
  11635. SAVE_OPLINE();
  11636. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11637. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  11638. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  11639. }
  11640. offset = RT_CONSTANT(opline, opline->op2);
  11641. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  11642. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  11643. do {
  11644. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  11645. container = Z_REFVAL_P(container);
  11646. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  11647. break;
  11648. }
  11649. }
  11650. goto fetch_obj_is_no_object;
  11651. } while (0);
  11652. }
  11653. /* here we are sure we are dealing with an object */
  11654. do {
  11655. zend_object *zobj = Z_OBJ_P(container);
  11656. zval *retval;
  11657. if (IS_CONST == IS_CONST) {
  11658. cache_slot = CACHE_ADDR(opline->extended_value);
  11659. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  11660. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  11661. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  11662. retval = OBJ_PROP(zobj, prop_offset);
  11663. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  11664. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  11665. break;
  11666. }
  11667. } else if (EXPECTED(zobj->properties != NULL)) {
  11668. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  11669. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  11670. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  11671. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  11672. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  11673. (EXPECTED(p->key == Z_STR_P(offset)) ||
  11674. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  11675. EXPECTED(p->key != NULL) &&
  11676. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  11677. ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
  11678. break;
  11679. }
  11680. }
  11681. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  11682. }
  11683. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  11684. if (EXPECTED(retval)) {
  11685. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  11686. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  11687. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  11688. break;
  11689. }
  11690. }
  11691. }
  11692. }
  11693. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  11694. fetch_obj_is_no_object:
  11695. ZVAL_NULL(EX_VAR(opline->result.var));
  11696. } else {
  11697. retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  11698. if (retval != EX_VAR(opline->result.var)) {
  11699. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  11700. }
  11701. }
  11702. } while (0);
  11703. zval_ptr_dtor_nogc(free_op1);
  11704. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11705. }
  11706. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11707. {
  11708. USE_OPLINE
  11709. zend_free_op free_op1;
  11710. zval *op1, *op2;
  11711. zend_string *op1_str, *op2_str, *str;
  11712. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11713. op2 = RT_CONSTANT(opline, opline->op2);
  11714. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  11715. (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  11716. zend_string *op1_str = Z_STR_P(op1);
  11717. zend_string *op2_str = Z_STR_P(op2);
  11718. zend_string *str;
  11719. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  11720. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  11721. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  11722. } else {
  11723. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  11724. }
  11725. zval_ptr_dtor_nogc(free_op1);
  11726. } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  11727. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  11728. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  11729. } else {
  11730. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  11731. }
  11732. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  11733. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  11734. size_t len = ZSTR_LEN(op1_str);
  11735. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  11736. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  11737. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  11738. } else {
  11739. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  11740. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  11741. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  11742. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  11743. zval_ptr_dtor_nogc(free_op1);
  11744. }
  11745. ZEND_VM_NEXT_OPCODE();
  11746. }
  11747. SAVE_OPLINE();
  11748. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  11749. op1_str = Z_STR_P(op1);
  11750. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  11751. op1_str = zend_string_copy(Z_STR_P(op1));
  11752. } else {
  11753. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  11754. GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  11755. }
  11756. op1_str = zval_get_string_func(op1);
  11757. }
  11758. if (IS_CONST == IS_CONST) {
  11759. op2_str = Z_STR_P(op2);
  11760. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  11761. op2_str = zend_string_copy(Z_STR_P(op2));
  11762. } else {
  11763. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  11764. GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  11765. }
  11766. op2_str = zval_get_string_func(op2);
  11767. }
  11768. do {
  11769. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  11770. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  11771. if (IS_CONST == IS_CONST) {
  11772. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  11773. GC_ADDREF(op2_str);
  11774. }
  11775. }
  11776. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  11777. zend_string_release_ex(op1_str, 0);
  11778. break;
  11779. }
  11780. }
  11781. if (IS_CONST != IS_CONST) {
  11782. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  11783. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  11784. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  11785. GC_ADDREF(op1_str);
  11786. }
  11787. }
  11788. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  11789. zend_string_release_ex(op2_str, 0);
  11790. break;
  11791. }
  11792. }
  11793. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  11794. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  11795. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  11796. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  11797. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  11798. zend_string_release_ex(op1_str, 0);
  11799. }
  11800. if (IS_CONST != IS_CONST) {
  11801. zend_string_release_ex(op2_str, 0);
  11802. }
  11803. } while (0);
  11804. zval_ptr_dtor_nogc(free_op1);
  11805. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11806. }
  11807. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11808. {
  11809. USE_OPLINE
  11810. zval *function_name;
  11811. zend_free_op free_op1;
  11812. zval *object;
  11813. zend_function *fbc;
  11814. zend_class_entry *called_scope;
  11815. zend_object *obj;
  11816. zend_execute_data *call;
  11817. uint32_t call_info;
  11818. SAVE_OPLINE();
  11819. object = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11820. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  11821. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  11822. }
  11823. if (IS_CONST != IS_CONST) {
  11824. function_name = RT_CONSTANT(opline, opline->op2);
  11825. }
  11826. if (IS_CONST != IS_CONST &&
  11827. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  11828. do {
  11829. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  11830. function_name = Z_REFVAL_P(function_name);
  11831. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  11832. break;
  11833. }
  11834. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  11835. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  11836. if (UNEXPECTED(EG(exception) != NULL)) {
  11837. zval_ptr_dtor_nogc(free_op1);
  11838. HANDLE_EXCEPTION();
  11839. }
  11840. }
  11841. zend_throw_error(NULL, "Method name must be a string");
  11842. zval_ptr_dtor_nogc(free_op1);
  11843. HANDLE_EXCEPTION();
  11844. } while (0);
  11845. }
  11846. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  11847. do {
  11848. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  11849. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  11850. object = Z_REFVAL_P(object);
  11851. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  11852. break;
  11853. }
  11854. }
  11855. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  11856. object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
  11857. if (UNEXPECTED(EG(exception) != NULL)) {
  11858. if (IS_CONST != IS_CONST) {
  11859. }
  11860. HANDLE_EXCEPTION();
  11861. }
  11862. }
  11863. if (IS_CONST == IS_CONST) {
  11864. function_name = RT_CONSTANT(opline, opline->op2);
  11865. }
  11866. zend_invalid_method_call(object, function_name);
  11867. zval_ptr_dtor_nogc(free_op1);
  11868. HANDLE_EXCEPTION();
  11869. }
  11870. } while (0);
  11871. }
  11872. obj = Z_OBJ_P(object);
  11873. called_scope = obj->ce;
  11874. if (IS_CONST == IS_CONST &&
  11875. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  11876. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  11877. } else {
  11878. zend_object *orig_obj = obj;
  11879. if (UNEXPECTED(obj->handlers->get_method == NULL)) {
  11880. zend_throw_error(NULL, "Object does not support method calls");
  11881. zval_ptr_dtor_nogc(free_op1);
  11882. HANDLE_EXCEPTION();
  11883. }
  11884. if (IS_CONST == IS_CONST) {
  11885. function_name = RT_CONSTANT(opline, opline->op2);
  11886. }
  11887. /* First, locate the function. */
  11888. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  11889. if (UNEXPECTED(fbc == NULL)) {
  11890. if (EXPECTED(!EG(exception))) {
  11891. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  11892. }
  11893. zval_ptr_dtor_nogc(free_op1);
  11894. HANDLE_EXCEPTION();
  11895. }
  11896. if (IS_CONST == IS_CONST &&
  11897. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  11898. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  11899. EXPECTED(obj == orig_obj)) {
  11900. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  11901. }
  11902. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  11903. /* Reset "object" to trigger reference counting */
  11904. object = NULL;
  11905. }
  11906. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  11907. init_func_run_time_cache(&fbc->op_array);
  11908. }
  11909. }
  11910. if (IS_CONST != IS_CONST) {
  11911. }
  11912. call_info = ZEND_CALL_NESTED_FUNCTION;
  11913. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  11914. obj = NULL;
  11915. zval_ptr_dtor_nogc(free_op1);
  11916. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
  11917. HANDLE_EXCEPTION();
  11918. }
  11919. } else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  11920. /* CV may be changed indirectly (e.g. when it's a reference) */
  11921. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
  11922. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  11923. GC_ADDREF(obj); /* For $this pointer */
  11924. } else if (free_op1 != object) {
  11925. GC_ADDREF(obj); /* For $this pointer */
  11926. zval_ptr_dtor_nogc(free_op1);
  11927. }
  11928. }
  11929. call = zend_vm_stack_push_call_frame(call_info,
  11930. fbc, opline->extended_value, called_scope, obj);
  11931. call->prev_execute_data = EX(call);
  11932. EX(call) = call;
  11933. ZEND_VM_NEXT_OPCODE();
  11934. }
  11935. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11936. {
  11937. USE_OPLINE
  11938. zend_free_op free_op1;
  11939. zval *op1, *op2, *result;
  11940. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  11941. op2 = RT_CONSTANT(opline, opline->op2);
  11942. do {
  11943. int result;
  11944. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  11945. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  11946. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  11947. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  11948. result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
  11949. } else {
  11950. break;
  11951. }
  11952. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  11953. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  11954. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  11955. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  11956. result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
  11957. } else {
  11958. break;
  11959. }
  11960. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  11961. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  11962. result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  11963. } else {
  11964. break;
  11965. }
  11966. } else {
  11967. break;
  11968. }
  11969. ZEND_VM_SMART_BRANCH(result, 0);
  11970. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  11971. ZEND_VM_NEXT_OPCODE();
  11972. } while (0);
  11973. SAVE_OPLINE();
  11974. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  11975. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  11976. }
  11977. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  11978. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  11979. }
  11980. result = EX_VAR(opline->result.var);
  11981. compare_function(result, op1, op2);
  11982. ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
  11983. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  11984. }
  11985. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  11986. {
  11987. USE_OPLINE
  11988. zval *varname;
  11989. zend_string *name, *tmp_name;
  11990. zend_class_entry *ce;
  11991. zend_free_op free_op1;
  11992. SAVE_OPLINE();
  11993. if (IS_CONST == IS_CONST) {
  11994. ce = CACHED_PTR(opline->extended_value);
  11995. if (UNEXPECTED(ce == NULL)) {
  11996. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  11997. if (UNEXPECTED(ce == NULL)) {
  11998. ZEND_ASSERT(EG(exception));
  11999. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12000. HANDLE_EXCEPTION();
  12001. }
  12002. /*CACHE_PTR(opline->extended_value, ce);*/
  12003. }
  12004. } else if (IS_CONST == IS_UNUSED) {
  12005. ce = zend_fetch_class(NULL, opline->op2.num);
  12006. if (UNEXPECTED(ce == NULL)) {
  12007. ZEND_ASSERT(EG(exception));
  12008. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12009. HANDLE_EXCEPTION();
  12010. }
  12011. } else {
  12012. ce = Z_CE_P(EX_VAR(opline->op2.var));
  12013. }
  12014. varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12015. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  12016. name = Z_STR_P(varname);
  12017. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  12018. name = Z_STR_P(varname);
  12019. tmp_name = NULL;
  12020. } else {
  12021. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  12022. varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
  12023. }
  12024. name = zval_get_tmp_string(varname, &tmp_name);
  12025. }
  12026. zend_std_unset_static_property(ce, name);
  12027. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  12028. zend_tmp_string_release(tmp_name);
  12029. }
  12030. zval_ptr_dtor_nogc(free_op1);
  12031. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12032. }
  12033. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12034. {
  12035. USE_OPLINE
  12036. zval *value;
  12037. int result;
  12038. zend_free_op free_op1;
  12039. zval *varname;
  12040. zend_string *name, *tmp_name;
  12041. zend_class_entry *ce;
  12042. SAVE_OPLINE();
  12043. if (IS_CONST == IS_CONST) {
  12044. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) {
  12045. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  12046. goto is_static_prop_return;
  12047. } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) {
  12048. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  12049. if (UNEXPECTED(ce == NULL)) {
  12050. ZEND_ASSERT(EG(exception));
  12051. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12052. HANDLE_EXCEPTION();
  12053. }
  12054. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  12055. CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce);
  12056. }
  12057. }
  12058. } else {
  12059. if (IS_CONST == IS_UNUSED) {
  12060. ce = zend_fetch_class(NULL, opline->op2.num);
  12061. if (UNEXPECTED(ce == NULL)) {
  12062. ZEND_ASSERT(EG(exception));
  12063. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  12064. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12065. HANDLE_EXCEPTION();
  12066. }
  12067. } else {
  12068. ce = Z_CE_P(EX_VAR(opline->op2.var));
  12069. }
  12070. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  12071. EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) {
  12072. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  12073. goto is_static_prop_return;
  12074. }
  12075. }
  12076. varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12077. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  12078. name = Z_STR_P(varname);
  12079. } else {
  12080. name = zval_get_tmp_string(varname, &tmp_name);
  12081. }
  12082. value = zend_std_get_static_property(ce, name, 1);
  12083. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && value) {
  12084. CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value);
  12085. }
  12086. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  12087. zend_tmp_string_release(tmp_name);
  12088. }
  12089. zval_ptr_dtor_nogc(free_op1);
  12090. is_static_prop_return:
  12091. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  12092. result = value && Z_TYPE_P(value) > IS_NULL &&
  12093. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  12094. } else {
  12095. result = !value || !i_zend_is_true(value);
  12096. }
  12097. ZEND_VM_SMART_BRANCH(result, 1);
  12098. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  12099. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12100. }
  12101. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12102. {
  12103. USE_OPLINE
  12104. zend_free_op free_op1;
  12105. zval *container;
  12106. int result;
  12107. zend_ulong hval;
  12108. zval *offset;
  12109. SAVE_OPLINE();
  12110. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12111. offset = RT_CONSTANT(opline, opline->op2);
  12112. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  12113. HashTable *ht;
  12114. zval *value;
  12115. zend_string *str;
  12116. isset_dim_obj_array:
  12117. ht = Z_ARRVAL_P(container);
  12118. isset_again:
  12119. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  12120. str = Z_STR_P(offset);
  12121. if (IS_CONST != IS_CONST) {
  12122. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  12123. goto num_index_prop;
  12124. }
  12125. }
  12126. value = zend_hash_find_ex_ind(ht, str, IS_CONST == IS_CONST);
  12127. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  12128. hval = Z_LVAL_P(offset);
  12129. num_index_prop:
  12130. value = zend_hash_index_find(ht, hval);
  12131. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  12132. offset = Z_REFVAL_P(offset);
  12133. goto isset_again;
  12134. } else {
  12135. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  12136. }
  12137. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  12138. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  12139. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  12140. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  12141. } else {
  12142. result = (value == NULL || !i_zend_is_true(value));
  12143. }
  12144. goto isset_dim_obj_exit;
  12145. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  12146. container = Z_REFVAL_P(container);
  12147. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  12148. goto isset_dim_obj_array;
  12149. }
  12150. }
  12151. if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  12152. offset++;
  12153. }
  12154. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  12155. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  12156. } else {
  12157. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  12158. }
  12159. isset_dim_obj_exit:
  12160. zval_ptr_dtor_nogc(free_op1);
  12161. ZEND_VM_SMART_BRANCH(result, 1);
  12162. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  12163. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12164. }
  12165. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12166. {
  12167. USE_OPLINE
  12168. zend_free_op free_op1;
  12169. zval *container;
  12170. int result;
  12171. zval *offset;
  12172. SAVE_OPLINE();
  12173. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12174. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  12175. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  12176. }
  12177. offset = RT_CONSTANT(opline, opline->op2);
  12178. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  12179. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  12180. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  12181. container = Z_REFVAL_P(container);
  12182. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  12183. goto isset_no_object;
  12184. }
  12185. } else {
  12186. goto isset_no_object;
  12187. }
  12188. }
  12189. if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
  12190. zend_wrong_property_check(offset);
  12191. isset_no_object:
  12192. result = (opline->extended_value & ZEND_ISEMPTY);
  12193. } else {
  12194. result =
  12195. (opline->extended_value & ZEND_ISEMPTY) ^
  12196. Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  12197. }
  12198. zval_ptr_dtor_nogc(free_op1);
  12199. ZEND_VM_SMART_BRANCH(result, 1);
  12200. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  12201. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12202. }
  12203. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12204. {
  12205. USE_OPLINE
  12206. zend_free_op free_op1;
  12207. zval *expr;
  12208. zend_bool result;
  12209. SAVE_OPLINE();
  12210. expr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12211. try_instanceof:
  12212. if (Z_TYPE_P(expr) == IS_OBJECT) {
  12213. zend_class_entry *ce;
  12214. if (IS_CONST == IS_CONST) {
  12215. ce = CACHED_PTR(opline->extended_value);
  12216. if (UNEXPECTED(ce == NULL)) {
  12217. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
  12218. if (EXPECTED(ce)) {
  12219. CACHE_PTR(opline->extended_value, ce);
  12220. }
  12221. }
  12222. } else if (IS_CONST == IS_UNUSED) {
  12223. ce = zend_fetch_class(NULL, opline->op2.num);
  12224. if (UNEXPECTED(ce == NULL)) {
  12225. ZEND_ASSERT(EG(exception));
  12226. zval_ptr_dtor_nogc(free_op1);
  12227. ZVAL_UNDEF(EX_VAR(opline->result.var));
  12228. HANDLE_EXCEPTION();
  12229. }
  12230. } else {
  12231. ce = Z_CE_P(EX_VAR(opline->op2.var));
  12232. }
  12233. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  12234. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  12235. expr = Z_REFVAL_P(expr);
  12236. goto try_instanceof;
  12237. } else {
  12238. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  12239. GET_OP1_UNDEF_CV(expr, BP_VAR_R);
  12240. }
  12241. result = 0;
  12242. }
  12243. zval_ptr_dtor_nogc(free_op1);
  12244. ZEND_VM_SMART_BRANCH(result, 1);
  12245. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  12246. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12247. }
  12248. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12249. {
  12250. USE_OPLINE
  12251. zend_free_op free_op1;
  12252. zval *container, *dim, *value;
  12253. zend_long offset;
  12254. HashTable *ht;
  12255. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12256. dim = RT_CONSTANT(opline, opline->op2);
  12257. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  12258. fetch_dim_r_index_array:
  12259. if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
  12260. offset = Z_LVAL_P(dim);
  12261. } else {
  12262. offset = zval_get_long(dim);
  12263. }
  12264. ht = Z_ARRVAL_P(container);
  12265. ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
  12266. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  12267. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  12268. SAVE_OPLINE();
  12269. zval_ptr_dtor_nogc(free_op1);
  12270. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12271. } else {
  12272. ZEND_VM_NEXT_OPCODE();
  12273. }
  12274. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  12275. container = Z_REFVAL_P(container);
  12276. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  12277. goto fetch_dim_r_index_array;
  12278. } else {
  12279. goto fetch_dim_r_index_slow;
  12280. }
  12281. } else {
  12282. fetch_dim_r_index_slow:
  12283. SAVE_OPLINE();
  12284. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  12285. dim++;
  12286. }
  12287. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  12288. zval_ptr_dtor_nogc(free_op1);
  12289. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12290. }
  12291. fetch_dim_r_index_undef:
  12292. ZVAL_NULL(EX_VAR(opline->result.var));
  12293. SAVE_OPLINE();
  12294. zend_undefined_offset(offset);
  12295. zval_ptr_dtor_nogc(free_op1);
  12296. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12297. }
  12298. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12299. {
  12300. USE_OPLINE
  12301. zend_free_op free_op1;
  12302. zval *container, *dim, *value;
  12303. zend_long offset;
  12304. HashTable *ht;
  12305. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12306. dim = EX_VAR(opline->op2.var);
  12307. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  12308. fetch_dim_r_index_array:
  12309. if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
  12310. offset = Z_LVAL_P(dim);
  12311. } else {
  12312. offset = zval_get_long(dim);
  12313. }
  12314. ht = Z_ARRVAL_P(container);
  12315. ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
  12316. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  12317. if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
  12318. SAVE_OPLINE();
  12319. zval_ptr_dtor_nogc(free_op1);
  12320. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12321. } else {
  12322. ZEND_VM_NEXT_OPCODE();
  12323. }
  12324. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  12325. container = Z_REFVAL_P(container);
  12326. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  12327. goto fetch_dim_r_index_array;
  12328. } else {
  12329. goto fetch_dim_r_index_slow;
  12330. }
  12331. } else {
  12332. fetch_dim_r_index_slow:
  12333. SAVE_OPLINE();
  12334. if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  12335. dim++;
  12336. }
  12337. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  12338. zval_ptr_dtor_nogc(free_op1);
  12339. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12340. }
  12341. fetch_dim_r_index_undef:
  12342. ZVAL_NULL(EX_VAR(opline->result.var));
  12343. SAVE_OPLINE();
  12344. zend_undefined_offset(offset);
  12345. zval_ptr_dtor_nogc(free_op1);
  12346. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12347. }
  12348. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12349. {
  12350. USE_OPLINE
  12351. zend_free_op free_op1, free_op2;
  12352. zval *op1, *op2, *result;
  12353. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12354. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12355. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  12356. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  12357. result = EX_VAR(opline->result.var);
  12358. fast_long_add_function(result, op1, op2);
  12359. ZEND_VM_NEXT_OPCODE();
  12360. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  12361. result = EX_VAR(opline->result.var);
  12362. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
  12363. ZEND_VM_NEXT_OPCODE();
  12364. }
  12365. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  12366. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  12367. result = EX_VAR(opline->result.var);
  12368. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
  12369. ZEND_VM_NEXT_OPCODE();
  12370. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  12371. result = EX_VAR(opline->result.var);
  12372. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
  12373. ZEND_VM_NEXT_OPCODE();
  12374. }
  12375. }
  12376. SAVE_OPLINE();
  12377. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  12378. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  12379. }
  12380. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  12381. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  12382. }
  12383. add_function(EX_VAR(opline->result.var), op1, op2);
  12384. zval_ptr_dtor_nogc(free_op1);
  12385. zval_ptr_dtor_nogc(free_op2);
  12386. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12387. }
  12388. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12389. {
  12390. USE_OPLINE
  12391. zend_free_op free_op1, free_op2;
  12392. zval *op1, *op2, *result;
  12393. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12394. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12395. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  12396. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  12397. result = EX_VAR(opline->result.var);
  12398. fast_long_sub_function(result, op1, op2);
  12399. ZEND_VM_NEXT_OPCODE();
  12400. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  12401. result = EX_VAR(opline->result.var);
  12402. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
  12403. ZEND_VM_NEXT_OPCODE();
  12404. }
  12405. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  12406. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  12407. result = EX_VAR(opline->result.var);
  12408. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  12409. ZEND_VM_NEXT_OPCODE();
  12410. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  12411. result = EX_VAR(opline->result.var);
  12412. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
  12413. ZEND_VM_NEXT_OPCODE();
  12414. }
  12415. }
  12416. SAVE_OPLINE();
  12417. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  12418. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  12419. }
  12420. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  12421. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  12422. }
  12423. sub_function(EX_VAR(opline->result.var), op1, op2);
  12424. zval_ptr_dtor_nogc(free_op1);
  12425. zval_ptr_dtor_nogc(free_op2);
  12426. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12427. }
  12428. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12429. {
  12430. USE_OPLINE
  12431. zend_free_op free_op1, free_op2;
  12432. zval *op1, *op2, *result;
  12433. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12434. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12435. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  12436. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  12437. zend_long overflow;
  12438. result = EX_VAR(opline->result.var);
  12439. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  12440. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  12441. ZEND_VM_NEXT_OPCODE();
  12442. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  12443. result = EX_VAR(opline->result.var);
  12444. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
  12445. ZEND_VM_NEXT_OPCODE();
  12446. }
  12447. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  12448. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  12449. result = EX_VAR(opline->result.var);
  12450. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
  12451. ZEND_VM_NEXT_OPCODE();
  12452. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  12453. result = EX_VAR(opline->result.var);
  12454. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
  12455. ZEND_VM_NEXT_OPCODE();
  12456. }
  12457. }
  12458. SAVE_OPLINE();
  12459. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  12460. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  12461. }
  12462. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  12463. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  12464. }
  12465. mul_function(EX_VAR(opline->result.var), op1, op2);
  12466. zval_ptr_dtor_nogc(free_op1);
  12467. zval_ptr_dtor_nogc(free_op2);
  12468. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12469. }
  12470. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12471. {
  12472. USE_OPLINE
  12473. zend_free_op free_op1, free_op2;
  12474. zval *op1, *op2;
  12475. SAVE_OPLINE();
  12476. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12477. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12478. fast_div_function(EX_VAR(opline->result.var), op1, op2);
  12479. zval_ptr_dtor_nogc(free_op1);
  12480. zval_ptr_dtor_nogc(free_op2);
  12481. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12482. }
  12483. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12484. {
  12485. USE_OPLINE
  12486. zend_free_op free_op1, free_op2;
  12487. zval *op1, *op2, *result;
  12488. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12489. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12490. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  12491. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  12492. result = EX_VAR(opline->result.var);
  12493. if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
  12494. ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  12495. } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
  12496. /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
  12497. ZVAL_LONG(result, 0);
  12498. } else {
  12499. ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
  12500. }
  12501. ZEND_VM_NEXT_OPCODE();
  12502. }
  12503. }
  12504. SAVE_OPLINE();
  12505. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  12506. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  12507. }
  12508. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  12509. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  12510. }
  12511. mod_function(EX_VAR(opline->result.var), op1, op2);
  12512. zval_ptr_dtor_nogc(free_op1);
  12513. zval_ptr_dtor_nogc(free_op2);
  12514. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12515. }
  12516. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12517. {
  12518. USE_OPLINE
  12519. zend_free_op free_op1, free_op2;
  12520. zval *op1, *op2;
  12521. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12522. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12523. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  12524. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  12525. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  12526. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
  12527. ZEND_VM_NEXT_OPCODE();
  12528. }
  12529. SAVE_OPLINE();
  12530. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  12531. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  12532. }
  12533. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  12534. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  12535. }
  12536. shift_left_function(EX_VAR(opline->result.var), op1, op2);
  12537. zval_ptr_dtor_nogc(free_op1);
  12538. zval_ptr_dtor_nogc(free_op2);
  12539. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12540. }
  12541. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12542. {
  12543. USE_OPLINE
  12544. zend_free_op free_op1, free_op2;
  12545. zval *op1, *op2;
  12546. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12547. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12548. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  12549. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  12550. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  12551. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
  12552. ZEND_VM_NEXT_OPCODE();
  12553. }
  12554. SAVE_OPLINE();
  12555. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  12556. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  12557. }
  12558. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  12559. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  12560. }
  12561. shift_right_function(EX_VAR(opline->result.var), op1, op2);
  12562. zval_ptr_dtor_nogc(free_op1);
  12563. zval_ptr_dtor_nogc(free_op2);
  12564. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12565. }
  12566. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12567. {
  12568. USE_OPLINE
  12569. zend_free_op free_op1, free_op2;
  12570. zval *op1, *op2;
  12571. SAVE_OPLINE();
  12572. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12573. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12574. pow_function(EX_VAR(opline->result.var), op1, op2);
  12575. zval_ptr_dtor_nogc(free_op1);
  12576. zval_ptr_dtor_nogc(free_op2);
  12577. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12578. }
  12579. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12580. {
  12581. USE_OPLINE
  12582. zend_free_op free_op1, free_op2;
  12583. zval *op1, *op2;
  12584. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12585. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12586. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  12587. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  12588. zend_string *op1_str = Z_STR_P(op1);
  12589. zend_string *op2_str = Z_STR_P(op2);
  12590. zend_string *str;
  12591. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  12592. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  12593. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  12594. } else {
  12595. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  12596. }
  12597. zval_ptr_dtor_nogc(free_op1);
  12598. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  12599. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  12600. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  12601. } else {
  12602. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  12603. }
  12604. zval_ptr_dtor_nogc(free_op2);
  12605. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  12606. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  12607. size_t len = ZSTR_LEN(op1_str);
  12608. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  12609. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  12610. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  12611. zval_ptr_dtor_nogc(free_op2);
  12612. } else {
  12613. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  12614. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  12615. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  12616. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  12617. zval_ptr_dtor_nogc(free_op1);
  12618. zval_ptr_dtor_nogc(free_op2);
  12619. }
  12620. ZEND_VM_NEXT_OPCODE();
  12621. } else {
  12622. SAVE_OPLINE();
  12623. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  12624. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  12625. }
  12626. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  12627. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  12628. }
  12629. concat_function(EX_VAR(opline->result.var), op1, op2);
  12630. zval_ptr_dtor_nogc(free_op1);
  12631. zval_ptr_dtor_nogc(free_op2);
  12632. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12633. }
  12634. }
  12635. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12636. {
  12637. USE_OPLINE
  12638. zend_free_op free_op1, free_op2;
  12639. zval *op1, *op2, *result;
  12640. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12641. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12642. do {
  12643. int result;
  12644. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  12645. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  12646. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  12647. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  12648. result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
  12649. } else {
  12650. break;
  12651. }
  12652. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  12653. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  12654. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  12655. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  12656. result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
  12657. } else {
  12658. break;
  12659. }
  12660. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  12661. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  12662. result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  12663. zval_ptr_dtor_nogc(free_op1);
  12664. zval_ptr_dtor_nogc(free_op2);
  12665. } else {
  12666. break;
  12667. }
  12668. } else {
  12669. break;
  12670. }
  12671. ZEND_VM_SMART_BRANCH(result, 0);
  12672. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  12673. ZEND_VM_NEXT_OPCODE();
  12674. } while (0);
  12675. SAVE_OPLINE();
  12676. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  12677. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  12678. }
  12679. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  12680. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  12681. }
  12682. result = EX_VAR(opline->result.var);
  12683. compare_function(result, op1, op2);
  12684. ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
  12685. zval_ptr_dtor_nogc(free_op1);
  12686. zval_ptr_dtor_nogc(free_op2);
  12687. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12688. }
  12689. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12690. {
  12691. USE_OPLINE
  12692. zend_free_op free_op1, free_op2;
  12693. zval *op1, *op2, *result;
  12694. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12695. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12696. do {
  12697. int result;
  12698. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  12699. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  12700. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  12701. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  12702. result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
  12703. } else {
  12704. break;
  12705. }
  12706. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  12707. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  12708. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  12709. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  12710. result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
  12711. } else {
  12712. break;
  12713. }
  12714. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  12715. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  12716. result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  12717. zval_ptr_dtor_nogc(free_op1);
  12718. zval_ptr_dtor_nogc(free_op2);
  12719. } else {
  12720. break;
  12721. }
  12722. } else {
  12723. break;
  12724. }
  12725. ZEND_VM_SMART_BRANCH(result, 0);
  12726. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  12727. ZEND_VM_NEXT_OPCODE();
  12728. } while (0);
  12729. SAVE_OPLINE();
  12730. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  12731. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  12732. }
  12733. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  12734. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  12735. }
  12736. result = EX_VAR(opline->result.var);
  12737. compare_function(result, op1, op2);
  12738. ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
  12739. zval_ptr_dtor_nogc(free_op1);
  12740. zval_ptr_dtor_nogc(free_op2);
  12741. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12742. }
  12743. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12744. {
  12745. USE_OPLINE
  12746. zend_free_op free_op1, free_op2;
  12747. zval *op1, *op2, *result;
  12748. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12749. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12750. do {
  12751. int result;
  12752. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  12753. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  12754. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  12755. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  12756. result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
  12757. } else {
  12758. break;
  12759. }
  12760. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  12761. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  12762. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  12763. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  12764. result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
  12765. } else {
  12766. break;
  12767. }
  12768. } else {
  12769. break;
  12770. }
  12771. ZEND_VM_SMART_BRANCH(result, 0);
  12772. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  12773. ZEND_VM_NEXT_OPCODE();
  12774. } while (0);
  12775. SAVE_OPLINE();
  12776. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  12777. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  12778. }
  12779. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  12780. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  12781. }
  12782. result = EX_VAR(opline->result.var);
  12783. compare_function(result, op1, op2);
  12784. ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
  12785. zval_ptr_dtor_nogc(free_op1);
  12786. zval_ptr_dtor_nogc(free_op2);
  12787. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12788. }
  12789. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12790. {
  12791. USE_OPLINE
  12792. zend_free_op free_op1, free_op2;
  12793. zval *op1, *op2, *result;
  12794. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12795. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12796. do {
  12797. int result;
  12798. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  12799. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  12800. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  12801. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  12802. result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
  12803. } else {
  12804. break;
  12805. }
  12806. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  12807. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  12808. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  12809. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  12810. result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
  12811. } else {
  12812. break;
  12813. }
  12814. } else {
  12815. break;
  12816. }
  12817. ZEND_VM_SMART_BRANCH(result, 0);
  12818. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  12819. ZEND_VM_NEXT_OPCODE();
  12820. } while (0);
  12821. SAVE_OPLINE();
  12822. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  12823. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  12824. }
  12825. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  12826. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  12827. }
  12828. result = EX_VAR(opline->result.var);
  12829. compare_function(result, op1, op2);
  12830. ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
  12831. zval_ptr_dtor_nogc(free_op1);
  12832. zval_ptr_dtor_nogc(free_op2);
  12833. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12834. }
  12835. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12836. {
  12837. USE_OPLINE
  12838. zend_free_op free_op1, free_op2;
  12839. zval *op1, *op2;
  12840. SAVE_OPLINE();
  12841. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12842. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12843. compare_function(EX_VAR(opline->result.var), op1, op2);
  12844. zval_ptr_dtor_nogc(free_op1);
  12845. zval_ptr_dtor_nogc(free_op2);
  12846. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12847. }
  12848. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12849. {
  12850. USE_OPLINE
  12851. zend_free_op free_op1, free_op2;
  12852. zval *op1, *op2;
  12853. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12854. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12855. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  12856. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  12857. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
  12858. ZEND_VM_NEXT_OPCODE();
  12859. }
  12860. SAVE_OPLINE();
  12861. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  12862. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  12863. }
  12864. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  12865. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  12866. }
  12867. bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
  12868. zval_ptr_dtor_nogc(free_op1);
  12869. zval_ptr_dtor_nogc(free_op2);
  12870. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12871. }
  12872. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12873. {
  12874. USE_OPLINE
  12875. zend_free_op free_op1, free_op2;
  12876. zval *op1, *op2;
  12877. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12878. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12879. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  12880. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  12881. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
  12882. ZEND_VM_NEXT_OPCODE();
  12883. }
  12884. SAVE_OPLINE();
  12885. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  12886. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  12887. }
  12888. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  12889. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  12890. }
  12891. bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
  12892. zval_ptr_dtor_nogc(free_op1);
  12893. zval_ptr_dtor_nogc(free_op2);
  12894. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12895. }
  12896. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12897. {
  12898. USE_OPLINE
  12899. zend_free_op free_op1, free_op2;
  12900. zval *op1, *op2;
  12901. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12902. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12903. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  12904. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  12905. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
  12906. ZEND_VM_NEXT_OPCODE();
  12907. }
  12908. SAVE_OPLINE();
  12909. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  12910. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  12911. }
  12912. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  12913. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  12914. }
  12915. bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
  12916. zval_ptr_dtor_nogc(free_op1);
  12917. zval_ptr_dtor_nogc(free_op2);
  12918. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12919. }
  12920. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12921. {
  12922. USE_OPLINE
  12923. zend_free_op free_op1, free_op2;
  12924. zval *op1, *op2;
  12925. SAVE_OPLINE();
  12926. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12927. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12928. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  12929. zval_ptr_dtor_nogc(free_op1);
  12930. zval_ptr_dtor_nogc(free_op2);
  12931. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12932. }
  12933. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12934. {
  12935. USE_OPLINE
  12936. zend_free_op free_op1, free_op2;
  12937. zval *container, *dim, *value, *result;
  12938. SAVE_OPLINE();
  12939. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12940. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12941. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  12942. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  12943. fetch_dim_r_array:
  12944. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
  12945. result = EX_VAR(opline->result.var);
  12946. ZVAL_COPY_DEREF(result, value);
  12947. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  12948. container = Z_REFVAL_P(container);
  12949. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  12950. goto fetch_dim_r_array;
  12951. } else {
  12952. goto fetch_dim_r_slow;
  12953. }
  12954. } else {
  12955. fetch_dim_r_slow:
  12956. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  12957. dim++;
  12958. }
  12959. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  12960. }
  12961. } else {
  12962. zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  12963. }
  12964. zval_ptr_dtor_nogc(free_op2);
  12965. zval_ptr_dtor_nogc(free_op1);
  12966. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12967. }
  12968. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12969. {
  12970. USE_OPLINE
  12971. zend_free_op free_op1, free_op2;
  12972. zval *container;
  12973. SAVE_OPLINE();
  12974. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12975. zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  12976. zval_ptr_dtor_nogc(free_op2);
  12977. zval_ptr_dtor_nogc(free_op1);
  12978. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  12979. }
  12980. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  12981. {
  12982. USE_OPLINE
  12983. zend_free_op free_op1;
  12984. zval *container;
  12985. zend_free_op free_op2;
  12986. zval *offset;
  12987. void **cache_slot = NULL;
  12988. SAVE_OPLINE();
  12989. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  12990. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  12991. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  12992. }
  12993. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  12994. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  12995. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  12996. do {
  12997. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  12998. container = Z_REFVAL_P(container);
  12999. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  13000. break;
  13001. }
  13002. }
  13003. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  13004. GET_OP1_UNDEF_CV(container, BP_VAR_R);
  13005. }
  13006. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  13007. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  13008. }
  13009. goto fetch_obj_r_no_object;
  13010. } while (0);
  13011. }
  13012. /* here we are sure we are dealing with an object */
  13013. do {
  13014. zend_object *zobj = Z_OBJ_P(container);
  13015. zval *retval;
  13016. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13017. cache_slot = CACHE_ADDR(opline->extended_value);
  13018. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  13019. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  13020. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  13021. retval = OBJ_PROP(zobj, prop_offset);
  13022. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  13023. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  13024. break;
  13025. }
  13026. } else if (EXPECTED(zobj->properties != NULL)) {
  13027. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  13028. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  13029. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  13030. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  13031. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  13032. (EXPECTED(p->key == Z_STR_P(offset)) ||
  13033. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  13034. EXPECTED(p->key != NULL) &&
  13035. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  13036. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
  13037. break;
  13038. }
  13039. }
  13040. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  13041. }
  13042. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  13043. if (EXPECTED(retval)) {
  13044. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  13045. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  13046. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  13047. break;
  13048. }
  13049. }
  13050. }
  13051. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
  13052. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  13053. }
  13054. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  13055. fetch_obj_r_no_object:
  13056. zend_wrong_property_read(offset);
  13057. ZVAL_NULL(EX_VAR(opline->result.var));
  13058. } else {
  13059. retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  13060. if (retval != EX_VAR(opline->result.var)) {
  13061. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  13062. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  13063. zend_unwrap_reference(retval);
  13064. }
  13065. }
  13066. } while (0);
  13067. zval_ptr_dtor_nogc(free_op2);
  13068. zval_ptr_dtor_nogc(free_op1);
  13069. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13070. }
  13071. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13072. {
  13073. USE_OPLINE
  13074. zend_free_op free_op1;
  13075. zval *container;
  13076. zend_free_op free_op2;
  13077. zval *offset;
  13078. void **cache_slot = NULL;
  13079. SAVE_OPLINE();
  13080. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  13081. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  13082. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  13083. }
  13084. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  13085. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  13086. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  13087. do {
  13088. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  13089. container = Z_REFVAL_P(container);
  13090. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  13091. break;
  13092. }
  13093. }
  13094. goto fetch_obj_is_no_object;
  13095. } while (0);
  13096. }
  13097. /* here we are sure we are dealing with an object */
  13098. do {
  13099. zend_object *zobj = Z_OBJ_P(container);
  13100. zval *retval;
  13101. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13102. cache_slot = CACHE_ADDR(opline->extended_value);
  13103. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  13104. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  13105. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  13106. retval = OBJ_PROP(zobj, prop_offset);
  13107. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  13108. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  13109. break;
  13110. }
  13111. } else if (EXPECTED(zobj->properties != NULL)) {
  13112. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  13113. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  13114. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  13115. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  13116. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  13117. (EXPECTED(p->key == Z_STR_P(offset)) ||
  13118. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  13119. EXPECTED(p->key != NULL) &&
  13120. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  13121. ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
  13122. break;
  13123. }
  13124. }
  13125. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  13126. }
  13127. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  13128. if (EXPECTED(retval)) {
  13129. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  13130. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  13131. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  13132. break;
  13133. }
  13134. }
  13135. }
  13136. }
  13137. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  13138. fetch_obj_is_no_object:
  13139. ZVAL_NULL(EX_VAR(opline->result.var));
  13140. } else {
  13141. retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  13142. if (retval != EX_VAR(opline->result.var)) {
  13143. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  13144. }
  13145. }
  13146. } while (0);
  13147. zval_ptr_dtor_nogc(free_op2);
  13148. zval_ptr_dtor_nogc(free_op1);
  13149. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13150. }
  13151. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13152. {
  13153. USE_OPLINE
  13154. zend_free_op free_op1, free_op2;
  13155. zval *op1, *op2;
  13156. zend_string *op1_str, *op2_str, *str;
  13157. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  13158. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  13159. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  13160. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  13161. zend_string *op1_str = Z_STR_P(op1);
  13162. zend_string *op2_str = Z_STR_P(op2);
  13163. zend_string *str;
  13164. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  13165. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  13166. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  13167. } else {
  13168. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  13169. }
  13170. zval_ptr_dtor_nogc(free_op1);
  13171. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  13172. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  13173. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  13174. } else {
  13175. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  13176. }
  13177. zval_ptr_dtor_nogc(free_op2);
  13178. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  13179. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  13180. size_t len = ZSTR_LEN(op1_str);
  13181. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  13182. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  13183. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  13184. zval_ptr_dtor_nogc(free_op2);
  13185. } else {
  13186. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  13187. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  13188. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  13189. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  13190. zval_ptr_dtor_nogc(free_op1);
  13191. zval_ptr_dtor_nogc(free_op2);
  13192. }
  13193. ZEND_VM_NEXT_OPCODE();
  13194. }
  13195. SAVE_OPLINE();
  13196. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13197. op1_str = Z_STR_P(op1);
  13198. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13199. op1_str = zend_string_copy(Z_STR_P(op1));
  13200. } else {
  13201. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  13202. GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  13203. }
  13204. op1_str = zval_get_string_func(op1);
  13205. }
  13206. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13207. op2_str = Z_STR_P(op2);
  13208. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13209. op2_str = zend_string_copy(Z_STR_P(op2));
  13210. } else {
  13211. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  13212. GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  13213. }
  13214. op2_str = zval_get_string_func(op2);
  13215. }
  13216. do {
  13217. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13218. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  13219. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13220. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  13221. GC_ADDREF(op2_str);
  13222. }
  13223. }
  13224. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  13225. zend_string_release_ex(op1_str, 0);
  13226. break;
  13227. }
  13228. }
  13229. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13230. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  13231. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13232. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  13233. GC_ADDREF(op1_str);
  13234. }
  13235. }
  13236. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  13237. zend_string_release_ex(op2_str, 0);
  13238. break;
  13239. }
  13240. }
  13241. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  13242. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  13243. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  13244. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  13245. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13246. zend_string_release_ex(op1_str, 0);
  13247. }
  13248. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13249. zend_string_release_ex(op2_str, 0);
  13250. }
  13251. } while (0);
  13252. zval_ptr_dtor_nogc(free_op1);
  13253. zval_ptr_dtor_nogc(free_op2);
  13254. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13255. }
  13256. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13257. {
  13258. USE_OPLINE
  13259. zval *function_name;
  13260. zend_free_op free_op1, free_op2;
  13261. zval *object;
  13262. zend_function *fbc;
  13263. zend_class_entry *called_scope;
  13264. zend_object *obj;
  13265. zend_execute_data *call;
  13266. uint32_t call_info;
  13267. SAVE_OPLINE();
  13268. object = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  13269. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  13270. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  13271. }
  13272. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13273. function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  13274. }
  13275. if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
  13276. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  13277. do {
  13278. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  13279. function_name = Z_REFVAL_P(function_name);
  13280. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  13281. break;
  13282. }
  13283. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  13284. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  13285. if (UNEXPECTED(EG(exception) != NULL)) {
  13286. zval_ptr_dtor_nogc(free_op1);
  13287. HANDLE_EXCEPTION();
  13288. }
  13289. }
  13290. zend_throw_error(NULL, "Method name must be a string");
  13291. zval_ptr_dtor_nogc(free_op2);
  13292. zval_ptr_dtor_nogc(free_op1);
  13293. HANDLE_EXCEPTION();
  13294. } while (0);
  13295. }
  13296. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  13297. do {
  13298. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  13299. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  13300. object = Z_REFVAL_P(object);
  13301. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  13302. break;
  13303. }
  13304. }
  13305. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  13306. object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
  13307. if (UNEXPECTED(EG(exception) != NULL)) {
  13308. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13309. zval_ptr_dtor_nogc(free_op2);
  13310. }
  13311. HANDLE_EXCEPTION();
  13312. }
  13313. }
  13314. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13315. function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  13316. }
  13317. zend_invalid_method_call(object, function_name);
  13318. zval_ptr_dtor_nogc(free_op2);
  13319. zval_ptr_dtor_nogc(free_op1);
  13320. HANDLE_EXCEPTION();
  13321. }
  13322. } while (0);
  13323. }
  13324. obj = Z_OBJ_P(object);
  13325. called_scope = obj->ce;
  13326. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  13327. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  13328. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  13329. } else {
  13330. zend_object *orig_obj = obj;
  13331. if (UNEXPECTED(obj->handlers->get_method == NULL)) {
  13332. zend_throw_error(NULL, "Object does not support method calls");
  13333. zval_ptr_dtor_nogc(free_op2);
  13334. zval_ptr_dtor_nogc(free_op1);
  13335. HANDLE_EXCEPTION();
  13336. }
  13337. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13338. function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  13339. }
  13340. /* First, locate the function. */
  13341. 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));
  13342. if (UNEXPECTED(fbc == NULL)) {
  13343. if (EXPECTED(!EG(exception))) {
  13344. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  13345. }
  13346. zval_ptr_dtor_nogc(free_op2);
  13347. zval_ptr_dtor_nogc(free_op1);
  13348. HANDLE_EXCEPTION();
  13349. }
  13350. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  13351. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  13352. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  13353. EXPECTED(obj == orig_obj)) {
  13354. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  13355. }
  13356. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  13357. /* Reset "object" to trigger reference counting */
  13358. object = NULL;
  13359. }
  13360. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  13361. init_func_run_time_cache(&fbc->op_array);
  13362. }
  13363. }
  13364. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13365. zval_ptr_dtor_nogc(free_op2);
  13366. }
  13367. call_info = ZEND_CALL_NESTED_FUNCTION;
  13368. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  13369. obj = NULL;
  13370. zval_ptr_dtor_nogc(free_op1);
  13371. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
  13372. HANDLE_EXCEPTION();
  13373. }
  13374. } else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  13375. /* CV may be changed indirectly (e.g. when it's a reference) */
  13376. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
  13377. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  13378. GC_ADDREF(obj); /* For $this pointer */
  13379. } else if (free_op1 != object) {
  13380. GC_ADDREF(obj); /* For $this pointer */
  13381. zval_ptr_dtor_nogc(free_op1);
  13382. }
  13383. }
  13384. call = zend_vm_stack_push_call_frame(call_info,
  13385. fbc, opline->extended_value, called_scope, obj);
  13386. call->prev_execute_data = EX(call);
  13387. EX(call) = call;
  13388. ZEND_VM_NEXT_OPCODE();
  13389. }
  13390. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13391. {
  13392. USE_OPLINE
  13393. zend_free_op free_op1, free_op2;
  13394. zval *op1, *op2, *result;
  13395. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  13396. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  13397. do {
  13398. int result;
  13399. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  13400. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13401. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  13402. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13403. result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
  13404. } else {
  13405. break;
  13406. }
  13407. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  13408. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  13409. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  13410. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  13411. result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
  13412. } else {
  13413. break;
  13414. }
  13415. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  13416. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  13417. result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  13418. zval_ptr_dtor_nogc(free_op2);
  13419. } else {
  13420. break;
  13421. }
  13422. } else {
  13423. break;
  13424. }
  13425. ZEND_VM_SMART_BRANCH(result, 0);
  13426. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  13427. ZEND_VM_NEXT_OPCODE();
  13428. } while (0);
  13429. SAVE_OPLINE();
  13430. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  13431. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  13432. }
  13433. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  13434. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  13435. }
  13436. result = EX_VAR(opline->result.var);
  13437. compare_function(result, op1, op2);
  13438. ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
  13439. zval_ptr_dtor_nogc(free_op2);
  13440. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13441. }
  13442. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13443. {
  13444. USE_OPLINE
  13445. zend_free_op free_op1, free_op2;
  13446. zval *container;
  13447. int result;
  13448. zend_ulong hval;
  13449. zval *offset;
  13450. SAVE_OPLINE();
  13451. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  13452. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  13453. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  13454. HashTable *ht;
  13455. zval *value;
  13456. zend_string *str;
  13457. isset_dim_obj_array:
  13458. ht = Z_ARRVAL_P(container);
  13459. isset_again:
  13460. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  13461. str = Z_STR_P(offset);
  13462. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13463. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  13464. goto num_index_prop;
  13465. }
  13466. }
  13467. value = zend_hash_find_ex_ind(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
  13468. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  13469. hval = Z_LVAL_P(offset);
  13470. num_index_prop:
  13471. value = zend_hash_index_find(ht, hval);
  13472. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  13473. offset = Z_REFVAL_P(offset);
  13474. goto isset_again;
  13475. } else {
  13476. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  13477. }
  13478. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  13479. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  13480. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  13481. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  13482. } else {
  13483. result = (value == NULL || !i_zend_is_true(value));
  13484. }
  13485. goto isset_dim_obj_exit;
  13486. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  13487. container = Z_REFVAL_P(container);
  13488. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  13489. goto isset_dim_obj_array;
  13490. }
  13491. }
  13492. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  13493. offset++;
  13494. }
  13495. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  13496. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  13497. } else {
  13498. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  13499. }
  13500. isset_dim_obj_exit:
  13501. zval_ptr_dtor_nogc(free_op2);
  13502. zval_ptr_dtor_nogc(free_op1);
  13503. ZEND_VM_SMART_BRANCH(result, 1);
  13504. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  13505. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13506. }
  13507. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13508. {
  13509. USE_OPLINE
  13510. zend_free_op free_op1, free_op2;
  13511. zval *container;
  13512. int result;
  13513. zval *offset;
  13514. SAVE_OPLINE();
  13515. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  13516. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  13517. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  13518. }
  13519. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  13520. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  13521. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  13522. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  13523. container = Z_REFVAL_P(container);
  13524. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  13525. goto isset_no_object;
  13526. }
  13527. } else {
  13528. goto isset_no_object;
  13529. }
  13530. }
  13531. if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
  13532. zend_wrong_property_check(offset);
  13533. isset_no_object:
  13534. result = (opline->extended_value & ZEND_ISEMPTY);
  13535. } else {
  13536. result =
  13537. (opline->extended_value & ZEND_ISEMPTY) ^
  13538. Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  13539. }
  13540. zval_ptr_dtor_nogc(free_op2);
  13541. zval_ptr_dtor_nogc(free_op1);
  13542. ZEND_VM_SMART_BRANCH(result, 1);
  13543. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  13544. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13545. }
  13546. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(int type ZEND_OPCODE_HANDLER_ARGS_DC)
  13547. {
  13548. USE_OPLINE
  13549. zend_free_op free_op1;
  13550. zval *varname;
  13551. zval *retval;
  13552. zend_string *name, *tmp_name;
  13553. zend_class_entry *ce;
  13554. SAVE_OPLINE();
  13555. do {
  13556. if (IS_VAR == IS_CONST) {
  13557. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) {
  13558. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  13559. break;
  13560. } else {
  13561. zval *class_name = RT_CONSTANT(opline, opline->op2);
  13562. if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) {
  13563. ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  13564. if (UNEXPECTED(ce == NULL)) {
  13565. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13566. retval = NULL;
  13567. break;
  13568. }
  13569. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13570. CACHE_PTR(opline->extended_value, ce);
  13571. }
  13572. }
  13573. }
  13574. } else {
  13575. if (IS_VAR == IS_UNUSED) {
  13576. ce = zend_fetch_class(NULL, opline->op2.num);
  13577. if (UNEXPECTED(ce == NULL)) {
  13578. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13579. retval = NULL;
  13580. break;
  13581. }
  13582. } else {
  13583. ce = Z_CE_P(EX_VAR(opline->op2.var));
  13584. }
  13585. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  13586. EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  13587. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  13588. break;
  13589. }
  13590. }
  13591. varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  13592. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13593. name = Z_STR_P(varname);
  13594. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  13595. name = Z_STR_P(varname);
  13596. tmp_name = NULL;
  13597. } else {
  13598. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  13599. zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC);
  13600. }
  13601. name = zval_get_tmp_string(varname, &tmp_name);
  13602. }
  13603. retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
  13604. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13605. zend_tmp_string_release(tmp_name);
  13606. }
  13607. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(retval)) {
  13608. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval);
  13609. }
  13610. zval_ptr_dtor_nogc(free_op1);
  13611. } while (0);
  13612. if (UNEXPECTED(retval == NULL)) {
  13613. if (EG(exception)) {
  13614. ZVAL_UNDEF(EX_VAR(opline->result.var));
  13615. HANDLE_EXCEPTION();
  13616. } else {
  13617. ZEND_ASSERT(type == BP_VAR_IS);
  13618. retval = &EG(uninitialized_zval);
  13619. }
  13620. }
  13621. if (type == BP_VAR_R || type == BP_VAR_IS) {
  13622. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  13623. } else {
  13624. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  13625. }
  13626. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13627. }
  13628. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13629. {
  13630. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13631. }
  13632. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13633. {
  13634. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13635. }
  13636. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13637. {
  13638. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13639. }
  13640. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13641. {
  13642. int fetch_type =
  13643. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  13644. BP_VAR_W : BP_VAR_R;
  13645. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13646. }
  13647. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13648. {
  13649. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13650. }
  13651. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13652. {
  13653. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13654. }
  13655. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13656. {
  13657. USE_OPLINE
  13658. zval *varname;
  13659. zend_string *name, *tmp_name;
  13660. zend_class_entry *ce;
  13661. zend_free_op free_op1;
  13662. SAVE_OPLINE();
  13663. if (IS_VAR == IS_CONST) {
  13664. ce = CACHED_PTR(opline->extended_value);
  13665. if (UNEXPECTED(ce == NULL)) {
  13666. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  13667. if (UNEXPECTED(ce == NULL)) {
  13668. ZEND_ASSERT(EG(exception));
  13669. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13670. HANDLE_EXCEPTION();
  13671. }
  13672. /*CACHE_PTR(opline->extended_value, ce);*/
  13673. }
  13674. } else if (IS_VAR == IS_UNUSED) {
  13675. ce = zend_fetch_class(NULL, opline->op2.num);
  13676. if (UNEXPECTED(ce == NULL)) {
  13677. ZEND_ASSERT(EG(exception));
  13678. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13679. HANDLE_EXCEPTION();
  13680. }
  13681. } else {
  13682. ce = Z_CE_P(EX_VAR(opline->op2.var));
  13683. }
  13684. varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  13685. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13686. name = Z_STR_P(varname);
  13687. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  13688. name = Z_STR_P(varname);
  13689. tmp_name = NULL;
  13690. } else {
  13691. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  13692. varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
  13693. }
  13694. name = zval_get_tmp_string(varname, &tmp_name);
  13695. }
  13696. zend_std_unset_static_property(ce, name);
  13697. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13698. zend_tmp_string_release(tmp_name);
  13699. }
  13700. zval_ptr_dtor_nogc(free_op1);
  13701. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13702. }
  13703. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13704. {
  13705. USE_OPLINE
  13706. zval *value;
  13707. int result;
  13708. zend_free_op free_op1;
  13709. zval *varname;
  13710. zend_string *name, *tmp_name;
  13711. zend_class_entry *ce;
  13712. SAVE_OPLINE();
  13713. if (IS_VAR == IS_CONST) {
  13714. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) {
  13715. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  13716. goto is_static_prop_return;
  13717. } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) {
  13718. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  13719. if (UNEXPECTED(ce == NULL)) {
  13720. ZEND_ASSERT(EG(exception));
  13721. ZVAL_UNDEF(EX_VAR(opline->result.var));
  13722. HANDLE_EXCEPTION();
  13723. }
  13724. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13725. CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce);
  13726. }
  13727. }
  13728. } else {
  13729. if (IS_VAR == IS_UNUSED) {
  13730. ce = zend_fetch_class(NULL, opline->op2.num);
  13731. if (UNEXPECTED(ce == NULL)) {
  13732. ZEND_ASSERT(EG(exception));
  13733. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13734. ZVAL_UNDEF(EX_VAR(opline->result.var));
  13735. HANDLE_EXCEPTION();
  13736. }
  13737. } else {
  13738. ce = Z_CE_P(EX_VAR(opline->op2.var));
  13739. }
  13740. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  13741. EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) {
  13742. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  13743. goto is_static_prop_return;
  13744. }
  13745. }
  13746. varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  13747. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13748. name = Z_STR_P(varname);
  13749. } else {
  13750. name = zval_get_tmp_string(varname, &tmp_name);
  13751. }
  13752. value = zend_std_get_static_property(ce, name, 1);
  13753. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && value) {
  13754. CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value);
  13755. }
  13756. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13757. zend_tmp_string_release(tmp_name);
  13758. }
  13759. zval_ptr_dtor_nogc(free_op1);
  13760. is_static_prop_return:
  13761. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  13762. result = value && Z_TYPE_P(value) > IS_NULL &&
  13763. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  13764. } else {
  13765. result = !value || !i_zend_is_true(value);
  13766. }
  13767. ZEND_VM_SMART_BRANCH(result, 1);
  13768. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  13769. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13770. }
  13771. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13772. {
  13773. USE_OPLINE
  13774. zend_free_op free_op1;
  13775. zval *expr;
  13776. zend_bool result;
  13777. SAVE_OPLINE();
  13778. expr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  13779. try_instanceof:
  13780. if (Z_TYPE_P(expr) == IS_OBJECT) {
  13781. zend_class_entry *ce;
  13782. if (IS_VAR == IS_CONST) {
  13783. ce = CACHED_PTR(opline->extended_value);
  13784. if (UNEXPECTED(ce == NULL)) {
  13785. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
  13786. if (EXPECTED(ce)) {
  13787. CACHE_PTR(opline->extended_value, ce);
  13788. }
  13789. }
  13790. } else if (IS_VAR == IS_UNUSED) {
  13791. ce = zend_fetch_class(NULL, opline->op2.num);
  13792. if (UNEXPECTED(ce == NULL)) {
  13793. ZEND_ASSERT(EG(exception));
  13794. zval_ptr_dtor_nogc(free_op1);
  13795. ZVAL_UNDEF(EX_VAR(opline->result.var));
  13796. HANDLE_EXCEPTION();
  13797. }
  13798. } else {
  13799. ce = Z_CE_P(EX_VAR(opline->op2.var));
  13800. }
  13801. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  13802. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  13803. expr = Z_REFVAL_P(expr);
  13804. goto try_instanceof;
  13805. } else {
  13806. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  13807. GET_OP1_UNDEF_CV(expr, BP_VAR_R);
  13808. }
  13809. result = 0;
  13810. }
  13811. zval_ptr_dtor_nogc(free_op1);
  13812. ZEND_VM_SMART_BRANCH(result, 1);
  13813. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  13814. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13815. }
  13816. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
  13817. {
  13818. USE_OPLINE
  13819. zend_free_op free_op1;
  13820. zval *varname;
  13821. zval *retval;
  13822. zend_string *name, *tmp_name;
  13823. HashTable *target_symbol_table;
  13824. SAVE_OPLINE();
  13825. varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  13826. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13827. name = Z_STR_P(varname);
  13828. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  13829. name = Z_STR_P(varname);
  13830. tmp_name = NULL;
  13831. } else {
  13832. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  13833. GET_OP1_UNDEF_CV(varname, BP_VAR_R);
  13834. }
  13835. name = zval_get_tmp_string(varname, &tmp_name);
  13836. }
  13837. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  13838. retval = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
  13839. if (retval == NULL) {
  13840. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  13841. fetch_this:
  13842. zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
  13843. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13844. zend_tmp_string_release(tmp_name);
  13845. }
  13846. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13847. }
  13848. if (type == BP_VAR_W) {
  13849. retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
  13850. } else if (type == BP_VAR_IS) {
  13851. retval = &EG(uninitialized_zval);
  13852. } else {
  13853. zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
  13854. if (type == BP_VAR_RW) {
  13855. retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
  13856. } else {
  13857. retval = &EG(uninitialized_zval);
  13858. }
  13859. }
  13860. /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
  13861. } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
  13862. retval = Z_INDIRECT_P(retval);
  13863. if (Z_TYPE_P(retval) == IS_UNDEF) {
  13864. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  13865. goto fetch_this;
  13866. }
  13867. if (type == BP_VAR_W) {
  13868. ZVAL_NULL(retval);
  13869. } else if (type == BP_VAR_IS) {
  13870. retval = &EG(uninitialized_zval);
  13871. } else {
  13872. zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
  13873. if (type == BP_VAR_RW) {
  13874. ZVAL_NULL(retval);
  13875. } else {
  13876. retval = &EG(uninitialized_zval);
  13877. }
  13878. }
  13879. }
  13880. }
  13881. if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
  13882. zval_ptr_dtor_nogc(free_op1);
  13883. }
  13884. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13885. zend_tmp_string_release(tmp_name);
  13886. }
  13887. ZEND_ASSERT(retval != NULL);
  13888. if (type == BP_VAR_R || type == BP_VAR_IS) {
  13889. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  13890. } else {
  13891. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  13892. }
  13893. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  13894. }
  13895. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13896. {
  13897. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13898. }
  13899. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13900. {
  13901. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13902. }
  13903. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13904. {
  13905. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13906. }
  13907. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13908. {
  13909. int fetch_type =
  13910. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  13911. BP_VAR_W : BP_VAR_R;
  13912. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13913. }
  13914. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13915. {
  13916. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13917. }
  13918. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  13919. {
  13920. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  13921. }
  13922. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
  13923. {
  13924. USE_OPLINE
  13925. zend_free_op free_op1;
  13926. zval *varname;
  13927. zval *retval;
  13928. zend_string *name, *tmp_name;
  13929. zend_class_entry *ce;
  13930. SAVE_OPLINE();
  13931. do {
  13932. if (IS_UNUSED == IS_CONST) {
  13933. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) {
  13934. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  13935. break;
  13936. } else {
  13937. zval *class_name = RT_CONSTANT(opline, opline->op2);
  13938. if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) {
  13939. ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  13940. if (UNEXPECTED(ce == NULL)) {
  13941. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13942. retval = NULL;
  13943. break;
  13944. }
  13945. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13946. CACHE_PTR(opline->extended_value, ce);
  13947. }
  13948. }
  13949. }
  13950. } else {
  13951. if (IS_UNUSED == IS_UNUSED) {
  13952. ce = zend_fetch_class(NULL, opline->op2.num);
  13953. if (UNEXPECTED(ce == NULL)) {
  13954. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  13955. retval = NULL;
  13956. break;
  13957. }
  13958. } else {
  13959. ce = Z_CE_P(EX_VAR(opline->op2.var));
  13960. }
  13961. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  13962. EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  13963. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  13964. break;
  13965. }
  13966. }
  13967. varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  13968. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  13969. name = Z_STR_P(varname);
  13970. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  13971. name = Z_STR_P(varname);
  13972. tmp_name = NULL;
  13973. } else {
  13974. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  13975. zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC);
  13976. }
  13977. name = zval_get_tmp_string(varname, &tmp_name);
  13978. }
  13979. retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
  13980. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  13981. zend_tmp_string_release(tmp_name);
  13982. }
  13983. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(retval)) {
  13984. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval);
  13985. }
  13986. zval_ptr_dtor_nogc(free_op1);
  13987. } while (0);
  13988. if (UNEXPECTED(retval == NULL)) {
  13989. if (EG(exception)) {
  13990. ZVAL_UNDEF(EX_VAR(opline->result.var));
  13991. HANDLE_EXCEPTION();
  13992. } else {
  13993. ZEND_ASSERT(type == BP_VAR_IS);
  13994. retval = &EG(uninitialized_zval);
  13995. }
  13996. }
  13997. if (type == BP_VAR_R || type == BP_VAR_IS) {
  13998. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  13999. } else {
  14000. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  14001. }
  14002. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14003. }
  14004. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14005. {
  14006. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14007. }
  14008. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14009. {
  14010. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14011. }
  14012. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14013. {
  14014. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14015. }
  14016. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14017. {
  14018. int fetch_type =
  14019. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  14020. BP_VAR_W : BP_VAR_R;
  14021. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14022. }
  14023. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14024. {
  14025. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14026. }
  14027. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14028. {
  14029. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  14030. }
  14031. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14032. {
  14033. USE_OPLINE
  14034. zval *varname;
  14035. zend_string *name, *tmp_name;
  14036. HashTable *target_symbol_table;
  14037. zend_free_op free_op1;
  14038. SAVE_OPLINE();
  14039. varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14040. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14041. name = Z_STR_P(varname);
  14042. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  14043. name = Z_STR_P(varname);
  14044. tmp_name = NULL;
  14045. } else {
  14046. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  14047. varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
  14048. }
  14049. name = zval_get_tmp_string(varname, &tmp_name);
  14050. }
  14051. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  14052. zend_hash_del_ind(target_symbol_table, name);
  14053. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  14054. zend_tmp_string_release(tmp_name);
  14055. }
  14056. zval_ptr_dtor_nogc(free_op1);
  14057. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14058. }
  14059. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14060. {
  14061. USE_OPLINE
  14062. zval *varname;
  14063. zend_string *name, *tmp_name;
  14064. zend_class_entry *ce;
  14065. zend_free_op free_op1;
  14066. SAVE_OPLINE();
  14067. if (IS_UNUSED == IS_CONST) {
  14068. ce = CACHED_PTR(opline->extended_value);
  14069. if (UNEXPECTED(ce == NULL)) {
  14070. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  14071. if (UNEXPECTED(ce == NULL)) {
  14072. ZEND_ASSERT(EG(exception));
  14073. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14074. HANDLE_EXCEPTION();
  14075. }
  14076. /*CACHE_PTR(opline->extended_value, ce);*/
  14077. }
  14078. } else if (IS_UNUSED == IS_UNUSED) {
  14079. ce = zend_fetch_class(NULL, opline->op2.num);
  14080. if (UNEXPECTED(ce == NULL)) {
  14081. ZEND_ASSERT(EG(exception));
  14082. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14083. HANDLE_EXCEPTION();
  14084. }
  14085. } else {
  14086. ce = Z_CE_P(EX_VAR(opline->op2.var));
  14087. }
  14088. varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14089. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14090. name = Z_STR_P(varname);
  14091. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  14092. name = Z_STR_P(varname);
  14093. tmp_name = NULL;
  14094. } else {
  14095. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  14096. varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
  14097. }
  14098. name = zval_get_tmp_string(varname, &tmp_name);
  14099. }
  14100. zend_std_unset_static_property(ce, name);
  14101. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  14102. zend_tmp_string_release(tmp_name);
  14103. }
  14104. zval_ptr_dtor_nogc(free_op1);
  14105. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14106. }
  14107. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14108. {
  14109. USE_OPLINE
  14110. zval *value;
  14111. int result;
  14112. zend_free_op free_op1;
  14113. zval *varname;
  14114. zend_string *name, *tmp_name;
  14115. HashTable *target_symbol_table;
  14116. SAVE_OPLINE();
  14117. varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14118. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14119. name = Z_STR_P(varname);
  14120. } else {
  14121. name = zval_get_tmp_string(varname, &tmp_name);
  14122. }
  14123. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  14124. value = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
  14125. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  14126. zend_tmp_string_release(tmp_name);
  14127. }
  14128. zval_ptr_dtor_nogc(free_op1);
  14129. if (!value) {
  14130. result = (opline->extended_value & ZEND_ISEMPTY);
  14131. } else {
  14132. if (Z_TYPE_P(value) == IS_INDIRECT) {
  14133. value = Z_INDIRECT_P(value);
  14134. }
  14135. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  14136. if (Z_ISREF_P(value)) {
  14137. value = Z_REFVAL_P(value);
  14138. }
  14139. result = Z_TYPE_P(value) > IS_NULL;
  14140. } else {
  14141. result = !i_zend_is_true(value);
  14142. }
  14143. }
  14144. ZEND_VM_SMART_BRANCH(result, 1);
  14145. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  14146. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14147. }
  14148. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14149. {
  14150. USE_OPLINE
  14151. zval *value;
  14152. int result;
  14153. zend_free_op free_op1;
  14154. zval *varname;
  14155. zend_string *name, *tmp_name;
  14156. zend_class_entry *ce;
  14157. SAVE_OPLINE();
  14158. if (IS_UNUSED == IS_CONST) {
  14159. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) {
  14160. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  14161. goto is_static_prop_return;
  14162. } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) {
  14163. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  14164. if (UNEXPECTED(ce == NULL)) {
  14165. ZEND_ASSERT(EG(exception));
  14166. ZVAL_UNDEF(EX_VAR(opline->result.var));
  14167. HANDLE_EXCEPTION();
  14168. }
  14169. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  14170. CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce);
  14171. }
  14172. }
  14173. } else {
  14174. if (IS_UNUSED == IS_UNUSED) {
  14175. ce = zend_fetch_class(NULL, opline->op2.num);
  14176. if (UNEXPECTED(ce == NULL)) {
  14177. ZEND_ASSERT(EG(exception));
  14178. zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
  14179. ZVAL_UNDEF(EX_VAR(opline->result.var));
  14180. HANDLE_EXCEPTION();
  14181. }
  14182. } else {
  14183. ce = Z_CE_P(EX_VAR(opline->op2.var));
  14184. }
  14185. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  14186. EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) {
  14187. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  14188. goto is_static_prop_return;
  14189. }
  14190. }
  14191. varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14192. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14193. name = Z_STR_P(varname);
  14194. } else {
  14195. name = zval_get_tmp_string(varname, &tmp_name);
  14196. }
  14197. value = zend_std_get_static_property(ce, name, 1);
  14198. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && value) {
  14199. CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value);
  14200. }
  14201. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  14202. zend_tmp_string_release(tmp_name);
  14203. }
  14204. zval_ptr_dtor_nogc(free_op1);
  14205. is_static_prop_return:
  14206. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  14207. result = value && Z_TYPE_P(value) > IS_NULL &&
  14208. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  14209. } else {
  14210. result = !value || !i_zend_is_true(value);
  14211. }
  14212. ZEND_VM_SMART_BRANCH(result, 1);
  14213. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  14214. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14215. }
  14216. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14217. {
  14218. USE_OPLINE
  14219. zend_free_op free_op1;
  14220. zval *expr;
  14221. zend_bool result;
  14222. SAVE_OPLINE();
  14223. expr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14224. try_instanceof:
  14225. if (Z_TYPE_P(expr) == IS_OBJECT) {
  14226. zend_class_entry *ce;
  14227. if (IS_UNUSED == IS_CONST) {
  14228. ce = CACHED_PTR(opline->extended_value);
  14229. if (UNEXPECTED(ce == NULL)) {
  14230. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
  14231. if (EXPECTED(ce)) {
  14232. CACHE_PTR(opline->extended_value, ce);
  14233. }
  14234. }
  14235. } else if (IS_UNUSED == IS_UNUSED) {
  14236. ce = zend_fetch_class(NULL, opline->op2.num);
  14237. if (UNEXPECTED(ce == NULL)) {
  14238. ZEND_ASSERT(EG(exception));
  14239. zval_ptr_dtor_nogc(free_op1);
  14240. ZVAL_UNDEF(EX_VAR(opline->result.var));
  14241. HANDLE_EXCEPTION();
  14242. }
  14243. } else {
  14244. ce = Z_CE_P(EX_VAR(opline->op2.var));
  14245. }
  14246. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  14247. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  14248. expr = Z_REFVAL_P(expr);
  14249. goto try_instanceof;
  14250. } else {
  14251. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  14252. GET_OP1_UNDEF_CV(expr, BP_VAR_R);
  14253. }
  14254. result = 0;
  14255. }
  14256. zval_ptr_dtor_nogc(free_op1);
  14257. ZEND_VM_SMART_BRANCH(result, 1);
  14258. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  14259. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14260. }
  14261. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14262. {
  14263. USE_OPLINE
  14264. zend_free_op free_op1;
  14265. zval *op1, *op2, *result;
  14266. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14267. op2 = EX_VAR(opline->op2.var);
  14268. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  14269. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  14270. result = EX_VAR(opline->result.var);
  14271. fast_long_add_function(result, op1, op2);
  14272. ZEND_VM_NEXT_OPCODE();
  14273. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  14274. result = EX_VAR(opline->result.var);
  14275. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
  14276. ZEND_VM_NEXT_OPCODE();
  14277. }
  14278. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  14279. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  14280. result = EX_VAR(opline->result.var);
  14281. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
  14282. ZEND_VM_NEXT_OPCODE();
  14283. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  14284. result = EX_VAR(opline->result.var);
  14285. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
  14286. ZEND_VM_NEXT_OPCODE();
  14287. }
  14288. }
  14289. SAVE_OPLINE();
  14290. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  14291. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  14292. }
  14293. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  14294. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  14295. }
  14296. add_function(EX_VAR(opline->result.var), op1, op2);
  14297. zval_ptr_dtor_nogc(free_op1);
  14298. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14299. }
  14300. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14301. {
  14302. USE_OPLINE
  14303. zend_free_op free_op1;
  14304. zval *op1, *op2, *result;
  14305. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14306. op2 = EX_VAR(opline->op2.var);
  14307. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  14308. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  14309. result = EX_VAR(opline->result.var);
  14310. fast_long_sub_function(result, op1, op2);
  14311. ZEND_VM_NEXT_OPCODE();
  14312. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  14313. result = EX_VAR(opline->result.var);
  14314. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
  14315. ZEND_VM_NEXT_OPCODE();
  14316. }
  14317. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  14318. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  14319. result = EX_VAR(opline->result.var);
  14320. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  14321. ZEND_VM_NEXT_OPCODE();
  14322. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  14323. result = EX_VAR(opline->result.var);
  14324. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
  14325. ZEND_VM_NEXT_OPCODE();
  14326. }
  14327. }
  14328. SAVE_OPLINE();
  14329. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  14330. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  14331. }
  14332. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  14333. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  14334. }
  14335. sub_function(EX_VAR(opline->result.var), op1, op2);
  14336. zval_ptr_dtor_nogc(free_op1);
  14337. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14338. }
  14339. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14340. {
  14341. USE_OPLINE
  14342. zend_free_op free_op1;
  14343. zval *op1, *op2;
  14344. SAVE_OPLINE();
  14345. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14346. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  14347. fast_div_function(EX_VAR(opline->result.var), op1, op2);
  14348. zval_ptr_dtor_nogc(free_op1);
  14349. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14350. }
  14351. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14352. {
  14353. USE_OPLINE
  14354. zend_free_op free_op1;
  14355. zval *op1, *op2, *result;
  14356. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14357. op2 = EX_VAR(opline->op2.var);
  14358. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  14359. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  14360. result = EX_VAR(opline->result.var);
  14361. if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
  14362. ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  14363. } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
  14364. /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
  14365. ZVAL_LONG(result, 0);
  14366. } else {
  14367. ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
  14368. }
  14369. ZEND_VM_NEXT_OPCODE();
  14370. }
  14371. }
  14372. SAVE_OPLINE();
  14373. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  14374. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  14375. }
  14376. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  14377. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  14378. }
  14379. mod_function(EX_VAR(opline->result.var), op1, op2);
  14380. zval_ptr_dtor_nogc(free_op1);
  14381. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14382. }
  14383. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14384. {
  14385. USE_OPLINE
  14386. zend_free_op free_op1;
  14387. zval *op1, *op2;
  14388. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14389. op2 = EX_VAR(opline->op2.var);
  14390. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  14391. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  14392. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  14393. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
  14394. ZEND_VM_NEXT_OPCODE();
  14395. }
  14396. SAVE_OPLINE();
  14397. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  14398. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  14399. }
  14400. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  14401. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  14402. }
  14403. shift_left_function(EX_VAR(opline->result.var), op1, op2);
  14404. zval_ptr_dtor_nogc(free_op1);
  14405. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14406. }
  14407. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14408. {
  14409. USE_OPLINE
  14410. zend_free_op free_op1;
  14411. zval *op1, *op2;
  14412. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14413. op2 = EX_VAR(opline->op2.var);
  14414. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  14415. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  14416. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  14417. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
  14418. ZEND_VM_NEXT_OPCODE();
  14419. }
  14420. SAVE_OPLINE();
  14421. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  14422. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  14423. }
  14424. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  14425. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  14426. }
  14427. shift_right_function(EX_VAR(opline->result.var), op1, op2);
  14428. zval_ptr_dtor_nogc(free_op1);
  14429. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14430. }
  14431. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14432. {
  14433. USE_OPLINE
  14434. zend_free_op free_op1;
  14435. zval *op1, *op2;
  14436. SAVE_OPLINE();
  14437. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14438. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  14439. pow_function(EX_VAR(opline->result.var), op1, op2);
  14440. zval_ptr_dtor_nogc(free_op1);
  14441. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14442. }
  14443. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14444. {
  14445. USE_OPLINE
  14446. zend_free_op free_op1;
  14447. zval *op1, *op2;
  14448. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14449. op2 = EX_VAR(opline->op2.var);
  14450. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  14451. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  14452. zend_string *op1_str = Z_STR_P(op1);
  14453. zend_string *op2_str = Z_STR_P(op2);
  14454. zend_string *str;
  14455. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  14456. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  14457. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  14458. } else {
  14459. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  14460. }
  14461. zval_ptr_dtor_nogc(free_op1);
  14462. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  14463. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  14464. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  14465. } else {
  14466. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  14467. }
  14468. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  14469. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  14470. size_t len = ZSTR_LEN(op1_str);
  14471. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  14472. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  14473. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  14474. } else {
  14475. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  14476. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  14477. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  14478. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  14479. zval_ptr_dtor_nogc(free_op1);
  14480. }
  14481. ZEND_VM_NEXT_OPCODE();
  14482. } else {
  14483. SAVE_OPLINE();
  14484. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  14485. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  14486. }
  14487. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  14488. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  14489. }
  14490. concat_function(EX_VAR(opline->result.var), op1, op2);
  14491. zval_ptr_dtor_nogc(free_op1);
  14492. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14493. }
  14494. }
  14495. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14496. {
  14497. USE_OPLINE
  14498. zend_free_op free_op1;
  14499. zval *op1, *op2, *result;
  14500. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14501. op2 = EX_VAR(opline->op2.var);
  14502. do {
  14503. int result;
  14504. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  14505. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  14506. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  14507. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  14508. result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
  14509. } else {
  14510. break;
  14511. }
  14512. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  14513. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  14514. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  14515. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  14516. result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
  14517. } else {
  14518. break;
  14519. }
  14520. } else {
  14521. break;
  14522. }
  14523. ZEND_VM_SMART_BRANCH(result, 0);
  14524. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  14525. ZEND_VM_NEXT_OPCODE();
  14526. } while (0);
  14527. SAVE_OPLINE();
  14528. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  14529. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  14530. }
  14531. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  14532. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  14533. }
  14534. result = EX_VAR(opline->result.var);
  14535. compare_function(result, op1, op2);
  14536. ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
  14537. zval_ptr_dtor_nogc(free_op1);
  14538. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14539. }
  14540. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14541. {
  14542. USE_OPLINE
  14543. zend_free_op free_op1;
  14544. zval *op1, *op2, *result;
  14545. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14546. op2 = EX_VAR(opline->op2.var);
  14547. do {
  14548. int result;
  14549. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  14550. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  14551. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  14552. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  14553. result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
  14554. } else {
  14555. break;
  14556. }
  14557. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  14558. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  14559. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  14560. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  14561. result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
  14562. } else {
  14563. break;
  14564. }
  14565. } else {
  14566. break;
  14567. }
  14568. ZEND_VM_SMART_BRANCH(result, 0);
  14569. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  14570. ZEND_VM_NEXT_OPCODE();
  14571. } while (0);
  14572. SAVE_OPLINE();
  14573. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  14574. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  14575. }
  14576. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  14577. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  14578. }
  14579. result = EX_VAR(opline->result.var);
  14580. compare_function(result, op1, op2);
  14581. ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
  14582. zval_ptr_dtor_nogc(free_op1);
  14583. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14584. }
  14585. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14586. {
  14587. USE_OPLINE
  14588. zend_free_op free_op1;
  14589. zval *op1, *op2;
  14590. SAVE_OPLINE();
  14591. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14592. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  14593. compare_function(EX_VAR(opline->result.var), op1, op2);
  14594. zval_ptr_dtor_nogc(free_op1);
  14595. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14596. }
  14597. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14598. {
  14599. USE_OPLINE
  14600. zend_free_op free_op1;
  14601. zval *container, *dim, *value, *result;
  14602. SAVE_OPLINE();
  14603. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14604. dim = EX_VAR(opline->op2.var);
  14605. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  14606. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  14607. fetch_dim_r_array:
  14608. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
  14609. result = EX_VAR(opline->result.var);
  14610. ZVAL_COPY_DEREF(result, value);
  14611. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  14612. container = Z_REFVAL_P(container);
  14613. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  14614. goto fetch_dim_r_array;
  14615. } else {
  14616. goto fetch_dim_r_slow;
  14617. }
  14618. } else {
  14619. fetch_dim_r_slow:
  14620. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  14621. dim++;
  14622. }
  14623. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  14624. }
  14625. } else {
  14626. zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
  14627. }
  14628. zval_ptr_dtor_nogc(free_op1);
  14629. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14630. }
  14631. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14632. {
  14633. USE_OPLINE
  14634. zend_free_op free_op1;
  14635. zval *container;
  14636. SAVE_OPLINE();
  14637. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14638. zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  14639. zval_ptr_dtor_nogc(free_op1);
  14640. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14641. }
  14642. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14643. {
  14644. USE_OPLINE
  14645. zend_free_op free_op1;
  14646. zval *container;
  14647. zval *offset;
  14648. void **cache_slot = NULL;
  14649. SAVE_OPLINE();
  14650. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14651. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  14652. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  14653. }
  14654. offset = EX_VAR(opline->op2.var);
  14655. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  14656. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  14657. do {
  14658. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  14659. container = Z_REFVAL_P(container);
  14660. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  14661. break;
  14662. }
  14663. }
  14664. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  14665. GET_OP1_UNDEF_CV(container, BP_VAR_R);
  14666. }
  14667. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  14668. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  14669. }
  14670. goto fetch_obj_r_no_object;
  14671. } while (0);
  14672. }
  14673. /* here we are sure we are dealing with an object */
  14674. do {
  14675. zend_object *zobj = Z_OBJ_P(container);
  14676. zval *retval;
  14677. if (IS_CV == IS_CONST) {
  14678. cache_slot = CACHE_ADDR(opline->extended_value);
  14679. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  14680. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  14681. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  14682. retval = OBJ_PROP(zobj, prop_offset);
  14683. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  14684. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  14685. break;
  14686. }
  14687. } else if (EXPECTED(zobj->properties != NULL)) {
  14688. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  14689. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  14690. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  14691. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  14692. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  14693. (EXPECTED(p->key == Z_STR_P(offset)) ||
  14694. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  14695. EXPECTED(p->key != NULL) &&
  14696. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  14697. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
  14698. break;
  14699. }
  14700. }
  14701. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  14702. }
  14703. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  14704. if (EXPECTED(retval)) {
  14705. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  14706. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  14707. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  14708. break;
  14709. }
  14710. }
  14711. }
  14712. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
  14713. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  14714. }
  14715. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  14716. fetch_obj_r_no_object:
  14717. zend_wrong_property_read(offset);
  14718. ZVAL_NULL(EX_VAR(opline->result.var));
  14719. } else {
  14720. retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  14721. if (retval != EX_VAR(opline->result.var)) {
  14722. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  14723. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  14724. zend_unwrap_reference(retval);
  14725. }
  14726. }
  14727. } while (0);
  14728. zval_ptr_dtor_nogc(free_op1);
  14729. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14730. }
  14731. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14732. {
  14733. USE_OPLINE
  14734. zend_free_op free_op1;
  14735. zval *container;
  14736. zval *offset;
  14737. void **cache_slot = NULL;
  14738. SAVE_OPLINE();
  14739. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14740. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  14741. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  14742. }
  14743. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  14744. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  14745. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  14746. do {
  14747. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  14748. container = Z_REFVAL_P(container);
  14749. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  14750. break;
  14751. }
  14752. }
  14753. goto fetch_obj_is_no_object;
  14754. } while (0);
  14755. }
  14756. /* here we are sure we are dealing with an object */
  14757. do {
  14758. zend_object *zobj = Z_OBJ_P(container);
  14759. zval *retval;
  14760. if (IS_CV == IS_CONST) {
  14761. cache_slot = CACHE_ADDR(opline->extended_value);
  14762. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  14763. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  14764. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  14765. retval = OBJ_PROP(zobj, prop_offset);
  14766. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  14767. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  14768. break;
  14769. }
  14770. } else if (EXPECTED(zobj->properties != NULL)) {
  14771. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  14772. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  14773. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  14774. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  14775. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  14776. (EXPECTED(p->key == Z_STR_P(offset)) ||
  14777. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  14778. EXPECTED(p->key != NULL) &&
  14779. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  14780. ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
  14781. break;
  14782. }
  14783. }
  14784. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  14785. }
  14786. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  14787. if (EXPECTED(retval)) {
  14788. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  14789. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  14790. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  14791. break;
  14792. }
  14793. }
  14794. }
  14795. }
  14796. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  14797. fetch_obj_is_no_object:
  14798. ZVAL_NULL(EX_VAR(opline->result.var));
  14799. } else {
  14800. retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  14801. if (retval != EX_VAR(opline->result.var)) {
  14802. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  14803. }
  14804. }
  14805. } while (0);
  14806. zval_ptr_dtor_nogc(free_op1);
  14807. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14808. }
  14809. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14810. {
  14811. USE_OPLINE
  14812. zend_free_op free_op1;
  14813. zval *op1, *op2;
  14814. zend_string *op1_str, *op2_str, *str;
  14815. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14816. op2 = EX_VAR(opline->op2.var);
  14817. if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  14818. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  14819. zend_string *op1_str = Z_STR_P(op1);
  14820. zend_string *op2_str = Z_STR_P(op2);
  14821. zend_string *str;
  14822. if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  14823. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  14824. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  14825. } else {
  14826. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  14827. }
  14828. zval_ptr_dtor_nogc(free_op1);
  14829. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  14830. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  14831. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  14832. } else {
  14833. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  14834. }
  14835. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
  14836. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  14837. size_t len = ZSTR_LEN(op1_str);
  14838. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  14839. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  14840. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  14841. } else {
  14842. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  14843. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  14844. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  14845. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  14846. zval_ptr_dtor_nogc(free_op1);
  14847. }
  14848. ZEND_VM_NEXT_OPCODE();
  14849. }
  14850. SAVE_OPLINE();
  14851. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14852. op1_str = Z_STR_P(op1);
  14853. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  14854. op1_str = zend_string_copy(Z_STR_P(op1));
  14855. } else {
  14856. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  14857. GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  14858. }
  14859. op1_str = zval_get_string_func(op1);
  14860. }
  14861. if (IS_CV == IS_CONST) {
  14862. op2_str = Z_STR_P(op2);
  14863. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  14864. op2_str = zend_string_copy(Z_STR_P(op2));
  14865. } else {
  14866. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  14867. GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  14868. }
  14869. op2_str = zval_get_string_func(op2);
  14870. }
  14871. do {
  14872. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  14873. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  14874. if (IS_CV == IS_CONST) {
  14875. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  14876. GC_ADDREF(op2_str);
  14877. }
  14878. }
  14879. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  14880. zend_string_release_ex(op1_str, 0);
  14881. break;
  14882. }
  14883. }
  14884. if (IS_CV != IS_CONST) {
  14885. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  14886. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  14887. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  14888. GC_ADDREF(op1_str);
  14889. }
  14890. }
  14891. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  14892. zend_string_release_ex(op2_str, 0);
  14893. break;
  14894. }
  14895. }
  14896. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  14897. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  14898. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  14899. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  14900. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  14901. zend_string_release_ex(op1_str, 0);
  14902. }
  14903. if (IS_CV != IS_CONST) {
  14904. zend_string_release_ex(op2_str, 0);
  14905. }
  14906. } while (0);
  14907. zval_ptr_dtor_nogc(free_op1);
  14908. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  14909. }
  14910. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  14911. {
  14912. USE_OPLINE
  14913. zval *function_name;
  14914. zend_free_op free_op1;
  14915. zval *object;
  14916. zend_function *fbc;
  14917. zend_class_entry *called_scope;
  14918. zend_object *obj;
  14919. zend_execute_data *call;
  14920. uint32_t call_info;
  14921. SAVE_OPLINE();
  14922. object = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  14923. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  14924. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  14925. }
  14926. if (IS_CV != IS_CONST) {
  14927. function_name = EX_VAR(opline->op2.var);
  14928. }
  14929. if (IS_CV != IS_CONST &&
  14930. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  14931. do {
  14932. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  14933. function_name = Z_REFVAL_P(function_name);
  14934. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  14935. break;
  14936. }
  14937. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  14938. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  14939. if (UNEXPECTED(EG(exception) != NULL)) {
  14940. zval_ptr_dtor_nogc(free_op1);
  14941. HANDLE_EXCEPTION();
  14942. }
  14943. }
  14944. zend_throw_error(NULL, "Method name must be a string");
  14945. zval_ptr_dtor_nogc(free_op1);
  14946. HANDLE_EXCEPTION();
  14947. } while (0);
  14948. }
  14949. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  14950. do {
  14951. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  14952. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  14953. object = Z_REFVAL_P(object);
  14954. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  14955. break;
  14956. }
  14957. }
  14958. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  14959. object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
  14960. if (UNEXPECTED(EG(exception) != NULL)) {
  14961. if (IS_CV != IS_CONST) {
  14962. }
  14963. HANDLE_EXCEPTION();
  14964. }
  14965. }
  14966. if (IS_CV == IS_CONST) {
  14967. function_name = EX_VAR(opline->op2.var);
  14968. }
  14969. zend_invalid_method_call(object, function_name);
  14970. zval_ptr_dtor_nogc(free_op1);
  14971. HANDLE_EXCEPTION();
  14972. }
  14973. } while (0);
  14974. }
  14975. obj = Z_OBJ_P(object);
  14976. called_scope = obj->ce;
  14977. if (IS_CV == IS_CONST &&
  14978. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  14979. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  14980. } else {
  14981. zend_object *orig_obj = obj;
  14982. if (UNEXPECTED(obj->handlers->get_method == NULL)) {
  14983. zend_throw_error(NULL, "Object does not support method calls");
  14984. zval_ptr_dtor_nogc(free_op1);
  14985. HANDLE_EXCEPTION();
  14986. }
  14987. if (IS_CV == IS_CONST) {
  14988. function_name = EX_VAR(opline->op2.var);
  14989. }
  14990. /* First, locate the function. */
  14991. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  14992. if (UNEXPECTED(fbc == NULL)) {
  14993. if (EXPECTED(!EG(exception))) {
  14994. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  14995. }
  14996. zval_ptr_dtor_nogc(free_op1);
  14997. HANDLE_EXCEPTION();
  14998. }
  14999. if (IS_CV == IS_CONST &&
  15000. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  15001. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  15002. EXPECTED(obj == orig_obj)) {
  15003. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  15004. }
  15005. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  15006. /* Reset "object" to trigger reference counting */
  15007. object = NULL;
  15008. }
  15009. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  15010. init_func_run_time_cache(&fbc->op_array);
  15011. }
  15012. }
  15013. if (IS_CV != IS_CONST) {
  15014. }
  15015. call_info = ZEND_CALL_NESTED_FUNCTION;
  15016. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  15017. obj = NULL;
  15018. zval_ptr_dtor_nogc(free_op1);
  15019. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
  15020. HANDLE_EXCEPTION();
  15021. }
  15022. } else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  15023. /* CV may be changed indirectly (e.g. when it's a reference) */
  15024. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
  15025. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  15026. GC_ADDREF(obj); /* For $this pointer */
  15027. } else if (free_op1 != object) {
  15028. GC_ADDREF(obj); /* For $this pointer */
  15029. zval_ptr_dtor_nogc(free_op1);
  15030. }
  15031. }
  15032. call = zend_vm_stack_push_call_frame(call_info,
  15033. fbc, opline->extended_value, called_scope, obj);
  15034. call->prev_execute_data = EX(call);
  15035. EX(call) = call;
  15036. ZEND_VM_NEXT_OPCODE();
  15037. }
  15038. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15039. {
  15040. USE_OPLINE
  15041. zend_free_op free_op1;
  15042. zval *op1, *op2, *result;
  15043. op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15044. op2 = EX_VAR(opline->op2.var);
  15045. do {
  15046. int result;
  15047. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  15048. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  15049. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  15050. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  15051. result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
  15052. } else {
  15053. break;
  15054. }
  15055. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  15056. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  15057. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  15058. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  15059. result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
  15060. } else {
  15061. break;
  15062. }
  15063. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  15064. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  15065. result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  15066. } else {
  15067. break;
  15068. }
  15069. } else {
  15070. break;
  15071. }
  15072. ZEND_VM_SMART_BRANCH(result, 0);
  15073. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  15074. ZEND_VM_NEXT_OPCODE();
  15075. } while (0);
  15076. SAVE_OPLINE();
  15077. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  15078. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  15079. }
  15080. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  15081. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  15082. }
  15083. result = EX_VAR(opline->result.var);
  15084. compare_function(result, op1, op2);
  15085. ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
  15086. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15087. }
  15088. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15089. {
  15090. USE_OPLINE
  15091. zend_free_op free_op1;
  15092. zval *container;
  15093. int result;
  15094. zend_ulong hval;
  15095. zval *offset;
  15096. SAVE_OPLINE();
  15097. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15098. offset = EX_VAR(opline->op2.var);
  15099. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  15100. HashTable *ht;
  15101. zval *value;
  15102. zend_string *str;
  15103. isset_dim_obj_array:
  15104. ht = Z_ARRVAL_P(container);
  15105. isset_again:
  15106. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  15107. str = Z_STR_P(offset);
  15108. if (IS_CV != IS_CONST) {
  15109. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  15110. goto num_index_prop;
  15111. }
  15112. }
  15113. value = zend_hash_find_ex_ind(ht, str, IS_CV == IS_CONST);
  15114. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  15115. hval = Z_LVAL_P(offset);
  15116. num_index_prop:
  15117. value = zend_hash_index_find(ht, hval);
  15118. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  15119. offset = Z_REFVAL_P(offset);
  15120. goto isset_again;
  15121. } else {
  15122. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  15123. }
  15124. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  15125. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  15126. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  15127. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  15128. } else {
  15129. result = (value == NULL || !i_zend_is_true(value));
  15130. }
  15131. goto isset_dim_obj_exit;
  15132. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  15133. container = Z_REFVAL_P(container);
  15134. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  15135. goto isset_dim_obj_array;
  15136. }
  15137. }
  15138. if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  15139. offset++;
  15140. }
  15141. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  15142. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  15143. } else {
  15144. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  15145. }
  15146. isset_dim_obj_exit:
  15147. zval_ptr_dtor_nogc(free_op1);
  15148. ZEND_VM_SMART_BRANCH(result, 1);
  15149. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  15150. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15151. }
  15152. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15153. {
  15154. USE_OPLINE
  15155. zend_free_op free_op1;
  15156. zval *container;
  15157. int result;
  15158. zval *offset;
  15159. SAVE_OPLINE();
  15160. container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15161. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  15162. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  15163. }
  15164. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  15165. if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
  15166. ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  15167. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  15168. container = Z_REFVAL_P(container);
  15169. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  15170. goto isset_no_object;
  15171. }
  15172. } else {
  15173. goto isset_no_object;
  15174. }
  15175. }
  15176. if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
  15177. zend_wrong_property_check(offset);
  15178. isset_no_object:
  15179. result = (opline->extended_value & ZEND_ISEMPTY);
  15180. } else {
  15181. result =
  15182. (opline->extended_value & ZEND_ISEMPTY) ^
  15183. Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  15184. }
  15185. zval_ptr_dtor_nogc(free_op1);
  15186. ZEND_VM_SMART_BRANCH(result, 1);
  15187. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  15188. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15189. }
  15190. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15191. {
  15192. USE_OPLINE
  15193. zval *retval_ptr;
  15194. zval *return_value;
  15195. zend_free_op free_op1;
  15196. retval_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15197. return_value = EX(return_value);
  15198. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  15199. SAVE_OPLINE();
  15200. retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R);
  15201. if (return_value) {
  15202. ZVAL_NULL(return_value);
  15203. }
  15204. } else if (!return_value) {
  15205. if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
  15206. if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
  15207. SAVE_OPLINE();
  15208. rc_dtor_func(Z_COUNTED_P(free_op1));
  15209. }
  15210. }
  15211. } else {
  15212. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  15213. ZVAL_COPY_VALUE(return_value, retval_ptr);
  15214. if (IS_TMP_VAR == IS_CONST) {
  15215. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  15216. Z_ADDREF_P(return_value);
  15217. }
  15218. }
  15219. } else if (IS_TMP_VAR == IS_CV) {
  15220. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  15221. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  15222. ZVAL_COPY_VALUE(return_value, retval_ptr);
  15223. if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
  15224. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  15225. if (GC_MAY_LEAK(ref)) {
  15226. gc_possible_root(ref);
  15227. }
  15228. ZVAL_NULL(retval_ptr);
  15229. } else {
  15230. Z_ADDREF_P(return_value);
  15231. }
  15232. } else {
  15233. retval_ptr = Z_REFVAL_P(retval_ptr);
  15234. ZVAL_COPY(return_value, retval_ptr);
  15235. }
  15236. } else {
  15237. ZVAL_COPY_VALUE(return_value, retval_ptr);
  15238. }
  15239. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  15240. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  15241. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  15242. retval_ptr = Z_REFVAL_P(retval_ptr);
  15243. ZVAL_COPY_VALUE(return_value, retval_ptr);
  15244. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  15245. efree_size(ref, sizeof(zend_reference));
  15246. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  15247. Z_ADDREF_P(retval_ptr);
  15248. }
  15249. } else {
  15250. ZVAL_COPY_VALUE(return_value, retval_ptr);
  15251. }
  15252. }
  15253. }
  15254. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  15255. }
  15256. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15257. {
  15258. USE_OPLINE
  15259. zval *retval_ptr;
  15260. zend_free_op free_op1;
  15261. SAVE_OPLINE();
  15262. do {
  15263. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) ||
  15264. (IS_TMP_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
  15265. /* Not supposed to happen, but we'll allow it */
  15266. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  15267. retval_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15268. if (!EX(return_value)) {
  15269. zval_ptr_dtor_nogc(free_op1);
  15270. } else {
  15271. if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  15272. ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
  15273. break;
  15274. }
  15275. ZVAL_NEW_REF(EX(return_value), retval_ptr);
  15276. if (IS_TMP_VAR == IS_CONST) {
  15277. Z_TRY_ADDREF_P(retval_ptr);
  15278. }
  15279. }
  15280. break;
  15281. }
  15282. retval_ptr = NULL;
  15283. if (IS_TMP_VAR == IS_VAR) {
  15284. if (retval_ptr == &EG(uninitialized_zval) ||
  15285. (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr))) {
  15286. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  15287. if (EX(return_value)) {
  15288. ZVAL_NEW_REF(EX(return_value), retval_ptr);
  15289. } else {
  15290. }
  15291. break;
  15292. }
  15293. }
  15294. if (EX(return_value)) {
  15295. if (Z_ISREF_P(retval_ptr)) {
  15296. Z_ADDREF_P(retval_ptr);
  15297. } else {
  15298. ZVAL_MAKE_REF_EX(retval_ptr, 2);
  15299. }
  15300. ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
  15301. }
  15302. } while (0);
  15303. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  15304. }
  15305. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15306. {
  15307. USE_OPLINE
  15308. zval *retval;
  15309. zend_free_op free_op1;
  15310. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  15311. SAVE_OPLINE();
  15312. retval = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15313. /* Copy return value into generator->retval */
  15314. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  15315. ZVAL_COPY_VALUE(&generator->retval, retval);
  15316. if (IS_TMP_VAR == IS_CONST) {
  15317. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
  15318. Z_ADDREF(generator->retval);
  15319. }
  15320. }
  15321. } else if (IS_TMP_VAR == IS_CV) {
  15322. ZVAL_COPY_DEREF(&generator->retval, retval);
  15323. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  15324. if (UNEXPECTED(Z_ISREF_P(retval))) {
  15325. zend_refcounted *ref = Z_COUNTED_P(retval);
  15326. retval = Z_REFVAL_P(retval);
  15327. ZVAL_COPY_VALUE(&generator->retval, retval);
  15328. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  15329. efree_size(ref, sizeof(zend_reference));
  15330. } else if (Z_OPT_REFCOUNTED_P(retval)) {
  15331. Z_ADDREF_P(retval);
  15332. }
  15333. } else {
  15334. ZVAL_COPY_VALUE(&generator->retval, retval);
  15335. }
  15336. }
  15337. /* Close the generator to free up resources */
  15338. zend_generator_close(generator, 1);
  15339. /* Pass execution back to handling code */
  15340. ZEND_VM_RETURN();
  15341. }
  15342. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15343. {
  15344. USE_OPLINE
  15345. zval *value;
  15346. zend_free_op free_op1;
  15347. SAVE_OPLINE();
  15348. value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15349. do {
  15350. if (IS_TMP_VAR == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
  15351. if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  15352. value = Z_REFVAL_P(value);
  15353. if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
  15354. break;
  15355. }
  15356. }
  15357. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  15358. GET_OP1_UNDEF_CV(value, BP_VAR_R);
  15359. if (UNEXPECTED(EG(exception) != NULL)) {
  15360. HANDLE_EXCEPTION();
  15361. }
  15362. }
  15363. zend_throw_error(NULL, "Can only throw objects");
  15364. zval_ptr_dtor_nogc(free_op1);
  15365. HANDLE_EXCEPTION();
  15366. }
  15367. } while (0);
  15368. zend_exception_save();
  15369. if (IS_TMP_VAR != IS_TMP_VAR) {
  15370. Z_TRY_ADDREF_P(value);
  15371. }
  15372. zend_throw_exception_object(value);
  15373. zend_exception_restore();
  15374. HANDLE_EXCEPTION();
  15375. }
  15376. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15377. {
  15378. USE_OPLINE
  15379. zval *value, *arg;
  15380. zend_free_op free_op1;
  15381. uint32_t arg_num = opline->op2.num;
  15382. if (EXPECTED(0)) {
  15383. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  15384. goto send_val_by_ref;
  15385. }
  15386. } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  15387. send_val_by_ref:
  15388. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  15389. }
  15390. value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15391. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  15392. ZVAL_COPY_VALUE(arg, value);
  15393. if (IS_TMP_VAR == IS_CONST) {
  15394. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  15395. Z_ADDREF_P(arg);
  15396. }
  15397. }
  15398. ZEND_VM_NEXT_OPCODE();
  15399. }
  15400. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15401. {
  15402. USE_OPLINE
  15403. zval *value, *arg;
  15404. zend_free_op free_op1;
  15405. uint32_t arg_num = opline->op2.num;
  15406. if (EXPECTED(1)) {
  15407. if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  15408. goto send_val_by_ref;
  15409. }
  15410. } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  15411. send_val_by_ref:
  15412. ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  15413. }
  15414. value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15415. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  15416. ZVAL_COPY_VALUE(arg, value);
  15417. if (IS_TMP_VAR == IS_CONST) {
  15418. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
  15419. Z_ADDREF_P(arg);
  15420. }
  15421. }
  15422. ZEND_VM_NEXT_OPCODE();
  15423. }
  15424. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15425. {
  15426. USE_OPLINE
  15427. zval *arg, *param;
  15428. zend_free_op free_op1;
  15429. SAVE_OPLINE();
  15430. arg = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15431. param = ZEND_CALL_VAR(EX(call), opline->result.var);
  15432. if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
  15433. zend_param_must_be_ref(EX(call)->func, opline->op2.num);
  15434. }
  15435. ZVAL_COPY(param, arg);
  15436. zval_ptr_dtor_nogc(free_op1);
  15437. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15438. }
  15439. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15440. {
  15441. USE_OPLINE
  15442. zend_free_op free_op1;
  15443. zval *expr;
  15444. zval *result = EX_VAR(opline->result.var);
  15445. HashTable *ht;
  15446. SAVE_OPLINE();
  15447. expr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15448. switch (opline->extended_value) {
  15449. case IS_NULL:
  15450. ZVAL_NULL(result);
  15451. break;
  15452. case _IS_BOOL:
  15453. ZVAL_BOOL(result, zend_is_true(expr));
  15454. break;
  15455. case IS_LONG:
  15456. ZVAL_LONG(result, zval_get_long(expr));
  15457. break;
  15458. case IS_DOUBLE:
  15459. ZVAL_DOUBLE(result, zval_get_double(expr));
  15460. break;
  15461. case IS_STRING:
  15462. ZVAL_STR(result, zval_get_string(expr));
  15463. break;
  15464. default:
  15465. if (IS_TMP_VAR & (IS_VAR|IS_CV)) {
  15466. ZVAL_DEREF(expr);
  15467. }
  15468. /* If value is already of correct type, return it directly */
  15469. if (Z_TYPE_P(expr) == opline->extended_value) {
  15470. ZVAL_COPY_VALUE(result, expr);
  15471. if (IS_TMP_VAR == IS_CONST) {
  15472. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  15473. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  15474. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  15475. }
  15476. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15477. }
  15478. if (opline->extended_value == IS_ARRAY) {
  15479. if (IS_TMP_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
  15480. if (Z_TYPE_P(expr) != IS_NULL) {
  15481. ZVAL_ARR(result, zend_new_array(1));
  15482. expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
  15483. if (IS_TMP_VAR == IS_CONST) {
  15484. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  15485. } else {
  15486. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  15487. }
  15488. } else {
  15489. ZVAL_EMPTY_ARRAY(result);
  15490. }
  15491. } else if (Z_OBJ_HT_P(expr)->get_properties) {
  15492. HashTable *obj_ht = Z_OBJ_HT_P(expr)->get_properties(expr);
  15493. if (obj_ht) {
  15494. /* fast copy */
  15495. obj_ht = zend_proptable_to_symtable(obj_ht,
  15496. (Z_OBJCE_P(expr)->default_properties_count ||
  15497. Z_OBJ_P(expr)->handlers != &std_object_handlers ||
  15498. GC_IS_RECURSIVE(obj_ht)));
  15499. ZVAL_ARR(result, obj_ht);
  15500. } else {
  15501. ZVAL_EMPTY_ARRAY(result);
  15502. }
  15503. } else {
  15504. ZVAL_COPY_VALUE(result, expr);
  15505. Z_ADDREF_P(result);
  15506. convert_to_array(result);
  15507. }
  15508. } else {
  15509. ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
  15510. if (Z_TYPE_P(expr) == IS_ARRAY) {
  15511. ht = zend_symtable_to_proptable(Z_ARR_P(expr));
  15512. if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
  15513. /* TODO: try not to duplicate immutable arrays as well ??? */
  15514. ht = zend_array_dup(ht);
  15515. }
  15516. Z_OBJ_P(result)->properties = ht;
  15517. } else if (Z_TYPE_P(expr) != IS_NULL) {
  15518. Z_OBJ_P(result)->properties = ht = zend_new_array(1);
  15519. expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
  15520. if (IS_TMP_VAR == IS_CONST) {
  15521. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  15522. } else {
  15523. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  15524. }
  15525. }
  15526. }
  15527. }
  15528. zval_ptr_dtor_nogc(free_op1);
  15529. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15530. }
  15531. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15532. {
  15533. USE_OPLINE
  15534. zend_free_op free_op1;
  15535. zval *array_ptr, *result;
  15536. SAVE_OPLINE();
  15537. array_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15538. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  15539. result = EX_VAR(opline->result.var);
  15540. ZVAL_COPY_VALUE(result, array_ptr);
  15541. if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
  15542. Z_ADDREF_P(array_ptr);
  15543. }
  15544. Z_FE_POS_P(result) = 0;
  15545. ZEND_VM_NEXT_OPCODE();
  15546. } else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  15547. if (!Z_OBJCE_P(array_ptr)->get_iterator) {
  15548. result = EX_VAR(opline->result.var);
  15549. ZVAL_COPY_VALUE(result, array_ptr);
  15550. if (IS_TMP_VAR != IS_TMP_VAR) {
  15551. Z_ADDREF_P(array_ptr);
  15552. }
  15553. if (Z_OBJ_P(array_ptr)->properties
  15554. && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
  15555. if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
  15556. GC_DELREF(Z_OBJ_P(array_ptr)->properties);
  15557. }
  15558. Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
  15559. }
  15560. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
  15561. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15562. } else {
  15563. zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
  15564. zval_ptr_dtor_nogc(free_op1);
  15565. if (UNEXPECTED(EG(exception))) {
  15566. HANDLE_EXCEPTION();
  15567. } else if (is_empty) {
  15568. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  15569. } else {
  15570. ZEND_VM_NEXT_OPCODE();
  15571. }
  15572. }
  15573. } else {
  15574. zend_error(E_WARNING, "Invalid argument supplied for foreach()");
  15575. ZVAL_UNDEF(EX_VAR(opline->result.var));
  15576. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  15577. zval_ptr_dtor_nogc(free_op1);
  15578. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  15579. }
  15580. }
  15581. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15582. {
  15583. USE_OPLINE
  15584. zend_free_op free_op1;
  15585. zval *array_ptr, *array_ref;
  15586. SAVE_OPLINE();
  15587. if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
  15588. array_ref = array_ptr = NULL;
  15589. if (Z_ISREF_P(array_ref)) {
  15590. array_ptr = Z_REFVAL_P(array_ref);
  15591. }
  15592. } else {
  15593. array_ref = array_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15594. }
  15595. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  15596. if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
  15597. if (array_ptr == array_ref) {
  15598. ZVAL_NEW_REF(array_ref, array_ref);
  15599. array_ptr = Z_REFVAL_P(array_ref);
  15600. }
  15601. Z_ADDREF_P(array_ref);
  15602. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  15603. } else {
  15604. array_ref = EX_VAR(opline->result.var);
  15605. ZVAL_NEW_REF(array_ref, array_ptr);
  15606. array_ptr = Z_REFVAL_P(array_ref);
  15607. }
  15608. if (IS_TMP_VAR == IS_CONST) {
  15609. ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
  15610. } else {
  15611. SEPARATE_ARRAY(array_ptr);
  15612. }
  15613. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
  15614. if (IS_TMP_VAR == IS_VAR) {
  15615. }
  15616. ZEND_VM_NEXT_OPCODE();
  15617. } else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  15618. if (!Z_OBJCE_P(array_ptr)->get_iterator) {
  15619. if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
  15620. if (array_ptr == array_ref) {
  15621. ZVAL_NEW_REF(array_ref, array_ref);
  15622. array_ptr = Z_REFVAL_P(array_ref);
  15623. }
  15624. Z_ADDREF_P(array_ref);
  15625. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  15626. } else {
  15627. array_ptr = EX_VAR(opline->result.var);
  15628. ZVAL_COPY_VALUE(array_ptr, array_ref);
  15629. }
  15630. if (Z_OBJ_P(array_ptr)->properties
  15631. && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
  15632. if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
  15633. GC_DELREF(Z_OBJ_P(array_ptr)->properties);
  15634. }
  15635. Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
  15636. }
  15637. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
  15638. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15639. } else {
  15640. zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
  15641. if (IS_TMP_VAR == IS_VAR) {
  15642. } else {
  15643. zval_ptr_dtor_nogc(free_op1);
  15644. }
  15645. if (UNEXPECTED(EG(exception))) {
  15646. HANDLE_EXCEPTION();
  15647. } else if (is_empty) {
  15648. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  15649. } else {
  15650. ZEND_VM_NEXT_OPCODE();
  15651. }
  15652. }
  15653. } else {
  15654. zend_error(E_WARNING, "Invalid argument supplied for foreach()");
  15655. ZVAL_UNDEF(EX_VAR(opline->result.var));
  15656. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  15657. if (IS_TMP_VAR == IS_VAR) {
  15658. } else {
  15659. zval_ptr_dtor_nogc(free_op1);
  15660. }
  15661. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  15662. }
  15663. }
  15664. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15665. {
  15666. USE_OPLINE
  15667. if (!EG(error_reporting) && Z_LVAL_P(EX_VAR(opline->op1.var)) != 0) {
  15668. EG(error_reporting) = Z_LVAL_P(EX_VAR(opline->op1.var));
  15669. }
  15670. ZEND_VM_NEXT_OPCODE();
  15671. }
  15672. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15673. {
  15674. USE_OPLINE
  15675. zend_free_op free_op1;
  15676. zval *value;
  15677. zval *ref = NULL;
  15678. int ret;
  15679. SAVE_OPLINE();
  15680. value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15681. if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
  15682. if (IS_TMP_VAR == IS_VAR) {
  15683. ref = value;
  15684. }
  15685. value = Z_REFVAL_P(value);
  15686. }
  15687. ret = i_zend_is_true(value);
  15688. if (UNEXPECTED(EG(exception))) {
  15689. zval_ptr_dtor_nogc(free_op1);
  15690. ZVAL_UNDEF(EX_VAR(opline->result.var));
  15691. HANDLE_EXCEPTION();
  15692. }
  15693. if (ret) {
  15694. zval *result = EX_VAR(opline->result.var);
  15695. ZVAL_COPY_VALUE(result, value);
  15696. if (IS_TMP_VAR == IS_CONST) {
  15697. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  15698. } else if (IS_TMP_VAR == IS_CV) {
  15699. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  15700. } else if (IS_TMP_VAR == IS_VAR && ref) {
  15701. zend_reference *r = Z_REF_P(ref);
  15702. if (UNEXPECTED(GC_DELREF(r) == 0)) {
  15703. efree_size(r, sizeof(zend_reference));
  15704. } else if (Z_OPT_REFCOUNTED_P(result)) {
  15705. Z_ADDREF_P(result);
  15706. }
  15707. }
  15708. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  15709. }
  15710. zval_ptr_dtor_nogc(free_op1);
  15711. ZEND_VM_NEXT_OPCODE();
  15712. }
  15713. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15714. {
  15715. USE_OPLINE
  15716. zend_free_op free_op1;
  15717. zval *value;
  15718. zval *result = EX_VAR(opline->result.var);
  15719. value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15720. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  15721. SAVE_OPLINE();
  15722. GET_OP1_UNDEF_CV(value, BP_VAR_R);
  15723. ZVAL_NULL(result);
  15724. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15725. }
  15726. if (IS_TMP_VAR == IS_CV) {
  15727. ZVAL_COPY_DEREF(result, value);
  15728. } else if (IS_TMP_VAR == IS_VAR) {
  15729. if (UNEXPECTED(Z_ISREF_P(value))) {
  15730. ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
  15731. if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
  15732. efree_size(Z_REF_P(value), sizeof(zend_reference));
  15733. } else if (Z_OPT_REFCOUNTED_P(result)) {
  15734. Z_ADDREF_P(result);
  15735. }
  15736. } else {
  15737. ZVAL_COPY_VALUE(result, value);
  15738. }
  15739. } else {
  15740. ZVAL_COPY_VALUE(result, value);
  15741. if (IS_TMP_VAR == IS_CONST) {
  15742. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
  15743. Z_ADDREF_P(result);
  15744. }
  15745. }
  15746. }
  15747. ZEND_VM_NEXT_OPCODE();
  15748. }
  15749. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15750. {
  15751. USE_OPLINE
  15752. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  15753. zval *val;
  15754. zend_free_op free_op1;
  15755. SAVE_OPLINE();
  15756. val = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15757. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  15758. zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
  15759. zval_ptr_dtor_nogc(free_op1);
  15760. UNDEF_RESULT();
  15761. HANDLE_EXCEPTION();
  15762. }
  15763. if (Z_TYPE_P(val) == IS_ARRAY) {
  15764. ZVAL_COPY_VALUE(&generator->values, val);
  15765. if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
  15766. Z_ADDREF_P(val);
  15767. }
  15768. Z_FE_POS(generator->values) = 0;
  15769. } else if (IS_TMP_VAR != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
  15770. zend_class_entry *ce = Z_OBJCE_P(val);
  15771. if (ce == zend_ce_generator) {
  15772. zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
  15773. if (IS_TMP_VAR != IS_TMP_VAR) {
  15774. Z_ADDREF_P(val);
  15775. }
  15776. if (Z_ISUNDEF(new_gen->retval)) {
  15777. if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
  15778. zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
  15779. zval_ptr_dtor(val);
  15780. UNDEF_RESULT();
  15781. HANDLE_EXCEPTION();
  15782. } else {
  15783. zend_generator_yield_from(generator, new_gen);
  15784. }
  15785. } else if (UNEXPECTED(new_gen->execute_data == NULL)) {
  15786. zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
  15787. zval_ptr_dtor(val);
  15788. UNDEF_RESULT();
  15789. HANDLE_EXCEPTION();
  15790. } else {
  15791. if (RETURN_VALUE_USED(opline)) {
  15792. ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
  15793. }
  15794. ZEND_VM_NEXT_OPCODE();
  15795. }
  15796. } else {
  15797. zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
  15798. zval_ptr_dtor_nogc(free_op1);
  15799. if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
  15800. if (!EG(exception)) {
  15801. zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
  15802. }
  15803. UNDEF_RESULT();
  15804. HANDLE_EXCEPTION();
  15805. }
  15806. iter->index = 0;
  15807. if (iter->funcs->rewind) {
  15808. iter->funcs->rewind(iter);
  15809. if (UNEXPECTED(EG(exception) != NULL)) {
  15810. OBJ_RELEASE(&iter->std);
  15811. UNDEF_RESULT();
  15812. HANDLE_EXCEPTION();
  15813. }
  15814. }
  15815. ZVAL_OBJ(&generator->values, &iter->std);
  15816. }
  15817. } else {
  15818. zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
  15819. zval_ptr_dtor_nogc(free_op1);
  15820. UNDEF_RESULT();
  15821. HANDLE_EXCEPTION();
  15822. }
  15823. /* This is the default return value
  15824. * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
  15825. if (RETURN_VALUE_USED(opline)) {
  15826. ZVAL_NULL(EX_VAR(opline->result.var));
  15827. }
  15828. /* This generator has no send target (though the generator we delegate to might have one) */
  15829. generator->send_target = NULL;
  15830. /* We increment to the next op, so we are at the correct position when the
  15831. * generator is resumed. */
  15832. ZEND_VM_INC_OPCODE();
  15833. /* The GOTO VM uses a local opline variable. We need to set the opline
  15834. * variable in execute_data so we don't resume at an old position. */
  15835. SAVE_OPLINE();
  15836. ZEND_VM_RETURN();
  15837. }
  15838. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15839. {
  15840. USE_OPLINE
  15841. zend_free_op free_op1;
  15842. zval *op1, *op2;
  15843. int result;
  15844. SAVE_OPLINE();
  15845. op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15846. op2 = RT_CONSTANT(opline, opline->op2);
  15847. result = fast_is_identical_function(op1, op2);
  15848. zval_ptr_dtor_nogc(free_op1);
  15849. ZEND_VM_SMART_BRANCH(result, 1);
  15850. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  15851. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15852. }
  15853. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15854. {
  15855. USE_OPLINE
  15856. zend_free_op free_op1;
  15857. zval *op1, *op2;
  15858. int result;
  15859. SAVE_OPLINE();
  15860. op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15861. op2 = RT_CONSTANT(opline, opline->op2);
  15862. result = fast_is_not_identical_function(op1, op2);
  15863. zval_ptr_dtor_nogc(free_op1);
  15864. ZEND_VM_SMART_BRANCH(result, 1);
  15865. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  15866. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15867. }
  15868. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15869. {
  15870. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  15871. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  15872. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  15873. }
  15874. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  15875. } else {
  15876. if (IS_CONST == IS_UNUSED) {
  15877. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  15878. }
  15879. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  15880. }
  15881. }
  15882. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15883. {
  15884. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  15885. /* Behave like FETCH_OBJ_W */
  15886. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  15887. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  15888. }
  15889. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  15890. } else {
  15891. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  15892. }
  15893. }
  15894. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15895. {
  15896. USE_OPLINE
  15897. zend_string **rope;
  15898. zval *var;
  15899. /* op1 and result are the same */
  15900. rope = (zend_string**)EX_VAR(opline->op1.var);
  15901. if (IS_CONST == IS_CONST) {
  15902. var = RT_CONSTANT(opline, opline->op2);
  15903. rope[opline->extended_value] = Z_STR_P(var);
  15904. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  15905. Z_ADDREF_P(var);
  15906. }
  15907. } else {
  15908. var = RT_CONSTANT(opline, opline->op2);
  15909. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  15910. if (IS_CONST == IS_CV) {
  15911. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  15912. } else {
  15913. rope[opline->extended_value] = Z_STR_P(var);
  15914. }
  15915. } else {
  15916. SAVE_OPLINE();
  15917. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  15918. GET_OP2_UNDEF_CV(var, BP_VAR_R);
  15919. }
  15920. rope[opline->extended_value] = zval_get_string_func(var);
  15921. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  15922. }
  15923. }
  15924. ZEND_VM_NEXT_OPCODE();
  15925. }
  15926. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15927. {
  15928. USE_OPLINE
  15929. zend_string **rope;
  15930. zval *var, *ret;
  15931. uint32_t i;
  15932. size_t len = 0;
  15933. char *target;
  15934. rope = (zend_string**)EX_VAR(opline->op1.var);
  15935. if (IS_CONST == IS_CONST) {
  15936. var = RT_CONSTANT(opline, opline->op2);
  15937. rope[opline->extended_value] = Z_STR_P(var);
  15938. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  15939. Z_ADDREF_P(var);
  15940. }
  15941. } else {
  15942. var = RT_CONSTANT(opline, opline->op2);
  15943. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  15944. if (IS_CONST == IS_CV) {
  15945. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  15946. } else {
  15947. rope[opline->extended_value] = Z_STR_P(var);
  15948. }
  15949. } else {
  15950. SAVE_OPLINE();
  15951. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  15952. GET_OP2_UNDEF_CV(var, BP_VAR_R);
  15953. }
  15954. rope[opline->extended_value] = zval_get_string_func(var);
  15955. if (UNEXPECTED(EG(exception))) {
  15956. for (i = 0; i <= opline->extended_value; i++) {
  15957. zend_string_release_ex(rope[i], 0);
  15958. }
  15959. ZVAL_UNDEF(EX_VAR(opline->result.var));
  15960. HANDLE_EXCEPTION();
  15961. }
  15962. }
  15963. }
  15964. for (i = 0; i <= opline->extended_value; i++) {
  15965. len += ZSTR_LEN(rope[i]);
  15966. }
  15967. ret = EX_VAR(opline->result.var);
  15968. ZVAL_STR(ret, zend_string_alloc(len, 0));
  15969. target = Z_STRVAL_P(ret);
  15970. for (i = 0; i <= opline->extended_value; i++) {
  15971. memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
  15972. target += ZSTR_LEN(rope[i]);
  15973. zend_string_release_ex(rope[i], 0);
  15974. }
  15975. *target = '\0';
  15976. ZEND_VM_NEXT_OPCODE();
  15977. }
  15978. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  15979. {
  15980. USE_OPLINE
  15981. zend_free_op free_op1;
  15982. zval *expr_ptr, new_expr;
  15983. SAVE_OPLINE();
  15984. if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
  15985. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  15986. expr_ptr = NULL;
  15987. if (Z_ISREF_P(expr_ptr)) {
  15988. Z_ADDREF_P(expr_ptr);
  15989. } else {
  15990. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  15991. }
  15992. } else {
  15993. expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  15994. if (IS_TMP_VAR == IS_TMP_VAR) {
  15995. /* pass */
  15996. } else if (IS_TMP_VAR == IS_CONST) {
  15997. Z_TRY_ADDREF_P(expr_ptr);
  15998. } else if (IS_TMP_VAR == IS_CV) {
  15999. ZVAL_DEREF(expr_ptr);
  16000. Z_TRY_ADDREF_P(expr_ptr);
  16001. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  16002. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  16003. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  16004. expr_ptr = Z_REFVAL_P(expr_ptr);
  16005. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  16006. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  16007. expr_ptr = &new_expr;
  16008. efree_size(ref, sizeof(zend_reference));
  16009. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  16010. Z_ADDREF_P(expr_ptr);
  16011. }
  16012. }
  16013. }
  16014. }
  16015. if (IS_CONST != IS_UNUSED) {
  16016. zval *offset = RT_CONSTANT(opline, opline->op2);
  16017. zend_string *str;
  16018. zend_ulong hval;
  16019. add_again:
  16020. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  16021. str = Z_STR_P(offset);
  16022. if (IS_CONST != IS_CONST) {
  16023. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  16024. goto num_index;
  16025. }
  16026. }
  16027. str_index:
  16028. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  16029. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  16030. hval = Z_LVAL_P(offset);
  16031. num_index:
  16032. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  16033. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  16034. offset = Z_REFVAL_P(offset);
  16035. goto add_again;
  16036. } else if (Z_TYPE_P(offset) == IS_NULL) {
  16037. str = ZSTR_EMPTY_ALLOC();
  16038. goto str_index;
  16039. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  16040. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  16041. goto num_index;
  16042. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  16043. hval = 0;
  16044. goto num_index;
  16045. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  16046. hval = 1;
  16047. goto num_index;
  16048. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  16049. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  16050. str = ZSTR_EMPTY_ALLOC();
  16051. goto str_index;
  16052. } else {
  16053. zend_illegal_offset();
  16054. zval_ptr_dtor_nogc(expr_ptr);
  16055. }
  16056. } else {
  16057. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  16058. zend_cannot_add_element();
  16059. zval_ptr_dtor_nogc(expr_ptr);
  16060. }
  16061. }
  16062. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16063. }
  16064. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16065. {
  16066. zval *array;
  16067. uint32_t size;
  16068. USE_OPLINE
  16069. array = EX_VAR(opline->result.var);
  16070. if (IS_TMP_VAR != IS_UNUSED) {
  16071. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  16072. ZVAL_ARR(array, zend_new_array(size));
  16073. /* Explicitly initialize array as not-packed if flag is set */
  16074. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  16075. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  16076. }
  16077. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16078. } else {
  16079. ZVAL_EMPTY_ARRAY(array);
  16080. ZEND_VM_NEXT_OPCODE();
  16081. }
  16082. }
  16083. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16084. {
  16085. USE_OPLINE
  16086. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  16087. SAVE_OPLINE();
  16088. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  16089. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16090. }
  16091. /* Destroy the previously yielded value */
  16092. zval_ptr_dtor(&generator->value);
  16093. /* Destroy the previously yielded key */
  16094. zval_ptr_dtor(&generator->key);
  16095. /* Set the new yielded value */
  16096. if (IS_TMP_VAR != IS_UNUSED) {
  16097. zend_free_op free_op1;
  16098. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  16099. /* Constants and temporary variables aren't yieldable by reference,
  16100. * but we still allow them with a notice. */
  16101. if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
  16102. zval *value;
  16103. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  16104. value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  16105. ZVAL_COPY_VALUE(&generator->value, value);
  16106. if (IS_TMP_VAR == IS_CONST) {
  16107. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  16108. Z_ADDREF(generator->value);
  16109. }
  16110. }
  16111. } else {
  16112. zval *value_ptr = NULL;
  16113. /* If a function call result is yielded and the function did
  16114. * not return by reference we throw a notice. */
  16115. if (IS_TMP_VAR == IS_VAR &&
  16116. (value_ptr == &EG(uninitialized_zval) ||
  16117. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  16118. !Z_ISREF_P(value_ptr)))) {
  16119. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  16120. ZVAL_COPY(&generator->value, value_ptr);
  16121. } else {
  16122. if (Z_ISREF_P(value_ptr)) {
  16123. Z_ADDREF_P(value_ptr);
  16124. } else {
  16125. ZVAL_MAKE_REF_EX(value_ptr, 2);
  16126. }
  16127. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  16128. }
  16129. }
  16130. } else {
  16131. zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  16132. /* Consts, temporary variables and references need copying */
  16133. if (IS_TMP_VAR == IS_CONST) {
  16134. ZVAL_COPY_VALUE(&generator->value, value);
  16135. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  16136. Z_ADDREF(generator->value);
  16137. }
  16138. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  16139. ZVAL_COPY_VALUE(&generator->value, value);
  16140. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  16141. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  16142. } else {
  16143. ZVAL_COPY_VALUE(&generator->value, value);
  16144. if (IS_TMP_VAR == IS_CV) {
  16145. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  16146. }
  16147. }
  16148. }
  16149. } else {
  16150. /* If no value was specified yield null */
  16151. ZVAL_NULL(&generator->value);
  16152. }
  16153. /* Set the new yielded key */
  16154. if (IS_CONST != IS_UNUSED) {
  16155. zval *key = RT_CONSTANT(opline, opline->op2);
  16156. /* Consts, temporary variables and references need copying */
  16157. if (IS_CONST == IS_CONST) {
  16158. ZVAL_COPY_VALUE(&generator->key, key);
  16159. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  16160. Z_ADDREF(generator->key);
  16161. }
  16162. } else if (IS_CONST == IS_TMP_VAR) {
  16163. ZVAL_COPY_VALUE(&generator->key, key);
  16164. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  16165. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  16166. } else {
  16167. ZVAL_COPY_VALUE(&generator->key, key);
  16168. if (IS_CONST == IS_CV) {
  16169. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  16170. }
  16171. }
  16172. if (Z_TYPE(generator->key) == IS_LONG
  16173. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  16174. ) {
  16175. generator->largest_used_integer_key = Z_LVAL(generator->key);
  16176. }
  16177. } else {
  16178. /* If no key was specified we use auto-increment keys */
  16179. generator->largest_used_integer_key++;
  16180. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  16181. }
  16182. if (RETURN_VALUE_USED(opline)) {
  16183. /* If the return value of yield is used set the send
  16184. * target and initialize it to NULL */
  16185. generator->send_target = EX_VAR(opline->result.var);
  16186. ZVAL_NULL(generator->send_target);
  16187. } else {
  16188. generator->send_target = NULL;
  16189. }
  16190. /* We increment to the next op, so we are at the correct position when the
  16191. * generator is resumed. */
  16192. ZEND_VM_INC_OPCODE();
  16193. /* The GOTO VM uses a local opline variable. We need to set the opline
  16194. * variable in execute_data so we don't resume at an old position. */
  16195. SAVE_OPLINE();
  16196. ZEND_VM_RETURN();
  16197. }
  16198. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16199. {
  16200. USE_OPLINE
  16201. zend_free_op free_op1;
  16202. zval *op1;
  16203. HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  16204. int result;
  16205. SAVE_OPLINE();
  16206. op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  16207. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  16208. result = zend_hash_exists(ht, Z_STR_P(op1));
  16209. } else if (opline->extended_value) {
  16210. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  16211. result = zend_hash_index_exists(ht, Z_LVAL_P(op1));
  16212. } else {
  16213. result = 0;
  16214. }
  16215. } else if (Z_TYPE_P(op1) <= IS_FALSE) {
  16216. result = zend_hash_exists(ht, ZSTR_EMPTY_ALLOC());
  16217. } else {
  16218. zend_string *key;
  16219. zval key_tmp, result_tmp;
  16220. result = 0;
  16221. ZEND_HASH_FOREACH_STR_KEY(ht, key) {
  16222. ZVAL_STR(&key_tmp, key);
  16223. compare_function(&result_tmp, op1, &key_tmp);
  16224. if (Z_LVAL(result_tmp) == 0) {
  16225. result = 1;
  16226. break;
  16227. }
  16228. } ZEND_HASH_FOREACH_END();
  16229. }
  16230. zval_ptr_dtor_nogc(free_op1);
  16231. ZEND_VM_SMART_BRANCH(result, 1);
  16232. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  16233. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16234. }
  16235. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16236. {
  16237. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  16238. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  16239. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16240. }
  16241. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16242. } else {
  16243. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  16244. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16245. }
  16246. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16247. }
  16248. }
  16249. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16250. {
  16251. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  16252. /* Behave like FETCH_OBJ_W */
  16253. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  16254. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16255. }
  16256. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16257. } else {
  16258. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16259. }
  16260. }
  16261. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16262. {
  16263. USE_OPLINE
  16264. zend_free_op free_op2;
  16265. zend_string **rope;
  16266. zval *var;
  16267. /* op1 and result are the same */
  16268. rope = (zend_string**)EX_VAR(opline->op1.var);
  16269. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  16270. var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  16271. rope[opline->extended_value] = Z_STR_P(var);
  16272. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  16273. Z_ADDREF_P(var);
  16274. }
  16275. } else {
  16276. var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  16277. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  16278. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  16279. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  16280. } else {
  16281. rope[opline->extended_value] = Z_STR_P(var);
  16282. }
  16283. } else {
  16284. SAVE_OPLINE();
  16285. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  16286. GET_OP2_UNDEF_CV(var, BP_VAR_R);
  16287. }
  16288. rope[opline->extended_value] = zval_get_string_func(var);
  16289. zval_ptr_dtor_nogc(free_op2);
  16290. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16291. }
  16292. }
  16293. ZEND_VM_NEXT_OPCODE();
  16294. }
  16295. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16296. {
  16297. USE_OPLINE
  16298. zend_free_op free_op2;
  16299. zend_string **rope;
  16300. zval *var, *ret;
  16301. uint32_t i;
  16302. size_t len = 0;
  16303. char *target;
  16304. rope = (zend_string**)EX_VAR(opline->op1.var);
  16305. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  16306. var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  16307. rope[opline->extended_value] = Z_STR_P(var);
  16308. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  16309. Z_ADDREF_P(var);
  16310. }
  16311. } else {
  16312. var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  16313. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  16314. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  16315. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  16316. } else {
  16317. rope[opline->extended_value] = Z_STR_P(var);
  16318. }
  16319. } else {
  16320. SAVE_OPLINE();
  16321. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  16322. GET_OP2_UNDEF_CV(var, BP_VAR_R);
  16323. }
  16324. rope[opline->extended_value] = zval_get_string_func(var);
  16325. zval_ptr_dtor_nogc(free_op2);
  16326. if (UNEXPECTED(EG(exception))) {
  16327. for (i = 0; i <= opline->extended_value; i++) {
  16328. zend_string_release_ex(rope[i], 0);
  16329. }
  16330. ZVAL_UNDEF(EX_VAR(opline->result.var));
  16331. HANDLE_EXCEPTION();
  16332. }
  16333. }
  16334. }
  16335. for (i = 0; i <= opline->extended_value; i++) {
  16336. len += ZSTR_LEN(rope[i]);
  16337. }
  16338. ret = EX_VAR(opline->result.var);
  16339. ZVAL_STR(ret, zend_string_alloc(len, 0));
  16340. target = Z_STRVAL_P(ret);
  16341. for (i = 0; i <= opline->extended_value; i++) {
  16342. memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
  16343. target += ZSTR_LEN(rope[i]);
  16344. zend_string_release_ex(rope[i], 0);
  16345. }
  16346. *target = '\0';
  16347. ZEND_VM_NEXT_OPCODE();
  16348. }
  16349. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16350. {
  16351. USE_OPLINE
  16352. zend_free_op free_op1;
  16353. zval *expr_ptr, new_expr;
  16354. SAVE_OPLINE();
  16355. if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
  16356. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  16357. expr_ptr = NULL;
  16358. if (Z_ISREF_P(expr_ptr)) {
  16359. Z_ADDREF_P(expr_ptr);
  16360. } else {
  16361. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  16362. }
  16363. } else {
  16364. expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  16365. if (IS_TMP_VAR == IS_TMP_VAR) {
  16366. /* pass */
  16367. } else if (IS_TMP_VAR == IS_CONST) {
  16368. Z_TRY_ADDREF_P(expr_ptr);
  16369. } else if (IS_TMP_VAR == IS_CV) {
  16370. ZVAL_DEREF(expr_ptr);
  16371. Z_TRY_ADDREF_P(expr_ptr);
  16372. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  16373. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  16374. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  16375. expr_ptr = Z_REFVAL_P(expr_ptr);
  16376. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  16377. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  16378. expr_ptr = &new_expr;
  16379. efree_size(ref, sizeof(zend_reference));
  16380. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  16381. Z_ADDREF_P(expr_ptr);
  16382. }
  16383. }
  16384. }
  16385. }
  16386. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  16387. zend_free_op free_op2;
  16388. zval *offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  16389. zend_string *str;
  16390. zend_ulong hval;
  16391. add_again:
  16392. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  16393. str = Z_STR_P(offset);
  16394. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  16395. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  16396. goto num_index;
  16397. }
  16398. }
  16399. str_index:
  16400. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  16401. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  16402. hval = Z_LVAL_P(offset);
  16403. num_index:
  16404. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  16405. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  16406. offset = Z_REFVAL_P(offset);
  16407. goto add_again;
  16408. } else if (Z_TYPE_P(offset) == IS_NULL) {
  16409. str = ZSTR_EMPTY_ALLOC();
  16410. goto str_index;
  16411. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  16412. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  16413. goto num_index;
  16414. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  16415. hval = 0;
  16416. goto num_index;
  16417. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  16418. hval = 1;
  16419. goto num_index;
  16420. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  16421. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  16422. str = ZSTR_EMPTY_ALLOC();
  16423. goto str_index;
  16424. } else {
  16425. zend_illegal_offset();
  16426. zval_ptr_dtor_nogc(expr_ptr);
  16427. }
  16428. zval_ptr_dtor_nogc(free_op2);
  16429. } else {
  16430. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  16431. zend_cannot_add_element();
  16432. zval_ptr_dtor_nogc(expr_ptr);
  16433. }
  16434. }
  16435. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16436. }
  16437. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16438. {
  16439. zval *array;
  16440. uint32_t size;
  16441. USE_OPLINE
  16442. array = EX_VAR(opline->result.var);
  16443. if (IS_TMP_VAR != IS_UNUSED) {
  16444. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  16445. ZVAL_ARR(array, zend_new_array(size));
  16446. /* Explicitly initialize array as not-packed if flag is set */
  16447. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  16448. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  16449. }
  16450. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16451. } else {
  16452. ZVAL_EMPTY_ARRAY(array);
  16453. ZEND_VM_NEXT_OPCODE();
  16454. }
  16455. }
  16456. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16457. {
  16458. USE_OPLINE
  16459. zend_free_op free_op1, free_op2;
  16460. zval *op1, *op2;
  16461. int result;
  16462. SAVE_OPLINE();
  16463. op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  16464. op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  16465. result = fast_is_identical_function(op1, op2);
  16466. zval_ptr_dtor_nogc(free_op1);
  16467. zval_ptr_dtor_nogc(free_op2);
  16468. ZEND_VM_SMART_BRANCH(result, 1);
  16469. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  16470. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16471. }
  16472. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16473. {
  16474. USE_OPLINE
  16475. zend_free_op free_op1, free_op2;
  16476. zval *op1, *op2;
  16477. int result;
  16478. SAVE_OPLINE();
  16479. op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  16480. op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  16481. result = fast_is_not_identical_function(op1, op2);
  16482. zval_ptr_dtor_nogc(free_op1);
  16483. zval_ptr_dtor_nogc(free_op2);
  16484. ZEND_VM_SMART_BRANCH(result, 1);
  16485. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  16486. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16487. }
  16488. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16489. {
  16490. USE_OPLINE
  16491. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  16492. SAVE_OPLINE();
  16493. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  16494. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16495. }
  16496. /* Destroy the previously yielded value */
  16497. zval_ptr_dtor(&generator->value);
  16498. /* Destroy the previously yielded key */
  16499. zval_ptr_dtor(&generator->key);
  16500. /* Set the new yielded value */
  16501. if (IS_TMP_VAR != IS_UNUSED) {
  16502. zend_free_op free_op1;
  16503. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  16504. /* Constants and temporary variables aren't yieldable by reference,
  16505. * but we still allow them with a notice. */
  16506. if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
  16507. zval *value;
  16508. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  16509. value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  16510. ZVAL_COPY_VALUE(&generator->value, value);
  16511. if (IS_TMP_VAR == IS_CONST) {
  16512. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  16513. Z_ADDREF(generator->value);
  16514. }
  16515. }
  16516. } else {
  16517. zval *value_ptr = NULL;
  16518. /* If a function call result is yielded and the function did
  16519. * not return by reference we throw a notice. */
  16520. if (IS_TMP_VAR == IS_VAR &&
  16521. (value_ptr == &EG(uninitialized_zval) ||
  16522. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  16523. !Z_ISREF_P(value_ptr)))) {
  16524. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  16525. ZVAL_COPY(&generator->value, value_ptr);
  16526. } else {
  16527. if (Z_ISREF_P(value_ptr)) {
  16528. Z_ADDREF_P(value_ptr);
  16529. } else {
  16530. ZVAL_MAKE_REF_EX(value_ptr, 2);
  16531. }
  16532. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  16533. }
  16534. }
  16535. } else {
  16536. zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  16537. /* Consts, temporary variables and references need copying */
  16538. if (IS_TMP_VAR == IS_CONST) {
  16539. ZVAL_COPY_VALUE(&generator->value, value);
  16540. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  16541. Z_ADDREF(generator->value);
  16542. }
  16543. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  16544. ZVAL_COPY_VALUE(&generator->value, value);
  16545. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  16546. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  16547. } else {
  16548. ZVAL_COPY_VALUE(&generator->value, value);
  16549. if (IS_TMP_VAR == IS_CV) {
  16550. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  16551. }
  16552. }
  16553. }
  16554. } else {
  16555. /* If no value was specified yield null */
  16556. ZVAL_NULL(&generator->value);
  16557. }
  16558. /* Set the new yielded key */
  16559. if (IS_TMP_VAR != IS_UNUSED) {
  16560. zend_free_op free_op2;
  16561. zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  16562. /* Consts, temporary variables and references need copying */
  16563. if (IS_TMP_VAR == IS_CONST) {
  16564. ZVAL_COPY_VALUE(&generator->key, key);
  16565. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  16566. Z_ADDREF(generator->key);
  16567. }
  16568. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  16569. ZVAL_COPY_VALUE(&generator->key, key);
  16570. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  16571. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  16572. } else {
  16573. ZVAL_COPY_VALUE(&generator->key, key);
  16574. if (IS_TMP_VAR == IS_CV) {
  16575. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  16576. }
  16577. }
  16578. if (Z_TYPE(generator->key) == IS_LONG
  16579. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  16580. ) {
  16581. generator->largest_used_integer_key = Z_LVAL(generator->key);
  16582. }
  16583. } else {
  16584. /* If no key was specified we use auto-increment keys */
  16585. generator->largest_used_integer_key++;
  16586. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  16587. }
  16588. if (RETURN_VALUE_USED(opline)) {
  16589. /* If the return value of yield is used set the send
  16590. * target and initialize it to NULL */
  16591. generator->send_target = EX_VAR(opline->result.var);
  16592. ZVAL_NULL(generator->send_target);
  16593. } else {
  16594. generator->send_target = NULL;
  16595. }
  16596. /* We increment to the next op, so we are at the correct position when the
  16597. * generator is resumed. */
  16598. ZEND_VM_INC_OPCODE();
  16599. /* The GOTO VM uses a local opline variable. We need to set the opline
  16600. * variable in execute_data so we don't resume at an old position. */
  16601. SAVE_OPLINE();
  16602. ZEND_VM_RETURN();
  16603. }
  16604. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16605. {
  16606. USE_OPLINE
  16607. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  16608. SAVE_OPLINE();
  16609. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  16610. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16611. }
  16612. /* Destroy the previously yielded value */
  16613. zval_ptr_dtor(&generator->value);
  16614. /* Destroy the previously yielded key */
  16615. zval_ptr_dtor(&generator->key);
  16616. /* Set the new yielded value */
  16617. if (IS_TMP_VAR != IS_UNUSED) {
  16618. zend_free_op free_op1;
  16619. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  16620. /* Constants and temporary variables aren't yieldable by reference,
  16621. * but we still allow them with a notice. */
  16622. if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
  16623. zval *value;
  16624. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  16625. value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  16626. ZVAL_COPY_VALUE(&generator->value, value);
  16627. if (IS_TMP_VAR == IS_CONST) {
  16628. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  16629. Z_ADDREF(generator->value);
  16630. }
  16631. }
  16632. } else {
  16633. zval *value_ptr = NULL;
  16634. /* If a function call result is yielded and the function did
  16635. * not return by reference we throw a notice. */
  16636. if (IS_TMP_VAR == IS_VAR &&
  16637. (value_ptr == &EG(uninitialized_zval) ||
  16638. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  16639. !Z_ISREF_P(value_ptr)))) {
  16640. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  16641. ZVAL_COPY(&generator->value, value_ptr);
  16642. } else {
  16643. if (Z_ISREF_P(value_ptr)) {
  16644. Z_ADDREF_P(value_ptr);
  16645. } else {
  16646. ZVAL_MAKE_REF_EX(value_ptr, 2);
  16647. }
  16648. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  16649. }
  16650. }
  16651. } else {
  16652. zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  16653. /* Consts, temporary variables and references need copying */
  16654. if (IS_TMP_VAR == IS_CONST) {
  16655. ZVAL_COPY_VALUE(&generator->value, value);
  16656. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  16657. Z_ADDREF(generator->value);
  16658. }
  16659. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  16660. ZVAL_COPY_VALUE(&generator->value, value);
  16661. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  16662. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  16663. } else {
  16664. ZVAL_COPY_VALUE(&generator->value, value);
  16665. if (IS_TMP_VAR == IS_CV) {
  16666. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  16667. }
  16668. }
  16669. }
  16670. } else {
  16671. /* If no value was specified yield null */
  16672. ZVAL_NULL(&generator->value);
  16673. }
  16674. /* Set the new yielded key */
  16675. if (IS_VAR != IS_UNUSED) {
  16676. zend_free_op free_op2;
  16677. zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  16678. /* Consts, temporary variables and references need copying */
  16679. if (IS_VAR == IS_CONST) {
  16680. ZVAL_COPY_VALUE(&generator->key, key);
  16681. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  16682. Z_ADDREF(generator->key);
  16683. }
  16684. } else if (IS_VAR == IS_TMP_VAR) {
  16685. ZVAL_COPY_VALUE(&generator->key, key);
  16686. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  16687. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  16688. zval_ptr_dtor_nogc(free_op2);
  16689. } else {
  16690. ZVAL_COPY_VALUE(&generator->key, key);
  16691. if (IS_VAR == IS_CV) {
  16692. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  16693. }
  16694. }
  16695. if (Z_TYPE(generator->key) == IS_LONG
  16696. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  16697. ) {
  16698. generator->largest_used_integer_key = Z_LVAL(generator->key);
  16699. }
  16700. } else {
  16701. /* If no key was specified we use auto-increment keys */
  16702. generator->largest_used_integer_key++;
  16703. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  16704. }
  16705. if (RETURN_VALUE_USED(opline)) {
  16706. /* If the return value of yield is used set the send
  16707. * target and initialize it to NULL */
  16708. generator->send_target = EX_VAR(opline->result.var);
  16709. ZVAL_NULL(generator->send_target);
  16710. } else {
  16711. generator->send_target = NULL;
  16712. }
  16713. /* We increment to the next op, so we are at the correct position when the
  16714. * generator is resumed. */
  16715. ZEND_VM_INC_OPCODE();
  16716. /* The GOTO VM uses a local opline variable. We need to set the opline
  16717. * variable in execute_data so we don't resume at an old position. */
  16718. SAVE_OPLINE();
  16719. ZEND_VM_RETURN();
  16720. }
  16721. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16722. {
  16723. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  16724. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  16725. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16726. }
  16727. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16728. } else {
  16729. if (IS_UNUSED == IS_UNUSED) {
  16730. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16731. }
  16732. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16733. }
  16734. }
  16735. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16736. {
  16737. USE_OPLINE
  16738. SAVE_OPLINE();
  16739. if (IS_TMP_VAR == IS_UNUSED) {
  16740. zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
  16741. } else {
  16742. /* prevents "undefined variable opline" errors */
  16743. #if 0 || (IS_TMP_VAR != IS_UNUSED)
  16744. zval *retval_ref, *retval_ptr;
  16745. zend_free_op free_op1;
  16746. zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
  16747. retval_ref = retval_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  16748. if (IS_TMP_VAR == IS_CONST) {
  16749. ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
  16750. retval_ref = retval_ptr = EX_VAR(opline->result.var);
  16751. } else if (IS_TMP_VAR == IS_VAR) {
  16752. if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
  16753. retval_ptr = Z_INDIRECT_P(retval_ptr);
  16754. }
  16755. ZVAL_DEREF(retval_ptr);
  16756. } else if (IS_TMP_VAR == IS_CV) {
  16757. ZVAL_DEREF(retval_ptr);
  16758. }
  16759. if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type)
  16760. && ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE
  16761. && ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE
  16762. && !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr))
  16763. && !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  16764. && retval_ref != retval_ptr)
  16765. ) {
  16766. /* A cast might happen - unwrap the reference if this is a by-value return */
  16767. if (Z_REFCOUNT_P(retval_ref) == 1) {
  16768. ZVAL_UNREF(retval_ref);
  16769. } else {
  16770. Z_DELREF_P(retval_ref);
  16771. ZVAL_COPY(retval_ref, retval_ptr);
  16772. }
  16773. retval_ptr = retval_ref;
  16774. }
  16775. zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
  16776. #endif
  16777. }
  16778. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16779. }
  16780. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16781. {
  16782. USE_OPLINE
  16783. zend_free_op free_op1;
  16784. zval *expr_ptr, new_expr;
  16785. SAVE_OPLINE();
  16786. if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
  16787. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  16788. expr_ptr = NULL;
  16789. if (Z_ISREF_P(expr_ptr)) {
  16790. Z_ADDREF_P(expr_ptr);
  16791. } else {
  16792. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  16793. }
  16794. } else {
  16795. expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  16796. if (IS_TMP_VAR == IS_TMP_VAR) {
  16797. /* pass */
  16798. } else if (IS_TMP_VAR == IS_CONST) {
  16799. Z_TRY_ADDREF_P(expr_ptr);
  16800. } else if (IS_TMP_VAR == IS_CV) {
  16801. ZVAL_DEREF(expr_ptr);
  16802. Z_TRY_ADDREF_P(expr_ptr);
  16803. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  16804. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  16805. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  16806. expr_ptr = Z_REFVAL_P(expr_ptr);
  16807. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  16808. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  16809. expr_ptr = &new_expr;
  16810. efree_size(ref, sizeof(zend_reference));
  16811. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  16812. Z_ADDREF_P(expr_ptr);
  16813. }
  16814. }
  16815. }
  16816. }
  16817. if (IS_UNUSED != IS_UNUSED) {
  16818. zval *offset = NULL;
  16819. zend_string *str;
  16820. zend_ulong hval;
  16821. add_again:
  16822. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  16823. str = Z_STR_P(offset);
  16824. if (IS_UNUSED != IS_CONST) {
  16825. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  16826. goto num_index;
  16827. }
  16828. }
  16829. str_index:
  16830. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  16831. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  16832. hval = Z_LVAL_P(offset);
  16833. num_index:
  16834. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  16835. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  16836. offset = Z_REFVAL_P(offset);
  16837. goto add_again;
  16838. } else if (Z_TYPE_P(offset) == IS_NULL) {
  16839. str = ZSTR_EMPTY_ALLOC();
  16840. goto str_index;
  16841. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  16842. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  16843. goto num_index;
  16844. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  16845. hval = 0;
  16846. goto num_index;
  16847. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  16848. hval = 1;
  16849. goto num_index;
  16850. } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  16851. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  16852. str = ZSTR_EMPTY_ALLOC();
  16853. goto str_index;
  16854. } else {
  16855. zend_illegal_offset();
  16856. zval_ptr_dtor_nogc(expr_ptr);
  16857. }
  16858. } else {
  16859. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  16860. zend_cannot_add_element();
  16861. zval_ptr_dtor_nogc(expr_ptr);
  16862. }
  16863. }
  16864. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  16865. }
  16866. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16867. {
  16868. zval *array;
  16869. uint32_t size;
  16870. USE_OPLINE
  16871. array = EX_VAR(opline->result.var);
  16872. if (IS_TMP_VAR != IS_UNUSED) {
  16873. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  16874. ZVAL_ARR(array, zend_new_array(size));
  16875. /* Explicitly initialize array as not-packed if flag is set */
  16876. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  16877. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  16878. }
  16879. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16880. } else {
  16881. ZVAL_EMPTY_ARRAY(array);
  16882. ZEND_VM_NEXT_OPCODE();
  16883. }
  16884. }
  16885. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  16886. {
  16887. USE_OPLINE
  16888. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  16889. SAVE_OPLINE();
  16890. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  16891. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  16892. }
  16893. /* Destroy the previously yielded value */
  16894. zval_ptr_dtor(&generator->value);
  16895. /* Destroy the previously yielded key */
  16896. zval_ptr_dtor(&generator->key);
  16897. /* Set the new yielded value */
  16898. if (IS_TMP_VAR != IS_UNUSED) {
  16899. zend_free_op free_op1;
  16900. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  16901. /* Constants and temporary variables aren't yieldable by reference,
  16902. * but we still allow them with a notice. */
  16903. if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
  16904. zval *value;
  16905. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  16906. value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  16907. ZVAL_COPY_VALUE(&generator->value, value);
  16908. if (IS_TMP_VAR == IS_CONST) {
  16909. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  16910. Z_ADDREF(generator->value);
  16911. }
  16912. }
  16913. } else {
  16914. zval *value_ptr = NULL;
  16915. /* If a function call result is yielded and the function did
  16916. * not return by reference we throw a notice. */
  16917. if (IS_TMP_VAR == IS_VAR &&
  16918. (value_ptr == &EG(uninitialized_zval) ||
  16919. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  16920. !Z_ISREF_P(value_ptr)))) {
  16921. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  16922. ZVAL_COPY(&generator->value, value_ptr);
  16923. } else {
  16924. if (Z_ISREF_P(value_ptr)) {
  16925. Z_ADDREF_P(value_ptr);
  16926. } else {
  16927. ZVAL_MAKE_REF_EX(value_ptr, 2);
  16928. }
  16929. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  16930. }
  16931. }
  16932. } else {
  16933. zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  16934. /* Consts, temporary variables and references need copying */
  16935. if (IS_TMP_VAR == IS_CONST) {
  16936. ZVAL_COPY_VALUE(&generator->value, value);
  16937. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  16938. Z_ADDREF(generator->value);
  16939. }
  16940. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  16941. ZVAL_COPY_VALUE(&generator->value, value);
  16942. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  16943. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  16944. } else {
  16945. ZVAL_COPY_VALUE(&generator->value, value);
  16946. if (IS_TMP_VAR == IS_CV) {
  16947. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  16948. }
  16949. }
  16950. }
  16951. } else {
  16952. /* If no value was specified yield null */
  16953. ZVAL_NULL(&generator->value);
  16954. }
  16955. /* Set the new yielded key */
  16956. if (IS_UNUSED != IS_UNUSED) {
  16957. zval *key = NULL;
  16958. /* Consts, temporary variables and references need copying */
  16959. if (IS_UNUSED == IS_CONST) {
  16960. ZVAL_COPY_VALUE(&generator->key, key);
  16961. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  16962. Z_ADDREF(generator->key);
  16963. }
  16964. } else if (IS_UNUSED == IS_TMP_VAR) {
  16965. ZVAL_COPY_VALUE(&generator->key, key);
  16966. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  16967. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  16968. } else {
  16969. ZVAL_COPY_VALUE(&generator->key, key);
  16970. if (IS_UNUSED == IS_CV) {
  16971. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  16972. }
  16973. }
  16974. if (Z_TYPE(generator->key) == IS_LONG
  16975. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  16976. ) {
  16977. generator->largest_used_integer_key = Z_LVAL(generator->key);
  16978. }
  16979. } else {
  16980. /* If no key was specified we use auto-increment keys */
  16981. generator->largest_used_integer_key++;
  16982. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  16983. }
  16984. if (RETURN_VALUE_USED(opline)) {
  16985. /* If the return value of yield is used set the send
  16986. * target and initialize it to NULL */
  16987. generator->send_target = EX_VAR(opline->result.var);
  16988. ZVAL_NULL(generator->send_target);
  16989. } else {
  16990. generator->send_target = NULL;
  16991. }
  16992. /* We increment to the next op, so we are at the correct position when the
  16993. * generator is resumed. */
  16994. ZEND_VM_INC_OPCODE();
  16995. /* The GOTO VM uses a local opline variable. We need to set the opline
  16996. * variable in execute_data so we don't resume at an old position. */
  16997. SAVE_OPLINE();
  16998. ZEND_VM_RETURN();
  16999. }
  17000. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17001. {
  17002. USE_OPLINE
  17003. zend_free_op free_op1;
  17004. zval *op1;
  17005. zend_long count;
  17006. SAVE_OPLINE();
  17007. op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17008. do {
  17009. if (Z_TYPE_P(op1) == IS_ARRAY) {
  17010. count = zend_array_count(Z_ARRVAL_P(op1));
  17011. break;
  17012. } else if (Z_TYPE_P(op1) == IS_OBJECT) {
  17013. /* first, we check if the handler is defined */
  17014. if (Z_OBJ_HT_P(op1)->count_elements) {
  17015. if (SUCCESS == Z_OBJ_HT_P(op1)->count_elements(op1, &count)) {
  17016. break;
  17017. }
  17018. }
  17019. /* if not and the object implements Countable we call its count() method */
  17020. if (instanceof_function(Z_OBJCE_P(op1), zend_ce_countable)) {
  17021. zval retval;
  17022. zend_call_method_with_0_params(op1, NULL, NULL, "count", &retval);
  17023. count = zval_get_long(&retval);
  17024. zval_ptr_dtor(&retval);
  17025. break;
  17026. }
  17027. /* If There's no handler and it doesn't implement Countable then add a warning */
  17028. count = 1;
  17029. } else if (Z_TYPE_P(op1) == IS_NULL) {
  17030. count = 0;
  17031. } else {
  17032. count = 1;
  17033. }
  17034. zend_error(E_WARNING, "count(): Parameter must be an array or an object that implements Countable");
  17035. } while (0);
  17036. ZVAL_LONG(EX_VAR(opline->result.var), count);
  17037. zval_ptr_dtor_nogc(free_op1);
  17038. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17039. }
  17040. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17041. {
  17042. USE_OPLINE
  17043. if (IS_TMP_VAR == IS_UNUSED) {
  17044. if (UNEXPECTED(!EX(func)->common.scope)) {
  17045. SAVE_OPLINE();
  17046. zend_error(E_WARNING, "get_class() called without object from outside a class");
  17047. ZVAL_FALSE(EX_VAR(opline->result.var));
  17048. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17049. } else {
  17050. ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
  17051. ZEND_VM_NEXT_OPCODE();
  17052. }
  17053. } else {
  17054. zend_free_op free_op1;
  17055. zval *op1;
  17056. SAVE_OPLINE();
  17057. op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17058. if (Z_TYPE_P(op1) == IS_OBJECT) {
  17059. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
  17060. } else {
  17061. zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1)));
  17062. ZVAL_FALSE(EX_VAR(opline->result.var));
  17063. }
  17064. zval_ptr_dtor_nogc(free_op1);
  17065. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17066. }
  17067. }
  17068. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17069. {
  17070. USE_OPLINE
  17071. zend_free_op free_op1;
  17072. zval *op1;
  17073. zend_string *type;
  17074. SAVE_OPLINE();
  17075. op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17076. type = zend_zval_get_type(op1);
  17077. if (EXPECTED(type)) {
  17078. ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
  17079. } else {
  17080. ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
  17081. }
  17082. zval_ptr_dtor_nogc(free_op1);
  17083. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17084. }
  17085. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17086. {
  17087. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  17088. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  17089. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17090. }
  17091. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17092. } else {
  17093. if (IS_CV == IS_UNUSED) {
  17094. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17095. }
  17096. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17097. }
  17098. }
  17099. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17100. {
  17101. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  17102. /* Behave like FETCH_OBJ_W */
  17103. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  17104. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17105. }
  17106. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17107. } else {
  17108. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17109. }
  17110. }
  17111. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17112. {
  17113. USE_OPLINE
  17114. zend_string **rope;
  17115. zval *var;
  17116. /* op1 and result are the same */
  17117. rope = (zend_string**)EX_VAR(opline->op1.var);
  17118. if (IS_CV == IS_CONST) {
  17119. var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  17120. rope[opline->extended_value] = Z_STR_P(var);
  17121. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  17122. Z_ADDREF_P(var);
  17123. }
  17124. } else {
  17125. var = EX_VAR(opline->op2.var);
  17126. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  17127. if (IS_CV == IS_CV) {
  17128. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  17129. } else {
  17130. rope[opline->extended_value] = Z_STR_P(var);
  17131. }
  17132. } else {
  17133. SAVE_OPLINE();
  17134. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  17135. GET_OP2_UNDEF_CV(var, BP_VAR_R);
  17136. }
  17137. rope[opline->extended_value] = zval_get_string_func(var);
  17138. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17139. }
  17140. }
  17141. ZEND_VM_NEXT_OPCODE();
  17142. }
  17143. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17144. {
  17145. USE_OPLINE
  17146. zend_string **rope;
  17147. zval *var, *ret;
  17148. uint32_t i;
  17149. size_t len = 0;
  17150. char *target;
  17151. rope = (zend_string**)EX_VAR(opline->op1.var);
  17152. if (IS_CV == IS_CONST) {
  17153. var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  17154. rope[opline->extended_value] = Z_STR_P(var);
  17155. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  17156. Z_ADDREF_P(var);
  17157. }
  17158. } else {
  17159. var = EX_VAR(opline->op2.var);
  17160. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  17161. if (IS_CV == IS_CV) {
  17162. rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
  17163. } else {
  17164. rope[opline->extended_value] = Z_STR_P(var);
  17165. }
  17166. } else {
  17167. SAVE_OPLINE();
  17168. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  17169. GET_OP2_UNDEF_CV(var, BP_VAR_R);
  17170. }
  17171. rope[opline->extended_value] = zval_get_string_func(var);
  17172. if (UNEXPECTED(EG(exception))) {
  17173. for (i = 0; i <= opline->extended_value; i++) {
  17174. zend_string_release_ex(rope[i], 0);
  17175. }
  17176. ZVAL_UNDEF(EX_VAR(opline->result.var));
  17177. HANDLE_EXCEPTION();
  17178. }
  17179. }
  17180. }
  17181. for (i = 0; i <= opline->extended_value; i++) {
  17182. len += ZSTR_LEN(rope[i]);
  17183. }
  17184. ret = EX_VAR(opline->result.var);
  17185. ZVAL_STR(ret, zend_string_alloc(len, 0));
  17186. target = Z_STRVAL_P(ret);
  17187. for (i = 0; i <= opline->extended_value; i++) {
  17188. memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
  17189. target += ZSTR_LEN(rope[i]);
  17190. zend_string_release_ex(rope[i], 0);
  17191. }
  17192. *target = '\0';
  17193. ZEND_VM_NEXT_OPCODE();
  17194. }
  17195. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17196. {
  17197. USE_OPLINE
  17198. zend_free_op free_op1;
  17199. zval *expr_ptr, new_expr;
  17200. SAVE_OPLINE();
  17201. if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
  17202. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  17203. expr_ptr = NULL;
  17204. if (Z_ISREF_P(expr_ptr)) {
  17205. Z_ADDREF_P(expr_ptr);
  17206. } else {
  17207. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  17208. }
  17209. } else {
  17210. expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17211. if (IS_TMP_VAR == IS_TMP_VAR) {
  17212. /* pass */
  17213. } else if (IS_TMP_VAR == IS_CONST) {
  17214. Z_TRY_ADDREF_P(expr_ptr);
  17215. } else if (IS_TMP_VAR == IS_CV) {
  17216. ZVAL_DEREF(expr_ptr);
  17217. Z_TRY_ADDREF_P(expr_ptr);
  17218. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  17219. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  17220. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  17221. expr_ptr = Z_REFVAL_P(expr_ptr);
  17222. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  17223. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  17224. expr_ptr = &new_expr;
  17225. efree_size(ref, sizeof(zend_reference));
  17226. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  17227. Z_ADDREF_P(expr_ptr);
  17228. }
  17229. }
  17230. }
  17231. }
  17232. if (IS_CV != IS_UNUSED) {
  17233. zval *offset = EX_VAR(opline->op2.var);
  17234. zend_string *str;
  17235. zend_ulong hval;
  17236. add_again:
  17237. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  17238. str = Z_STR_P(offset);
  17239. if (IS_CV != IS_CONST) {
  17240. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  17241. goto num_index;
  17242. }
  17243. }
  17244. str_index:
  17245. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  17246. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  17247. hval = Z_LVAL_P(offset);
  17248. num_index:
  17249. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  17250. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  17251. offset = Z_REFVAL_P(offset);
  17252. goto add_again;
  17253. } else if (Z_TYPE_P(offset) == IS_NULL) {
  17254. str = ZSTR_EMPTY_ALLOC();
  17255. goto str_index;
  17256. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  17257. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  17258. goto num_index;
  17259. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  17260. hval = 0;
  17261. goto num_index;
  17262. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  17263. hval = 1;
  17264. goto num_index;
  17265. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  17266. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  17267. str = ZSTR_EMPTY_ALLOC();
  17268. goto str_index;
  17269. } else {
  17270. zend_illegal_offset();
  17271. zval_ptr_dtor_nogc(expr_ptr);
  17272. }
  17273. } else {
  17274. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  17275. zend_cannot_add_element();
  17276. zval_ptr_dtor_nogc(expr_ptr);
  17277. }
  17278. }
  17279. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17280. }
  17281. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17282. {
  17283. zval *array;
  17284. uint32_t size;
  17285. USE_OPLINE
  17286. array = EX_VAR(opline->result.var);
  17287. if (IS_TMP_VAR != IS_UNUSED) {
  17288. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  17289. ZVAL_ARR(array, zend_new_array(size));
  17290. /* Explicitly initialize array as not-packed if flag is set */
  17291. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  17292. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  17293. }
  17294. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17295. } else {
  17296. ZVAL_EMPTY_ARRAY(array);
  17297. ZEND_VM_NEXT_OPCODE();
  17298. }
  17299. }
  17300. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17301. {
  17302. USE_OPLINE
  17303. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  17304. SAVE_OPLINE();
  17305. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  17306. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17307. }
  17308. /* Destroy the previously yielded value */
  17309. zval_ptr_dtor(&generator->value);
  17310. /* Destroy the previously yielded key */
  17311. zval_ptr_dtor(&generator->key);
  17312. /* Set the new yielded value */
  17313. if (IS_TMP_VAR != IS_UNUSED) {
  17314. zend_free_op free_op1;
  17315. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  17316. /* Constants and temporary variables aren't yieldable by reference,
  17317. * but we still allow them with a notice. */
  17318. if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
  17319. zval *value;
  17320. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  17321. value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17322. ZVAL_COPY_VALUE(&generator->value, value);
  17323. if (IS_TMP_VAR == IS_CONST) {
  17324. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  17325. Z_ADDREF(generator->value);
  17326. }
  17327. }
  17328. } else {
  17329. zval *value_ptr = NULL;
  17330. /* If a function call result is yielded and the function did
  17331. * not return by reference we throw a notice. */
  17332. if (IS_TMP_VAR == IS_VAR &&
  17333. (value_ptr == &EG(uninitialized_zval) ||
  17334. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  17335. !Z_ISREF_P(value_ptr)))) {
  17336. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  17337. ZVAL_COPY(&generator->value, value_ptr);
  17338. } else {
  17339. if (Z_ISREF_P(value_ptr)) {
  17340. Z_ADDREF_P(value_ptr);
  17341. } else {
  17342. ZVAL_MAKE_REF_EX(value_ptr, 2);
  17343. }
  17344. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  17345. }
  17346. }
  17347. } else {
  17348. zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17349. /* Consts, temporary variables and references need copying */
  17350. if (IS_TMP_VAR == IS_CONST) {
  17351. ZVAL_COPY_VALUE(&generator->value, value);
  17352. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  17353. Z_ADDREF(generator->value);
  17354. }
  17355. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  17356. ZVAL_COPY_VALUE(&generator->value, value);
  17357. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  17358. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  17359. } else {
  17360. ZVAL_COPY_VALUE(&generator->value, value);
  17361. if (IS_TMP_VAR == IS_CV) {
  17362. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  17363. }
  17364. }
  17365. }
  17366. } else {
  17367. /* If no value was specified yield null */
  17368. ZVAL_NULL(&generator->value);
  17369. }
  17370. /* Set the new yielded key */
  17371. if (IS_CV != IS_UNUSED) {
  17372. zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  17373. /* Consts, temporary variables and references need copying */
  17374. if (IS_CV == IS_CONST) {
  17375. ZVAL_COPY_VALUE(&generator->key, key);
  17376. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  17377. Z_ADDREF(generator->key);
  17378. }
  17379. } else if (IS_CV == IS_TMP_VAR) {
  17380. ZVAL_COPY_VALUE(&generator->key, key);
  17381. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  17382. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  17383. } else {
  17384. ZVAL_COPY_VALUE(&generator->key, key);
  17385. if (IS_CV == IS_CV) {
  17386. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  17387. }
  17388. }
  17389. if (Z_TYPE(generator->key) == IS_LONG
  17390. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  17391. ) {
  17392. generator->largest_used_integer_key = Z_LVAL(generator->key);
  17393. }
  17394. } else {
  17395. /* If no key was specified we use auto-increment keys */
  17396. generator->largest_used_integer_key++;
  17397. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  17398. }
  17399. if (RETURN_VALUE_USED(opline)) {
  17400. /* If the return value of yield is used set the send
  17401. * target and initialize it to NULL */
  17402. generator->send_target = EX_VAR(opline->result.var);
  17403. ZVAL_NULL(generator->send_target);
  17404. } else {
  17405. generator->send_target = NULL;
  17406. }
  17407. /* We increment to the next op, so we are at the correct position when the
  17408. * generator is resumed. */
  17409. ZEND_VM_INC_OPCODE();
  17410. /* The GOTO VM uses a local opline variable. We need to set the opline
  17411. * variable in execute_data so we don't resume at an old position. */
  17412. SAVE_OPLINE();
  17413. ZEND_VM_RETURN();
  17414. }
  17415. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17416. {
  17417. USE_OPLINE
  17418. zend_free_op free_op1;
  17419. zval *closure, *var;
  17420. closure = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17421. if (opline->extended_value & ZEND_BIND_REF) {
  17422. /* By-ref binding */
  17423. var = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
  17424. if (Z_ISREF_P(var)) {
  17425. Z_ADDREF_P(var);
  17426. } else {
  17427. ZVAL_MAKE_REF_EX(var, 2);
  17428. }
  17429. } else {
  17430. var = EX_VAR(opline->op2.var);
  17431. if (UNEXPECTED(Z_ISUNDEF_P(var))) {
  17432. SAVE_OPLINE();
  17433. var = GET_OP2_UNDEF_CV(var, BP_VAR_R);
  17434. if (UNEXPECTED(EG(exception))) {
  17435. HANDLE_EXCEPTION();
  17436. }
  17437. }
  17438. ZVAL_DEREF(var);
  17439. Z_TRY_ADDREF_P(var);
  17440. }
  17441. zend_closure_bind_var_ex(closure, (opline->extended_value & ~ZEND_BIND_REF), var);
  17442. ZEND_VM_NEXT_OPCODE();
  17443. }
  17444. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17445. {
  17446. USE_OPLINE
  17447. zend_free_op free_op1;
  17448. zval *var_ptr;
  17449. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17450. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  17451. fast_long_increment_function(var_ptr);
  17452. if (UNEXPECTED(0)) {
  17453. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  17454. }
  17455. ZEND_VM_NEXT_OPCODE();
  17456. }
  17457. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  17458. if (UNEXPECTED(0)) {
  17459. ZVAL_NULL(EX_VAR(opline->result.var));
  17460. }
  17461. ZEND_VM_NEXT_OPCODE();
  17462. }
  17463. SAVE_OPLINE();
  17464. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  17465. var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
  17466. }
  17467. ZVAL_DEREF(var_ptr);
  17468. increment_function(var_ptr);
  17469. if (UNEXPECTED(0)) {
  17470. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  17471. }
  17472. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  17473. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17474. }
  17475. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17476. {
  17477. USE_OPLINE
  17478. zend_free_op free_op1;
  17479. zval *var_ptr;
  17480. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17481. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  17482. fast_long_increment_function(var_ptr);
  17483. if (UNEXPECTED(1)) {
  17484. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  17485. }
  17486. ZEND_VM_NEXT_OPCODE();
  17487. }
  17488. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  17489. if (UNEXPECTED(1)) {
  17490. ZVAL_NULL(EX_VAR(opline->result.var));
  17491. }
  17492. ZEND_VM_NEXT_OPCODE();
  17493. }
  17494. SAVE_OPLINE();
  17495. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  17496. var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
  17497. }
  17498. ZVAL_DEREF(var_ptr);
  17499. increment_function(var_ptr);
  17500. if (UNEXPECTED(1)) {
  17501. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  17502. }
  17503. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  17504. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17505. }
  17506. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17507. {
  17508. USE_OPLINE
  17509. zend_free_op free_op1;
  17510. zval *var_ptr;
  17511. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17512. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  17513. fast_long_decrement_function(var_ptr);
  17514. if (UNEXPECTED(0)) {
  17515. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  17516. }
  17517. ZEND_VM_NEXT_OPCODE();
  17518. }
  17519. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  17520. if (UNEXPECTED(0)) {
  17521. ZVAL_NULL(EX_VAR(opline->result.var));
  17522. }
  17523. ZEND_VM_NEXT_OPCODE();
  17524. }
  17525. SAVE_OPLINE();
  17526. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  17527. var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
  17528. }
  17529. ZVAL_DEREF(var_ptr);
  17530. decrement_function(var_ptr);
  17531. if (UNEXPECTED(0)) {
  17532. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  17533. }
  17534. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  17535. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17536. }
  17537. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17538. {
  17539. USE_OPLINE
  17540. zend_free_op free_op1;
  17541. zval *var_ptr;
  17542. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17543. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  17544. fast_long_decrement_function(var_ptr);
  17545. if (UNEXPECTED(1)) {
  17546. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  17547. }
  17548. ZEND_VM_NEXT_OPCODE();
  17549. }
  17550. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  17551. if (UNEXPECTED(1)) {
  17552. ZVAL_NULL(EX_VAR(opline->result.var));
  17553. }
  17554. ZEND_VM_NEXT_OPCODE();
  17555. }
  17556. SAVE_OPLINE();
  17557. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  17558. var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
  17559. }
  17560. ZVAL_DEREF(var_ptr);
  17561. decrement_function(var_ptr);
  17562. if (UNEXPECTED(1)) {
  17563. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  17564. }
  17565. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  17566. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17567. }
  17568. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17569. {
  17570. USE_OPLINE
  17571. zend_free_op free_op1;
  17572. zval *var_ptr;
  17573. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17574. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  17575. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  17576. fast_long_increment_function(var_ptr);
  17577. ZEND_VM_NEXT_OPCODE();
  17578. }
  17579. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  17580. ZVAL_NULL(EX_VAR(opline->result.var));
  17581. ZEND_VM_NEXT_OPCODE();
  17582. }
  17583. SAVE_OPLINE();
  17584. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  17585. var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
  17586. }
  17587. ZVAL_DEREF(var_ptr);
  17588. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  17589. increment_function(var_ptr);
  17590. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  17591. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17592. }
  17593. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17594. {
  17595. USE_OPLINE
  17596. zend_free_op free_op1;
  17597. zval *var_ptr;
  17598. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17599. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  17600. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  17601. fast_long_decrement_function(var_ptr);
  17602. ZEND_VM_NEXT_OPCODE();
  17603. }
  17604. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  17605. ZVAL_NULL(EX_VAR(opline->result.var));
  17606. ZEND_VM_NEXT_OPCODE();
  17607. }
  17608. SAVE_OPLINE();
  17609. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  17610. var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
  17611. }
  17612. ZVAL_DEREF(var_ptr);
  17613. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  17614. decrement_function(var_ptr);
  17615. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  17616. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17617. }
  17618. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17619. {
  17620. USE_OPLINE
  17621. zval *retval_ptr;
  17622. zval *return_value;
  17623. zend_free_op free_op1;
  17624. retval_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17625. return_value = EX(return_value);
  17626. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  17627. SAVE_OPLINE();
  17628. retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R);
  17629. if (return_value) {
  17630. ZVAL_NULL(return_value);
  17631. }
  17632. } else if (!return_value) {
  17633. if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
  17634. if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
  17635. SAVE_OPLINE();
  17636. rc_dtor_func(Z_COUNTED_P(free_op1));
  17637. }
  17638. }
  17639. } else {
  17640. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  17641. ZVAL_COPY_VALUE(return_value, retval_ptr);
  17642. if (IS_VAR == IS_CONST) {
  17643. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  17644. Z_ADDREF_P(return_value);
  17645. }
  17646. }
  17647. } else if (IS_VAR == IS_CV) {
  17648. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  17649. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  17650. ZVAL_COPY_VALUE(return_value, retval_ptr);
  17651. if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
  17652. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  17653. if (GC_MAY_LEAK(ref)) {
  17654. gc_possible_root(ref);
  17655. }
  17656. ZVAL_NULL(retval_ptr);
  17657. } else {
  17658. Z_ADDREF_P(return_value);
  17659. }
  17660. } else {
  17661. retval_ptr = Z_REFVAL_P(retval_ptr);
  17662. ZVAL_COPY(return_value, retval_ptr);
  17663. }
  17664. } else {
  17665. ZVAL_COPY_VALUE(return_value, retval_ptr);
  17666. }
  17667. } else /* if (IS_VAR == IS_VAR) */ {
  17668. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  17669. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  17670. retval_ptr = Z_REFVAL_P(retval_ptr);
  17671. ZVAL_COPY_VALUE(return_value, retval_ptr);
  17672. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  17673. efree_size(ref, sizeof(zend_reference));
  17674. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  17675. Z_ADDREF_P(retval_ptr);
  17676. }
  17677. } else {
  17678. ZVAL_COPY_VALUE(return_value, retval_ptr);
  17679. }
  17680. }
  17681. }
  17682. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17683. }
  17684. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17685. {
  17686. USE_OPLINE
  17687. zval *retval_ptr;
  17688. zend_free_op free_op1;
  17689. SAVE_OPLINE();
  17690. do {
  17691. if ((IS_VAR & (IS_CONST|IS_TMP_VAR)) ||
  17692. (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
  17693. /* Not supposed to happen, but we'll allow it */
  17694. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  17695. retval_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17696. if (!EX(return_value)) {
  17697. zval_ptr_dtor_nogc(free_op1);
  17698. } else {
  17699. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  17700. ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
  17701. break;
  17702. }
  17703. ZVAL_NEW_REF(EX(return_value), retval_ptr);
  17704. if (IS_VAR == IS_CONST) {
  17705. Z_TRY_ADDREF_P(retval_ptr);
  17706. }
  17707. }
  17708. break;
  17709. }
  17710. retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17711. if (IS_VAR == IS_VAR) {
  17712. if (retval_ptr == &EG(uninitialized_zval) ||
  17713. (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr))) {
  17714. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  17715. if (EX(return_value)) {
  17716. ZVAL_NEW_REF(EX(return_value), retval_ptr);
  17717. } else {
  17718. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  17719. }
  17720. break;
  17721. }
  17722. }
  17723. if (EX(return_value)) {
  17724. if (Z_ISREF_P(retval_ptr)) {
  17725. Z_ADDREF_P(retval_ptr);
  17726. } else {
  17727. ZVAL_MAKE_REF_EX(retval_ptr, 2);
  17728. }
  17729. ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
  17730. }
  17731. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  17732. } while (0);
  17733. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17734. }
  17735. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17736. {
  17737. USE_OPLINE
  17738. zval *retval;
  17739. zend_free_op free_op1;
  17740. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  17741. SAVE_OPLINE();
  17742. retval = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17743. /* Copy return value into generator->retval */
  17744. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  17745. ZVAL_COPY_VALUE(&generator->retval, retval);
  17746. if (IS_VAR == IS_CONST) {
  17747. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
  17748. Z_ADDREF(generator->retval);
  17749. }
  17750. }
  17751. } else if (IS_VAR == IS_CV) {
  17752. ZVAL_COPY_DEREF(&generator->retval, retval);
  17753. } else /* if (IS_VAR == IS_VAR) */ {
  17754. if (UNEXPECTED(Z_ISREF_P(retval))) {
  17755. zend_refcounted *ref = Z_COUNTED_P(retval);
  17756. retval = Z_REFVAL_P(retval);
  17757. ZVAL_COPY_VALUE(&generator->retval, retval);
  17758. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  17759. efree_size(ref, sizeof(zend_reference));
  17760. } else if (Z_OPT_REFCOUNTED_P(retval)) {
  17761. Z_ADDREF_P(retval);
  17762. }
  17763. } else {
  17764. ZVAL_COPY_VALUE(&generator->retval, retval);
  17765. }
  17766. }
  17767. /* Close the generator to free up resources */
  17768. zend_generator_close(generator, 1);
  17769. /* Pass execution back to handling code */
  17770. ZEND_VM_RETURN();
  17771. }
  17772. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17773. {
  17774. USE_OPLINE
  17775. zval *value;
  17776. zend_free_op free_op1;
  17777. SAVE_OPLINE();
  17778. value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17779. do {
  17780. if (IS_VAR == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
  17781. if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  17782. value = Z_REFVAL_P(value);
  17783. if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
  17784. break;
  17785. }
  17786. }
  17787. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  17788. GET_OP1_UNDEF_CV(value, BP_VAR_R);
  17789. if (UNEXPECTED(EG(exception) != NULL)) {
  17790. HANDLE_EXCEPTION();
  17791. }
  17792. }
  17793. zend_throw_error(NULL, "Can only throw objects");
  17794. zval_ptr_dtor_nogc(free_op1);
  17795. HANDLE_EXCEPTION();
  17796. }
  17797. } while (0);
  17798. zend_exception_save();
  17799. if (IS_VAR != IS_TMP_VAR) {
  17800. Z_TRY_ADDREF_P(value);
  17801. }
  17802. zend_throw_exception_object(value);
  17803. zend_exception_restore();
  17804. zval_ptr_dtor_nogc(free_op1);
  17805. HANDLE_EXCEPTION();
  17806. }
  17807. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17808. {
  17809. USE_OPLINE
  17810. zval *varptr, *arg;
  17811. zend_free_op free_op1;
  17812. varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17813. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  17814. SAVE_OPLINE();
  17815. GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
  17816. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  17817. ZVAL_NULL(arg);
  17818. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17819. }
  17820. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  17821. if (IS_VAR == IS_CV) {
  17822. ZVAL_COPY_DEREF(arg, varptr);
  17823. } else /* if (IS_VAR == IS_VAR) */ {
  17824. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  17825. zend_refcounted *ref = Z_COUNTED_P(varptr);
  17826. varptr = Z_REFVAL_P(varptr);
  17827. ZVAL_COPY_VALUE(arg, varptr);
  17828. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  17829. efree_size(ref, sizeof(zend_reference));
  17830. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  17831. Z_ADDREF_P(arg);
  17832. }
  17833. } else {
  17834. ZVAL_COPY_VALUE(arg, varptr);
  17835. }
  17836. }
  17837. ZEND_VM_NEXT_OPCODE();
  17838. }
  17839. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17840. {
  17841. USE_OPLINE
  17842. zend_free_op free_op1;
  17843. zval *varptr, *arg;
  17844. varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17845. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  17846. ZVAL_COPY_VALUE(arg, varptr);
  17847. if (EXPECTED(Z_ISREF_P(varptr))) {
  17848. ZEND_VM_NEXT_OPCODE();
  17849. }
  17850. SAVE_OPLINE();
  17851. zend_error(E_NOTICE, "Only variables should be passed by reference");
  17852. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17853. }
  17854. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17855. {
  17856. USE_OPLINE
  17857. zend_free_op free_op1;
  17858. zval *varptr, *arg;
  17859. uint32_t arg_num = opline->op2.num;
  17860. if (EXPECTED(0)) {
  17861. if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  17862. ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17863. }
  17864. varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17865. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  17866. ZVAL_COPY_VALUE(arg, varptr);
  17867. if (EXPECTED(Z_ISREF_P(varptr) ||
  17868. QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
  17869. ZEND_VM_NEXT_OPCODE();
  17870. }
  17871. } else {
  17872. if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  17873. ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17874. }
  17875. varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17876. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  17877. ZVAL_COPY_VALUE(arg, varptr);
  17878. if (EXPECTED(Z_ISREF_P(varptr) ||
  17879. ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
  17880. ZEND_VM_NEXT_OPCODE();
  17881. }
  17882. }
  17883. SAVE_OPLINE();
  17884. zend_error(E_NOTICE, "Only variables should be passed by reference");
  17885. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17886. }
  17887. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17888. {
  17889. USE_OPLINE
  17890. zend_free_op free_op1;
  17891. zval *varptr, *arg;
  17892. uint32_t arg_num = opline->op2.num;
  17893. if (EXPECTED(1)) {
  17894. if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  17895. ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17896. }
  17897. varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17898. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  17899. ZVAL_COPY_VALUE(arg, varptr);
  17900. if (EXPECTED(Z_ISREF_P(varptr) ||
  17901. QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
  17902. ZEND_VM_NEXT_OPCODE();
  17903. }
  17904. } else {
  17905. if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  17906. ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17907. }
  17908. varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17909. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  17910. ZVAL_COPY_VALUE(arg, varptr);
  17911. if (EXPECTED(Z_ISREF_P(varptr) ||
  17912. ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
  17913. ZEND_VM_NEXT_OPCODE();
  17914. }
  17915. }
  17916. SAVE_OPLINE();
  17917. zend_error(E_NOTICE, "Only variables should be passed by reference");
  17918. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17919. }
  17920. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17921. {
  17922. USE_OPLINE
  17923. zend_free_op free_op1;
  17924. zval *varptr, *arg;
  17925. SAVE_OPLINE();
  17926. varptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17927. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  17928. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(varptr))) {
  17929. ZVAL_NEW_EMPTY_REF(arg);
  17930. ZVAL_NULL(Z_REFVAL_P(arg));
  17931. ZEND_VM_NEXT_OPCODE();
  17932. }
  17933. if (Z_ISREF_P(varptr)) {
  17934. Z_ADDREF_P(varptr);
  17935. } else {
  17936. ZVAL_MAKE_REF_EX(varptr, 2);
  17937. }
  17938. ZVAL_REF(arg, Z_REF_P(varptr));
  17939. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  17940. ZEND_VM_NEXT_OPCODE();
  17941. }
  17942. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17943. {
  17944. USE_OPLINE
  17945. zval *varptr, *arg;
  17946. zend_free_op free_op1;
  17947. uint32_t arg_num = opline->op2.num;
  17948. if (EXPECTED(0)) {
  17949. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  17950. goto send_var_by_ref;
  17951. }
  17952. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  17953. send_var_by_ref:
  17954. ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17955. }
  17956. varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17957. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  17958. SAVE_OPLINE();
  17959. GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
  17960. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  17961. ZVAL_NULL(arg);
  17962. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  17963. }
  17964. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  17965. if (IS_VAR == IS_CV) {
  17966. ZVAL_COPY_DEREF(arg, varptr);
  17967. } else /* if (IS_VAR == IS_VAR) */ {
  17968. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  17969. zend_refcounted *ref = Z_COUNTED_P(varptr);
  17970. varptr = Z_REFVAL_P(varptr);
  17971. ZVAL_COPY_VALUE(arg, varptr);
  17972. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  17973. efree_size(ref, sizeof(zend_reference));
  17974. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  17975. Z_ADDREF_P(arg);
  17976. }
  17977. } else {
  17978. ZVAL_COPY_VALUE(arg, varptr);
  17979. }
  17980. }
  17981. ZEND_VM_NEXT_OPCODE();
  17982. }
  17983. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  17984. {
  17985. USE_OPLINE
  17986. zval *varptr, *arg;
  17987. zend_free_op free_op1;
  17988. uint32_t arg_num = opline->op2.num;
  17989. if (EXPECTED(1)) {
  17990. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  17991. goto send_var_by_ref;
  17992. }
  17993. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  17994. send_var_by_ref:
  17995. ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  17996. }
  17997. varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  17998. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  17999. SAVE_OPLINE();
  18000. GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
  18001. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  18002. ZVAL_NULL(arg);
  18003. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18004. }
  18005. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  18006. if (IS_VAR == IS_CV) {
  18007. ZVAL_COPY_DEREF(arg, varptr);
  18008. } else /* if (IS_VAR == IS_VAR) */ {
  18009. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  18010. zend_refcounted *ref = Z_COUNTED_P(varptr);
  18011. varptr = Z_REFVAL_P(varptr);
  18012. ZVAL_COPY_VALUE(arg, varptr);
  18013. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  18014. efree_size(ref, sizeof(zend_reference));
  18015. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  18016. Z_ADDREF_P(arg);
  18017. }
  18018. } else {
  18019. ZVAL_COPY_VALUE(arg, varptr);
  18020. }
  18021. }
  18022. ZEND_VM_NEXT_OPCODE();
  18023. }
  18024. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_FUNC_ARG_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18025. {
  18026. USE_OPLINE
  18027. zval *varptr, *arg;
  18028. zend_free_op free_op1;
  18029. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  18030. ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18031. }
  18032. varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  18033. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  18034. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  18035. zend_refcounted *ref = Z_COUNTED_P(varptr);
  18036. varptr = Z_REFVAL_P(varptr);
  18037. ZVAL_COPY_VALUE(arg, varptr);
  18038. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  18039. efree_size(ref, sizeof(zend_reference));
  18040. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  18041. Z_ADDREF_P(arg);
  18042. }
  18043. } else {
  18044. ZVAL_COPY_VALUE(arg, varptr);
  18045. }
  18046. ZEND_VM_NEXT_OPCODE();
  18047. }
  18048. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18049. {
  18050. USE_OPLINE
  18051. zval *arg, *param;
  18052. zend_free_op free_op1;
  18053. SAVE_OPLINE();
  18054. arg = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  18055. param = ZEND_CALL_VAR(EX(call), opline->result.var);
  18056. if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
  18057. zend_param_must_be_ref(EX(call)->func, opline->op2.num);
  18058. }
  18059. ZVAL_COPY(param, arg);
  18060. zval_ptr_dtor_nogc(free_op1);
  18061. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18062. }
  18063. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18064. {
  18065. USE_OPLINE
  18066. zend_free_op free_op1;
  18067. zval *expr;
  18068. zval *result = EX_VAR(opline->result.var);
  18069. HashTable *ht;
  18070. SAVE_OPLINE();
  18071. expr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  18072. switch (opline->extended_value) {
  18073. case IS_NULL:
  18074. ZVAL_NULL(result);
  18075. break;
  18076. case _IS_BOOL:
  18077. ZVAL_BOOL(result, zend_is_true(expr));
  18078. break;
  18079. case IS_LONG:
  18080. ZVAL_LONG(result, zval_get_long(expr));
  18081. break;
  18082. case IS_DOUBLE:
  18083. ZVAL_DOUBLE(result, zval_get_double(expr));
  18084. break;
  18085. case IS_STRING:
  18086. ZVAL_STR(result, zval_get_string(expr));
  18087. break;
  18088. default:
  18089. if (IS_VAR & (IS_VAR|IS_CV)) {
  18090. ZVAL_DEREF(expr);
  18091. }
  18092. /* If value is already of correct type, return it directly */
  18093. if (Z_TYPE_P(expr) == opline->extended_value) {
  18094. ZVAL_COPY_VALUE(result, expr);
  18095. if (IS_VAR == IS_CONST) {
  18096. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  18097. } else if (IS_VAR != IS_TMP_VAR) {
  18098. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  18099. }
  18100. zval_ptr_dtor_nogc(free_op1);
  18101. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18102. }
  18103. if (opline->extended_value == IS_ARRAY) {
  18104. if (IS_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
  18105. if (Z_TYPE_P(expr) != IS_NULL) {
  18106. ZVAL_ARR(result, zend_new_array(1));
  18107. expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
  18108. if (IS_VAR == IS_CONST) {
  18109. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  18110. } else {
  18111. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  18112. }
  18113. } else {
  18114. ZVAL_EMPTY_ARRAY(result);
  18115. }
  18116. } else if (Z_OBJ_HT_P(expr)->get_properties) {
  18117. HashTable *obj_ht = Z_OBJ_HT_P(expr)->get_properties(expr);
  18118. if (obj_ht) {
  18119. /* fast copy */
  18120. obj_ht = zend_proptable_to_symtable(obj_ht,
  18121. (Z_OBJCE_P(expr)->default_properties_count ||
  18122. Z_OBJ_P(expr)->handlers != &std_object_handlers ||
  18123. GC_IS_RECURSIVE(obj_ht)));
  18124. ZVAL_ARR(result, obj_ht);
  18125. } else {
  18126. ZVAL_EMPTY_ARRAY(result);
  18127. }
  18128. } else {
  18129. ZVAL_COPY_VALUE(result, expr);
  18130. Z_ADDREF_P(result);
  18131. convert_to_array(result);
  18132. }
  18133. } else {
  18134. ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
  18135. if (Z_TYPE_P(expr) == IS_ARRAY) {
  18136. ht = zend_symtable_to_proptable(Z_ARR_P(expr));
  18137. if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
  18138. /* TODO: try not to duplicate immutable arrays as well ??? */
  18139. ht = zend_array_dup(ht);
  18140. }
  18141. Z_OBJ_P(result)->properties = ht;
  18142. } else if (Z_TYPE_P(expr) != IS_NULL) {
  18143. Z_OBJ_P(result)->properties = ht = zend_new_array(1);
  18144. expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
  18145. if (IS_VAR == IS_CONST) {
  18146. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  18147. } else {
  18148. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  18149. }
  18150. }
  18151. }
  18152. }
  18153. zval_ptr_dtor_nogc(free_op1);
  18154. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18155. }
  18156. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18157. {
  18158. USE_OPLINE
  18159. zend_free_op free_op1;
  18160. zval *array_ptr, *result;
  18161. SAVE_OPLINE();
  18162. array_ptr = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  18163. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  18164. result = EX_VAR(opline->result.var);
  18165. ZVAL_COPY_VALUE(result, array_ptr);
  18166. if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
  18167. Z_ADDREF_P(array_ptr);
  18168. }
  18169. Z_FE_POS_P(result) = 0;
  18170. zval_ptr_dtor_nogc(free_op1);
  18171. ZEND_VM_NEXT_OPCODE();
  18172. } else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  18173. if (!Z_OBJCE_P(array_ptr)->get_iterator) {
  18174. result = EX_VAR(opline->result.var);
  18175. ZVAL_COPY_VALUE(result, array_ptr);
  18176. if (IS_VAR != IS_TMP_VAR) {
  18177. Z_ADDREF_P(array_ptr);
  18178. }
  18179. if (Z_OBJ_P(array_ptr)->properties
  18180. && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
  18181. if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
  18182. GC_DELREF(Z_OBJ_P(array_ptr)->properties);
  18183. }
  18184. Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
  18185. }
  18186. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
  18187. zval_ptr_dtor_nogc(free_op1);
  18188. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18189. } else {
  18190. zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
  18191. zval_ptr_dtor_nogc(free_op1);
  18192. if (UNEXPECTED(EG(exception))) {
  18193. HANDLE_EXCEPTION();
  18194. } else if (is_empty) {
  18195. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  18196. } else {
  18197. ZEND_VM_NEXT_OPCODE();
  18198. }
  18199. }
  18200. } else {
  18201. zend_error(E_WARNING, "Invalid argument supplied for foreach()");
  18202. ZVAL_UNDEF(EX_VAR(opline->result.var));
  18203. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  18204. zval_ptr_dtor_nogc(free_op1);
  18205. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  18206. }
  18207. }
  18208. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18209. {
  18210. USE_OPLINE
  18211. zend_free_op free_op1;
  18212. zval *array_ptr, *array_ref;
  18213. SAVE_OPLINE();
  18214. if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
  18215. array_ref = array_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  18216. if (Z_ISREF_P(array_ref)) {
  18217. array_ptr = Z_REFVAL_P(array_ref);
  18218. }
  18219. } else {
  18220. array_ref = array_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  18221. }
  18222. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  18223. if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
  18224. if (array_ptr == array_ref) {
  18225. ZVAL_NEW_REF(array_ref, array_ref);
  18226. array_ptr = Z_REFVAL_P(array_ref);
  18227. }
  18228. Z_ADDREF_P(array_ref);
  18229. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  18230. } else {
  18231. array_ref = EX_VAR(opline->result.var);
  18232. ZVAL_NEW_REF(array_ref, array_ptr);
  18233. array_ptr = Z_REFVAL_P(array_ref);
  18234. }
  18235. if (IS_VAR == IS_CONST) {
  18236. ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
  18237. } else {
  18238. SEPARATE_ARRAY(array_ptr);
  18239. }
  18240. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
  18241. if (IS_VAR == IS_VAR) {
  18242. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  18243. }
  18244. ZEND_VM_NEXT_OPCODE();
  18245. } else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  18246. if (!Z_OBJCE_P(array_ptr)->get_iterator) {
  18247. if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
  18248. if (array_ptr == array_ref) {
  18249. ZVAL_NEW_REF(array_ref, array_ref);
  18250. array_ptr = Z_REFVAL_P(array_ref);
  18251. }
  18252. Z_ADDREF_P(array_ref);
  18253. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  18254. } else {
  18255. array_ptr = EX_VAR(opline->result.var);
  18256. ZVAL_COPY_VALUE(array_ptr, array_ref);
  18257. }
  18258. if (Z_OBJ_P(array_ptr)->properties
  18259. && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
  18260. if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
  18261. GC_DELREF(Z_OBJ_P(array_ptr)->properties);
  18262. }
  18263. Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
  18264. }
  18265. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
  18266. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  18267. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18268. } else {
  18269. zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
  18270. if (IS_VAR == IS_VAR) {
  18271. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  18272. } else {
  18273. zval_ptr_dtor_nogc(free_op1);
  18274. }
  18275. if (UNEXPECTED(EG(exception))) {
  18276. HANDLE_EXCEPTION();
  18277. } else if (is_empty) {
  18278. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  18279. } else {
  18280. ZEND_VM_NEXT_OPCODE();
  18281. }
  18282. }
  18283. } else {
  18284. zend_error(E_WARNING, "Invalid argument supplied for foreach()");
  18285. ZVAL_UNDEF(EX_VAR(opline->result.var));
  18286. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  18287. if (IS_VAR == IS_VAR) {
  18288. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  18289. } else {
  18290. zval_ptr_dtor_nogc(free_op1);
  18291. }
  18292. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  18293. }
  18294. }
  18295. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18296. {
  18297. USE_OPLINE
  18298. zval *array;
  18299. zval *value;
  18300. uint32_t value_type;
  18301. HashTable *fe_ht;
  18302. HashPosition pos;
  18303. Bucket *p;
  18304. array = EX_VAR(opline->op1.var);
  18305. SAVE_OPLINE();
  18306. if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
  18307. fe_ht = Z_ARRVAL_P(array);
  18308. pos = Z_FE_POS_P(array);
  18309. p = fe_ht->arData + pos;
  18310. while (1) {
  18311. if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
  18312. /* reached end of iteration */
  18313. fe_fetch_r_exit:
  18314. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  18315. ZEND_VM_CONTINUE();
  18316. }
  18317. value = &p->val;
  18318. value_type = Z_TYPE_INFO_P(value);
  18319. if (EXPECTED(value_type != IS_UNDEF)) {
  18320. if (UNEXPECTED(value_type == IS_INDIRECT)) {
  18321. value = Z_INDIRECT_P(value);
  18322. value_type = Z_TYPE_INFO_P(value);
  18323. if (EXPECTED(value_type != IS_UNDEF)) {
  18324. break;
  18325. }
  18326. } else {
  18327. break;
  18328. }
  18329. }
  18330. pos++;
  18331. p++;
  18332. }
  18333. Z_FE_POS_P(array) = pos + 1;
  18334. if (RETURN_VALUE_USED(opline)) {
  18335. if (!p->key) {
  18336. ZVAL_LONG(EX_VAR(opline->result.var), p->h);
  18337. } else {
  18338. ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
  18339. }
  18340. }
  18341. } else {
  18342. zend_object_iterator *iter;
  18343. ZEND_ASSERT(Z_TYPE_P(array) == IS_OBJECT);
  18344. if ((iter = zend_iterator_unwrap(array)) == NULL) {
  18345. /* plain object */
  18346. fe_ht = Z_OBJPROP_P(array);
  18347. pos = zend_hash_iterator_pos(Z_FE_ITER_P(array), fe_ht);
  18348. p = fe_ht->arData + pos;
  18349. while (1) {
  18350. if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
  18351. /* reached end of iteration */
  18352. goto fe_fetch_r_exit;
  18353. }
  18354. value = &p->val;
  18355. value_type = Z_TYPE_INFO_P(value);
  18356. if (EXPECTED(value_type != IS_UNDEF)) {
  18357. if (UNEXPECTED(value_type == IS_INDIRECT)) {
  18358. value = Z_INDIRECT_P(value);
  18359. value_type = Z_TYPE_INFO_P(value);
  18360. if (EXPECTED(value_type != IS_UNDEF)
  18361. && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) {
  18362. break;
  18363. }
  18364. } else {
  18365. break;
  18366. }
  18367. }
  18368. pos++;
  18369. p++;
  18370. }
  18371. if (RETURN_VALUE_USED(opline)) {
  18372. if (UNEXPECTED(!p->key)) {
  18373. ZVAL_LONG(EX_VAR(opline->result.var), p->h);
  18374. } else if (ZSTR_VAL(p->key)[0]) {
  18375. ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
  18376. } else {
  18377. const char *class_name, *prop_name;
  18378. size_t prop_name_len;
  18379. zend_unmangle_property_name_ex(
  18380. p->key, &class_name, &prop_name, &prop_name_len);
  18381. ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
  18382. }
  18383. }
  18384. EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos + 1;
  18385. } else {
  18386. if (EXPECTED(++iter->index > 0)) {
  18387. /* This could cause an endless loop if index becomes zero again.
  18388. * In case that ever happens we need an additional flag. */
  18389. iter->funcs->move_forward(iter);
  18390. if (UNEXPECTED(EG(exception) != NULL)) {
  18391. UNDEF_RESULT();
  18392. HANDLE_EXCEPTION();
  18393. }
  18394. if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
  18395. /* reached end of iteration */
  18396. if (UNEXPECTED(EG(exception) != NULL)) {
  18397. UNDEF_RESULT();
  18398. HANDLE_EXCEPTION();
  18399. }
  18400. goto fe_fetch_r_exit;
  18401. }
  18402. }
  18403. value = iter->funcs->get_current_data(iter);
  18404. if (UNEXPECTED(EG(exception) != NULL)) {
  18405. UNDEF_RESULT();
  18406. HANDLE_EXCEPTION();
  18407. }
  18408. if (!value) {
  18409. /* failure in get_current_data */
  18410. goto fe_fetch_r_exit;
  18411. }
  18412. if (RETURN_VALUE_USED(opline)) {
  18413. if (iter->funcs->get_current_key) {
  18414. iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
  18415. if (UNEXPECTED(EG(exception) != NULL)) {
  18416. UNDEF_RESULT();
  18417. HANDLE_EXCEPTION();
  18418. }
  18419. } else {
  18420. ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
  18421. }
  18422. }
  18423. value_type = Z_TYPE_INFO_P(value);
  18424. }
  18425. }
  18426. if (EXPECTED(opline->op2_type == IS_CV)) {
  18427. zval *variable_ptr = EX_VAR(opline->op2.var);
  18428. zend_assign_to_variable(variable_ptr, value, IS_CV);
  18429. } else {
  18430. zval *res = EX_VAR(opline->op2.var);
  18431. zend_refcounted *gc = Z_COUNTED_P(value);
  18432. ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
  18433. if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
  18434. GC_ADDREF(gc);
  18435. }
  18436. }
  18437. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18438. }
  18439. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18440. {
  18441. USE_OPLINE
  18442. zval *array;
  18443. zval *value;
  18444. uint32_t value_type;
  18445. HashTable *fe_ht;
  18446. HashPosition pos;
  18447. Bucket *p;
  18448. array = EX_VAR(opline->op1.var);
  18449. SAVE_OPLINE();
  18450. ZVAL_DEREF(array);
  18451. if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
  18452. pos = zend_hash_iterator_pos_ex(Z_FE_ITER_P(EX_VAR(opline->op1.var)), array);
  18453. fe_ht = Z_ARRVAL_P(array);
  18454. p = fe_ht->arData + pos;
  18455. while (1) {
  18456. if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
  18457. /* reached end of iteration */
  18458. goto fe_fetch_w_exit;
  18459. }
  18460. value = &p->val;
  18461. value_type = Z_TYPE_INFO_P(value);
  18462. if (EXPECTED(value_type != IS_UNDEF)) {
  18463. if (UNEXPECTED(value_type == IS_INDIRECT)) {
  18464. value = Z_INDIRECT_P(value);
  18465. value_type = Z_TYPE_INFO_P(value);
  18466. if (EXPECTED(value_type != IS_UNDEF)) {
  18467. break;
  18468. }
  18469. } else {
  18470. break;
  18471. }
  18472. }
  18473. pos++;
  18474. p++;
  18475. }
  18476. if (RETURN_VALUE_USED(opline)) {
  18477. if (!p->key) {
  18478. ZVAL_LONG(EX_VAR(opline->result.var), p->h);
  18479. } else {
  18480. ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
  18481. }
  18482. }
  18483. EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
  18484. } else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
  18485. zend_object_iterator *iter;
  18486. if ((iter = zend_iterator_unwrap(array)) == NULL) {
  18487. /* plain object */
  18488. fe_ht = Z_OBJPROP_P(array);
  18489. pos = zend_hash_iterator_pos(Z_FE_ITER_P(EX_VAR(opline->op1.var)), fe_ht);
  18490. p = fe_ht->arData + pos;
  18491. while (1) {
  18492. if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
  18493. /* reached end of iteration */
  18494. goto fe_fetch_w_exit;
  18495. }
  18496. value = &p->val;
  18497. value_type = Z_TYPE_INFO_P(value);
  18498. if (EXPECTED(value_type != IS_UNDEF)) {
  18499. if (UNEXPECTED(value_type == IS_INDIRECT)) {
  18500. value = Z_INDIRECT_P(value);
  18501. value_type = Z_TYPE_INFO_P(value);
  18502. if (EXPECTED(value_type != IS_UNDEF)
  18503. && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) {
  18504. break;
  18505. }
  18506. } else {
  18507. break;
  18508. }
  18509. }
  18510. pos++;
  18511. p++;
  18512. }
  18513. if (RETURN_VALUE_USED(opline)) {
  18514. if (UNEXPECTED(!p->key)) {
  18515. ZVAL_LONG(EX_VAR(opline->result.var), p->h);
  18516. } else if (ZSTR_VAL(p->key)[0]) {
  18517. ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
  18518. } else {
  18519. const char *class_name, *prop_name;
  18520. size_t prop_name_len;
  18521. zend_unmangle_property_name_ex(
  18522. p->key, &class_name, &prop_name, &prop_name_len);
  18523. ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
  18524. }
  18525. }
  18526. EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
  18527. } else {
  18528. if (++iter->index > 0) {
  18529. /* This could cause an endless loop if index becomes zero again.
  18530. * In case that ever happens we need an additional flag. */
  18531. iter->funcs->move_forward(iter);
  18532. if (UNEXPECTED(EG(exception) != NULL)) {
  18533. UNDEF_RESULT();
  18534. HANDLE_EXCEPTION();
  18535. }
  18536. if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
  18537. /* reached end of iteration */
  18538. if (UNEXPECTED(EG(exception) != NULL)) {
  18539. UNDEF_RESULT();
  18540. HANDLE_EXCEPTION();
  18541. }
  18542. goto fe_fetch_w_exit;
  18543. }
  18544. }
  18545. value = iter->funcs->get_current_data(iter);
  18546. if (UNEXPECTED(EG(exception) != NULL)) {
  18547. UNDEF_RESULT();
  18548. HANDLE_EXCEPTION();
  18549. }
  18550. if (!value) {
  18551. /* failure in get_current_data */
  18552. goto fe_fetch_w_exit;
  18553. }
  18554. if (RETURN_VALUE_USED(opline)) {
  18555. if (iter->funcs->get_current_key) {
  18556. iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
  18557. if (UNEXPECTED(EG(exception) != NULL)) {
  18558. UNDEF_RESULT();
  18559. HANDLE_EXCEPTION();
  18560. }
  18561. } else {
  18562. ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
  18563. }
  18564. }
  18565. value_type = Z_TYPE_INFO_P(value);
  18566. }
  18567. } else {
  18568. zend_error(E_WARNING, "Invalid argument supplied for foreach()");
  18569. if (UNEXPECTED(EG(exception))) {
  18570. UNDEF_RESULT();
  18571. HANDLE_EXCEPTION();
  18572. }
  18573. fe_fetch_w_exit:
  18574. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  18575. ZEND_VM_CONTINUE();
  18576. }
  18577. if (EXPECTED((value_type & Z_TYPE_MASK) != IS_REFERENCE)) {
  18578. zend_refcounted *gc = Z_COUNTED_P(value);
  18579. zval *ref;
  18580. ZVAL_NEW_EMPTY_REF(value);
  18581. ref = Z_REFVAL_P(value);
  18582. ZVAL_COPY_VALUE_EX(ref, value, gc, value_type);
  18583. }
  18584. if (EXPECTED(opline->op2_type == IS_CV)) {
  18585. zval *variable_ptr = EX_VAR(opline->op2.var);
  18586. if (EXPECTED(variable_ptr != value)) {
  18587. zend_reference *ref;
  18588. ref = Z_REF_P(value);
  18589. GC_ADDREF(ref);
  18590. zval_ptr_dtor(variable_ptr);
  18591. ZVAL_REF(variable_ptr, ref);
  18592. }
  18593. } else {
  18594. Z_ADDREF_P(value);
  18595. ZVAL_REF(EX_VAR(opline->op2.var), Z_REF_P(value));
  18596. }
  18597. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18598. }
  18599. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18600. {
  18601. USE_OPLINE
  18602. zend_free_op free_op1;
  18603. zval *value;
  18604. zval *ref = NULL;
  18605. int ret;
  18606. SAVE_OPLINE();
  18607. value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  18608. if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
  18609. if (IS_VAR == IS_VAR) {
  18610. ref = value;
  18611. }
  18612. value = Z_REFVAL_P(value);
  18613. }
  18614. ret = i_zend_is_true(value);
  18615. if (UNEXPECTED(EG(exception))) {
  18616. zval_ptr_dtor_nogc(free_op1);
  18617. ZVAL_UNDEF(EX_VAR(opline->result.var));
  18618. HANDLE_EXCEPTION();
  18619. }
  18620. if (ret) {
  18621. zval *result = EX_VAR(opline->result.var);
  18622. ZVAL_COPY_VALUE(result, value);
  18623. if (IS_VAR == IS_CONST) {
  18624. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  18625. } else if (IS_VAR == IS_CV) {
  18626. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  18627. } else if (IS_VAR == IS_VAR && ref) {
  18628. zend_reference *r = Z_REF_P(ref);
  18629. if (UNEXPECTED(GC_DELREF(r) == 0)) {
  18630. efree_size(r, sizeof(zend_reference));
  18631. } else if (Z_OPT_REFCOUNTED_P(result)) {
  18632. Z_ADDREF_P(result);
  18633. }
  18634. }
  18635. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  18636. }
  18637. zval_ptr_dtor_nogc(free_op1);
  18638. ZEND_VM_NEXT_OPCODE();
  18639. }
  18640. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18641. {
  18642. USE_OPLINE
  18643. zend_free_op free_op1;
  18644. zval *value;
  18645. zval *result = EX_VAR(opline->result.var);
  18646. value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  18647. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  18648. SAVE_OPLINE();
  18649. GET_OP1_UNDEF_CV(value, BP_VAR_R);
  18650. ZVAL_NULL(result);
  18651. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18652. }
  18653. if (IS_VAR == IS_CV) {
  18654. ZVAL_COPY_DEREF(result, value);
  18655. } else if (IS_VAR == IS_VAR) {
  18656. if (UNEXPECTED(Z_ISREF_P(value))) {
  18657. ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
  18658. if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
  18659. efree_size(Z_REF_P(value), sizeof(zend_reference));
  18660. } else if (Z_OPT_REFCOUNTED_P(result)) {
  18661. Z_ADDREF_P(result);
  18662. }
  18663. } else {
  18664. ZVAL_COPY_VALUE(result, value);
  18665. }
  18666. } else {
  18667. ZVAL_COPY_VALUE(result, value);
  18668. if (IS_VAR == IS_CONST) {
  18669. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
  18670. Z_ADDREF_P(result);
  18671. }
  18672. }
  18673. }
  18674. ZEND_VM_NEXT_OPCODE();
  18675. }
  18676. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18677. {
  18678. USE_OPLINE
  18679. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  18680. zval *val;
  18681. zend_free_op free_op1;
  18682. SAVE_OPLINE();
  18683. val = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  18684. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  18685. zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
  18686. zval_ptr_dtor_nogc(free_op1);
  18687. UNDEF_RESULT();
  18688. HANDLE_EXCEPTION();
  18689. }
  18690. if (Z_TYPE_P(val) == IS_ARRAY) {
  18691. ZVAL_COPY_VALUE(&generator->values, val);
  18692. if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
  18693. Z_ADDREF_P(val);
  18694. }
  18695. Z_FE_POS(generator->values) = 0;
  18696. zval_ptr_dtor_nogc(free_op1);
  18697. } else if (IS_VAR != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
  18698. zend_class_entry *ce = Z_OBJCE_P(val);
  18699. if (ce == zend_ce_generator) {
  18700. zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
  18701. if (IS_VAR != IS_TMP_VAR) {
  18702. Z_ADDREF_P(val);
  18703. }
  18704. zval_ptr_dtor_nogc(free_op1);
  18705. if (Z_ISUNDEF(new_gen->retval)) {
  18706. if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
  18707. zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
  18708. zval_ptr_dtor(val);
  18709. UNDEF_RESULT();
  18710. HANDLE_EXCEPTION();
  18711. } else {
  18712. zend_generator_yield_from(generator, new_gen);
  18713. }
  18714. } else if (UNEXPECTED(new_gen->execute_data == NULL)) {
  18715. zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
  18716. zval_ptr_dtor(val);
  18717. UNDEF_RESULT();
  18718. HANDLE_EXCEPTION();
  18719. } else {
  18720. if (RETURN_VALUE_USED(opline)) {
  18721. ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
  18722. }
  18723. ZEND_VM_NEXT_OPCODE();
  18724. }
  18725. } else {
  18726. zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
  18727. zval_ptr_dtor_nogc(free_op1);
  18728. if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
  18729. if (!EG(exception)) {
  18730. zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
  18731. }
  18732. UNDEF_RESULT();
  18733. HANDLE_EXCEPTION();
  18734. }
  18735. iter->index = 0;
  18736. if (iter->funcs->rewind) {
  18737. iter->funcs->rewind(iter);
  18738. if (UNEXPECTED(EG(exception) != NULL)) {
  18739. OBJ_RELEASE(&iter->std);
  18740. UNDEF_RESULT();
  18741. HANDLE_EXCEPTION();
  18742. }
  18743. }
  18744. ZVAL_OBJ(&generator->values, &iter->std);
  18745. }
  18746. } else {
  18747. zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
  18748. zval_ptr_dtor_nogc(free_op1);
  18749. UNDEF_RESULT();
  18750. HANDLE_EXCEPTION();
  18751. }
  18752. /* This is the default return value
  18753. * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
  18754. if (RETURN_VALUE_USED(opline)) {
  18755. ZVAL_NULL(EX_VAR(opline->result.var));
  18756. }
  18757. /* This generator has no send target (though the generator we delegate to might have one) */
  18758. generator->send_target = NULL;
  18759. /* We increment to the next op, so we are at the correct position when the
  18760. * generator is resumed. */
  18761. ZEND_VM_INC_OPCODE();
  18762. /* The GOTO VM uses a local opline variable. We need to set the opline
  18763. * variable in execute_data so we don't resume at an old position. */
  18764. SAVE_OPLINE();
  18765. ZEND_VM_RETURN();
  18766. }
  18767. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18768. {
  18769. USE_OPLINE
  18770. zval *varptr, *arg;
  18771. zend_free_op free_op1;
  18772. varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  18773. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  18774. if (IS_VAR == IS_CV) {
  18775. ZVAL_COPY(arg, varptr);
  18776. } else /* if (IS_VAR == IS_VAR) */ {
  18777. ZVAL_COPY_VALUE(arg, varptr);
  18778. }
  18779. ZEND_VM_NEXT_OPCODE();
  18780. }
  18781. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18782. {
  18783. USE_OPLINE
  18784. zval *varptr, *arg;
  18785. zend_free_op free_op1;
  18786. uint32_t arg_num = opline->op2.num;
  18787. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  18788. ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18789. }
  18790. varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  18791. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  18792. if (IS_VAR == IS_CV) {
  18793. ZVAL_COPY(arg, varptr);
  18794. } else /* if (IS_VAR == IS_VAR) */ {
  18795. ZVAL_COPY_VALUE(arg, varptr);
  18796. }
  18797. ZEND_VM_NEXT_OPCODE();
  18798. }
  18799. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18800. {
  18801. USE_OPLINE
  18802. zend_free_op free_op1;
  18803. zval *op1, *op2;
  18804. int result;
  18805. SAVE_OPLINE();
  18806. op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  18807. op2 = RT_CONSTANT(opline, opline->op2);
  18808. result = fast_is_identical_function(op1, op2);
  18809. zval_ptr_dtor_nogc(free_op1);
  18810. ZEND_VM_SMART_BRANCH(result, 1);
  18811. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  18812. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18813. }
  18814. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  18815. {
  18816. USE_OPLINE
  18817. zend_free_op free_op1;
  18818. zval *op1, *op2;
  18819. int result;
  18820. SAVE_OPLINE();
  18821. op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  18822. op2 = RT_CONSTANT(opline, opline->op2);
  18823. result = fast_is_not_identical_function(op1, op2);
  18824. zval_ptr_dtor_nogc(free_op1);
  18825. ZEND_VM_SMART_BRANCH(result, 1);
  18826. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  18827. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18828. }
  18829. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  18830. {
  18831. USE_OPLINE
  18832. zend_free_op free_op1, free_op_data1;
  18833. zval *object;
  18834. zval *property;
  18835. zval *value;
  18836. zval *zptr;
  18837. SAVE_OPLINE();
  18838. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  18839. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  18840. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  18841. }
  18842. property = RT_CONSTANT(opline, opline->op2);
  18843. do {
  18844. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  18845. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  18846. if (Z_ISREF_P(object)) {
  18847. object = Z_REFVAL_P(object);
  18848. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  18849. goto assign_op_object;
  18850. }
  18851. }
  18852. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  18853. break;
  18854. }
  18855. }
  18856. /* here we are sure we are dealing with an object */
  18857. assign_op_object:
  18858. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  18859. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
  18860. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  18861. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  18862. ZVAL_NULL(EX_VAR(opline->result.var));
  18863. }
  18864. } else {
  18865. ZVAL_DEREF(zptr);
  18866. binary_op(zptr, zptr, value);
  18867. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  18868. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  18869. }
  18870. }
  18871. } else {
  18872. zend_assign_op_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC);
  18873. }
  18874. } while (0);
  18875. FREE_OP(free_op_data1);
  18876. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  18877. /* assign_obj has two opcodes! */
  18878. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  18879. }
  18880. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  18881. {
  18882. USE_OPLINE
  18883. zend_free_op free_op1, free_op_data1;
  18884. zval *var_ptr;
  18885. zval *value, *container, *dim;
  18886. SAVE_OPLINE();
  18887. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  18888. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  18889. assign_dim_op_array:
  18890. SEPARATE_ARRAY(container);
  18891. assign_dim_op_new_array:
  18892. dim = RT_CONSTANT(opline, opline->op2);
  18893. if (IS_CONST == IS_UNUSED) {
  18894. var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
  18895. if (UNEXPECTED(!var_ptr)) {
  18896. zend_cannot_add_element();
  18897. goto assign_dim_op_ret_null;
  18898. }
  18899. } else {
  18900. if (IS_CONST == IS_CONST) {
  18901. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
  18902. } else {
  18903. var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
  18904. }
  18905. if (UNEXPECTED(!var_ptr)) {
  18906. goto assign_dim_op_ret_null;
  18907. }
  18908. ZVAL_DEREF(var_ptr);
  18909. }
  18910. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  18911. binary_op(var_ptr, var_ptr, value);
  18912. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  18913. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  18914. }
  18915. } else {
  18916. if (EXPECTED(Z_ISREF_P(container))) {
  18917. container = Z_REFVAL_P(container);
  18918. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  18919. goto assign_dim_op_array;
  18920. }
  18921. } else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  18922. container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
  18923. assign_dim_op_convert_to_array:
  18924. ZVAL_ARR(container, zend_new_array(8));
  18925. goto assign_dim_op_new_array;
  18926. }
  18927. dim = RT_CONSTANT(opline, opline->op2);
  18928. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  18929. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  18930. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  18931. dim++;
  18932. }
  18933. zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC);
  18934. } else {
  18935. if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  18936. if (IS_CONST == IS_UNUSED) {
  18937. zend_use_new_element_for_string();
  18938. } else {
  18939. zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC);
  18940. zend_wrong_string_offset(EXECUTE_DATA_C);
  18941. }
  18942. UNDEF_RESULT();
  18943. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  18944. goto assign_dim_op_convert_to_array;
  18945. } else {
  18946. if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
  18947. zend_use_scalar_as_array();
  18948. }
  18949. assign_dim_op_ret_null:
  18950. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  18951. ZVAL_NULL(EX_VAR(opline->result.var));
  18952. }
  18953. }
  18954. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  18955. }
  18956. }
  18957. FREE_OP(free_op_data1);
  18958. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  18959. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  18960. }
  18961. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_VAR_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  18962. {
  18963. USE_OPLINE
  18964. zend_free_op free_op1;
  18965. zval *var_ptr;
  18966. zval *value;
  18967. SAVE_OPLINE();
  18968. value = RT_CONSTANT(opline, opline->op2);
  18969. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  18970. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  18971. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  18972. ZVAL_NULL(EX_VAR(opline->result.var));
  18973. }
  18974. } else {
  18975. ZVAL_DEREF(var_ptr);
  18976. binary_op(var_ptr, var_ptr, value);
  18977. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  18978. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  18979. }
  18980. }
  18981. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  18982. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  18983. }
  18984. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  18985. {
  18986. #if 1 && IS_CONST == IS_UNUSED
  18987. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  18988. #else
  18989. # if 0 || IS_VAR != IS_UNUSED
  18990. # if 0
  18991. /* opline->extended_value checks are specialized, don't need opline */
  18992. USE_OPLINE
  18993. # endif
  18994. if (EXPECTED(1)) {
  18995. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  18996. }
  18997. if (EXPECTED(0)) {
  18998. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  18999. }
  19000. # endif
  19001. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19002. #endif
  19003. }
  19004. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  19005. {
  19006. #if 1 && IS_CONST == IS_UNUSED
  19007. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19008. #else
  19009. # if 0 || IS_VAR != IS_UNUSED
  19010. # if 0
  19011. /* opline->extended_value checks are specialized, don't need opline */
  19012. USE_OPLINE
  19013. # endif
  19014. if (EXPECTED(0)) {
  19015. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19016. }
  19017. if (EXPECTED(1)) {
  19018. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19019. }
  19020. # endif
  19021. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19022. #endif
  19023. }
  19024. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  19025. {
  19026. #if 1 && IS_CONST == IS_UNUSED
  19027. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19028. #else
  19029. # if 0 || IS_VAR != IS_UNUSED
  19030. # if 0
  19031. /* opline->extended_value checks are specialized, don't need opline */
  19032. USE_OPLINE
  19033. # endif
  19034. if (EXPECTED(0)) {
  19035. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19036. }
  19037. if (EXPECTED(0)) {
  19038. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19039. }
  19040. # endif
  19041. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19042. #endif
  19043. }
  19044. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19045. {
  19046. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19047. }
  19048. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19049. {
  19050. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19051. }
  19052. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19053. {
  19054. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19055. }
  19056. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19057. {
  19058. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19059. }
  19060. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19061. {
  19062. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19063. }
  19064. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19065. {
  19066. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19067. }
  19068. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19069. {
  19070. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19071. }
  19072. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19073. {
  19074. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19075. }
  19076. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19077. {
  19078. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19079. }
  19080. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19081. {
  19082. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19083. }
  19084. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19085. {
  19086. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19087. }
  19088. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19089. {
  19090. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19091. }
  19092. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19093. {
  19094. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19095. }
  19096. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19097. {
  19098. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19099. }
  19100. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19101. {
  19102. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19103. }
  19104. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19105. {
  19106. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19107. }
  19108. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19109. {
  19110. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19111. }
  19112. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19113. {
  19114. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19115. }
  19116. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19117. {
  19118. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19119. }
  19120. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19121. {
  19122. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19123. }
  19124. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19125. {
  19126. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19127. }
  19128. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19129. {
  19130. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19131. }
  19132. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19133. {
  19134. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19135. }
  19136. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19137. {
  19138. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19139. }
  19140. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19141. {
  19142. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19143. }
  19144. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19145. {
  19146. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19147. }
  19148. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19149. {
  19150. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19151. }
  19152. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19153. {
  19154. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19155. }
  19156. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19157. {
  19158. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19159. }
  19160. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19161. {
  19162. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19163. }
  19164. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19165. {
  19166. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19167. }
  19168. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19169. {
  19170. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19171. }
  19172. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19173. {
  19174. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19175. }
  19176. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19177. {
  19178. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19179. }
  19180. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19181. {
  19182. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19183. }
  19184. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19185. {
  19186. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19187. }
  19188. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  19189. {
  19190. USE_OPLINE
  19191. zend_free_op free_op1;
  19192. zval *object;
  19193. zval *property;
  19194. zval *zptr;
  19195. SAVE_OPLINE();
  19196. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  19197. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  19198. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19199. }
  19200. property = RT_CONSTANT(opline, opline->op2);
  19201. do {
  19202. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  19203. if (Z_ISREF_P(object)) {
  19204. object = Z_REFVAL_P(object);
  19205. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  19206. goto pre_incdec_object;
  19207. }
  19208. }
  19209. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  19210. break;
  19211. }
  19212. }
  19213. /* here we are sure we are dealing with an object */
  19214. pre_incdec_object:
  19215. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  19216. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  19217. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  19218. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19219. ZVAL_NULL(EX_VAR(opline->result.var));
  19220. }
  19221. } else {
  19222. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  19223. if (inc) {
  19224. fast_long_increment_function(zptr);
  19225. } else {
  19226. fast_long_decrement_function(zptr);
  19227. }
  19228. } else {
  19229. ZVAL_DEREF(zptr);
  19230. if (inc) {
  19231. increment_function(zptr);
  19232. } else {
  19233. decrement_function(zptr);
  19234. }
  19235. }
  19236. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19237. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  19238. }
  19239. }
  19240. } else {
  19241. zend_pre_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  19242. }
  19243. } while (0);
  19244. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  19245. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19246. }
  19247. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19248. {
  19249. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19250. }
  19251. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19252. {
  19253. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19254. }
  19255. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  19256. {
  19257. USE_OPLINE
  19258. zend_free_op free_op1;
  19259. zval *object;
  19260. zval *property;
  19261. zval *zptr;
  19262. SAVE_OPLINE();
  19263. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  19264. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  19265. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19266. }
  19267. property = RT_CONSTANT(opline, opline->op2);
  19268. do {
  19269. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  19270. if (Z_ISREF_P(object)) {
  19271. object = Z_REFVAL_P(object);
  19272. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  19273. goto post_incdec_object;
  19274. }
  19275. }
  19276. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  19277. break;
  19278. }
  19279. }
  19280. /* here we are sure we are dealing with an object */
  19281. post_incdec_object:
  19282. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  19283. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  19284. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  19285. ZVAL_NULL(EX_VAR(opline->result.var));
  19286. } else {
  19287. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  19288. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr));
  19289. if (inc) {
  19290. fast_long_increment_function(zptr);
  19291. } else {
  19292. fast_long_decrement_function(zptr);
  19293. }
  19294. } else {
  19295. ZVAL_DEREF(zptr);
  19296. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  19297. if (inc) {
  19298. increment_function(zptr);
  19299. } else {
  19300. decrement_function(zptr);
  19301. }
  19302. }
  19303. }
  19304. } else {
  19305. zend_post_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  19306. }
  19307. } while (0);
  19308. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  19309. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19310. }
  19311. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19312. {
  19313. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19314. }
  19315. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19316. {
  19317. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  19318. }
  19319. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19320. {
  19321. USE_OPLINE
  19322. zend_free_op free_op1;
  19323. zval *container;
  19324. SAVE_OPLINE();
  19325. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  19326. zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  19327. if (IS_VAR == IS_VAR) {
  19328. zval *result = EX_VAR(opline->result.var);
  19329. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  19330. }
  19331. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19332. }
  19333. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19334. {
  19335. USE_OPLINE
  19336. zend_free_op free_op1;
  19337. zval *container;
  19338. SAVE_OPLINE();
  19339. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  19340. zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  19341. if (IS_VAR == IS_VAR) {
  19342. zval *result = EX_VAR(opline->result.var);
  19343. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  19344. }
  19345. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19346. }
  19347. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19348. {
  19349. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  19350. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  19351. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19352. }
  19353. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19354. } else {
  19355. if (IS_CONST == IS_UNUSED) {
  19356. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19357. }
  19358. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19359. }
  19360. }
  19361. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19362. {
  19363. USE_OPLINE
  19364. zend_free_op free_op1;
  19365. zval *container;
  19366. SAVE_OPLINE();
  19367. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  19368. zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  19369. if (IS_VAR == IS_VAR) {
  19370. zval *result = EX_VAR(opline->result.var);
  19371. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  19372. }
  19373. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19374. }
  19375. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19376. {
  19377. USE_OPLINE
  19378. zend_free_op free_op1;
  19379. zval *property, *container, *result;
  19380. SAVE_OPLINE();
  19381. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  19382. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  19383. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19384. }
  19385. property = RT_CONSTANT(opline, opline->op2);
  19386. result = EX_VAR(opline->result.var);
  19387. zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC);
  19388. if (IS_VAR == IS_VAR) {
  19389. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  19390. }
  19391. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19392. }
  19393. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19394. {
  19395. USE_OPLINE
  19396. zend_free_op free_op1;
  19397. zval *property, *container, *result;
  19398. SAVE_OPLINE();
  19399. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  19400. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  19401. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19402. }
  19403. property = RT_CONSTANT(opline, opline->op2);
  19404. result = EX_VAR(opline->result.var);
  19405. zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC);
  19406. if (IS_VAR == IS_VAR) {
  19407. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  19408. }
  19409. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19410. }
  19411. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19412. {
  19413. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  19414. /* Behave like FETCH_OBJ_W */
  19415. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  19416. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19417. }
  19418. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19419. } else {
  19420. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19421. }
  19422. }
  19423. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19424. {
  19425. USE_OPLINE
  19426. zend_free_op free_op1;
  19427. zval *container, *property, *result;
  19428. SAVE_OPLINE();
  19429. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  19430. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  19431. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19432. }
  19433. property = RT_CONSTANT(opline, opline->op2);
  19434. result = EX_VAR(opline->result.var);
  19435. zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC);
  19436. if (IS_VAR == IS_VAR) {
  19437. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  19438. }
  19439. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19440. }
  19441. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19442. {
  19443. USE_OPLINE
  19444. zend_free_op free_op1;
  19445. zval *container, *dim;
  19446. SAVE_OPLINE();
  19447. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  19448. dim = RT_CONSTANT(opline, opline->op2);
  19449. if (IS_VAR == IS_VAR
  19450. && Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
  19451. && UNEXPECTED(!Z_ISREF_P(container))
  19452. ) {
  19453. zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
  19454. zend_fetch_dimension_address_LIST_r(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  19455. } else {
  19456. zend_fetch_dimension_address_W(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  19457. }
  19458. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  19459. }
  19460. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19461. {
  19462. USE_OPLINE
  19463. zend_free_op free_op1;
  19464. zval *object, *property, *value, tmp;
  19465. SAVE_OPLINE();
  19466. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  19467. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  19468. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19469. }
  19470. property = RT_CONSTANT(opline, opline->op2);
  19471. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  19472. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  19473. if (Z_ISREF_P(object)) {
  19474. object = Z_REFVAL_P(object);
  19475. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  19476. goto assign_object;
  19477. }
  19478. }
  19479. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  19480. goto exit_assign_obj;
  19481. }
  19482. }
  19483. assign_object:
  19484. if (IS_CONST == IS_CONST &&
  19485. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  19486. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  19487. zend_object *zobj = Z_OBJ_P(object);
  19488. zval *property_val;
  19489. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  19490. property_val = OBJ_PROP(zobj, prop_offset);
  19491. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  19492. fast_assign_obj:
  19493. value = zend_assign_to_variable(property_val, value, IS_CONST);
  19494. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19495. ZVAL_COPY(EX_VAR(opline->result.var), value);
  19496. }
  19497. goto exit_assign_obj;
  19498. }
  19499. } else {
  19500. if (EXPECTED(zobj->properties != NULL)) {
  19501. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  19502. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  19503. GC_DELREF(zobj->properties);
  19504. }
  19505. zobj->properties = zend_array_dup(zobj->properties);
  19506. }
  19507. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  19508. if (property_val) {
  19509. goto fast_assign_obj;
  19510. }
  19511. }
  19512. if (!zobj->ce->__set) {
  19513. if (EXPECTED(zobj->properties == NULL)) {
  19514. rebuild_object_properties(zobj);
  19515. }
  19516. if (IS_CONST == IS_CONST) {
  19517. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  19518. Z_ADDREF_P(value);
  19519. }
  19520. } else if (IS_CONST != IS_TMP_VAR) {
  19521. if (Z_ISREF_P(value)) {
  19522. if (IS_CONST == IS_VAR) {
  19523. zend_reference *ref = Z_REF_P(value);
  19524. if (GC_DELREF(ref) == 0) {
  19525. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  19526. efree_size(ref, sizeof(zend_reference));
  19527. value = &tmp;
  19528. } else {
  19529. value = Z_REFVAL_P(value);
  19530. Z_TRY_ADDREF_P(value);
  19531. }
  19532. } else {
  19533. value = Z_REFVAL_P(value);
  19534. Z_TRY_ADDREF_P(value);
  19535. }
  19536. } else if (IS_CONST == IS_CV) {
  19537. Z_TRY_ADDREF_P(value);
  19538. }
  19539. }
  19540. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  19541. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19542. ZVAL_COPY(EX_VAR(opline->result.var), value);
  19543. }
  19544. goto exit_assign_obj;
  19545. }
  19546. }
  19547. }
  19548. if (!Z_OBJ_HT_P(object)->write_property) {
  19549. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  19550. goto exit_assign_obj;
  19551. }
  19552. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  19553. ZVAL_DEREF(value);
  19554. }
  19555. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  19556. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19557. ZVAL_COPY(EX_VAR(opline->result.var), value);
  19558. }
  19559. exit_assign_obj:
  19560. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  19561. /* assign_obj has two opcodes! */
  19562. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  19563. }
  19564. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19565. {
  19566. USE_OPLINE
  19567. zend_free_op free_op1, free_op_data;
  19568. zval *object, *property, *value, tmp;
  19569. SAVE_OPLINE();
  19570. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  19571. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  19572. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19573. }
  19574. property = RT_CONSTANT(opline, opline->op2);
  19575. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  19576. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  19577. if (Z_ISREF_P(object)) {
  19578. object = Z_REFVAL_P(object);
  19579. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  19580. goto assign_object;
  19581. }
  19582. }
  19583. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  19584. zval_ptr_dtor_nogc(free_op_data);
  19585. goto exit_assign_obj;
  19586. }
  19587. }
  19588. assign_object:
  19589. if (IS_CONST == IS_CONST &&
  19590. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  19591. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  19592. zend_object *zobj = Z_OBJ_P(object);
  19593. zval *property_val;
  19594. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  19595. property_val = OBJ_PROP(zobj, prop_offset);
  19596. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  19597. fast_assign_obj:
  19598. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
  19599. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19600. ZVAL_COPY(EX_VAR(opline->result.var), value);
  19601. }
  19602. goto exit_assign_obj;
  19603. }
  19604. } else {
  19605. if (EXPECTED(zobj->properties != NULL)) {
  19606. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  19607. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  19608. GC_DELREF(zobj->properties);
  19609. }
  19610. zobj->properties = zend_array_dup(zobj->properties);
  19611. }
  19612. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  19613. if (property_val) {
  19614. goto fast_assign_obj;
  19615. }
  19616. }
  19617. if (!zobj->ce->__set) {
  19618. if (EXPECTED(zobj->properties == NULL)) {
  19619. rebuild_object_properties(zobj);
  19620. }
  19621. if (IS_TMP_VAR == IS_CONST) {
  19622. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  19623. Z_ADDREF_P(value);
  19624. }
  19625. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  19626. if (Z_ISREF_P(value)) {
  19627. if (IS_TMP_VAR == IS_VAR) {
  19628. zend_reference *ref = Z_REF_P(value);
  19629. if (GC_DELREF(ref) == 0) {
  19630. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  19631. efree_size(ref, sizeof(zend_reference));
  19632. value = &tmp;
  19633. } else {
  19634. value = Z_REFVAL_P(value);
  19635. Z_TRY_ADDREF_P(value);
  19636. }
  19637. } else {
  19638. value = Z_REFVAL_P(value);
  19639. Z_TRY_ADDREF_P(value);
  19640. }
  19641. } else if (IS_TMP_VAR == IS_CV) {
  19642. Z_TRY_ADDREF_P(value);
  19643. }
  19644. }
  19645. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  19646. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19647. ZVAL_COPY(EX_VAR(opline->result.var), value);
  19648. }
  19649. goto exit_assign_obj;
  19650. }
  19651. }
  19652. }
  19653. if (!Z_OBJ_HT_P(object)->write_property) {
  19654. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  19655. zval_ptr_dtor_nogc(free_op_data);
  19656. goto exit_assign_obj;
  19657. }
  19658. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  19659. ZVAL_DEREF(value);
  19660. }
  19661. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  19662. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19663. ZVAL_COPY(EX_VAR(opline->result.var), value);
  19664. }
  19665. zval_ptr_dtor_nogc(free_op_data);
  19666. exit_assign_obj:
  19667. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  19668. /* assign_obj has two opcodes! */
  19669. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  19670. }
  19671. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19672. {
  19673. USE_OPLINE
  19674. zend_free_op free_op1, free_op_data;
  19675. zval *object, *property, *value, tmp;
  19676. SAVE_OPLINE();
  19677. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  19678. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  19679. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19680. }
  19681. property = RT_CONSTANT(opline, opline->op2);
  19682. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  19683. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  19684. if (Z_ISREF_P(object)) {
  19685. object = Z_REFVAL_P(object);
  19686. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  19687. goto assign_object;
  19688. }
  19689. }
  19690. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  19691. zval_ptr_dtor_nogc(free_op_data);
  19692. goto exit_assign_obj;
  19693. }
  19694. }
  19695. assign_object:
  19696. if (IS_CONST == IS_CONST &&
  19697. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  19698. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  19699. zend_object *zobj = Z_OBJ_P(object);
  19700. zval *property_val;
  19701. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  19702. property_val = OBJ_PROP(zobj, prop_offset);
  19703. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  19704. fast_assign_obj:
  19705. value = zend_assign_to_variable(property_val, value, IS_VAR);
  19706. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19707. ZVAL_COPY(EX_VAR(opline->result.var), value);
  19708. }
  19709. goto exit_assign_obj;
  19710. }
  19711. } else {
  19712. if (EXPECTED(zobj->properties != NULL)) {
  19713. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  19714. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  19715. GC_DELREF(zobj->properties);
  19716. }
  19717. zobj->properties = zend_array_dup(zobj->properties);
  19718. }
  19719. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  19720. if (property_val) {
  19721. goto fast_assign_obj;
  19722. }
  19723. }
  19724. if (!zobj->ce->__set) {
  19725. if (EXPECTED(zobj->properties == NULL)) {
  19726. rebuild_object_properties(zobj);
  19727. }
  19728. if (IS_VAR == IS_CONST) {
  19729. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  19730. Z_ADDREF_P(value);
  19731. }
  19732. } else if (IS_VAR != IS_TMP_VAR) {
  19733. if (Z_ISREF_P(value)) {
  19734. if (IS_VAR == IS_VAR) {
  19735. zend_reference *ref = Z_REF_P(value);
  19736. if (GC_DELREF(ref) == 0) {
  19737. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  19738. efree_size(ref, sizeof(zend_reference));
  19739. value = &tmp;
  19740. } else {
  19741. value = Z_REFVAL_P(value);
  19742. Z_TRY_ADDREF_P(value);
  19743. }
  19744. } else {
  19745. value = Z_REFVAL_P(value);
  19746. Z_TRY_ADDREF_P(value);
  19747. }
  19748. } else if (IS_VAR == IS_CV) {
  19749. Z_TRY_ADDREF_P(value);
  19750. }
  19751. }
  19752. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  19753. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19754. ZVAL_COPY(EX_VAR(opline->result.var), value);
  19755. }
  19756. goto exit_assign_obj;
  19757. }
  19758. }
  19759. }
  19760. if (!Z_OBJ_HT_P(object)->write_property) {
  19761. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  19762. zval_ptr_dtor_nogc(free_op_data);
  19763. goto exit_assign_obj;
  19764. }
  19765. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  19766. ZVAL_DEREF(value);
  19767. }
  19768. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  19769. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19770. ZVAL_COPY(EX_VAR(opline->result.var), value);
  19771. }
  19772. zval_ptr_dtor_nogc(free_op_data);
  19773. exit_assign_obj:
  19774. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  19775. /* assign_obj has two opcodes! */
  19776. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  19777. }
  19778. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19779. {
  19780. USE_OPLINE
  19781. zend_free_op free_op1;
  19782. zval *object, *property, *value, tmp;
  19783. SAVE_OPLINE();
  19784. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  19785. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  19786. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  19787. }
  19788. property = RT_CONSTANT(opline, opline->op2);
  19789. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  19790. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  19791. if (Z_ISREF_P(object)) {
  19792. object = Z_REFVAL_P(object);
  19793. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  19794. goto assign_object;
  19795. }
  19796. }
  19797. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  19798. goto exit_assign_obj;
  19799. }
  19800. }
  19801. assign_object:
  19802. if (IS_CONST == IS_CONST &&
  19803. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  19804. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  19805. zend_object *zobj = Z_OBJ_P(object);
  19806. zval *property_val;
  19807. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  19808. property_val = OBJ_PROP(zobj, prop_offset);
  19809. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  19810. fast_assign_obj:
  19811. value = zend_assign_to_variable(property_val, value, IS_CV);
  19812. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19813. ZVAL_COPY(EX_VAR(opline->result.var), value);
  19814. }
  19815. goto exit_assign_obj;
  19816. }
  19817. } else {
  19818. if (EXPECTED(zobj->properties != NULL)) {
  19819. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  19820. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  19821. GC_DELREF(zobj->properties);
  19822. }
  19823. zobj->properties = zend_array_dup(zobj->properties);
  19824. }
  19825. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  19826. if (property_val) {
  19827. goto fast_assign_obj;
  19828. }
  19829. }
  19830. if (!zobj->ce->__set) {
  19831. if (EXPECTED(zobj->properties == NULL)) {
  19832. rebuild_object_properties(zobj);
  19833. }
  19834. if (IS_CV == IS_CONST) {
  19835. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  19836. Z_ADDREF_P(value);
  19837. }
  19838. } else if (IS_CV != IS_TMP_VAR) {
  19839. if (Z_ISREF_P(value)) {
  19840. if (IS_CV == IS_VAR) {
  19841. zend_reference *ref = Z_REF_P(value);
  19842. if (GC_DELREF(ref) == 0) {
  19843. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  19844. efree_size(ref, sizeof(zend_reference));
  19845. value = &tmp;
  19846. } else {
  19847. value = Z_REFVAL_P(value);
  19848. Z_TRY_ADDREF_P(value);
  19849. }
  19850. } else {
  19851. value = Z_REFVAL_P(value);
  19852. Z_TRY_ADDREF_P(value);
  19853. }
  19854. } else if (IS_CV == IS_CV) {
  19855. Z_TRY_ADDREF_P(value);
  19856. }
  19857. }
  19858. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  19859. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19860. ZVAL_COPY(EX_VAR(opline->result.var), value);
  19861. }
  19862. goto exit_assign_obj;
  19863. }
  19864. }
  19865. }
  19866. if (!Z_OBJ_HT_P(object)->write_property) {
  19867. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  19868. goto exit_assign_obj;
  19869. }
  19870. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  19871. ZVAL_DEREF(value);
  19872. }
  19873. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  19874. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19875. ZVAL_COPY(EX_VAR(opline->result.var), value);
  19876. }
  19877. exit_assign_obj:
  19878. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  19879. /* assign_obj has two opcodes! */
  19880. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  19881. }
  19882. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19883. {
  19884. USE_OPLINE
  19885. zend_free_op free_op1;
  19886. zval *object_ptr;
  19887. zend_free_op free_op_data;
  19888. zval *value;
  19889. zval *variable_ptr;
  19890. zval *dim;
  19891. SAVE_OPLINE();
  19892. object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  19893. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  19894. try_assign_dim_array:
  19895. SEPARATE_ARRAY(object_ptr);
  19896. if (IS_CONST == IS_UNUSED) {
  19897. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  19898. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  19899. ZVAL_DEREF(value);
  19900. }
  19901. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  19902. if (UNEXPECTED(variable_ptr == NULL)) {
  19903. zend_cannot_add_element();
  19904. goto assign_dim_error;
  19905. } else if (IS_CONST == IS_CV) {
  19906. if (Z_REFCOUNTED_P(value)) {
  19907. Z_ADDREF_P(value);
  19908. }
  19909. } else if (IS_CONST == IS_VAR) {
  19910. if (value != free_op_data) {
  19911. if (Z_REFCOUNTED_P(value)) {
  19912. Z_ADDREF_P(value);
  19913. }
  19914. }
  19915. } else if (IS_CONST == IS_CONST) {
  19916. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  19917. Z_ADDREF_P(value);
  19918. }
  19919. }
  19920. } else {
  19921. dim = RT_CONSTANT(opline, opline->op2);
  19922. if (IS_CONST == IS_CONST) {
  19923. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  19924. } else {
  19925. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  19926. }
  19927. if (UNEXPECTED(variable_ptr == NULL)) {
  19928. goto assign_dim_error;
  19929. }
  19930. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  19931. value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
  19932. }
  19933. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19934. ZVAL_COPY(EX_VAR(opline->result.var), value);
  19935. }
  19936. } else {
  19937. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  19938. object_ptr = Z_REFVAL_P(object_ptr);
  19939. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  19940. goto try_assign_dim_array;
  19941. }
  19942. }
  19943. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  19944. dim = RT_CONSTANT(opline, opline->op2);
  19945. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  19946. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  19947. dim++;
  19948. }
  19949. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  19950. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  19951. if (IS_CONST == IS_UNUSED) {
  19952. zend_use_new_element_for_string();
  19953. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  19954. UNDEF_RESULT();
  19955. HANDLE_EXCEPTION();
  19956. } else {
  19957. dim = RT_CONSTANT(opline, opline->op2);
  19958. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  19959. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  19960. }
  19961. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  19962. ZVAL_ARR(object_ptr, zend_new_array(8));
  19963. goto try_assign_dim_array;
  19964. } else {
  19965. if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  19966. zend_use_scalar_as_array();
  19967. }
  19968. dim = RT_CONSTANT(opline, opline->op2);
  19969. assign_dim_error:
  19970. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  19971. ZVAL_NULL(EX_VAR(opline->result.var));
  19972. }
  19973. }
  19974. }
  19975. if (IS_CONST != IS_UNUSED) {
  19976. }
  19977. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  19978. /* assign_dim has two opcodes! */
  19979. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  19980. }
  19981. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  19982. {
  19983. USE_OPLINE
  19984. zend_free_op free_op1;
  19985. zval *object_ptr;
  19986. zend_free_op free_op_data;
  19987. zval *value;
  19988. zval *variable_ptr;
  19989. zval *dim;
  19990. SAVE_OPLINE();
  19991. object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  19992. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  19993. try_assign_dim_array:
  19994. SEPARATE_ARRAY(object_ptr);
  19995. if (IS_CONST == IS_UNUSED) {
  19996. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  19997. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  19998. ZVAL_DEREF(value);
  19999. }
  20000. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  20001. if (UNEXPECTED(variable_ptr == NULL)) {
  20002. zval_ptr_dtor_nogc(free_op_data);
  20003. zend_cannot_add_element();
  20004. goto assign_dim_error;
  20005. } else if (IS_TMP_VAR == IS_CV) {
  20006. if (Z_REFCOUNTED_P(value)) {
  20007. Z_ADDREF_P(value);
  20008. }
  20009. } else if (IS_TMP_VAR == IS_VAR) {
  20010. if (value != free_op_data) {
  20011. if (Z_REFCOUNTED_P(value)) {
  20012. Z_ADDREF_P(value);
  20013. }
  20014. zval_ptr_dtor_nogc(free_op_data);
  20015. }
  20016. } else if (IS_TMP_VAR == IS_CONST) {
  20017. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  20018. Z_ADDREF_P(value);
  20019. }
  20020. }
  20021. } else {
  20022. dim = RT_CONSTANT(opline, opline->op2);
  20023. if (IS_CONST == IS_CONST) {
  20024. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20025. } else {
  20026. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20027. }
  20028. if (UNEXPECTED(variable_ptr == NULL)) {
  20029. goto assign_dim_error;
  20030. }
  20031. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  20032. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
  20033. }
  20034. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20035. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20036. }
  20037. } else {
  20038. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  20039. object_ptr = Z_REFVAL_P(object_ptr);
  20040. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  20041. goto try_assign_dim_array;
  20042. }
  20043. }
  20044. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  20045. dim = RT_CONSTANT(opline, opline->op2);
  20046. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  20047. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  20048. dim++;
  20049. }
  20050. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  20051. zval_ptr_dtor_nogc(free_op_data);
  20052. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  20053. if (IS_CONST == IS_UNUSED) {
  20054. zend_use_new_element_for_string();
  20055. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20056. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  20057. UNDEF_RESULT();
  20058. HANDLE_EXCEPTION();
  20059. } else {
  20060. dim = RT_CONSTANT(opline, opline->op2);
  20061. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  20062. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  20063. zval_ptr_dtor_nogc(free_op_data);
  20064. }
  20065. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  20066. ZVAL_ARR(object_ptr, zend_new_array(8));
  20067. goto try_assign_dim_array;
  20068. } else {
  20069. if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  20070. zend_use_scalar_as_array();
  20071. }
  20072. dim = RT_CONSTANT(opline, opline->op2);
  20073. assign_dim_error:
  20074. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20075. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20076. ZVAL_NULL(EX_VAR(opline->result.var));
  20077. }
  20078. }
  20079. }
  20080. if (IS_CONST != IS_UNUSED) {
  20081. }
  20082. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  20083. /* assign_dim has two opcodes! */
  20084. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  20085. }
  20086. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20087. {
  20088. USE_OPLINE
  20089. zend_free_op free_op1;
  20090. zval *object_ptr;
  20091. zend_free_op free_op_data;
  20092. zval *value;
  20093. zval *variable_ptr;
  20094. zval *dim;
  20095. SAVE_OPLINE();
  20096. object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  20097. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  20098. try_assign_dim_array:
  20099. SEPARATE_ARRAY(object_ptr);
  20100. if (IS_CONST == IS_UNUSED) {
  20101. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  20102. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  20103. ZVAL_DEREF(value);
  20104. }
  20105. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  20106. if (UNEXPECTED(variable_ptr == NULL)) {
  20107. zval_ptr_dtor_nogc(free_op_data);
  20108. zend_cannot_add_element();
  20109. goto assign_dim_error;
  20110. } else if (IS_VAR == IS_CV) {
  20111. if (Z_REFCOUNTED_P(value)) {
  20112. Z_ADDREF_P(value);
  20113. }
  20114. } else if (IS_VAR == IS_VAR) {
  20115. if (value != free_op_data) {
  20116. if (Z_REFCOUNTED_P(value)) {
  20117. Z_ADDREF_P(value);
  20118. }
  20119. zval_ptr_dtor_nogc(free_op_data);
  20120. }
  20121. } else if (IS_VAR == IS_CONST) {
  20122. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  20123. Z_ADDREF_P(value);
  20124. }
  20125. }
  20126. } else {
  20127. dim = RT_CONSTANT(opline, opline->op2);
  20128. if (IS_CONST == IS_CONST) {
  20129. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20130. } else {
  20131. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20132. }
  20133. if (UNEXPECTED(variable_ptr == NULL)) {
  20134. goto assign_dim_error;
  20135. }
  20136. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  20137. value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
  20138. }
  20139. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20140. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20141. }
  20142. } else {
  20143. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  20144. object_ptr = Z_REFVAL_P(object_ptr);
  20145. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  20146. goto try_assign_dim_array;
  20147. }
  20148. }
  20149. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  20150. dim = RT_CONSTANT(opline, opline->op2);
  20151. value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  20152. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  20153. dim++;
  20154. }
  20155. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  20156. zval_ptr_dtor_nogc(free_op_data);
  20157. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  20158. if (IS_CONST == IS_UNUSED) {
  20159. zend_use_new_element_for_string();
  20160. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20161. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  20162. UNDEF_RESULT();
  20163. HANDLE_EXCEPTION();
  20164. } else {
  20165. dim = RT_CONSTANT(opline, opline->op2);
  20166. value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  20167. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  20168. zval_ptr_dtor_nogc(free_op_data);
  20169. }
  20170. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  20171. ZVAL_ARR(object_ptr, zend_new_array(8));
  20172. goto try_assign_dim_array;
  20173. } else {
  20174. if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  20175. zend_use_scalar_as_array();
  20176. }
  20177. dim = RT_CONSTANT(opline, opline->op2);
  20178. assign_dim_error:
  20179. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  20180. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20181. ZVAL_NULL(EX_VAR(opline->result.var));
  20182. }
  20183. }
  20184. }
  20185. if (IS_CONST != IS_UNUSED) {
  20186. }
  20187. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  20188. /* assign_dim has two opcodes! */
  20189. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  20190. }
  20191. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20192. {
  20193. USE_OPLINE
  20194. zend_free_op free_op1;
  20195. zval *object_ptr;
  20196. zend_free_op free_op_data;
  20197. zval *value;
  20198. zval *variable_ptr;
  20199. zval *dim;
  20200. SAVE_OPLINE();
  20201. object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  20202. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  20203. try_assign_dim_array:
  20204. SEPARATE_ARRAY(object_ptr);
  20205. if (IS_CONST == IS_UNUSED) {
  20206. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  20207. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  20208. ZVAL_DEREF(value);
  20209. }
  20210. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  20211. if (UNEXPECTED(variable_ptr == NULL)) {
  20212. zend_cannot_add_element();
  20213. goto assign_dim_error;
  20214. } else if (IS_CV == IS_CV) {
  20215. if (Z_REFCOUNTED_P(value)) {
  20216. Z_ADDREF_P(value);
  20217. }
  20218. } else if (IS_CV == IS_VAR) {
  20219. if (value != free_op_data) {
  20220. if (Z_REFCOUNTED_P(value)) {
  20221. Z_ADDREF_P(value);
  20222. }
  20223. }
  20224. } else if (IS_CV == IS_CONST) {
  20225. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  20226. Z_ADDREF_P(value);
  20227. }
  20228. }
  20229. } else {
  20230. dim = RT_CONSTANT(opline, opline->op2);
  20231. if (IS_CONST == IS_CONST) {
  20232. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20233. } else {
  20234. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  20235. }
  20236. if (UNEXPECTED(variable_ptr == NULL)) {
  20237. goto assign_dim_error;
  20238. }
  20239. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  20240. value = zend_assign_to_variable(variable_ptr, value, IS_CV);
  20241. }
  20242. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20243. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20244. }
  20245. } else {
  20246. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  20247. object_ptr = Z_REFVAL_P(object_ptr);
  20248. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  20249. goto try_assign_dim_array;
  20250. }
  20251. }
  20252. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  20253. dim = RT_CONSTANT(opline, opline->op2);
  20254. value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  20255. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  20256. dim++;
  20257. }
  20258. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  20259. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  20260. if (IS_CONST == IS_UNUSED) {
  20261. zend_use_new_element_for_string();
  20262. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  20263. UNDEF_RESULT();
  20264. HANDLE_EXCEPTION();
  20265. } else {
  20266. dim = RT_CONSTANT(opline, opline->op2);
  20267. value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  20268. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  20269. }
  20270. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  20271. ZVAL_ARR(object_ptr, zend_new_array(8));
  20272. goto try_assign_dim_array;
  20273. } else {
  20274. if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  20275. zend_use_scalar_as_array();
  20276. }
  20277. dim = RT_CONSTANT(opline, opline->op2);
  20278. assign_dim_error:
  20279. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20280. ZVAL_NULL(EX_VAR(opline->result.var));
  20281. }
  20282. }
  20283. }
  20284. if (IS_CONST != IS_UNUSED) {
  20285. }
  20286. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  20287. /* assign_dim has two opcodes! */
  20288. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  20289. }
  20290. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20291. {
  20292. USE_OPLINE
  20293. zend_free_op free_op1;
  20294. zval *value;
  20295. zval *variable_ptr;
  20296. SAVE_OPLINE();
  20297. value = RT_CONSTANT(opline, opline->op2);
  20298. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  20299. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  20300. if (UNEXPECTED(0)) {
  20301. ZVAL_NULL(EX_VAR(opline->result.var));
  20302. }
  20303. } else {
  20304. value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
  20305. if (UNEXPECTED(0)) {
  20306. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20307. }
  20308. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  20309. /* zend_assign_to_variable() always takes care of op2, never free it! */
  20310. }
  20311. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20312. }
  20313. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20314. {
  20315. USE_OPLINE
  20316. zend_free_op free_op1;
  20317. zval *value;
  20318. zval *variable_ptr;
  20319. SAVE_OPLINE();
  20320. value = RT_CONSTANT(opline, opline->op2);
  20321. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  20322. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  20323. if (UNEXPECTED(1)) {
  20324. ZVAL_NULL(EX_VAR(opline->result.var));
  20325. }
  20326. } else {
  20327. value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
  20328. if (UNEXPECTED(1)) {
  20329. ZVAL_COPY(EX_VAR(opline->result.var), value);
  20330. }
  20331. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  20332. /* zend_assign_to_variable() always takes care of op2, never free it! */
  20333. }
  20334. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20335. }
  20336. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20337. {
  20338. USE_OPLINE
  20339. zval *function_name;
  20340. zend_class_entry *ce;
  20341. zend_object *object;
  20342. zend_function *fbc;
  20343. zend_execute_data *call;
  20344. SAVE_OPLINE();
  20345. if (IS_VAR == IS_CONST) {
  20346. /* no function found. try a static method in class */
  20347. ce = CACHED_PTR(opline->result.num);
  20348. if (UNEXPECTED(ce == NULL)) {
  20349. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  20350. if (UNEXPECTED(ce == NULL)) {
  20351. ZEND_ASSERT(EG(exception));
  20352. HANDLE_EXCEPTION();
  20353. }
  20354. if (IS_CONST != IS_CONST) {
  20355. CACHE_PTR(opline->result.num, ce);
  20356. }
  20357. }
  20358. } else if (IS_VAR == IS_UNUSED) {
  20359. ce = zend_fetch_class(NULL, opline->op1.num);
  20360. if (UNEXPECTED(ce == NULL)) {
  20361. ZEND_ASSERT(EG(exception));
  20362. HANDLE_EXCEPTION();
  20363. }
  20364. } else {
  20365. ce = Z_CE_P(EX_VAR(opline->op1.var));
  20366. }
  20367. if (IS_VAR == IS_CONST &&
  20368. IS_CONST == IS_CONST &&
  20369. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  20370. /* nothing to do */
  20371. } else if (IS_VAR != IS_CONST &&
  20372. IS_CONST == IS_CONST &&
  20373. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  20374. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  20375. } else if (IS_CONST != IS_UNUSED) {
  20376. function_name = RT_CONSTANT(opline, opline->op2);
  20377. if (IS_CONST != IS_CONST) {
  20378. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  20379. do {
  20380. if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  20381. function_name = Z_REFVAL_P(function_name);
  20382. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  20383. break;
  20384. }
  20385. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  20386. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  20387. if (UNEXPECTED(EG(exception) != NULL)) {
  20388. HANDLE_EXCEPTION();
  20389. }
  20390. }
  20391. zend_throw_error(NULL, "Function name must be a string");
  20392. HANDLE_EXCEPTION();
  20393. } while (0);
  20394. }
  20395. }
  20396. if (ce->get_static_method) {
  20397. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  20398. } else {
  20399. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  20400. }
  20401. if (UNEXPECTED(fbc == NULL)) {
  20402. if (EXPECTED(!EG(exception))) {
  20403. zend_undefined_method(ce, Z_STR_P(function_name));
  20404. }
  20405. HANDLE_EXCEPTION();
  20406. }
  20407. if (IS_CONST == IS_CONST &&
  20408. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  20409. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
  20410. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  20411. }
  20412. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  20413. init_func_run_time_cache(&fbc->op_array);
  20414. }
  20415. if (IS_CONST != IS_CONST) {
  20416. }
  20417. } else {
  20418. if (UNEXPECTED(ce->constructor == NULL)) {
  20419. zend_throw_error(NULL, "Cannot call constructor");
  20420. HANDLE_EXCEPTION();
  20421. }
  20422. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  20423. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  20424. HANDLE_EXCEPTION();
  20425. }
  20426. fbc = ce->constructor;
  20427. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  20428. init_func_run_time_cache(&fbc->op_array);
  20429. }
  20430. }
  20431. object = NULL;
  20432. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  20433. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  20434. object = Z_OBJ(EX(This));
  20435. ce = object->ce;
  20436. } else {
  20437. zend_non_static_method_call(fbc);
  20438. if (UNEXPECTED(EG(exception) != NULL)) {
  20439. HANDLE_EXCEPTION();
  20440. }
  20441. }
  20442. }
  20443. if (IS_VAR == IS_UNUSED) {
  20444. /* previous opcode is ZEND_FETCH_CLASS */
  20445. if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  20446. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
  20447. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  20448. ce = Z_OBJCE(EX(This));
  20449. } else {
  20450. ce = Z_CE(EX(This));
  20451. }
  20452. }
  20453. }
  20454. call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  20455. fbc, opline->extended_value, ce, object);
  20456. call->prev_execute_data = EX(call);
  20457. EX(call) = call;
  20458. ZEND_VM_NEXT_OPCODE();
  20459. }
  20460. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20461. {
  20462. zend_class_entry *ce, *scope;
  20463. zend_class_constant *c;
  20464. zval *value, *zv;
  20465. USE_OPLINE
  20466. SAVE_OPLINE();
  20467. do {
  20468. if (IS_VAR == IS_CONST) {
  20469. if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
  20470. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  20471. break;
  20472. } else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
  20473. ce = CACHED_PTR(opline->extended_value);
  20474. } else {
  20475. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  20476. if (UNEXPECTED(ce == NULL)) {
  20477. ZEND_ASSERT(EG(exception));
  20478. ZVAL_UNDEF(EX_VAR(opline->result.var));
  20479. HANDLE_EXCEPTION();
  20480. }
  20481. }
  20482. } else {
  20483. if (IS_VAR == IS_UNUSED) {
  20484. ce = zend_fetch_class(NULL, opline->op1.num);
  20485. if (UNEXPECTED(ce == NULL)) {
  20486. ZEND_ASSERT(EG(exception));
  20487. ZVAL_UNDEF(EX_VAR(opline->result.var));
  20488. HANDLE_EXCEPTION();
  20489. }
  20490. } else {
  20491. ce = Z_CE_P(EX_VAR(opline->op1.var));
  20492. }
  20493. if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  20494. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  20495. break;
  20496. }
  20497. }
  20498. zv = zend_hash_find_ex(&ce->constants_table, Z_STR_P(RT_CONSTANT(opline, opline->op2)), 1);
  20499. if (EXPECTED(zv != NULL)) {
  20500. c = Z_PTR_P(zv);
  20501. scope = EX(func)->op_array.scope;
  20502. if (!zend_verify_const_access(c, scope)) {
  20503. zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
  20504. ZVAL_UNDEF(EX_VAR(opline->result.var));
  20505. HANDLE_EXCEPTION();
  20506. }
  20507. value = &c->value;
  20508. if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
  20509. zval_update_constant_ex(value, c->ce);
  20510. if (UNEXPECTED(EG(exception) != NULL)) {
  20511. ZVAL_UNDEF(EX_VAR(opline->result.var));
  20512. HANDLE_EXCEPTION();
  20513. }
  20514. }
  20515. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
  20516. } else {
  20517. zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
  20518. ZVAL_UNDEF(EX_VAR(opline->result.var));
  20519. HANDLE_EXCEPTION();
  20520. }
  20521. } while (0);
  20522. ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
  20523. ZEND_VM_NEXT_OPCODE();
  20524. }
  20525. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20526. {
  20527. USE_OPLINE
  20528. zend_free_op free_op1;
  20529. zval *expr_ptr, new_expr;
  20530. SAVE_OPLINE();
  20531. if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
  20532. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  20533. expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  20534. if (Z_ISREF_P(expr_ptr)) {
  20535. Z_ADDREF_P(expr_ptr);
  20536. } else {
  20537. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  20538. }
  20539. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  20540. } else {
  20541. expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  20542. if (IS_VAR == IS_TMP_VAR) {
  20543. /* pass */
  20544. } else if (IS_VAR == IS_CONST) {
  20545. Z_TRY_ADDREF_P(expr_ptr);
  20546. } else if (IS_VAR == IS_CV) {
  20547. ZVAL_DEREF(expr_ptr);
  20548. Z_TRY_ADDREF_P(expr_ptr);
  20549. } else /* if (IS_VAR == IS_VAR) */ {
  20550. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  20551. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  20552. expr_ptr = Z_REFVAL_P(expr_ptr);
  20553. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  20554. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  20555. expr_ptr = &new_expr;
  20556. efree_size(ref, sizeof(zend_reference));
  20557. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  20558. Z_ADDREF_P(expr_ptr);
  20559. }
  20560. }
  20561. }
  20562. }
  20563. if (IS_CONST != IS_UNUSED) {
  20564. zval *offset = RT_CONSTANT(opline, opline->op2);
  20565. zend_string *str;
  20566. zend_ulong hval;
  20567. add_again:
  20568. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  20569. str = Z_STR_P(offset);
  20570. if (IS_CONST != IS_CONST) {
  20571. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  20572. goto num_index;
  20573. }
  20574. }
  20575. str_index:
  20576. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  20577. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  20578. hval = Z_LVAL_P(offset);
  20579. num_index:
  20580. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  20581. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  20582. offset = Z_REFVAL_P(offset);
  20583. goto add_again;
  20584. } else if (Z_TYPE_P(offset) == IS_NULL) {
  20585. str = ZSTR_EMPTY_ALLOC();
  20586. goto str_index;
  20587. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  20588. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  20589. goto num_index;
  20590. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  20591. hval = 0;
  20592. goto num_index;
  20593. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  20594. hval = 1;
  20595. goto num_index;
  20596. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  20597. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  20598. str = ZSTR_EMPTY_ALLOC();
  20599. goto str_index;
  20600. } else {
  20601. zend_illegal_offset();
  20602. zval_ptr_dtor_nogc(expr_ptr);
  20603. }
  20604. } else {
  20605. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  20606. zend_cannot_add_element();
  20607. zval_ptr_dtor_nogc(expr_ptr);
  20608. }
  20609. }
  20610. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20611. }
  20612. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20613. {
  20614. zval *array;
  20615. uint32_t size;
  20616. USE_OPLINE
  20617. array = EX_VAR(opline->result.var);
  20618. if (IS_VAR != IS_UNUSED) {
  20619. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  20620. ZVAL_ARR(array, zend_new_array(size));
  20621. /* Explicitly initialize array as not-packed if flag is set */
  20622. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  20623. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  20624. }
  20625. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20626. } else {
  20627. ZVAL_EMPTY_ARRAY(array);
  20628. ZEND_VM_NEXT_OPCODE();
  20629. }
  20630. }
  20631. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20632. {
  20633. USE_OPLINE
  20634. zend_free_op free_op1;
  20635. zval *container;
  20636. zval *offset;
  20637. zend_ulong hval;
  20638. zend_string *key;
  20639. SAVE_OPLINE();
  20640. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  20641. offset = RT_CONSTANT(opline, opline->op2);
  20642. do {
  20643. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  20644. HashTable *ht;
  20645. unset_dim_array:
  20646. SEPARATE_ARRAY(container);
  20647. ht = Z_ARRVAL_P(container);
  20648. offset_again:
  20649. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  20650. key = Z_STR_P(offset);
  20651. if (IS_CONST != IS_CONST) {
  20652. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  20653. goto num_index_dim;
  20654. }
  20655. }
  20656. str_index_dim:
  20657. if (ht == &EG(symbol_table)) {
  20658. zend_delete_global_variable(key);
  20659. } else {
  20660. zend_hash_del(ht, key);
  20661. }
  20662. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  20663. hval = Z_LVAL_P(offset);
  20664. num_index_dim:
  20665. zend_hash_index_del(ht, hval);
  20666. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  20667. offset = Z_REFVAL_P(offset);
  20668. goto offset_again;
  20669. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  20670. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  20671. goto num_index_dim;
  20672. } else if (Z_TYPE_P(offset) == IS_NULL) {
  20673. key = ZSTR_EMPTY_ALLOC();
  20674. goto str_index_dim;
  20675. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  20676. hval = 0;
  20677. goto num_index_dim;
  20678. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  20679. hval = 1;
  20680. goto num_index_dim;
  20681. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  20682. hval = Z_RES_HANDLE_P(offset);
  20683. goto num_index_dim;
  20684. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  20685. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  20686. key = ZSTR_EMPTY_ALLOC();
  20687. goto str_index_dim;
  20688. } else {
  20689. zend_error(E_WARNING, "Illegal offset type in unset");
  20690. }
  20691. break;
  20692. } else if (Z_ISREF_P(container)) {
  20693. container = Z_REFVAL_P(container);
  20694. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  20695. goto unset_dim_array;
  20696. }
  20697. }
  20698. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  20699. container = GET_OP1_UNDEF_CV(container, BP_VAR_R);
  20700. }
  20701. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  20702. offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  20703. }
  20704. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  20705. if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
  20706. zend_use_object_as_array();
  20707. } else {
  20708. if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  20709. offset++;
  20710. }
  20711. Z_OBJ_HT_P(container)->unset_dimension(container, offset);
  20712. }
  20713. } else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  20714. zend_throw_error(NULL, "Cannot unset string offsets");
  20715. }
  20716. } while (0);
  20717. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  20718. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20719. }
  20720. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20721. {
  20722. USE_OPLINE
  20723. zend_free_op free_op1;
  20724. zval *container;
  20725. zval *offset;
  20726. SAVE_OPLINE();
  20727. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  20728. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  20729. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20730. }
  20731. offset = RT_CONSTANT(opline, opline->op2);
  20732. do {
  20733. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  20734. if (Z_ISREF_P(container)) {
  20735. container = Z_REFVAL_P(container);
  20736. if (Z_TYPE_P(container) != IS_OBJECT) {
  20737. break;
  20738. }
  20739. } else {
  20740. break;
  20741. }
  20742. }
  20743. if (Z_OBJ_HT_P(container)->unset_property) {
  20744. Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  20745. } else {
  20746. zend_wrong_property_unset(offset);
  20747. }
  20748. } while (0);
  20749. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  20750. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20751. }
  20752. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20753. {
  20754. USE_OPLINE
  20755. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  20756. SAVE_OPLINE();
  20757. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  20758. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20759. }
  20760. /* Destroy the previously yielded value */
  20761. zval_ptr_dtor(&generator->value);
  20762. /* Destroy the previously yielded key */
  20763. zval_ptr_dtor(&generator->key);
  20764. /* Set the new yielded value */
  20765. if (IS_VAR != IS_UNUSED) {
  20766. zend_free_op free_op1;
  20767. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  20768. /* Constants and temporary variables aren't yieldable by reference,
  20769. * but we still allow them with a notice. */
  20770. if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
  20771. zval *value;
  20772. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  20773. value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  20774. ZVAL_COPY_VALUE(&generator->value, value);
  20775. if (IS_VAR == IS_CONST) {
  20776. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  20777. Z_ADDREF(generator->value);
  20778. }
  20779. }
  20780. } else {
  20781. zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  20782. /* If a function call result is yielded and the function did
  20783. * not return by reference we throw a notice. */
  20784. if (IS_VAR == IS_VAR &&
  20785. (value_ptr == &EG(uninitialized_zval) ||
  20786. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  20787. !Z_ISREF_P(value_ptr)))) {
  20788. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  20789. ZVAL_COPY(&generator->value, value_ptr);
  20790. } else {
  20791. if (Z_ISREF_P(value_ptr)) {
  20792. Z_ADDREF_P(value_ptr);
  20793. } else {
  20794. ZVAL_MAKE_REF_EX(value_ptr, 2);
  20795. }
  20796. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  20797. }
  20798. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  20799. }
  20800. } else {
  20801. zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  20802. /* Consts, temporary variables and references need copying */
  20803. if (IS_VAR == IS_CONST) {
  20804. ZVAL_COPY_VALUE(&generator->value, value);
  20805. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  20806. Z_ADDREF(generator->value);
  20807. }
  20808. } else if (IS_VAR == IS_TMP_VAR) {
  20809. ZVAL_COPY_VALUE(&generator->value, value);
  20810. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  20811. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  20812. zval_ptr_dtor_nogc(free_op1);
  20813. } else {
  20814. ZVAL_COPY_VALUE(&generator->value, value);
  20815. if (IS_VAR == IS_CV) {
  20816. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  20817. }
  20818. }
  20819. }
  20820. } else {
  20821. /* If no value was specified yield null */
  20822. ZVAL_NULL(&generator->value);
  20823. }
  20824. /* Set the new yielded key */
  20825. if (IS_CONST != IS_UNUSED) {
  20826. zval *key = RT_CONSTANT(opline, opline->op2);
  20827. /* Consts, temporary variables and references need copying */
  20828. if (IS_CONST == IS_CONST) {
  20829. ZVAL_COPY_VALUE(&generator->key, key);
  20830. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  20831. Z_ADDREF(generator->key);
  20832. }
  20833. } else if (IS_CONST == IS_TMP_VAR) {
  20834. ZVAL_COPY_VALUE(&generator->key, key);
  20835. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  20836. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  20837. } else {
  20838. ZVAL_COPY_VALUE(&generator->key, key);
  20839. if (IS_CONST == IS_CV) {
  20840. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  20841. }
  20842. }
  20843. if (Z_TYPE(generator->key) == IS_LONG
  20844. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  20845. ) {
  20846. generator->largest_used_integer_key = Z_LVAL(generator->key);
  20847. }
  20848. } else {
  20849. /* If no key was specified we use auto-increment keys */
  20850. generator->largest_used_integer_key++;
  20851. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  20852. }
  20853. if (RETURN_VALUE_USED(opline)) {
  20854. /* If the return value of yield is used set the send
  20855. * target and initialize it to NULL */
  20856. generator->send_target = EX_VAR(opline->result.var);
  20857. ZVAL_NULL(generator->send_target);
  20858. } else {
  20859. generator->send_target = NULL;
  20860. }
  20861. /* We increment to the next op, so we are at the correct position when the
  20862. * generator is resumed. */
  20863. ZEND_VM_INC_OPCODE();
  20864. /* The GOTO VM uses a local opline variable. We need to set the opline
  20865. * variable in execute_data so we don't resume at an old position. */
  20866. SAVE_OPLINE();
  20867. ZEND_VM_RETURN();
  20868. }
  20869. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  20870. {
  20871. USE_OPLINE
  20872. zend_free_op free_op1;
  20873. zval *op1;
  20874. HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  20875. int result;
  20876. SAVE_OPLINE();
  20877. op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  20878. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  20879. result = zend_hash_exists(ht, Z_STR_P(op1));
  20880. } else if (opline->extended_value) {
  20881. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  20882. result = zend_hash_index_exists(ht, Z_LVAL_P(op1));
  20883. } else {
  20884. result = 0;
  20885. }
  20886. } else if (Z_TYPE_P(op1) <= IS_FALSE) {
  20887. result = zend_hash_exists(ht, ZSTR_EMPTY_ALLOC());
  20888. } else {
  20889. zend_string *key;
  20890. zval key_tmp, result_tmp;
  20891. result = 0;
  20892. ZEND_HASH_FOREACH_STR_KEY(ht, key) {
  20893. ZVAL_STR(&key_tmp, key);
  20894. compare_function(&result_tmp, op1, &key_tmp);
  20895. if (Z_LVAL(result_tmp) == 0) {
  20896. result = 1;
  20897. break;
  20898. }
  20899. } ZEND_HASH_FOREACH_END();
  20900. }
  20901. zval_ptr_dtor_nogc(free_op1);
  20902. ZEND_VM_SMART_BRANCH(result, 1);
  20903. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  20904. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  20905. }
  20906. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  20907. {
  20908. USE_OPLINE
  20909. zend_free_op free_op1, free_op2, free_op_data1;
  20910. zval *object;
  20911. zval *property;
  20912. zval *value;
  20913. zval *zptr;
  20914. SAVE_OPLINE();
  20915. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  20916. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  20917. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  20918. }
  20919. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  20920. do {
  20921. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  20922. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  20923. if (Z_ISREF_P(object)) {
  20924. object = Z_REFVAL_P(object);
  20925. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  20926. goto assign_op_object;
  20927. }
  20928. }
  20929. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  20930. break;
  20931. }
  20932. }
  20933. /* here we are sure we are dealing with an object */
  20934. assign_op_object:
  20935. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  20936. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
  20937. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  20938. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20939. ZVAL_NULL(EX_VAR(opline->result.var));
  20940. }
  20941. } else {
  20942. ZVAL_DEREF(zptr);
  20943. binary_op(zptr, zptr, value);
  20944. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20945. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  20946. }
  20947. }
  20948. } else {
  20949. zend_assign_op_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC);
  20950. }
  20951. } while (0);
  20952. FREE_OP(free_op_data1);
  20953. zval_ptr_dtor_nogc(free_op2);
  20954. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  20955. /* assign_obj has two opcodes! */
  20956. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  20957. }
  20958. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  20959. {
  20960. USE_OPLINE
  20961. zend_free_op free_op1, free_op2, free_op_data1;
  20962. zval *var_ptr;
  20963. zval *value, *container, *dim;
  20964. SAVE_OPLINE();
  20965. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  20966. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  20967. assign_dim_op_array:
  20968. SEPARATE_ARRAY(container);
  20969. assign_dim_op_new_array:
  20970. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  20971. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  20972. var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
  20973. if (UNEXPECTED(!var_ptr)) {
  20974. zend_cannot_add_element();
  20975. goto assign_dim_op_ret_null;
  20976. }
  20977. } else {
  20978. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  20979. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
  20980. } else {
  20981. var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
  20982. }
  20983. if (UNEXPECTED(!var_ptr)) {
  20984. goto assign_dim_op_ret_null;
  20985. }
  20986. ZVAL_DEREF(var_ptr);
  20987. }
  20988. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  20989. binary_op(var_ptr, var_ptr, value);
  20990. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  20991. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  20992. }
  20993. } else {
  20994. if (EXPECTED(Z_ISREF_P(container))) {
  20995. container = Z_REFVAL_P(container);
  20996. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  20997. goto assign_dim_op_array;
  20998. }
  20999. } else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  21000. container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
  21001. assign_dim_op_convert_to_array:
  21002. ZVAL_ARR(container, zend_new_array(8));
  21003. goto assign_dim_op_new_array;
  21004. }
  21005. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  21006. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  21007. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  21008. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  21009. dim++;
  21010. }
  21011. zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC);
  21012. } else {
  21013. if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  21014. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  21015. zend_use_new_element_for_string();
  21016. } else {
  21017. zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC);
  21018. zend_wrong_string_offset(EXECUTE_DATA_C);
  21019. }
  21020. UNDEF_RESULT();
  21021. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  21022. goto assign_dim_op_convert_to_array;
  21023. } else {
  21024. if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
  21025. zend_use_scalar_as_array();
  21026. }
  21027. assign_dim_op_ret_null:
  21028. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21029. ZVAL_NULL(EX_VAR(opline->result.var));
  21030. }
  21031. }
  21032. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  21033. }
  21034. }
  21035. zval_ptr_dtor_nogc(free_op2);
  21036. FREE_OP(free_op_data1);
  21037. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  21038. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  21039. }
  21040. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_VAR_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  21041. {
  21042. USE_OPLINE
  21043. zend_free_op free_op1, free_op2;
  21044. zval *var_ptr;
  21045. zval *value;
  21046. SAVE_OPLINE();
  21047. value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  21048. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  21049. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  21050. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21051. ZVAL_NULL(EX_VAR(opline->result.var));
  21052. }
  21053. } else {
  21054. ZVAL_DEREF(var_ptr);
  21055. binary_op(var_ptr, var_ptr, value);
  21056. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21057. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  21058. }
  21059. }
  21060. zval_ptr_dtor_nogc(free_op2);
  21061. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  21062. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21063. }
  21064. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  21065. {
  21066. #if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED
  21067. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21068. #else
  21069. # if 0 || IS_VAR != IS_UNUSED
  21070. # if 0
  21071. /* opline->extended_value checks are specialized, don't need opline */
  21072. USE_OPLINE
  21073. # endif
  21074. if (EXPECTED(1)) {
  21075. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21076. }
  21077. if (EXPECTED(0)) {
  21078. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21079. }
  21080. # endif
  21081. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21082. #endif
  21083. }
  21084. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  21085. {
  21086. #if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED
  21087. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21088. #else
  21089. # if 0 || IS_VAR != IS_UNUSED
  21090. # if 0
  21091. /* opline->extended_value checks are specialized, don't need opline */
  21092. USE_OPLINE
  21093. # endif
  21094. if (EXPECTED(0)) {
  21095. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21096. }
  21097. if (EXPECTED(1)) {
  21098. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21099. }
  21100. # endif
  21101. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21102. #endif
  21103. }
  21104. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  21105. {
  21106. #if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED
  21107. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21108. #else
  21109. # if 0 || IS_VAR != IS_UNUSED
  21110. # if 0
  21111. /* opline->extended_value checks are specialized, don't need opline */
  21112. USE_OPLINE
  21113. # endif
  21114. if (EXPECTED(0)) {
  21115. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21116. }
  21117. if (EXPECTED(0)) {
  21118. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21119. }
  21120. # endif
  21121. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21122. #endif
  21123. }
  21124. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21125. {
  21126. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21127. }
  21128. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21129. {
  21130. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21131. }
  21132. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21133. {
  21134. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21135. }
  21136. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21137. {
  21138. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21139. }
  21140. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21141. {
  21142. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21143. }
  21144. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21145. {
  21146. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21147. }
  21148. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21149. {
  21150. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21151. }
  21152. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21153. {
  21154. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21155. }
  21156. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21157. {
  21158. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21159. }
  21160. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21161. {
  21162. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21163. }
  21164. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21165. {
  21166. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21167. }
  21168. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21169. {
  21170. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21171. }
  21172. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21173. {
  21174. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21175. }
  21176. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21177. {
  21178. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21179. }
  21180. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21181. {
  21182. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21183. }
  21184. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21185. {
  21186. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21187. }
  21188. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21189. {
  21190. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21191. }
  21192. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21193. {
  21194. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21195. }
  21196. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21197. {
  21198. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21199. }
  21200. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21201. {
  21202. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21203. }
  21204. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21205. {
  21206. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21207. }
  21208. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21209. {
  21210. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21211. }
  21212. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21213. {
  21214. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21215. }
  21216. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21217. {
  21218. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21219. }
  21220. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21221. {
  21222. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21223. }
  21224. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21225. {
  21226. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21227. }
  21228. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21229. {
  21230. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21231. }
  21232. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21233. {
  21234. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21235. }
  21236. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21237. {
  21238. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21239. }
  21240. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21241. {
  21242. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21243. }
  21244. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21245. {
  21246. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21247. }
  21248. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21249. {
  21250. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21251. }
  21252. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21253. {
  21254. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21255. }
  21256. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21257. {
  21258. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21259. }
  21260. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21261. {
  21262. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21263. }
  21264. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21265. {
  21266. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21267. }
  21268. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  21269. {
  21270. USE_OPLINE
  21271. zend_free_op free_op1, free_op2;
  21272. zval *object;
  21273. zval *property;
  21274. zval *zptr;
  21275. SAVE_OPLINE();
  21276. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  21277. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  21278. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21279. }
  21280. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  21281. do {
  21282. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  21283. if (Z_ISREF_P(object)) {
  21284. object = Z_REFVAL_P(object);
  21285. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  21286. goto pre_incdec_object;
  21287. }
  21288. }
  21289. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  21290. break;
  21291. }
  21292. }
  21293. /* here we are sure we are dealing with an object */
  21294. pre_incdec_object:
  21295. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  21296. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  21297. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  21298. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21299. ZVAL_NULL(EX_VAR(opline->result.var));
  21300. }
  21301. } else {
  21302. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  21303. if (inc) {
  21304. fast_long_increment_function(zptr);
  21305. } else {
  21306. fast_long_decrement_function(zptr);
  21307. }
  21308. } else {
  21309. ZVAL_DEREF(zptr);
  21310. if (inc) {
  21311. increment_function(zptr);
  21312. } else {
  21313. decrement_function(zptr);
  21314. }
  21315. }
  21316. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21317. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  21318. }
  21319. }
  21320. } else {
  21321. zend_pre_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  21322. }
  21323. } while (0);
  21324. zval_ptr_dtor_nogc(free_op2);
  21325. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  21326. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21327. }
  21328. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21329. {
  21330. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21331. }
  21332. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21333. {
  21334. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21335. }
  21336. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  21337. {
  21338. USE_OPLINE
  21339. zend_free_op free_op1, free_op2;
  21340. zval *object;
  21341. zval *property;
  21342. zval *zptr;
  21343. SAVE_OPLINE();
  21344. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  21345. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  21346. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21347. }
  21348. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  21349. do {
  21350. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  21351. if (Z_ISREF_P(object)) {
  21352. object = Z_REFVAL_P(object);
  21353. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  21354. goto post_incdec_object;
  21355. }
  21356. }
  21357. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  21358. break;
  21359. }
  21360. }
  21361. /* here we are sure we are dealing with an object */
  21362. post_incdec_object:
  21363. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  21364. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  21365. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  21366. ZVAL_NULL(EX_VAR(opline->result.var));
  21367. } else {
  21368. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  21369. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr));
  21370. if (inc) {
  21371. fast_long_increment_function(zptr);
  21372. } else {
  21373. fast_long_decrement_function(zptr);
  21374. }
  21375. } else {
  21376. ZVAL_DEREF(zptr);
  21377. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  21378. if (inc) {
  21379. increment_function(zptr);
  21380. } else {
  21381. decrement_function(zptr);
  21382. }
  21383. }
  21384. }
  21385. } else {
  21386. zend_post_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  21387. }
  21388. } while (0);
  21389. zval_ptr_dtor_nogc(free_op2);
  21390. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  21391. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21392. }
  21393. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21394. {
  21395. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21396. }
  21397. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21398. {
  21399. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  21400. }
  21401. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21402. {
  21403. USE_OPLINE
  21404. zend_free_op free_op1, free_op2;
  21405. zval *container;
  21406. SAVE_OPLINE();
  21407. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  21408. zend_fetch_dimension_address_W(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  21409. zval_ptr_dtor_nogc(free_op2);
  21410. if (IS_VAR == IS_VAR) {
  21411. zval *result = EX_VAR(opline->result.var);
  21412. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  21413. }
  21414. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21415. }
  21416. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21417. {
  21418. USE_OPLINE
  21419. zend_free_op free_op1, free_op2;
  21420. zval *container;
  21421. SAVE_OPLINE();
  21422. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  21423. zend_fetch_dimension_address_RW(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  21424. zval_ptr_dtor_nogc(free_op2);
  21425. if (IS_VAR == IS_VAR) {
  21426. zval *result = EX_VAR(opline->result.var);
  21427. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  21428. }
  21429. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21430. }
  21431. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21432. {
  21433. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  21434. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  21435. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21436. }
  21437. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21438. } else {
  21439. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  21440. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21441. }
  21442. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21443. }
  21444. }
  21445. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21446. {
  21447. USE_OPLINE
  21448. zend_free_op free_op1, free_op2;
  21449. zval *container;
  21450. SAVE_OPLINE();
  21451. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  21452. zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  21453. zval_ptr_dtor_nogc(free_op2);
  21454. if (IS_VAR == IS_VAR) {
  21455. zval *result = EX_VAR(opline->result.var);
  21456. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  21457. }
  21458. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21459. }
  21460. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21461. {
  21462. USE_OPLINE
  21463. zend_free_op free_op1, free_op2;
  21464. zval *property, *container, *result;
  21465. SAVE_OPLINE();
  21466. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  21467. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  21468. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21469. }
  21470. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  21471. result = EX_VAR(opline->result.var);
  21472. zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC);
  21473. zval_ptr_dtor_nogc(free_op2);
  21474. if (IS_VAR == IS_VAR) {
  21475. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  21476. }
  21477. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21478. }
  21479. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21480. {
  21481. USE_OPLINE
  21482. zend_free_op free_op1, free_op2;
  21483. zval *property, *container, *result;
  21484. SAVE_OPLINE();
  21485. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  21486. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  21487. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21488. }
  21489. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  21490. result = EX_VAR(opline->result.var);
  21491. zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC);
  21492. zval_ptr_dtor_nogc(free_op2);
  21493. if (IS_VAR == IS_VAR) {
  21494. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  21495. }
  21496. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21497. }
  21498. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21499. {
  21500. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  21501. /* Behave like FETCH_OBJ_W */
  21502. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  21503. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21504. }
  21505. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21506. } else {
  21507. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21508. }
  21509. }
  21510. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21511. {
  21512. USE_OPLINE
  21513. zend_free_op free_op1, free_op2;
  21514. zval *container, *property, *result;
  21515. SAVE_OPLINE();
  21516. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  21517. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  21518. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21519. }
  21520. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  21521. result = EX_VAR(opline->result.var);
  21522. zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC);
  21523. zval_ptr_dtor_nogc(free_op2);
  21524. if (IS_VAR == IS_VAR) {
  21525. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  21526. }
  21527. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21528. }
  21529. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21530. {
  21531. USE_OPLINE
  21532. zend_free_op free_op1, free_op2;
  21533. zval *container, *dim;
  21534. SAVE_OPLINE();
  21535. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  21536. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  21537. if (IS_VAR == IS_VAR
  21538. && Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
  21539. && UNEXPECTED(!Z_ISREF_P(container))
  21540. ) {
  21541. zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
  21542. zend_fetch_dimension_address_LIST_r(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  21543. } else {
  21544. zend_fetch_dimension_address_W(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  21545. }
  21546. zval_ptr_dtor_nogc(free_op2);
  21547. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  21548. }
  21549. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21550. {
  21551. USE_OPLINE
  21552. zend_free_op free_op1, free_op2;
  21553. zval *object, *property, *value, tmp;
  21554. SAVE_OPLINE();
  21555. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  21556. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  21557. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21558. }
  21559. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  21560. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  21561. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  21562. if (Z_ISREF_P(object)) {
  21563. object = Z_REFVAL_P(object);
  21564. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  21565. goto assign_object;
  21566. }
  21567. }
  21568. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  21569. goto exit_assign_obj;
  21570. }
  21571. }
  21572. assign_object:
  21573. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  21574. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  21575. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  21576. zend_object *zobj = Z_OBJ_P(object);
  21577. zval *property_val;
  21578. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  21579. property_val = OBJ_PROP(zobj, prop_offset);
  21580. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  21581. fast_assign_obj:
  21582. value = zend_assign_to_variable(property_val, value, IS_CONST);
  21583. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21584. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21585. }
  21586. goto exit_assign_obj;
  21587. }
  21588. } else {
  21589. if (EXPECTED(zobj->properties != NULL)) {
  21590. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  21591. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  21592. GC_DELREF(zobj->properties);
  21593. }
  21594. zobj->properties = zend_array_dup(zobj->properties);
  21595. }
  21596. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  21597. if (property_val) {
  21598. goto fast_assign_obj;
  21599. }
  21600. }
  21601. if (!zobj->ce->__set) {
  21602. if (EXPECTED(zobj->properties == NULL)) {
  21603. rebuild_object_properties(zobj);
  21604. }
  21605. if (IS_CONST == IS_CONST) {
  21606. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  21607. Z_ADDREF_P(value);
  21608. }
  21609. } else if (IS_CONST != IS_TMP_VAR) {
  21610. if (Z_ISREF_P(value)) {
  21611. if (IS_CONST == IS_VAR) {
  21612. zend_reference *ref = Z_REF_P(value);
  21613. if (GC_DELREF(ref) == 0) {
  21614. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  21615. efree_size(ref, sizeof(zend_reference));
  21616. value = &tmp;
  21617. } else {
  21618. value = Z_REFVAL_P(value);
  21619. Z_TRY_ADDREF_P(value);
  21620. }
  21621. } else {
  21622. value = Z_REFVAL_P(value);
  21623. Z_TRY_ADDREF_P(value);
  21624. }
  21625. } else if (IS_CONST == IS_CV) {
  21626. Z_TRY_ADDREF_P(value);
  21627. }
  21628. }
  21629. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  21630. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21631. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21632. }
  21633. goto exit_assign_obj;
  21634. }
  21635. }
  21636. }
  21637. if (!Z_OBJ_HT_P(object)->write_property) {
  21638. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  21639. goto exit_assign_obj;
  21640. }
  21641. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  21642. ZVAL_DEREF(value);
  21643. }
  21644. Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  21645. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21646. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21647. }
  21648. exit_assign_obj:
  21649. zval_ptr_dtor_nogc(free_op2);
  21650. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  21651. /* assign_obj has two opcodes! */
  21652. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  21653. }
  21654. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21655. {
  21656. USE_OPLINE
  21657. zend_free_op free_op1, free_op2, free_op_data;
  21658. zval *object, *property, *value, tmp;
  21659. SAVE_OPLINE();
  21660. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  21661. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  21662. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21663. }
  21664. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  21665. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  21666. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  21667. if (Z_ISREF_P(object)) {
  21668. object = Z_REFVAL_P(object);
  21669. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  21670. goto assign_object;
  21671. }
  21672. }
  21673. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  21674. zval_ptr_dtor_nogc(free_op_data);
  21675. goto exit_assign_obj;
  21676. }
  21677. }
  21678. assign_object:
  21679. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  21680. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  21681. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  21682. zend_object *zobj = Z_OBJ_P(object);
  21683. zval *property_val;
  21684. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  21685. property_val = OBJ_PROP(zobj, prop_offset);
  21686. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  21687. fast_assign_obj:
  21688. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
  21689. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21690. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21691. }
  21692. goto exit_assign_obj;
  21693. }
  21694. } else {
  21695. if (EXPECTED(zobj->properties != NULL)) {
  21696. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  21697. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  21698. GC_DELREF(zobj->properties);
  21699. }
  21700. zobj->properties = zend_array_dup(zobj->properties);
  21701. }
  21702. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  21703. if (property_val) {
  21704. goto fast_assign_obj;
  21705. }
  21706. }
  21707. if (!zobj->ce->__set) {
  21708. if (EXPECTED(zobj->properties == NULL)) {
  21709. rebuild_object_properties(zobj);
  21710. }
  21711. if (IS_TMP_VAR == IS_CONST) {
  21712. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  21713. Z_ADDREF_P(value);
  21714. }
  21715. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  21716. if (Z_ISREF_P(value)) {
  21717. if (IS_TMP_VAR == IS_VAR) {
  21718. zend_reference *ref = Z_REF_P(value);
  21719. if (GC_DELREF(ref) == 0) {
  21720. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  21721. efree_size(ref, sizeof(zend_reference));
  21722. value = &tmp;
  21723. } else {
  21724. value = Z_REFVAL_P(value);
  21725. Z_TRY_ADDREF_P(value);
  21726. }
  21727. } else {
  21728. value = Z_REFVAL_P(value);
  21729. Z_TRY_ADDREF_P(value);
  21730. }
  21731. } else if (IS_TMP_VAR == IS_CV) {
  21732. Z_TRY_ADDREF_P(value);
  21733. }
  21734. }
  21735. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  21736. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21737. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21738. }
  21739. goto exit_assign_obj;
  21740. }
  21741. }
  21742. }
  21743. if (!Z_OBJ_HT_P(object)->write_property) {
  21744. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  21745. zval_ptr_dtor_nogc(free_op_data);
  21746. goto exit_assign_obj;
  21747. }
  21748. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  21749. ZVAL_DEREF(value);
  21750. }
  21751. Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  21752. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21753. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21754. }
  21755. zval_ptr_dtor_nogc(free_op_data);
  21756. exit_assign_obj:
  21757. zval_ptr_dtor_nogc(free_op2);
  21758. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  21759. /* assign_obj has two opcodes! */
  21760. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  21761. }
  21762. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21763. {
  21764. USE_OPLINE
  21765. zend_free_op free_op1, free_op2, free_op_data;
  21766. zval *object, *property, *value, tmp;
  21767. SAVE_OPLINE();
  21768. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  21769. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  21770. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21771. }
  21772. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  21773. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  21774. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  21775. if (Z_ISREF_P(object)) {
  21776. object = Z_REFVAL_P(object);
  21777. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  21778. goto assign_object;
  21779. }
  21780. }
  21781. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  21782. zval_ptr_dtor_nogc(free_op_data);
  21783. goto exit_assign_obj;
  21784. }
  21785. }
  21786. assign_object:
  21787. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  21788. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  21789. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  21790. zend_object *zobj = Z_OBJ_P(object);
  21791. zval *property_val;
  21792. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  21793. property_val = OBJ_PROP(zobj, prop_offset);
  21794. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  21795. fast_assign_obj:
  21796. value = zend_assign_to_variable(property_val, value, IS_VAR);
  21797. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21798. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21799. }
  21800. goto exit_assign_obj;
  21801. }
  21802. } else {
  21803. if (EXPECTED(zobj->properties != NULL)) {
  21804. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  21805. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  21806. GC_DELREF(zobj->properties);
  21807. }
  21808. zobj->properties = zend_array_dup(zobj->properties);
  21809. }
  21810. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  21811. if (property_val) {
  21812. goto fast_assign_obj;
  21813. }
  21814. }
  21815. if (!zobj->ce->__set) {
  21816. if (EXPECTED(zobj->properties == NULL)) {
  21817. rebuild_object_properties(zobj);
  21818. }
  21819. if (IS_VAR == IS_CONST) {
  21820. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  21821. Z_ADDREF_P(value);
  21822. }
  21823. } else if (IS_VAR != IS_TMP_VAR) {
  21824. if (Z_ISREF_P(value)) {
  21825. if (IS_VAR == IS_VAR) {
  21826. zend_reference *ref = Z_REF_P(value);
  21827. if (GC_DELREF(ref) == 0) {
  21828. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  21829. efree_size(ref, sizeof(zend_reference));
  21830. value = &tmp;
  21831. } else {
  21832. value = Z_REFVAL_P(value);
  21833. Z_TRY_ADDREF_P(value);
  21834. }
  21835. } else {
  21836. value = Z_REFVAL_P(value);
  21837. Z_TRY_ADDREF_P(value);
  21838. }
  21839. } else if (IS_VAR == IS_CV) {
  21840. Z_TRY_ADDREF_P(value);
  21841. }
  21842. }
  21843. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  21844. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21845. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21846. }
  21847. goto exit_assign_obj;
  21848. }
  21849. }
  21850. }
  21851. if (!Z_OBJ_HT_P(object)->write_property) {
  21852. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  21853. zval_ptr_dtor_nogc(free_op_data);
  21854. goto exit_assign_obj;
  21855. }
  21856. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  21857. ZVAL_DEREF(value);
  21858. }
  21859. Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  21860. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21861. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21862. }
  21863. zval_ptr_dtor_nogc(free_op_data);
  21864. exit_assign_obj:
  21865. zval_ptr_dtor_nogc(free_op2);
  21866. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  21867. /* assign_obj has two opcodes! */
  21868. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  21869. }
  21870. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21871. {
  21872. USE_OPLINE
  21873. zend_free_op free_op1, free_op2;
  21874. zval *object, *property, *value, tmp;
  21875. SAVE_OPLINE();
  21876. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  21877. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  21878. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  21879. }
  21880. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  21881. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  21882. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  21883. if (Z_ISREF_P(object)) {
  21884. object = Z_REFVAL_P(object);
  21885. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  21886. goto assign_object;
  21887. }
  21888. }
  21889. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  21890. goto exit_assign_obj;
  21891. }
  21892. }
  21893. assign_object:
  21894. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  21895. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  21896. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  21897. zend_object *zobj = Z_OBJ_P(object);
  21898. zval *property_val;
  21899. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  21900. property_val = OBJ_PROP(zobj, prop_offset);
  21901. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  21902. fast_assign_obj:
  21903. value = zend_assign_to_variable(property_val, value, IS_CV);
  21904. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21905. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21906. }
  21907. goto exit_assign_obj;
  21908. }
  21909. } else {
  21910. if (EXPECTED(zobj->properties != NULL)) {
  21911. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  21912. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  21913. GC_DELREF(zobj->properties);
  21914. }
  21915. zobj->properties = zend_array_dup(zobj->properties);
  21916. }
  21917. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  21918. if (property_val) {
  21919. goto fast_assign_obj;
  21920. }
  21921. }
  21922. if (!zobj->ce->__set) {
  21923. if (EXPECTED(zobj->properties == NULL)) {
  21924. rebuild_object_properties(zobj);
  21925. }
  21926. if (IS_CV == IS_CONST) {
  21927. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  21928. Z_ADDREF_P(value);
  21929. }
  21930. } else if (IS_CV != IS_TMP_VAR) {
  21931. if (Z_ISREF_P(value)) {
  21932. if (IS_CV == IS_VAR) {
  21933. zend_reference *ref = Z_REF_P(value);
  21934. if (GC_DELREF(ref) == 0) {
  21935. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  21936. efree_size(ref, sizeof(zend_reference));
  21937. value = &tmp;
  21938. } else {
  21939. value = Z_REFVAL_P(value);
  21940. Z_TRY_ADDREF_P(value);
  21941. }
  21942. } else {
  21943. value = Z_REFVAL_P(value);
  21944. Z_TRY_ADDREF_P(value);
  21945. }
  21946. } else if (IS_CV == IS_CV) {
  21947. Z_TRY_ADDREF_P(value);
  21948. }
  21949. }
  21950. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  21951. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21952. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21953. }
  21954. goto exit_assign_obj;
  21955. }
  21956. }
  21957. }
  21958. if (!Z_OBJ_HT_P(object)->write_property) {
  21959. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  21960. goto exit_assign_obj;
  21961. }
  21962. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  21963. ZVAL_DEREF(value);
  21964. }
  21965. Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  21966. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  21967. ZVAL_COPY(EX_VAR(opline->result.var), value);
  21968. }
  21969. exit_assign_obj:
  21970. zval_ptr_dtor_nogc(free_op2);
  21971. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  21972. /* assign_obj has two opcodes! */
  21973. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  21974. }
  21975. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  21976. {
  21977. USE_OPLINE
  21978. zend_free_op free_op1;
  21979. zval *object_ptr;
  21980. zend_free_op free_op2, free_op_data;
  21981. zval *value;
  21982. zval *variable_ptr;
  21983. zval *dim;
  21984. SAVE_OPLINE();
  21985. object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  21986. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  21987. try_assign_dim_array:
  21988. SEPARATE_ARRAY(object_ptr);
  21989. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  21990. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  21991. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  21992. ZVAL_DEREF(value);
  21993. }
  21994. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  21995. if (UNEXPECTED(variable_ptr == NULL)) {
  21996. zend_cannot_add_element();
  21997. goto assign_dim_error;
  21998. } else if (IS_CONST == IS_CV) {
  21999. if (Z_REFCOUNTED_P(value)) {
  22000. Z_ADDREF_P(value);
  22001. }
  22002. } else if (IS_CONST == IS_VAR) {
  22003. if (value != free_op_data) {
  22004. if (Z_REFCOUNTED_P(value)) {
  22005. Z_ADDREF_P(value);
  22006. }
  22007. }
  22008. } else if (IS_CONST == IS_CONST) {
  22009. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  22010. Z_ADDREF_P(value);
  22011. }
  22012. }
  22013. } else {
  22014. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22015. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22016. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  22017. } else {
  22018. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  22019. }
  22020. if (UNEXPECTED(variable_ptr == NULL)) {
  22021. goto assign_dim_error;
  22022. }
  22023. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  22024. value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
  22025. }
  22026. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22027. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22028. }
  22029. } else {
  22030. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  22031. object_ptr = Z_REFVAL_P(object_ptr);
  22032. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  22033. goto try_assign_dim_array;
  22034. }
  22035. }
  22036. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  22037. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22038. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  22039. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  22040. dim++;
  22041. }
  22042. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  22043. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  22044. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  22045. zend_use_new_element_for_string();
  22046. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  22047. UNDEF_RESULT();
  22048. HANDLE_EXCEPTION();
  22049. } else {
  22050. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22051. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  22052. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  22053. }
  22054. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  22055. ZVAL_ARR(object_ptr, zend_new_array(8));
  22056. goto try_assign_dim_array;
  22057. } else {
  22058. if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  22059. zend_use_scalar_as_array();
  22060. }
  22061. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22062. assign_dim_error:
  22063. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22064. ZVAL_NULL(EX_VAR(opline->result.var));
  22065. }
  22066. }
  22067. }
  22068. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  22069. zval_ptr_dtor_nogc(free_op2);
  22070. }
  22071. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  22072. /* assign_dim has two opcodes! */
  22073. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  22074. }
  22075. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22076. {
  22077. USE_OPLINE
  22078. zend_free_op free_op1;
  22079. zval *object_ptr;
  22080. zend_free_op free_op2, free_op_data;
  22081. zval *value;
  22082. zval *variable_ptr;
  22083. zval *dim;
  22084. SAVE_OPLINE();
  22085. object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  22086. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  22087. try_assign_dim_array:
  22088. SEPARATE_ARRAY(object_ptr);
  22089. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  22090. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  22091. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  22092. ZVAL_DEREF(value);
  22093. }
  22094. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  22095. if (UNEXPECTED(variable_ptr == NULL)) {
  22096. zval_ptr_dtor_nogc(free_op_data);
  22097. zend_cannot_add_element();
  22098. goto assign_dim_error;
  22099. } else if (IS_TMP_VAR == IS_CV) {
  22100. if (Z_REFCOUNTED_P(value)) {
  22101. Z_ADDREF_P(value);
  22102. }
  22103. } else if (IS_TMP_VAR == IS_VAR) {
  22104. if (value != free_op_data) {
  22105. if (Z_REFCOUNTED_P(value)) {
  22106. Z_ADDREF_P(value);
  22107. }
  22108. zval_ptr_dtor_nogc(free_op_data);
  22109. }
  22110. } else if (IS_TMP_VAR == IS_CONST) {
  22111. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  22112. Z_ADDREF_P(value);
  22113. }
  22114. }
  22115. } else {
  22116. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22117. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22118. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  22119. } else {
  22120. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  22121. }
  22122. if (UNEXPECTED(variable_ptr == NULL)) {
  22123. goto assign_dim_error;
  22124. }
  22125. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  22126. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
  22127. }
  22128. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22129. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22130. }
  22131. } else {
  22132. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  22133. object_ptr = Z_REFVAL_P(object_ptr);
  22134. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  22135. goto try_assign_dim_array;
  22136. }
  22137. }
  22138. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  22139. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22140. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  22141. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  22142. dim++;
  22143. }
  22144. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  22145. zval_ptr_dtor_nogc(free_op_data);
  22146. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  22147. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  22148. zend_use_new_element_for_string();
  22149. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  22150. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  22151. UNDEF_RESULT();
  22152. HANDLE_EXCEPTION();
  22153. } else {
  22154. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22155. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  22156. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  22157. zval_ptr_dtor_nogc(free_op_data);
  22158. }
  22159. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  22160. ZVAL_ARR(object_ptr, zend_new_array(8));
  22161. goto try_assign_dim_array;
  22162. } else {
  22163. if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  22164. zend_use_scalar_as_array();
  22165. }
  22166. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22167. assign_dim_error:
  22168. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  22169. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22170. ZVAL_NULL(EX_VAR(opline->result.var));
  22171. }
  22172. }
  22173. }
  22174. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  22175. zval_ptr_dtor_nogc(free_op2);
  22176. }
  22177. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  22178. /* assign_dim has two opcodes! */
  22179. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  22180. }
  22181. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22182. {
  22183. USE_OPLINE
  22184. zend_free_op free_op1;
  22185. zval *object_ptr;
  22186. zend_free_op free_op2, free_op_data;
  22187. zval *value;
  22188. zval *variable_ptr;
  22189. zval *dim;
  22190. SAVE_OPLINE();
  22191. object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  22192. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  22193. try_assign_dim_array:
  22194. SEPARATE_ARRAY(object_ptr);
  22195. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  22196. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  22197. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  22198. ZVAL_DEREF(value);
  22199. }
  22200. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  22201. if (UNEXPECTED(variable_ptr == NULL)) {
  22202. zval_ptr_dtor_nogc(free_op_data);
  22203. zend_cannot_add_element();
  22204. goto assign_dim_error;
  22205. } else if (IS_VAR == IS_CV) {
  22206. if (Z_REFCOUNTED_P(value)) {
  22207. Z_ADDREF_P(value);
  22208. }
  22209. } else if (IS_VAR == IS_VAR) {
  22210. if (value != free_op_data) {
  22211. if (Z_REFCOUNTED_P(value)) {
  22212. Z_ADDREF_P(value);
  22213. }
  22214. zval_ptr_dtor_nogc(free_op_data);
  22215. }
  22216. } else if (IS_VAR == IS_CONST) {
  22217. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  22218. Z_ADDREF_P(value);
  22219. }
  22220. }
  22221. } else {
  22222. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22223. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22224. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  22225. } else {
  22226. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  22227. }
  22228. if (UNEXPECTED(variable_ptr == NULL)) {
  22229. goto assign_dim_error;
  22230. }
  22231. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  22232. value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
  22233. }
  22234. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22235. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22236. }
  22237. } else {
  22238. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  22239. object_ptr = Z_REFVAL_P(object_ptr);
  22240. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  22241. goto try_assign_dim_array;
  22242. }
  22243. }
  22244. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  22245. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22246. value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  22247. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  22248. dim++;
  22249. }
  22250. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  22251. zval_ptr_dtor_nogc(free_op_data);
  22252. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  22253. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  22254. zend_use_new_element_for_string();
  22255. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  22256. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  22257. UNDEF_RESULT();
  22258. HANDLE_EXCEPTION();
  22259. } else {
  22260. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22261. value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  22262. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  22263. zval_ptr_dtor_nogc(free_op_data);
  22264. }
  22265. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  22266. ZVAL_ARR(object_ptr, zend_new_array(8));
  22267. goto try_assign_dim_array;
  22268. } else {
  22269. if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  22270. zend_use_scalar_as_array();
  22271. }
  22272. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22273. assign_dim_error:
  22274. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  22275. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22276. ZVAL_NULL(EX_VAR(opline->result.var));
  22277. }
  22278. }
  22279. }
  22280. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  22281. zval_ptr_dtor_nogc(free_op2);
  22282. }
  22283. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  22284. /* assign_dim has two opcodes! */
  22285. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  22286. }
  22287. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22288. {
  22289. USE_OPLINE
  22290. zend_free_op free_op1;
  22291. zval *object_ptr;
  22292. zend_free_op free_op2, free_op_data;
  22293. zval *value;
  22294. zval *variable_ptr;
  22295. zval *dim;
  22296. SAVE_OPLINE();
  22297. object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  22298. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  22299. try_assign_dim_array:
  22300. SEPARATE_ARRAY(object_ptr);
  22301. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  22302. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  22303. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  22304. ZVAL_DEREF(value);
  22305. }
  22306. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  22307. if (UNEXPECTED(variable_ptr == NULL)) {
  22308. zend_cannot_add_element();
  22309. goto assign_dim_error;
  22310. } else if (IS_CV == IS_CV) {
  22311. if (Z_REFCOUNTED_P(value)) {
  22312. Z_ADDREF_P(value);
  22313. }
  22314. } else if (IS_CV == IS_VAR) {
  22315. if (value != free_op_data) {
  22316. if (Z_REFCOUNTED_P(value)) {
  22317. Z_ADDREF_P(value);
  22318. }
  22319. }
  22320. } else if (IS_CV == IS_CONST) {
  22321. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  22322. Z_ADDREF_P(value);
  22323. }
  22324. }
  22325. } else {
  22326. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22327. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  22328. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  22329. } else {
  22330. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  22331. }
  22332. if (UNEXPECTED(variable_ptr == NULL)) {
  22333. goto assign_dim_error;
  22334. }
  22335. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  22336. value = zend_assign_to_variable(variable_ptr, value, IS_CV);
  22337. }
  22338. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22339. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22340. }
  22341. } else {
  22342. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  22343. object_ptr = Z_REFVAL_P(object_ptr);
  22344. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  22345. goto try_assign_dim_array;
  22346. }
  22347. }
  22348. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  22349. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22350. value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  22351. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  22352. dim++;
  22353. }
  22354. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  22355. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  22356. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  22357. zend_use_new_element_for_string();
  22358. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  22359. UNDEF_RESULT();
  22360. HANDLE_EXCEPTION();
  22361. } else {
  22362. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22363. value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  22364. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  22365. }
  22366. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  22367. ZVAL_ARR(object_ptr, zend_new_array(8));
  22368. goto try_assign_dim_array;
  22369. } else {
  22370. if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  22371. zend_use_scalar_as_array();
  22372. }
  22373. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22374. assign_dim_error:
  22375. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  22376. ZVAL_NULL(EX_VAR(opline->result.var));
  22377. }
  22378. }
  22379. }
  22380. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  22381. zval_ptr_dtor_nogc(free_op2);
  22382. }
  22383. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  22384. /* assign_dim has two opcodes! */
  22385. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  22386. }
  22387. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22388. {
  22389. USE_OPLINE
  22390. zval *function_name;
  22391. zend_class_entry *ce;
  22392. zend_object *object;
  22393. zend_function *fbc;
  22394. zend_execute_data *call;
  22395. SAVE_OPLINE();
  22396. if (IS_VAR == IS_CONST) {
  22397. /* no function found. try a static method in class */
  22398. ce = CACHED_PTR(opline->result.num);
  22399. if (UNEXPECTED(ce == NULL)) {
  22400. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  22401. if (UNEXPECTED(ce == NULL)) {
  22402. ZEND_ASSERT(EG(exception));
  22403. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22404. HANDLE_EXCEPTION();
  22405. }
  22406. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  22407. CACHE_PTR(opline->result.num, ce);
  22408. }
  22409. }
  22410. } else if (IS_VAR == IS_UNUSED) {
  22411. ce = zend_fetch_class(NULL, opline->op1.num);
  22412. if (UNEXPECTED(ce == NULL)) {
  22413. ZEND_ASSERT(EG(exception));
  22414. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  22415. HANDLE_EXCEPTION();
  22416. }
  22417. } else {
  22418. ce = Z_CE_P(EX_VAR(opline->op1.var));
  22419. }
  22420. if (IS_VAR == IS_CONST &&
  22421. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  22422. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  22423. /* nothing to do */
  22424. } else if (IS_VAR != IS_CONST &&
  22425. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  22426. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  22427. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  22428. } else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  22429. zend_free_op free_op2;
  22430. function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22431. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  22432. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  22433. do {
  22434. if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  22435. function_name = Z_REFVAL_P(function_name);
  22436. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  22437. break;
  22438. }
  22439. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  22440. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  22441. if (UNEXPECTED(EG(exception) != NULL)) {
  22442. HANDLE_EXCEPTION();
  22443. }
  22444. }
  22445. zend_throw_error(NULL, "Function name must be a string");
  22446. zval_ptr_dtor_nogc(free_op2);
  22447. HANDLE_EXCEPTION();
  22448. } while (0);
  22449. }
  22450. }
  22451. if (ce->get_static_method) {
  22452. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  22453. } else {
  22454. 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));
  22455. }
  22456. if (UNEXPECTED(fbc == NULL)) {
  22457. if (EXPECTED(!EG(exception))) {
  22458. zend_undefined_method(ce, Z_STR_P(function_name));
  22459. }
  22460. zval_ptr_dtor_nogc(free_op2);
  22461. HANDLE_EXCEPTION();
  22462. }
  22463. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  22464. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  22465. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
  22466. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  22467. }
  22468. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  22469. init_func_run_time_cache(&fbc->op_array);
  22470. }
  22471. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  22472. zval_ptr_dtor_nogc(free_op2);
  22473. }
  22474. } else {
  22475. if (UNEXPECTED(ce->constructor == NULL)) {
  22476. zend_throw_error(NULL, "Cannot call constructor");
  22477. HANDLE_EXCEPTION();
  22478. }
  22479. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  22480. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  22481. HANDLE_EXCEPTION();
  22482. }
  22483. fbc = ce->constructor;
  22484. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  22485. init_func_run_time_cache(&fbc->op_array);
  22486. }
  22487. }
  22488. object = NULL;
  22489. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  22490. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  22491. object = Z_OBJ(EX(This));
  22492. ce = object->ce;
  22493. } else {
  22494. zend_non_static_method_call(fbc);
  22495. if (UNEXPECTED(EG(exception) != NULL)) {
  22496. HANDLE_EXCEPTION();
  22497. }
  22498. }
  22499. }
  22500. if (IS_VAR == IS_UNUSED) {
  22501. /* previous opcode is ZEND_FETCH_CLASS */
  22502. if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  22503. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
  22504. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  22505. ce = Z_OBJCE(EX(This));
  22506. } else {
  22507. ce = Z_CE(EX(This));
  22508. }
  22509. }
  22510. }
  22511. call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  22512. fbc, opline->extended_value, ce, object);
  22513. call->prev_execute_data = EX(call);
  22514. EX(call) = call;
  22515. ZEND_VM_NEXT_OPCODE();
  22516. }
  22517. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22518. {
  22519. USE_OPLINE
  22520. zend_free_op free_op1;
  22521. zval *expr_ptr, new_expr;
  22522. SAVE_OPLINE();
  22523. if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
  22524. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  22525. expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  22526. if (Z_ISREF_P(expr_ptr)) {
  22527. Z_ADDREF_P(expr_ptr);
  22528. } else {
  22529. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  22530. }
  22531. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  22532. } else {
  22533. expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  22534. if (IS_VAR == IS_TMP_VAR) {
  22535. /* pass */
  22536. } else if (IS_VAR == IS_CONST) {
  22537. Z_TRY_ADDREF_P(expr_ptr);
  22538. } else if (IS_VAR == IS_CV) {
  22539. ZVAL_DEREF(expr_ptr);
  22540. Z_TRY_ADDREF_P(expr_ptr);
  22541. } else /* if (IS_VAR == IS_VAR) */ {
  22542. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  22543. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  22544. expr_ptr = Z_REFVAL_P(expr_ptr);
  22545. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  22546. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  22547. expr_ptr = &new_expr;
  22548. efree_size(ref, sizeof(zend_reference));
  22549. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  22550. Z_ADDREF_P(expr_ptr);
  22551. }
  22552. }
  22553. }
  22554. }
  22555. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  22556. zend_free_op free_op2;
  22557. zval *offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22558. zend_string *str;
  22559. zend_ulong hval;
  22560. add_again:
  22561. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  22562. str = Z_STR_P(offset);
  22563. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  22564. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  22565. goto num_index;
  22566. }
  22567. }
  22568. str_index:
  22569. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  22570. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  22571. hval = Z_LVAL_P(offset);
  22572. num_index:
  22573. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  22574. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  22575. offset = Z_REFVAL_P(offset);
  22576. goto add_again;
  22577. } else if (Z_TYPE_P(offset) == IS_NULL) {
  22578. str = ZSTR_EMPTY_ALLOC();
  22579. goto str_index;
  22580. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  22581. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  22582. goto num_index;
  22583. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  22584. hval = 0;
  22585. goto num_index;
  22586. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  22587. hval = 1;
  22588. goto num_index;
  22589. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  22590. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  22591. str = ZSTR_EMPTY_ALLOC();
  22592. goto str_index;
  22593. } else {
  22594. zend_illegal_offset();
  22595. zval_ptr_dtor_nogc(expr_ptr);
  22596. }
  22597. zval_ptr_dtor_nogc(free_op2);
  22598. } else {
  22599. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  22600. zend_cannot_add_element();
  22601. zval_ptr_dtor_nogc(expr_ptr);
  22602. }
  22603. }
  22604. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22605. }
  22606. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22607. {
  22608. zval *array;
  22609. uint32_t size;
  22610. USE_OPLINE
  22611. array = EX_VAR(opline->result.var);
  22612. if (IS_VAR != IS_UNUSED) {
  22613. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  22614. ZVAL_ARR(array, zend_new_array(size));
  22615. /* Explicitly initialize array as not-packed if flag is set */
  22616. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  22617. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  22618. }
  22619. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  22620. } else {
  22621. ZVAL_EMPTY_ARRAY(array);
  22622. ZEND_VM_NEXT_OPCODE();
  22623. }
  22624. }
  22625. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22626. {
  22627. USE_OPLINE
  22628. zend_free_op free_op1, free_op2;
  22629. zval *container;
  22630. zval *offset;
  22631. zend_ulong hval;
  22632. zend_string *key;
  22633. SAVE_OPLINE();
  22634. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  22635. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22636. do {
  22637. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  22638. HashTable *ht;
  22639. unset_dim_array:
  22640. SEPARATE_ARRAY(container);
  22641. ht = Z_ARRVAL_P(container);
  22642. offset_again:
  22643. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  22644. key = Z_STR_P(offset);
  22645. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  22646. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  22647. goto num_index_dim;
  22648. }
  22649. }
  22650. str_index_dim:
  22651. if (ht == &EG(symbol_table)) {
  22652. zend_delete_global_variable(key);
  22653. } else {
  22654. zend_hash_del(ht, key);
  22655. }
  22656. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  22657. hval = Z_LVAL_P(offset);
  22658. num_index_dim:
  22659. zend_hash_index_del(ht, hval);
  22660. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  22661. offset = Z_REFVAL_P(offset);
  22662. goto offset_again;
  22663. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  22664. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  22665. goto num_index_dim;
  22666. } else if (Z_TYPE_P(offset) == IS_NULL) {
  22667. key = ZSTR_EMPTY_ALLOC();
  22668. goto str_index_dim;
  22669. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  22670. hval = 0;
  22671. goto num_index_dim;
  22672. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  22673. hval = 1;
  22674. goto num_index_dim;
  22675. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  22676. hval = Z_RES_HANDLE_P(offset);
  22677. goto num_index_dim;
  22678. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  22679. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  22680. key = ZSTR_EMPTY_ALLOC();
  22681. goto str_index_dim;
  22682. } else {
  22683. zend_error(E_WARNING, "Illegal offset type in unset");
  22684. }
  22685. break;
  22686. } else if (Z_ISREF_P(container)) {
  22687. container = Z_REFVAL_P(container);
  22688. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  22689. goto unset_dim_array;
  22690. }
  22691. }
  22692. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  22693. container = GET_OP1_UNDEF_CV(container, BP_VAR_R);
  22694. }
  22695. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  22696. offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  22697. }
  22698. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  22699. if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
  22700. zend_use_object_as_array();
  22701. } else {
  22702. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  22703. offset++;
  22704. }
  22705. Z_OBJ_HT_P(container)->unset_dimension(container, offset);
  22706. }
  22707. } else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  22708. zend_throw_error(NULL, "Cannot unset string offsets");
  22709. }
  22710. } while (0);
  22711. zval_ptr_dtor_nogc(free_op2);
  22712. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  22713. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22714. }
  22715. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22716. {
  22717. USE_OPLINE
  22718. zend_free_op free_op1, free_op2;
  22719. zval *container;
  22720. zval *offset;
  22721. SAVE_OPLINE();
  22722. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  22723. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  22724. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  22725. }
  22726. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22727. do {
  22728. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  22729. if (Z_ISREF_P(container)) {
  22730. container = Z_REFVAL_P(container);
  22731. if (Z_TYPE_P(container) != IS_OBJECT) {
  22732. break;
  22733. }
  22734. } else {
  22735. break;
  22736. }
  22737. }
  22738. if (Z_OBJ_HT_P(container)->unset_property) {
  22739. Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  22740. } else {
  22741. zend_wrong_property_unset(offset);
  22742. }
  22743. } while (0);
  22744. zval_ptr_dtor_nogc(free_op2);
  22745. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  22746. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22747. }
  22748. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22749. {
  22750. USE_OPLINE
  22751. zend_free_op free_op1, free_op2;
  22752. zval *op1, *op2;
  22753. int result;
  22754. SAVE_OPLINE();
  22755. op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  22756. op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22757. result = fast_is_identical_function(op1, op2);
  22758. zval_ptr_dtor_nogc(free_op1);
  22759. zval_ptr_dtor_nogc(free_op2);
  22760. ZEND_VM_SMART_BRANCH(result, 1);
  22761. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  22762. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22763. }
  22764. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22765. {
  22766. USE_OPLINE
  22767. zend_free_op free_op1, free_op2;
  22768. zval *op1, *op2;
  22769. int result;
  22770. SAVE_OPLINE();
  22771. op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  22772. op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22773. result = fast_is_not_identical_function(op1, op2);
  22774. zval_ptr_dtor_nogc(free_op1);
  22775. zval_ptr_dtor_nogc(free_op2);
  22776. ZEND_VM_SMART_BRANCH(result, 1);
  22777. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  22778. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22779. }
  22780. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22781. {
  22782. USE_OPLINE
  22783. zend_free_op free_op1, free_op2;
  22784. zval *value;
  22785. zval *variable_ptr;
  22786. SAVE_OPLINE();
  22787. value = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22788. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  22789. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  22790. zval_ptr_dtor_nogc(free_op2);
  22791. if (UNEXPECTED(0)) {
  22792. ZVAL_NULL(EX_VAR(opline->result.var));
  22793. }
  22794. } else {
  22795. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
  22796. if (UNEXPECTED(0)) {
  22797. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22798. }
  22799. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  22800. /* zend_assign_to_variable() always takes care of op2, never free it! */
  22801. }
  22802. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22803. }
  22804. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22805. {
  22806. USE_OPLINE
  22807. zend_free_op free_op1, free_op2;
  22808. zval *value;
  22809. zval *variable_ptr;
  22810. SAVE_OPLINE();
  22811. value = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22812. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  22813. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  22814. zval_ptr_dtor_nogc(free_op2);
  22815. if (UNEXPECTED(1)) {
  22816. ZVAL_NULL(EX_VAR(opline->result.var));
  22817. }
  22818. } else {
  22819. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
  22820. if (UNEXPECTED(1)) {
  22821. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22822. }
  22823. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  22824. /* zend_assign_to_variable() always takes care of op2, never free it! */
  22825. }
  22826. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22827. }
  22828. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22829. {
  22830. USE_OPLINE
  22831. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  22832. SAVE_OPLINE();
  22833. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  22834. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  22835. }
  22836. /* Destroy the previously yielded value */
  22837. zval_ptr_dtor(&generator->value);
  22838. /* Destroy the previously yielded key */
  22839. zval_ptr_dtor(&generator->key);
  22840. /* Set the new yielded value */
  22841. if (IS_VAR != IS_UNUSED) {
  22842. zend_free_op free_op1;
  22843. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  22844. /* Constants and temporary variables aren't yieldable by reference,
  22845. * but we still allow them with a notice. */
  22846. if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
  22847. zval *value;
  22848. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  22849. value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  22850. ZVAL_COPY_VALUE(&generator->value, value);
  22851. if (IS_VAR == IS_CONST) {
  22852. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  22853. Z_ADDREF(generator->value);
  22854. }
  22855. }
  22856. } else {
  22857. zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  22858. /* If a function call result is yielded and the function did
  22859. * not return by reference we throw a notice. */
  22860. if (IS_VAR == IS_VAR &&
  22861. (value_ptr == &EG(uninitialized_zval) ||
  22862. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  22863. !Z_ISREF_P(value_ptr)))) {
  22864. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  22865. ZVAL_COPY(&generator->value, value_ptr);
  22866. } else {
  22867. if (Z_ISREF_P(value_ptr)) {
  22868. Z_ADDREF_P(value_ptr);
  22869. } else {
  22870. ZVAL_MAKE_REF_EX(value_ptr, 2);
  22871. }
  22872. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  22873. }
  22874. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  22875. }
  22876. } else {
  22877. zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  22878. /* Consts, temporary variables and references need copying */
  22879. if (IS_VAR == IS_CONST) {
  22880. ZVAL_COPY_VALUE(&generator->value, value);
  22881. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  22882. Z_ADDREF(generator->value);
  22883. }
  22884. } else if (IS_VAR == IS_TMP_VAR) {
  22885. ZVAL_COPY_VALUE(&generator->value, value);
  22886. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  22887. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  22888. zval_ptr_dtor_nogc(free_op1);
  22889. } else {
  22890. ZVAL_COPY_VALUE(&generator->value, value);
  22891. if (IS_VAR == IS_CV) {
  22892. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  22893. }
  22894. }
  22895. }
  22896. } else {
  22897. /* If no value was specified yield null */
  22898. ZVAL_NULL(&generator->value);
  22899. }
  22900. /* Set the new yielded key */
  22901. if (IS_TMP_VAR != IS_UNUSED) {
  22902. zend_free_op free_op2;
  22903. zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22904. /* Consts, temporary variables and references need copying */
  22905. if (IS_TMP_VAR == IS_CONST) {
  22906. ZVAL_COPY_VALUE(&generator->key, key);
  22907. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  22908. Z_ADDREF(generator->key);
  22909. }
  22910. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  22911. ZVAL_COPY_VALUE(&generator->key, key);
  22912. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  22913. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  22914. } else {
  22915. ZVAL_COPY_VALUE(&generator->key, key);
  22916. if (IS_TMP_VAR == IS_CV) {
  22917. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  22918. }
  22919. }
  22920. if (Z_TYPE(generator->key) == IS_LONG
  22921. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  22922. ) {
  22923. generator->largest_used_integer_key = Z_LVAL(generator->key);
  22924. }
  22925. } else {
  22926. /* If no key was specified we use auto-increment keys */
  22927. generator->largest_used_integer_key++;
  22928. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  22929. }
  22930. if (RETURN_VALUE_USED(opline)) {
  22931. /* If the return value of yield is used set the send
  22932. * target and initialize it to NULL */
  22933. generator->send_target = EX_VAR(opline->result.var);
  22934. ZVAL_NULL(generator->send_target);
  22935. } else {
  22936. generator->send_target = NULL;
  22937. }
  22938. /* We increment to the next op, so we are at the correct position when the
  22939. * generator is resumed. */
  22940. ZEND_VM_INC_OPCODE();
  22941. /* The GOTO VM uses a local opline variable. We need to set the opline
  22942. * variable in execute_data so we don't resume at an old position. */
  22943. SAVE_OPLINE();
  22944. ZEND_VM_RETURN();
  22945. }
  22946. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22947. {
  22948. USE_OPLINE
  22949. zend_free_op free_op1, free_op2;
  22950. zval *op1, *op2;
  22951. int result;
  22952. SAVE_OPLINE();
  22953. op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  22954. op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22955. result = fast_is_identical_function(op1, op2);
  22956. zval_ptr_dtor_nogc(free_op1);
  22957. zval_ptr_dtor_nogc(free_op2);
  22958. ZEND_VM_SMART_BRANCH(result, 1);
  22959. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  22960. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22961. }
  22962. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22963. {
  22964. USE_OPLINE
  22965. zend_free_op free_op1, free_op2;
  22966. zval *op1, *op2;
  22967. int result;
  22968. SAVE_OPLINE();
  22969. op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  22970. op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22971. result = fast_is_not_identical_function(op1, op2);
  22972. zval_ptr_dtor_nogc(free_op1);
  22973. zval_ptr_dtor_nogc(free_op2);
  22974. ZEND_VM_SMART_BRANCH(result, 1);
  22975. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  22976. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  22977. }
  22978. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  22979. {
  22980. USE_OPLINE
  22981. zend_free_op free_op1, free_op2;
  22982. zval *value;
  22983. zval *variable_ptr;
  22984. SAVE_OPLINE();
  22985. value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  22986. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  22987. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  22988. zval_ptr_dtor_nogc(free_op2);
  22989. if (UNEXPECTED(0)) {
  22990. ZVAL_NULL(EX_VAR(opline->result.var));
  22991. }
  22992. } else {
  22993. value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
  22994. if (UNEXPECTED(0)) {
  22995. ZVAL_COPY(EX_VAR(opline->result.var), value);
  22996. }
  22997. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  22998. /* zend_assign_to_variable() always takes care of op2, never free it! */
  22999. }
  23000. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  23001. }
  23002. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23003. {
  23004. USE_OPLINE
  23005. zend_free_op free_op1, free_op2;
  23006. zval *value;
  23007. zval *variable_ptr;
  23008. SAVE_OPLINE();
  23009. value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  23010. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  23011. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  23012. zval_ptr_dtor_nogc(free_op2);
  23013. if (UNEXPECTED(1)) {
  23014. ZVAL_NULL(EX_VAR(opline->result.var));
  23015. }
  23016. } else {
  23017. value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
  23018. if (UNEXPECTED(1)) {
  23019. ZVAL_COPY(EX_VAR(opline->result.var), value);
  23020. }
  23021. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  23022. /* zend_assign_to_variable() always takes care of op2, never free it! */
  23023. }
  23024. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  23025. }
  23026. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23027. {
  23028. USE_OPLINE
  23029. zend_free_op free_op1, free_op2;
  23030. zval *variable_ptr;
  23031. zval *value_ptr;
  23032. SAVE_OPLINE();
  23033. value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  23034. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  23035. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  23036. variable_ptr = &EG(uninitialized_zval);
  23037. } else if (IS_VAR == IS_VAR &&
  23038. UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
  23039. zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
  23040. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  23041. if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
  23042. UNDEF_RESULT();
  23043. HANDLE_EXCEPTION();
  23044. } else if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
  23045. variable_ptr = &EG(uninitialized_zval);
  23046. } else if (IS_VAR == IS_VAR &&
  23047. opline->extended_value == ZEND_RETURNS_FUNCTION &&
  23048. UNEXPECTED(!Z_ISREF_P(value_ptr))) {
  23049. if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(variable_ptr, value_ptr, IS_VAR OPLINE_CC EXECUTE_DATA_CC))) {
  23050. if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
  23051. UNDEF_RESULT();
  23052. HANDLE_EXCEPTION();
  23053. }
  23054. /* op2 freed by assign_to_variable */
  23055. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  23056. ZEND_VM_NEXT_OPCODE();
  23057. } else {
  23058. zend_assign_to_variable_reference(variable_ptr, value_ptr);
  23059. }
  23060. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23061. ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
  23062. }
  23063. if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
  23064. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  23065. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  23066. }
  23067. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23068. {
  23069. USE_OPLINE
  23070. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  23071. SAVE_OPLINE();
  23072. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  23073. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  23074. }
  23075. /* Destroy the previously yielded value */
  23076. zval_ptr_dtor(&generator->value);
  23077. /* Destroy the previously yielded key */
  23078. zval_ptr_dtor(&generator->key);
  23079. /* Set the new yielded value */
  23080. if (IS_VAR != IS_UNUSED) {
  23081. zend_free_op free_op1;
  23082. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  23083. /* Constants and temporary variables aren't yieldable by reference,
  23084. * but we still allow them with a notice. */
  23085. if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
  23086. zval *value;
  23087. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  23088. value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  23089. ZVAL_COPY_VALUE(&generator->value, value);
  23090. if (IS_VAR == IS_CONST) {
  23091. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  23092. Z_ADDREF(generator->value);
  23093. }
  23094. }
  23095. } else {
  23096. zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  23097. /* If a function call result is yielded and the function did
  23098. * not return by reference we throw a notice. */
  23099. if (IS_VAR == IS_VAR &&
  23100. (value_ptr == &EG(uninitialized_zval) ||
  23101. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  23102. !Z_ISREF_P(value_ptr)))) {
  23103. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  23104. ZVAL_COPY(&generator->value, value_ptr);
  23105. } else {
  23106. if (Z_ISREF_P(value_ptr)) {
  23107. Z_ADDREF_P(value_ptr);
  23108. } else {
  23109. ZVAL_MAKE_REF_EX(value_ptr, 2);
  23110. }
  23111. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  23112. }
  23113. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  23114. }
  23115. } else {
  23116. zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  23117. /* Consts, temporary variables and references need copying */
  23118. if (IS_VAR == IS_CONST) {
  23119. ZVAL_COPY_VALUE(&generator->value, value);
  23120. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  23121. Z_ADDREF(generator->value);
  23122. }
  23123. } else if (IS_VAR == IS_TMP_VAR) {
  23124. ZVAL_COPY_VALUE(&generator->value, value);
  23125. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  23126. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  23127. zval_ptr_dtor_nogc(free_op1);
  23128. } else {
  23129. ZVAL_COPY_VALUE(&generator->value, value);
  23130. if (IS_VAR == IS_CV) {
  23131. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  23132. }
  23133. }
  23134. }
  23135. } else {
  23136. /* If no value was specified yield null */
  23137. ZVAL_NULL(&generator->value);
  23138. }
  23139. /* Set the new yielded key */
  23140. if (IS_VAR != IS_UNUSED) {
  23141. zend_free_op free_op2;
  23142. zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  23143. /* Consts, temporary variables and references need copying */
  23144. if (IS_VAR == IS_CONST) {
  23145. ZVAL_COPY_VALUE(&generator->key, key);
  23146. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  23147. Z_ADDREF(generator->key);
  23148. }
  23149. } else if (IS_VAR == IS_TMP_VAR) {
  23150. ZVAL_COPY_VALUE(&generator->key, key);
  23151. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  23152. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  23153. zval_ptr_dtor_nogc(free_op2);
  23154. } else {
  23155. ZVAL_COPY_VALUE(&generator->key, key);
  23156. if (IS_VAR == IS_CV) {
  23157. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  23158. }
  23159. }
  23160. if (Z_TYPE(generator->key) == IS_LONG
  23161. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  23162. ) {
  23163. generator->largest_used_integer_key = Z_LVAL(generator->key);
  23164. }
  23165. } else {
  23166. /* If no key was specified we use auto-increment keys */
  23167. generator->largest_used_integer_key++;
  23168. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  23169. }
  23170. if (RETURN_VALUE_USED(opline)) {
  23171. /* If the return value of yield is used set the send
  23172. * target and initialize it to NULL */
  23173. generator->send_target = EX_VAR(opline->result.var);
  23174. ZVAL_NULL(generator->send_target);
  23175. } else {
  23176. generator->send_target = NULL;
  23177. }
  23178. /* We increment to the next op, so we are at the correct position when the
  23179. * generator is resumed. */
  23180. ZEND_VM_INC_OPCODE();
  23181. /* The GOTO VM uses a local opline variable. We need to set the opline
  23182. * variable in execute_data so we don't resume at an old position. */
  23183. SAVE_OPLINE();
  23184. ZEND_VM_RETURN();
  23185. }
  23186. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  23187. {
  23188. USE_OPLINE
  23189. zend_free_op free_op1, free_op_data1;
  23190. zval *var_ptr;
  23191. zval *value, *container, *dim;
  23192. SAVE_OPLINE();
  23193. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  23194. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  23195. assign_dim_op_array:
  23196. SEPARATE_ARRAY(container);
  23197. assign_dim_op_new_array:
  23198. dim = NULL;
  23199. if (IS_UNUSED == IS_UNUSED) {
  23200. var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
  23201. if (UNEXPECTED(!var_ptr)) {
  23202. zend_cannot_add_element();
  23203. goto assign_dim_op_ret_null;
  23204. }
  23205. } else {
  23206. if (IS_UNUSED == IS_CONST) {
  23207. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
  23208. } else {
  23209. var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
  23210. }
  23211. if (UNEXPECTED(!var_ptr)) {
  23212. goto assign_dim_op_ret_null;
  23213. }
  23214. ZVAL_DEREF(var_ptr);
  23215. }
  23216. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  23217. binary_op(var_ptr, var_ptr, value);
  23218. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23219. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  23220. }
  23221. } else {
  23222. if (EXPECTED(Z_ISREF_P(container))) {
  23223. container = Z_REFVAL_P(container);
  23224. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  23225. goto assign_dim_op_array;
  23226. }
  23227. } else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  23228. container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
  23229. assign_dim_op_convert_to_array:
  23230. ZVAL_ARR(container, zend_new_array(8));
  23231. goto assign_dim_op_new_array;
  23232. }
  23233. dim = NULL;
  23234. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  23235. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  23236. if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  23237. dim++;
  23238. }
  23239. zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC);
  23240. } else {
  23241. if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  23242. if (IS_UNUSED == IS_UNUSED) {
  23243. zend_use_new_element_for_string();
  23244. } else {
  23245. zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC);
  23246. zend_wrong_string_offset(EXECUTE_DATA_C);
  23247. }
  23248. UNDEF_RESULT();
  23249. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  23250. goto assign_dim_op_convert_to_array;
  23251. } else {
  23252. if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
  23253. zend_use_scalar_as_array();
  23254. }
  23255. assign_dim_op_ret_null:
  23256. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23257. ZVAL_NULL(EX_VAR(opline->result.var));
  23258. }
  23259. }
  23260. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  23261. }
  23262. }
  23263. FREE_OP(free_op_data1);
  23264. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  23265. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23266. }
  23267. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  23268. {
  23269. #if 1 && IS_UNUSED == IS_UNUSED
  23270. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  23271. #else
  23272. # if 0 || IS_VAR != IS_UNUSED
  23273. # if 0
  23274. /* opline->extended_value checks are specialized, don't need opline */
  23275. USE_OPLINE
  23276. # endif
  23277. if (EXPECTED(0)) {
  23278. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  23279. }
  23280. if (EXPECTED(1)) {
  23281. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  23282. }
  23283. # endif
  23284. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  23285. #endif
  23286. }
  23287. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23288. {
  23289. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  23290. }
  23291. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23292. {
  23293. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  23294. }
  23295. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23296. {
  23297. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  23298. }
  23299. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23300. {
  23301. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  23302. }
  23303. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23304. {
  23305. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  23306. }
  23307. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23308. {
  23309. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  23310. }
  23311. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23312. {
  23313. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  23314. }
  23315. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23316. {
  23317. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  23318. }
  23319. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23320. {
  23321. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  23322. }
  23323. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23324. {
  23325. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  23326. }
  23327. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23328. {
  23329. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  23330. }
  23331. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23332. {
  23333. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  23334. }
  23335. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23336. {
  23337. USE_OPLINE
  23338. zend_free_op free_op1;
  23339. zval *container;
  23340. SAVE_OPLINE();
  23341. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  23342. zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
  23343. if (IS_VAR == IS_VAR) {
  23344. zval *result = EX_VAR(opline->result.var);
  23345. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  23346. }
  23347. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  23348. }
  23349. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23350. {
  23351. USE_OPLINE
  23352. zend_free_op free_op1;
  23353. zval *container;
  23354. SAVE_OPLINE();
  23355. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  23356. zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
  23357. if (IS_VAR == IS_VAR) {
  23358. zval *result = EX_VAR(opline->result.var);
  23359. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  23360. }
  23361. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  23362. }
  23363. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23364. {
  23365. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  23366. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  23367. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  23368. }
  23369. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  23370. } else {
  23371. if (IS_UNUSED == IS_UNUSED) {
  23372. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  23373. }
  23374. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  23375. }
  23376. }
  23377. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23378. {
  23379. USE_OPLINE
  23380. zend_free_op free_op1;
  23381. zval *object_ptr;
  23382. zend_free_op free_op_data;
  23383. zval *value;
  23384. zval *variable_ptr;
  23385. zval *dim;
  23386. SAVE_OPLINE();
  23387. object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  23388. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23389. try_assign_dim_array:
  23390. SEPARATE_ARRAY(object_ptr);
  23391. if (IS_UNUSED == IS_UNUSED) {
  23392. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  23393. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  23394. ZVAL_DEREF(value);
  23395. }
  23396. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  23397. if (UNEXPECTED(variable_ptr == NULL)) {
  23398. zend_cannot_add_element();
  23399. goto assign_dim_error;
  23400. } else if (IS_CONST == IS_CV) {
  23401. if (Z_REFCOUNTED_P(value)) {
  23402. Z_ADDREF_P(value);
  23403. }
  23404. } else if (IS_CONST == IS_VAR) {
  23405. if (value != free_op_data) {
  23406. if (Z_REFCOUNTED_P(value)) {
  23407. Z_ADDREF_P(value);
  23408. }
  23409. }
  23410. } else if (IS_CONST == IS_CONST) {
  23411. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  23412. Z_ADDREF_P(value);
  23413. }
  23414. }
  23415. } else {
  23416. dim = NULL;
  23417. if (IS_UNUSED == IS_CONST) {
  23418. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23419. } else {
  23420. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23421. }
  23422. if (UNEXPECTED(variable_ptr == NULL)) {
  23423. goto assign_dim_error;
  23424. }
  23425. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  23426. value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
  23427. }
  23428. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23429. ZVAL_COPY(EX_VAR(opline->result.var), value);
  23430. }
  23431. } else {
  23432. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  23433. object_ptr = Z_REFVAL_P(object_ptr);
  23434. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23435. goto try_assign_dim_array;
  23436. }
  23437. }
  23438. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  23439. dim = NULL;
  23440. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  23441. if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  23442. dim++;
  23443. }
  23444. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23445. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  23446. if (IS_UNUSED == IS_UNUSED) {
  23447. zend_use_new_element_for_string();
  23448. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  23449. UNDEF_RESULT();
  23450. HANDLE_EXCEPTION();
  23451. } else {
  23452. dim = NULL;
  23453. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  23454. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23455. }
  23456. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  23457. ZVAL_ARR(object_ptr, zend_new_array(8));
  23458. goto try_assign_dim_array;
  23459. } else {
  23460. if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  23461. zend_use_scalar_as_array();
  23462. }
  23463. dim = NULL;
  23464. assign_dim_error:
  23465. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23466. ZVAL_NULL(EX_VAR(opline->result.var));
  23467. }
  23468. }
  23469. }
  23470. if (IS_UNUSED != IS_UNUSED) {
  23471. }
  23472. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  23473. /* assign_dim has two opcodes! */
  23474. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23475. }
  23476. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23477. {
  23478. USE_OPLINE
  23479. zend_free_op free_op1;
  23480. zval *object_ptr;
  23481. zend_free_op free_op_data;
  23482. zval *value;
  23483. zval *variable_ptr;
  23484. zval *dim;
  23485. SAVE_OPLINE();
  23486. object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  23487. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23488. try_assign_dim_array:
  23489. SEPARATE_ARRAY(object_ptr);
  23490. if (IS_UNUSED == IS_UNUSED) {
  23491. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  23492. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  23493. ZVAL_DEREF(value);
  23494. }
  23495. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  23496. if (UNEXPECTED(variable_ptr == NULL)) {
  23497. zval_ptr_dtor_nogc(free_op_data);
  23498. zend_cannot_add_element();
  23499. goto assign_dim_error;
  23500. } else if (IS_TMP_VAR == IS_CV) {
  23501. if (Z_REFCOUNTED_P(value)) {
  23502. Z_ADDREF_P(value);
  23503. }
  23504. } else if (IS_TMP_VAR == IS_VAR) {
  23505. if (value != free_op_data) {
  23506. if (Z_REFCOUNTED_P(value)) {
  23507. Z_ADDREF_P(value);
  23508. }
  23509. zval_ptr_dtor_nogc(free_op_data);
  23510. }
  23511. } else if (IS_TMP_VAR == IS_CONST) {
  23512. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  23513. Z_ADDREF_P(value);
  23514. }
  23515. }
  23516. } else {
  23517. dim = NULL;
  23518. if (IS_UNUSED == IS_CONST) {
  23519. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23520. } else {
  23521. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23522. }
  23523. if (UNEXPECTED(variable_ptr == NULL)) {
  23524. goto assign_dim_error;
  23525. }
  23526. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  23527. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
  23528. }
  23529. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23530. ZVAL_COPY(EX_VAR(opline->result.var), value);
  23531. }
  23532. } else {
  23533. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  23534. object_ptr = Z_REFVAL_P(object_ptr);
  23535. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23536. goto try_assign_dim_array;
  23537. }
  23538. }
  23539. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  23540. dim = NULL;
  23541. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  23542. if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  23543. dim++;
  23544. }
  23545. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23546. zval_ptr_dtor_nogc(free_op_data);
  23547. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  23548. if (IS_UNUSED == IS_UNUSED) {
  23549. zend_use_new_element_for_string();
  23550. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23551. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  23552. UNDEF_RESULT();
  23553. HANDLE_EXCEPTION();
  23554. } else {
  23555. dim = NULL;
  23556. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  23557. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23558. zval_ptr_dtor_nogc(free_op_data);
  23559. }
  23560. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  23561. ZVAL_ARR(object_ptr, zend_new_array(8));
  23562. goto try_assign_dim_array;
  23563. } else {
  23564. if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  23565. zend_use_scalar_as_array();
  23566. }
  23567. dim = NULL;
  23568. assign_dim_error:
  23569. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23570. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23571. ZVAL_NULL(EX_VAR(opline->result.var));
  23572. }
  23573. }
  23574. }
  23575. if (IS_UNUSED != IS_UNUSED) {
  23576. }
  23577. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  23578. /* assign_dim has two opcodes! */
  23579. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23580. }
  23581. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23582. {
  23583. USE_OPLINE
  23584. zend_free_op free_op1;
  23585. zval *object_ptr;
  23586. zend_free_op free_op_data;
  23587. zval *value;
  23588. zval *variable_ptr;
  23589. zval *dim;
  23590. SAVE_OPLINE();
  23591. object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  23592. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23593. try_assign_dim_array:
  23594. SEPARATE_ARRAY(object_ptr);
  23595. if (IS_UNUSED == IS_UNUSED) {
  23596. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  23597. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  23598. ZVAL_DEREF(value);
  23599. }
  23600. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  23601. if (UNEXPECTED(variable_ptr == NULL)) {
  23602. zval_ptr_dtor_nogc(free_op_data);
  23603. zend_cannot_add_element();
  23604. goto assign_dim_error;
  23605. } else if (IS_VAR == IS_CV) {
  23606. if (Z_REFCOUNTED_P(value)) {
  23607. Z_ADDREF_P(value);
  23608. }
  23609. } else if (IS_VAR == IS_VAR) {
  23610. if (value != free_op_data) {
  23611. if (Z_REFCOUNTED_P(value)) {
  23612. Z_ADDREF_P(value);
  23613. }
  23614. zval_ptr_dtor_nogc(free_op_data);
  23615. }
  23616. } else if (IS_VAR == IS_CONST) {
  23617. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  23618. Z_ADDREF_P(value);
  23619. }
  23620. }
  23621. } else {
  23622. dim = NULL;
  23623. if (IS_UNUSED == IS_CONST) {
  23624. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23625. } else {
  23626. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23627. }
  23628. if (UNEXPECTED(variable_ptr == NULL)) {
  23629. goto assign_dim_error;
  23630. }
  23631. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  23632. value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
  23633. }
  23634. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23635. ZVAL_COPY(EX_VAR(opline->result.var), value);
  23636. }
  23637. } else {
  23638. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  23639. object_ptr = Z_REFVAL_P(object_ptr);
  23640. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23641. goto try_assign_dim_array;
  23642. }
  23643. }
  23644. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  23645. dim = NULL;
  23646. value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  23647. if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  23648. dim++;
  23649. }
  23650. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23651. zval_ptr_dtor_nogc(free_op_data);
  23652. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  23653. if (IS_UNUSED == IS_UNUSED) {
  23654. zend_use_new_element_for_string();
  23655. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23656. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  23657. UNDEF_RESULT();
  23658. HANDLE_EXCEPTION();
  23659. } else {
  23660. dim = NULL;
  23661. value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  23662. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23663. zval_ptr_dtor_nogc(free_op_data);
  23664. }
  23665. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  23666. ZVAL_ARR(object_ptr, zend_new_array(8));
  23667. goto try_assign_dim_array;
  23668. } else {
  23669. if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  23670. zend_use_scalar_as_array();
  23671. }
  23672. dim = NULL;
  23673. assign_dim_error:
  23674. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  23675. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23676. ZVAL_NULL(EX_VAR(opline->result.var));
  23677. }
  23678. }
  23679. }
  23680. if (IS_UNUSED != IS_UNUSED) {
  23681. }
  23682. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  23683. /* assign_dim has two opcodes! */
  23684. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23685. }
  23686. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23687. {
  23688. USE_OPLINE
  23689. zend_free_op free_op1;
  23690. zval *object_ptr;
  23691. zend_free_op free_op_data;
  23692. zval *value;
  23693. zval *variable_ptr;
  23694. zval *dim;
  23695. SAVE_OPLINE();
  23696. object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  23697. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23698. try_assign_dim_array:
  23699. SEPARATE_ARRAY(object_ptr);
  23700. if (IS_UNUSED == IS_UNUSED) {
  23701. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  23702. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  23703. ZVAL_DEREF(value);
  23704. }
  23705. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  23706. if (UNEXPECTED(variable_ptr == NULL)) {
  23707. zend_cannot_add_element();
  23708. goto assign_dim_error;
  23709. } else if (IS_CV == IS_CV) {
  23710. if (Z_REFCOUNTED_P(value)) {
  23711. Z_ADDREF_P(value);
  23712. }
  23713. } else if (IS_CV == IS_VAR) {
  23714. if (value != free_op_data) {
  23715. if (Z_REFCOUNTED_P(value)) {
  23716. Z_ADDREF_P(value);
  23717. }
  23718. }
  23719. } else if (IS_CV == IS_CONST) {
  23720. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  23721. Z_ADDREF_P(value);
  23722. }
  23723. }
  23724. } else {
  23725. dim = NULL;
  23726. if (IS_UNUSED == IS_CONST) {
  23727. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23728. } else {
  23729. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  23730. }
  23731. if (UNEXPECTED(variable_ptr == NULL)) {
  23732. goto assign_dim_error;
  23733. }
  23734. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  23735. value = zend_assign_to_variable(variable_ptr, value, IS_CV);
  23736. }
  23737. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23738. ZVAL_COPY(EX_VAR(opline->result.var), value);
  23739. }
  23740. } else {
  23741. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  23742. object_ptr = Z_REFVAL_P(object_ptr);
  23743. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  23744. goto try_assign_dim_array;
  23745. }
  23746. }
  23747. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  23748. dim = NULL;
  23749. value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  23750. if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  23751. dim++;
  23752. }
  23753. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23754. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  23755. if (IS_UNUSED == IS_UNUSED) {
  23756. zend_use_new_element_for_string();
  23757. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  23758. UNDEF_RESULT();
  23759. HANDLE_EXCEPTION();
  23760. } else {
  23761. dim = NULL;
  23762. value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  23763. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  23764. }
  23765. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  23766. ZVAL_ARR(object_ptr, zend_new_array(8));
  23767. goto try_assign_dim_array;
  23768. } else {
  23769. if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  23770. zend_use_scalar_as_array();
  23771. }
  23772. dim = NULL;
  23773. assign_dim_error:
  23774. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  23775. ZVAL_NULL(EX_VAR(opline->result.var));
  23776. }
  23777. }
  23778. }
  23779. if (IS_UNUSED != IS_UNUSED) {
  23780. }
  23781. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  23782. /* assign_dim has two opcodes! */
  23783. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23784. }
  23785. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23786. {
  23787. USE_OPLINE
  23788. zval *function_name;
  23789. zend_class_entry *ce;
  23790. zend_object *object;
  23791. zend_function *fbc;
  23792. zend_execute_data *call;
  23793. SAVE_OPLINE();
  23794. if (IS_VAR == IS_CONST) {
  23795. /* no function found. try a static method in class */
  23796. ce = CACHED_PTR(opline->result.num);
  23797. if (UNEXPECTED(ce == NULL)) {
  23798. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  23799. if (UNEXPECTED(ce == NULL)) {
  23800. ZEND_ASSERT(EG(exception));
  23801. HANDLE_EXCEPTION();
  23802. }
  23803. if (IS_UNUSED != IS_CONST) {
  23804. CACHE_PTR(opline->result.num, ce);
  23805. }
  23806. }
  23807. } else if (IS_VAR == IS_UNUSED) {
  23808. ce = zend_fetch_class(NULL, opline->op1.num);
  23809. if (UNEXPECTED(ce == NULL)) {
  23810. ZEND_ASSERT(EG(exception));
  23811. HANDLE_EXCEPTION();
  23812. }
  23813. } else {
  23814. ce = Z_CE_P(EX_VAR(opline->op1.var));
  23815. }
  23816. if (IS_VAR == IS_CONST &&
  23817. IS_UNUSED == IS_CONST &&
  23818. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  23819. /* nothing to do */
  23820. } else if (IS_VAR != IS_CONST &&
  23821. IS_UNUSED == IS_CONST &&
  23822. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  23823. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  23824. } else if (IS_UNUSED != IS_UNUSED) {
  23825. function_name = NULL;
  23826. if (IS_UNUSED != IS_CONST) {
  23827. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  23828. do {
  23829. if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  23830. function_name = Z_REFVAL_P(function_name);
  23831. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  23832. break;
  23833. }
  23834. } else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  23835. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  23836. if (UNEXPECTED(EG(exception) != NULL)) {
  23837. HANDLE_EXCEPTION();
  23838. }
  23839. }
  23840. zend_throw_error(NULL, "Function name must be a string");
  23841. HANDLE_EXCEPTION();
  23842. } while (0);
  23843. }
  23844. }
  23845. if (ce->get_static_method) {
  23846. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  23847. } else {
  23848. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  23849. }
  23850. if (UNEXPECTED(fbc == NULL)) {
  23851. if (EXPECTED(!EG(exception))) {
  23852. zend_undefined_method(ce, Z_STR_P(function_name));
  23853. }
  23854. HANDLE_EXCEPTION();
  23855. }
  23856. if (IS_UNUSED == IS_CONST &&
  23857. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  23858. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
  23859. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  23860. }
  23861. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  23862. init_func_run_time_cache(&fbc->op_array);
  23863. }
  23864. if (IS_UNUSED != IS_CONST) {
  23865. }
  23866. } else {
  23867. if (UNEXPECTED(ce->constructor == NULL)) {
  23868. zend_throw_error(NULL, "Cannot call constructor");
  23869. HANDLE_EXCEPTION();
  23870. }
  23871. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  23872. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  23873. HANDLE_EXCEPTION();
  23874. }
  23875. fbc = ce->constructor;
  23876. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  23877. init_func_run_time_cache(&fbc->op_array);
  23878. }
  23879. }
  23880. object = NULL;
  23881. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  23882. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  23883. object = Z_OBJ(EX(This));
  23884. ce = object->ce;
  23885. } else {
  23886. zend_non_static_method_call(fbc);
  23887. if (UNEXPECTED(EG(exception) != NULL)) {
  23888. HANDLE_EXCEPTION();
  23889. }
  23890. }
  23891. }
  23892. if (IS_VAR == IS_UNUSED) {
  23893. /* previous opcode is ZEND_FETCH_CLASS */
  23894. if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  23895. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
  23896. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  23897. ce = Z_OBJCE(EX(This));
  23898. } else {
  23899. ce = Z_CE(EX(This));
  23900. }
  23901. }
  23902. }
  23903. call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  23904. fbc, opline->extended_value, ce, object);
  23905. call->prev_execute_data = EX(call);
  23906. EX(call) = call;
  23907. ZEND_VM_NEXT_OPCODE();
  23908. }
  23909. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23910. {
  23911. USE_OPLINE
  23912. SAVE_OPLINE();
  23913. if (IS_VAR == IS_UNUSED) {
  23914. zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
  23915. } else {
  23916. /* prevents "undefined variable opline" errors */
  23917. #if 0 || (IS_VAR != IS_UNUSED)
  23918. zval *retval_ref, *retval_ptr;
  23919. zend_free_op free_op1;
  23920. zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
  23921. retval_ref = retval_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  23922. if (IS_VAR == IS_CONST) {
  23923. ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
  23924. retval_ref = retval_ptr = EX_VAR(opline->result.var);
  23925. } else if (IS_VAR == IS_VAR) {
  23926. if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
  23927. retval_ptr = Z_INDIRECT_P(retval_ptr);
  23928. }
  23929. ZVAL_DEREF(retval_ptr);
  23930. } else if (IS_VAR == IS_CV) {
  23931. ZVAL_DEREF(retval_ptr);
  23932. }
  23933. if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type)
  23934. && ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE
  23935. && ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE
  23936. && !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr))
  23937. && !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  23938. && retval_ref != retval_ptr)
  23939. ) {
  23940. /* A cast might happen - unwrap the reference if this is a by-value return */
  23941. if (Z_REFCOUNT_P(retval_ref) == 1) {
  23942. ZVAL_UNREF(retval_ref);
  23943. } else {
  23944. Z_DELREF_P(retval_ref);
  23945. ZVAL_COPY(retval_ref, retval_ptr);
  23946. }
  23947. retval_ptr = retval_ref;
  23948. }
  23949. zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
  23950. #endif
  23951. }
  23952. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  23953. }
  23954. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  23955. {
  23956. USE_OPLINE
  23957. zval *result;
  23958. zend_function *constructor;
  23959. zend_class_entry *ce;
  23960. zend_execute_data *call;
  23961. SAVE_OPLINE();
  23962. if (IS_VAR == IS_CONST) {
  23963. ce = CACHED_PTR(opline->op2.num);
  23964. if (UNEXPECTED(ce == NULL)) {
  23965. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  23966. if (UNEXPECTED(ce == NULL)) {
  23967. ZEND_ASSERT(EG(exception));
  23968. ZVAL_UNDEF(EX_VAR(opline->result.var));
  23969. HANDLE_EXCEPTION();
  23970. }
  23971. CACHE_PTR(opline->op2.num, ce);
  23972. }
  23973. } else if (IS_VAR == IS_UNUSED) {
  23974. ce = zend_fetch_class(NULL, opline->op1.num);
  23975. if (UNEXPECTED(ce == NULL)) {
  23976. ZEND_ASSERT(EG(exception));
  23977. ZVAL_UNDEF(EX_VAR(opline->result.var));
  23978. HANDLE_EXCEPTION();
  23979. }
  23980. } else {
  23981. ce = Z_CE_P(EX_VAR(opline->op1.var));
  23982. }
  23983. result = EX_VAR(opline->result.var);
  23984. if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
  23985. ZVAL_UNDEF(result);
  23986. HANDLE_EXCEPTION();
  23987. }
  23988. constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
  23989. if (constructor == NULL) {
  23990. if (UNEXPECTED(EG(exception))) {
  23991. HANDLE_EXCEPTION();
  23992. }
  23993. /* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
  23994. * opcode is DO_FCALL in case EXT instructions are used. */
  23995. if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
  23996. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  23997. }
  23998. /* Perform a dummy function call */
  23999. call = zend_vm_stack_push_call_frame(
  24000. ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
  24001. opline->extended_value, NULL, NULL);
  24002. } else {
  24003. if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!constructor->op_array.run_time_cache)) {
  24004. init_func_run_time_cache(&constructor->op_array);
  24005. }
  24006. /* We are not handling overloaded classes right now */
  24007. call = zend_vm_stack_push_call_frame(
  24008. ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_CTOR,
  24009. constructor,
  24010. opline->extended_value,
  24011. ce,
  24012. Z_OBJ_P(result));
  24013. Z_ADDREF_P(result);
  24014. }
  24015. call->prev_execute_data = EX(call);
  24016. EX(call) = call;
  24017. ZEND_VM_NEXT_OPCODE();
  24018. }
  24019. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24020. {
  24021. USE_OPLINE
  24022. zend_free_op free_op1;
  24023. zval *expr_ptr, new_expr;
  24024. SAVE_OPLINE();
  24025. if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
  24026. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  24027. expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24028. if (Z_ISREF_P(expr_ptr)) {
  24029. Z_ADDREF_P(expr_ptr);
  24030. } else {
  24031. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  24032. }
  24033. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  24034. } else {
  24035. expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24036. if (IS_VAR == IS_TMP_VAR) {
  24037. /* pass */
  24038. } else if (IS_VAR == IS_CONST) {
  24039. Z_TRY_ADDREF_P(expr_ptr);
  24040. } else if (IS_VAR == IS_CV) {
  24041. ZVAL_DEREF(expr_ptr);
  24042. Z_TRY_ADDREF_P(expr_ptr);
  24043. } else /* if (IS_VAR == IS_VAR) */ {
  24044. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  24045. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  24046. expr_ptr = Z_REFVAL_P(expr_ptr);
  24047. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  24048. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  24049. expr_ptr = &new_expr;
  24050. efree_size(ref, sizeof(zend_reference));
  24051. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  24052. Z_ADDREF_P(expr_ptr);
  24053. }
  24054. }
  24055. }
  24056. }
  24057. if (IS_UNUSED != IS_UNUSED) {
  24058. zval *offset = NULL;
  24059. zend_string *str;
  24060. zend_ulong hval;
  24061. add_again:
  24062. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  24063. str = Z_STR_P(offset);
  24064. if (IS_UNUSED != IS_CONST) {
  24065. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  24066. goto num_index;
  24067. }
  24068. }
  24069. str_index:
  24070. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  24071. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  24072. hval = Z_LVAL_P(offset);
  24073. num_index:
  24074. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  24075. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  24076. offset = Z_REFVAL_P(offset);
  24077. goto add_again;
  24078. } else if (Z_TYPE_P(offset) == IS_NULL) {
  24079. str = ZSTR_EMPTY_ALLOC();
  24080. goto str_index;
  24081. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  24082. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  24083. goto num_index;
  24084. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  24085. hval = 0;
  24086. goto num_index;
  24087. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  24088. hval = 1;
  24089. goto num_index;
  24090. } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  24091. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  24092. str = ZSTR_EMPTY_ALLOC();
  24093. goto str_index;
  24094. } else {
  24095. zend_illegal_offset();
  24096. zval_ptr_dtor_nogc(expr_ptr);
  24097. }
  24098. } else {
  24099. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  24100. zend_cannot_add_element();
  24101. zval_ptr_dtor_nogc(expr_ptr);
  24102. }
  24103. }
  24104. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24105. }
  24106. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24107. {
  24108. zval *array;
  24109. uint32_t size;
  24110. USE_OPLINE
  24111. array = EX_VAR(opline->result.var);
  24112. if (IS_VAR != IS_UNUSED) {
  24113. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  24114. ZVAL_ARR(array, zend_new_array(size));
  24115. /* Explicitly initialize array as not-packed if flag is set */
  24116. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  24117. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  24118. }
  24119. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24120. } else {
  24121. ZVAL_EMPTY_ARRAY(array);
  24122. ZEND_VM_NEXT_OPCODE();
  24123. }
  24124. }
  24125. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24126. {
  24127. USE_OPLINE
  24128. zval *var_ptr;
  24129. var_ptr = EX_VAR(opline->op1.var);
  24130. if (UNEXPECTED(Z_ISREF_P(var_ptr))) {
  24131. if (UNEXPECTED(Z_REFCOUNT_P(var_ptr) == 1)) {
  24132. ZVAL_UNREF(var_ptr);
  24133. }
  24134. }
  24135. ZEND_VM_NEXT_OPCODE();
  24136. }
  24137. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24138. {
  24139. USE_OPLINE
  24140. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  24141. SAVE_OPLINE();
  24142. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  24143. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24144. }
  24145. /* Destroy the previously yielded value */
  24146. zval_ptr_dtor(&generator->value);
  24147. /* Destroy the previously yielded key */
  24148. zval_ptr_dtor(&generator->key);
  24149. /* Set the new yielded value */
  24150. if (IS_VAR != IS_UNUSED) {
  24151. zend_free_op free_op1;
  24152. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  24153. /* Constants and temporary variables aren't yieldable by reference,
  24154. * but we still allow them with a notice. */
  24155. if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
  24156. zval *value;
  24157. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  24158. value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24159. ZVAL_COPY_VALUE(&generator->value, value);
  24160. if (IS_VAR == IS_CONST) {
  24161. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  24162. Z_ADDREF(generator->value);
  24163. }
  24164. }
  24165. } else {
  24166. zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24167. /* If a function call result is yielded and the function did
  24168. * not return by reference we throw a notice. */
  24169. if (IS_VAR == IS_VAR &&
  24170. (value_ptr == &EG(uninitialized_zval) ||
  24171. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  24172. !Z_ISREF_P(value_ptr)))) {
  24173. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  24174. ZVAL_COPY(&generator->value, value_ptr);
  24175. } else {
  24176. if (Z_ISREF_P(value_ptr)) {
  24177. Z_ADDREF_P(value_ptr);
  24178. } else {
  24179. ZVAL_MAKE_REF_EX(value_ptr, 2);
  24180. }
  24181. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  24182. }
  24183. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  24184. }
  24185. } else {
  24186. zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24187. /* Consts, temporary variables and references need copying */
  24188. if (IS_VAR == IS_CONST) {
  24189. ZVAL_COPY_VALUE(&generator->value, value);
  24190. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  24191. Z_ADDREF(generator->value);
  24192. }
  24193. } else if (IS_VAR == IS_TMP_VAR) {
  24194. ZVAL_COPY_VALUE(&generator->value, value);
  24195. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  24196. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  24197. zval_ptr_dtor_nogc(free_op1);
  24198. } else {
  24199. ZVAL_COPY_VALUE(&generator->value, value);
  24200. if (IS_VAR == IS_CV) {
  24201. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  24202. }
  24203. }
  24204. }
  24205. } else {
  24206. /* If no value was specified yield null */
  24207. ZVAL_NULL(&generator->value);
  24208. }
  24209. /* Set the new yielded key */
  24210. if (IS_UNUSED != IS_UNUSED) {
  24211. zval *key = NULL;
  24212. /* Consts, temporary variables and references need copying */
  24213. if (IS_UNUSED == IS_CONST) {
  24214. ZVAL_COPY_VALUE(&generator->key, key);
  24215. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  24216. Z_ADDREF(generator->key);
  24217. }
  24218. } else if (IS_UNUSED == IS_TMP_VAR) {
  24219. ZVAL_COPY_VALUE(&generator->key, key);
  24220. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  24221. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  24222. } else {
  24223. ZVAL_COPY_VALUE(&generator->key, key);
  24224. if (IS_UNUSED == IS_CV) {
  24225. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  24226. }
  24227. }
  24228. if (Z_TYPE(generator->key) == IS_LONG
  24229. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  24230. ) {
  24231. generator->largest_used_integer_key = Z_LVAL(generator->key);
  24232. }
  24233. } else {
  24234. /* If no key was specified we use auto-increment keys */
  24235. generator->largest_used_integer_key++;
  24236. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  24237. }
  24238. if (RETURN_VALUE_USED(opline)) {
  24239. /* If the return value of yield is used set the send
  24240. * target and initialize it to NULL */
  24241. generator->send_target = EX_VAR(opline->result.var);
  24242. ZVAL_NULL(generator->send_target);
  24243. } else {
  24244. generator->send_target = NULL;
  24245. }
  24246. /* We increment to the next op, so we are at the correct position when the
  24247. * generator is resumed. */
  24248. ZEND_VM_INC_OPCODE();
  24249. /* The GOTO VM uses a local opline variable. We need to set the opline
  24250. * variable in execute_data so we don't resume at an old position. */
  24251. SAVE_OPLINE();
  24252. ZEND_VM_RETURN();
  24253. }
  24254. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24255. {
  24256. USE_OPLINE
  24257. zval *op1 = EX_VAR(opline->op1.var);
  24258. if (IS_VAR == IS_CV) {
  24259. if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  24260. ZVAL_NEW_EMPTY_REF(op1);
  24261. Z_SET_REFCOUNT_P(op1, 2);
  24262. ZVAL_NULL(Z_REFVAL_P(op1));
  24263. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  24264. } else {
  24265. if (Z_ISREF_P(op1)) {
  24266. Z_ADDREF_P(op1);
  24267. } else {
  24268. ZVAL_MAKE_REF_EX(op1, 2);
  24269. }
  24270. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  24271. }
  24272. } else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
  24273. op1 = Z_INDIRECT_P(op1);
  24274. if (EXPECTED(!Z_ISREF_P(op1))) {
  24275. ZVAL_MAKE_REF_EX(op1, 2);
  24276. } else {
  24277. GC_ADDREF(Z_REF_P(op1));
  24278. }
  24279. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  24280. } else {
  24281. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
  24282. }
  24283. ZEND_VM_NEXT_OPCODE();
  24284. }
  24285. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24286. {
  24287. USE_OPLINE
  24288. zend_free_op free_op1;
  24289. zval *op1;
  24290. zend_long count;
  24291. SAVE_OPLINE();
  24292. op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24293. do {
  24294. if (Z_TYPE_P(op1) == IS_ARRAY) {
  24295. count = zend_array_count(Z_ARRVAL_P(op1));
  24296. break;
  24297. } else if (Z_TYPE_P(op1) == IS_OBJECT) {
  24298. /* first, we check if the handler is defined */
  24299. if (Z_OBJ_HT_P(op1)->count_elements) {
  24300. if (SUCCESS == Z_OBJ_HT_P(op1)->count_elements(op1, &count)) {
  24301. break;
  24302. }
  24303. }
  24304. /* if not and the object implements Countable we call its count() method */
  24305. if (instanceof_function(Z_OBJCE_P(op1), zend_ce_countable)) {
  24306. zval retval;
  24307. zend_call_method_with_0_params(op1, NULL, NULL, "count", &retval);
  24308. count = zval_get_long(&retval);
  24309. zval_ptr_dtor(&retval);
  24310. break;
  24311. }
  24312. /* If There's no handler and it doesn't implement Countable then add a warning */
  24313. count = 1;
  24314. } else if (Z_TYPE_P(op1) == IS_NULL) {
  24315. count = 0;
  24316. } else {
  24317. count = 1;
  24318. }
  24319. zend_error(E_WARNING, "count(): Parameter must be an array or an object that implements Countable");
  24320. } while (0);
  24321. ZVAL_LONG(EX_VAR(opline->result.var), count);
  24322. zval_ptr_dtor_nogc(free_op1);
  24323. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24324. }
  24325. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24326. {
  24327. USE_OPLINE
  24328. if (IS_VAR == IS_UNUSED) {
  24329. if (UNEXPECTED(!EX(func)->common.scope)) {
  24330. SAVE_OPLINE();
  24331. zend_error(E_WARNING, "get_class() called without object from outside a class");
  24332. ZVAL_FALSE(EX_VAR(opline->result.var));
  24333. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24334. } else {
  24335. ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
  24336. ZEND_VM_NEXT_OPCODE();
  24337. }
  24338. } else {
  24339. zend_free_op free_op1;
  24340. zval *op1;
  24341. SAVE_OPLINE();
  24342. op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24343. if (Z_TYPE_P(op1) == IS_OBJECT) {
  24344. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
  24345. } else {
  24346. zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1)));
  24347. ZVAL_FALSE(EX_VAR(opline->result.var));
  24348. }
  24349. zval_ptr_dtor_nogc(free_op1);
  24350. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24351. }
  24352. }
  24353. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24354. {
  24355. USE_OPLINE
  24356. zend_free_op free_op1;
  24357. zval *op1;
  24358. zend_string *type;
  24359. SAVE_OPLINE();
  24360. op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24361. type = zend_zval_get_type(op1);
  24362. if (EXPECTED(type)) {
  24363. ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
  24364. } else {
  24365. ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
  24366. }
  24367. zval_ptr_dtor_nogc(free_op1);
  24368. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24369. }
  24370. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  24371. {
  24372. USE_OPLINE
  24373. zend_free_op free_op1, free_op_data1;
  24374. zval *object;
  24375. zval *property;
  24376. zval *value;
  24377. zval *zptr;
  24378. SAVE_OPLINE();
  24379. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24380. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  24381. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24382. }
  24383. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  24384. do {
  24385. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  24386. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  24387. if (Z_ISREF_P(object)) {
  24388. object = Z_REFVAL_P(object);
  24389. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  24390. goto assign_op_object;
  24391. }
  24392. }
  24393. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  24394. break;
  24395. }
  24396. }
  24397. /* here we are sure we are dealing with an object */
  24398. assign_op_object:
  24399. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  24400. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
  24401. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  24402. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24403. ZVAL_NULL(EX_VAR(opline->result.var));
  24404. }
  24405. } else {
  24406. ZVAL_DEREF(zptr);
  24407. binary_op(zptr, zptr, value);
  24408. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24409. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  24410. }
  24411. }
  24412. } else {
  24413. zend_assign_op_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC);
  24414. }
  24415. } while (0);
  24416. FREE_OP(free_op_data1);
  24417. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  24418. /* assign_obj has two opcodes! */
  24419. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  24420. }
  24421. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  24422. {
  24423. USE_OPLINE
  24424. zend_free_op free_op1, free_op_data1;
  24425. zval *var_ptr;
  24426. zval *value, *container, *dim;
  24427. SAVE_OPLINE();
  24428. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24429. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  24430. assign_dim_op_array:
  24431. SEPARATE_ARRAY(container);
  24432. assign_dim_op_new_array:
  24433. dim = EX_VAR(opline->op2.var);
  24434. if (IS_CV == IS_UNUSED) {
  24435. var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
  24436. if (UNEXPECTED(!var_ptr)) {
  24437. zend_cannot_add_element();
  24438. goto assign_dim_op_ret_null;
  24439. }
  24440. } else {
  24441. if (IS_CV == IS_CONST) {
  24442. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
  24443. } else {
  24444. var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
  24445. }
  24446. if (UNEXPECTED(!var_ptr)) {
  24447. goto assign_dim_op_ret_null;
  24448. }
  24449. ZVAL_DEREF(var_ptr);
  24450. }
  24451. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  24452. binary_op(var_ptr, var_ptr, value);
  24453. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24454. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  24455. }
  24456. } else {
  24457. if (EXPECTED(Z_ISREF_P(container))) {
  24458. container = Z_REFVAL_P(container);
  24459. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  24460. goto assign_dim_op_array;
  24461. }
  24462. } else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  24463. container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
  24464. assign_dim_op_convert_to_array:
  24465. ZVAL_ARR(container, zend_new_array(8));
  24466. goto assign_dim_op_new_array;
  24467. }
  24468. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  24469. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  24470. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  24471. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  24472. dim++;
  24473. }
  24474. zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC);
  24475. } else {
  24476. if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  24477. if (IS_CV == IS_UNUSED) {
  24478. zend_use_new_element_for_string();
  24479. } else {
  24480. zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC);
  24481. zend_wrong_string_offset(EXECUTE_DATA_C);
  24482. }
  24483. UNDEF_RESULT();
  24484. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  24485. goto assign_dim_op_convert_to_array;
  24486. } else {
  24487. if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
  24488. zend_use_scalar_as_array();
  24489. }
  24490. assign_dim_op_ret_null:
  24491. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24492. ZVAL_NULL(EX_VAR(opline->result.var));
  24493. }
  24494. }
  24495. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  24496. }
  24497. }
  24498. FREE_OP(free_op_data1);
  24499. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  24500. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  24501. }
  24502. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_VAR_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  24503. {
  24504. USE_OPLINE
  24505. zend_free_op free_op1;
  24506. zval *var_ptr;
  24507. zval *value;
  24508. SAVE_OPLINE();
  24509. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  24510. var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24511. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  24512. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24513. ZVAL_NULL(EX_VAR(opline->result.var));
  24514. }
  24515. } else {
  24516. ZVAL_DEREF(var_ptr);
  24517. binary_op(var_ptr, var_ptr, value);
  24518. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24519. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  24520. }
  24521. }
  24522. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  24523. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24524. }
  24525. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  24526. {
  24527. #if 1 && IS_CV == IS_UNUSED
  24528. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24529. #else
  24530. # if 0 || IS_VAR != IS_UNUSED
  24531. # if 0
  24532. /* opline->extended_value checks are specialized, don't need opline */
  24533. USE_OPLINE
  24534. # endif
  24535. if (EXPECTED(1)) {
  24536. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24537. }
  24538. if (EXPECTED(0)) {
  24539. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24540. }
  24541. # endif
  24542. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24543. #endif
  24544. }
  24545. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  24546. {
  24547. #if 1 && IS_CV == IS_UNUSED
  24548. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24549. #else
  24550. # if 0 || IS_VAR != IS_UNUSED
  24551. # if 0
  24552. /* opline->extended_value checks are specialized, don't need opline */
  24553. USE_OPLINE
  24554. # endif
  24555. if (EXPECTED(0)) {
  24556. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24557. }
  24558. if (EXPECTED(1)) {
  24559. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24560. }
  24561. # endif
  24562. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24563. #endif
  24564. }
  24565. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  24566. {
  24567. #if 1 && IS_CV == IS_UNUSED
  24568. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24569. #else
  24570. # if 0 || IS_VAR != IS_UNUSED
  24571. # if 0
  24572. /* opline->extended_value checks are specialized, don't need opline */
  24573. USE_OPLINE
  24574. # endif
  24575. if (EXPECTED(0)) {
  24576. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24577. }
  24578. if (EXPECTED(0)) {
  24579. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24580. }
  24581. # endif
  24582. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24583. #endif
  24584. }
  24585. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24586. {
  24587. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24588. }
  24589. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24590. {
  24591. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24592. }
  24593. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24594. {
  24595. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24596. }
  24597. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24598. {
  24599. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24600. }
  24601. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24602. {
  24603. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24604. }
  24605. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24606. {
  24607. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24608. }
  24609. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24610. {
  24611. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24612. }
  24613. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24614. {
  24615. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24616. }
  24617. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24618. {
  24619. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24620. }
  24621. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24622. {
  24623. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24624. }
  24625. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24626. {
  24627. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24628. }
  24629. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24630. {
  24631. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24632. }
  24633. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24634. {
  24635. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24636. }
  24637. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24638. {
  24639. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24640. }
  24641. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24642. {
  24643. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24644. }
  24645. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24646. {
  24647. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24648. }
  24649. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24650. {
  24651. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24652. }
  24653. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24654. {
  24655. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24656. }
  24657. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24658. {
  24659. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24660. }
  24661. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24662. {
  24663. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24664. }
  24665. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24666. {
  24667. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24668. }
  24669. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24670. {
  24671. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24672. }
  24673. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24674. {
  24675. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24676. }
  24677. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24678. {
  24679. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24680. }
  24681. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24682. {
  24683. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24684. }
  24685. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24686. {
  24687. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24688. }
  24689. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24690. {
  24691. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24692. }
  24693. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24694. {
  24695. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24696. }
  24697. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24698. {
  24699. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24700. }
  24701. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24702. {
  24703. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24704. }
  24705. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24706. {
  24707. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24708. }
  24709. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24710. {
  24711. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24712. }
  24713. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24714. {
  24715. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24716. }
  24717. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24718. {
  24719. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24720. }
  24721. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24722. {
  24723. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24724. }
  24725. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24726. {
  24727. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24728. }
  24729. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  24730. {
  24731. USE_OPLINE
  24732. zend_free_op free_op1;
  24733. zval *object;
  24734. zval *property;
  24735. zval *zptr;
  24736. SAVE_OPLINE();
  24737. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24738. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  24739. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24740. }
  24741. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  24742. do {
  24743. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  24744. if (Z_ISREF_P(object)) {
  24745. object = Z_REFVAL_P(object);
  24746. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  24747. goto pre_incdec_object;
  24748. }
  24749. }
  24750. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  24751. break;
  24752. }
  24753. }
  24754. /* here we are sure we are dealing with an object */
  24755. pre_incdec_object:
  24756. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  24757. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  24758. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  24759. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24760. ZVAL_NULL(EX_VAR(opline->result.var));
  24761. }
  24762. } else {
  24763. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  24764. if (inc) {
  24765. fast_long_increment_function(zptr);
  24766. } else {
  24767. fast_long_decrement_function(zptr);
  24768. }
  24769. } else {
  24770. ZVAL_DEREF(zptr);
  24771. if (inc) {
  24772. increment_function(zptr);
  24773. } else {
  24774. decrement_function(zptr);
  24775. }
  24776. }
  24777. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  24778. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  24779. }
  24780. }
  24781. } else {
  24782. zend_pre_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  24783. }
  24784. } while (0);
  24785. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  24786. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24787. }
  24788. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24789. {
  24790. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24791. }
  24792. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24793. {
  24794. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24795. }
  24796. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  24797. {
  24798. USE_OPLINE
  24799. zend_free_op free_op1;
  24800. zval *object;
  24801. zval *property;
  24802. zval *zptr;
  24803. SAVE_OPLINE();
  24804. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24805. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  24806. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24807. }
  24808. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  24809. do {
  24810. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  24811. if (Z_ISREF_P(object)) {
  24812. object = Z_REFVAL_P(object);
  24813. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  24814. goto post_incdec_object;
  24815. }
  24816. }
  24817. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  24818. break;
  24819. }
  24820. }
  24821. /* here we are sure we are dealing with an object */
  24822. post_incdec_object:
  24823. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  24824. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  24825. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  24826. ZVAL_NULL(EX_VAR(opline->result.var));
  24827. } else {
  24828. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  24829. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr));
  24830. if (inc) {
  24831. fast_long_increment_function(zptr);
  24832. } else {
  24833. fast_long_decrement_function(zptr);
  24834. }
  24835. } else {
  24836. ZVAL_DEREF(zptr);
  24837. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  24838. if (inc) {
  24839. increment_function(zptr);
  24840. } else {
  24841. decrement_function(zptr);
  24842. }
  24843. }
  24844. }
  24845. } else {
  24846. zend_post_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  24847. }
  24848. } while (0);
  24849. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  24850. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24851. }
  24852. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24853. {
  24854. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24855. }
  24856. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24857. {
  24858. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  24859. }
  24860. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24861. {
  24862. USE_OPLINE
  24863. zend_free_op free_op1;
  24864. zval *container;
  24865. SAVE_OPLINE();
  24866. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24867. zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  24868. if (IS_VAR == IS_VAR) {
  24869. zval *result = EX_VAR(opline->result.var);
  24870. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  24871. }
  24872. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24873. }
  24874. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24875. {
  24876. USE_OPLINE
  24877. zend_free_op free_op1;
  24878. zval *container;
  24879. SAVE_OPLINE();
  24880. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24881. zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  24882. if (IS_VAR == IS_VAR) {
  24883. zval *result = EX_VAR(opline->result.var);
  24884. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  24885. }
  24886. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24887. }
  24888. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24889. {
  24890. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  24891. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  24892. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24893. }
  24894. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24895. } else {
  24896. if (IS_CV == IS_UNUSED) {
  24897. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24898. }
  24899. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24900. }
  24901. }
  24902. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24903. {
  24904. USE_OPLINE
  24905. zend_free_op free_op1;
  24906. zval *container;
  24907. SAVE_OPLINE();
  24908. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24909. zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  24910. if (IS_VAR == IS_VAR) {
  24911. zval *result = EX_VAR(opline->result.var);
  24912. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  24913. }
  24914. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24915. }
  24916. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24917. {
  24918. USE_OPLINE
  24919. zend_free_op free_op1;
  24920. zval *property, *container, *result;
  24921. SAVE_OPLINE();
  24922. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24923. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  24924. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24925. }
  24926. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  24927. result = EX_VAR(opline->result.var);
  24928. zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC);
  24929. if (IS_VAR == IS_VAR) {
  24930. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  24931. }
  24932. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24933. }
  24934. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24935. {
  24936. USE_OPLINE
  24937. zend_free_op free_op1;
  24938. zval *property, *container, *result;
  24939. SAVE_OPLINE();
  24940. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24941. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  24942. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24943. }
  24944. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  24945. result = EX_VAR(opline->result.var);
  24946. zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC);
  24947. if (IS_VAR == IS_VAR) {
  24948. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  24949. }
  24950. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24951. }
  24952. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24953. {
  24954. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  24955. /* Behave like FETCH_OBJ_W */
  24956. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  24957. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24958. }
  24959. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24960. } else {
  24961. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24962. }
  24963. }
  24964. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24965. {
  24966. USE_OPLINE
  24967. zend_free_op free_op1;
  24968. zval *container, *property, *result;
  24969. SAVE_OPLINE();
  24970. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24971. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  24972. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  24973. }
  24974. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  24975. result = EX_VAR(opline->result.var);
  24976. zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC);
  24977. if (IS_VAR == IS_VAR) {
  24978. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  24979. }
  24980. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  24981. }
  24982. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  24983. {
  24984. USE_OPLINE
  24985. zend_free_op free_op1;
  24986. zval *container, *dim;
  24987. SAVE_OPLINE();
  24988. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  24989. dim = EX_VAR(opline->op2.var);
  24990. if (IS_VAR == IS_VAR
  24991. && Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
  24992. && UNEXPECTED(!Z_ISREF_P(container))
  24993. ) {
  24994. zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
  24995. zend_fetch_dimension_address_LIST_r(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
  24996. } else {
  24997. zend_fetch_dimension_address_W(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
  24998. }
  24999. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25000. }
  25001. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25002. {
  25003. USE_OPLINE
  25004. zend_free_op free_op1;
  25005. zval *object, *property, *value, tmp;
  25006. SAVE_OPLINE();
  25007. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  25008. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  25009. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  25010. }
  25011. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25012. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  25013. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  25014. if (Z_ISREF_P(object)) {
  25015. object = Z_REFVAL_P(object);
  25016. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  25017. goto assign_object;
  25018. }
  25019. }
  25020. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  25021. goto exit_assign_obj;
  25022. }
  25023. }
  25024. assign_object:
  25025. if (IS_CV == IS_CONST &&
  25026. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  25027. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  25028. zend_object *zobj = Z_OBJ_P(object);
  25029. zval *property_val;
  25030. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  25031. property_val = OBJ_PROP(zobj, prop_offset);
  25032. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  25033. fast_assign_obj:
  25034. value = zend_assign_to_variable(property_val, value, IS_CONST);
  25035. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25036. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25037. }
  25038. goto exit_assign_obj;
  25039. }
  25040. } else {
  25041. if (EXPECTED(zobj->properties != NULL)) {
  25042. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  25043. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  25044. GC_DELREF(zobj->properties);
  25045. }
  25046. zobj->properties = zend_array_dup(zobj->properties);
  25047. }
  25048. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  25049. if (property_val) {
  25050. goto fast_assign_obj;
  25051. }
  25052. }
  25053. if (!zobj->ce->__set) {
  25054. if (EXPECTED(zobj->properties == NULL)) {
  25055. rebuild_object_properties(zobj);
  25056. }
  25057. if (IS_CONST == IS_CONST) {
  25058. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  25059. Z_ADDREF_P(value);
  25060. }
  25061. } else if (IS_CONST != IS_TMP_VAR) {
  25062. if (Z_ISREF_P(value)) {
  25063. if (IS_CONST == IS_VAR) {
  25064. zend_reference *ref = Z_REF_P(value);
  25065. if (GC_DELREF(ref) == 0) {
  25066. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  25067. efree_size(ref, sizeof(zend_reference));
  25068. value = &tmp;
  25069. } else {
  25070. value = Z_REFVAL_P(value);
  25071. Z_TRY_ADDREF_P(value);
  25072. }
  25073. } else {
  25074. value = Z_REFVAL_P(value);
  25075. Z_TRY_ADDREF_P(value);
  25076. }
  25077. } else if (IS_CONST == IS_CV) {
  25078. Z_TRY_ADDREF_P(value);
  25079. }
  25080. }
  25081. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  25082. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25083. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25084. }
  25085. goto exit_assign_obj;
  25086. }
  25087. }
  25088. }
  25089. if (!Z_OBJ_HT_P(object)->write_property) {
  25090. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  25091. goto exit_assign_obj;
  25092. }
  25093. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  25094. ZVAL_DEREF(value);
  25095. }
  25096. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  25097. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25098. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25099. }
  25100. exit_assign_obj:
  25101. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  25102. /* assign_obj has two opcodes! */
  25103. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  25104. }
  25105. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25106. {
  25107. USE_OPLINE
  25108. zend_free_op free_op1, free_op_data;
  25109. zval *object, *property, *value, tmp;
  25110. SAVE_OPLINE();
  25111. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  25112. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  25113. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  25114. }
  25115. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25116. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  25117. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  25118. if (Z_ISREF_P(object)) {
  25119. object = Z_REFVAL_P(object);
  25120. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  25121. goto assign_object;
  25122. }
  25123. }
  25124. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  25125. zval_ptr_dtor_nogc(free_op_data);
  25126. goto exit_assign_obj;
  25127. }
  25128. }
  25129. assign_object:
  25130. if (IS_CV == IS_CONST &&
  25131. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  25132. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  25133. zend_object *zobj = Z_OBJ_P(object);
  25134. zval *property_val;
  25135. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  25136. property_val = OBJ_PROP(zobj, prop_offset);
  25137. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  25138. fast_assign_obj:
  25139. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
  25140. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25141. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25142. }
  25143. goto exit_assign_obj;
  25144. }
  25145. } else {
  25146. if (EXPECTED(zobj->properties != NULL)) {
  25147. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  25148. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  25149. GC_DELREF(zobj->properties);
  25150. }
  25151. zobj->properties = zend_array_dup(zobj->properties);
  25152. }
  25153. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  25154. if (property_val) {
  25155. goto fast_assign_obj;
  25156. }
  25157. }
  25158. if (!zobj->ce->__set) {
  25159. if (EXPECTED(zobj->properties == NULL)) {
  25160. rebuild_object_properties(zobj);
  25161. }
  25162. if (IS_TMP_VAR == IS_CONST) {
  25163. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  25164. Z_ADDREF_P(value);
  25165. }
  25166. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  25167. if (Z_ISREF_P(value)) {
  25168. if (IS_TMP_VAR == IS_VAR) {
  25169. zend_reference *ref = Z_REF_P(value);
  25170. if (GC_DELREF(ref) == 0) {
  25171. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  25172. efree_size(ref, sizeof(zend_reference));
  25173. value = &tmp;
  25174. } else {
  25175. value = Z_REFVAL_P(value);
  25176. Z_TRY_ADDREF_P(value);
  25177. }
  25178. } else {
  25179. value = Z_REFVAL_P(value);
  25180. Z_TRY_ADDREF_P(value);
  25181. }
  25182. } else if (IS_TMP_VAR == IS_CV) {
  25183. Z_TRY_ADDREF_P(value);
  25184. }
  25185. }
  25186. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  25187. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25188. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25189. }
  25190. goto exit_assign_obj;
  25191. }
  25192. }
  25193. }
  25194. if (!Z_OBJ_HT_P(object)->write_property) {
  25195. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  25196. zval_ptr_dtor_nogc(free_op_data);
  25197. goto exit_assign_obj;
  25198. }
  25199. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  25200. ZVAL_DEREF(value);
  25201. }
  25202. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  25203. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25204. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25205. }
  25206. zval_ptr_dtor_nogc(free_op_data);
  25207. exit_assign_obj:
  25208. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  25209. /* assign_obj has two opcodes! */
  25210. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  25211. }
  25212. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25213. {
  25214. USE_OPLINE
  25215. zend_free_op free_op1, free_op_data;
  25216. zval *object, *property, *value, tmp;
  25217. SAVE_OPLINE();
  25218. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  25219. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  25220. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  25221. }
  25222. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25223. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  25224. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  25225. if (Z_ISREF_P(object)) {
  25226. object = Z_REFVAL_P(object);
  25227. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  25228. goto assign_object;
  25229. }
  25230. }
  25231. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  25232. zval_ptr_dtor_nogc(free_op_data);
  25233. goto exit_assign_obj;
  25234. }
  25235. }
  25236. assign_object:
  25237. if (IS_CV == IS_CONST &&
  25238. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  25239. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  25240. zend_object *zobj = Z_OBJ_P(object);
  25241. zval *property_val;
  25242. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  25243. property_val = OBJ_PROP(zobj, prop_offset);
  25244. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  25245. fast_assign_obj:
  25246. value = zend_assign_to_variable(property_val, value, IS_VAR);
  25247. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25248. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25249. }
  25250. goto exit_assign_obj;
  25251. }
  25252. } else {
  25253. if (EXPECTED(zobj->properties != NULL)) {
  25254. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  25255. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  25256. GC_DELREF(zobj->properties);
  25257. }
  25258. zobj->properties = zend_array_dup(zobj->properties);
  25259. }
  25260. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  25261. if (property_val) {
  25262. goto fast_assign_obj;
  25263. }
  25264. }
  25265. if (!zobj->ce->__set) {
  25266. if (EXPECTED(zobj->properties == NULL)) {
  25267. rebuild_object_properties(zobj);
  25268. }
  25269. if (IS_VAR == IS_CONST) {
  25270. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  25271. Z_ADDREF_P(value);
  25272. }
  25273. } else if (IS_VAR != IS_TMP_VAR) {
  25274. if (Z_ISREF_P(value)) {
  25275. if (IS_VAR == IS_VAR) {
  25276. zend_reference *ref = Z_REF_P(value);
  25277. if (GC_DELREF(ref) == 0) {
  25278. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  25279. efree_size(ref, sizeof(zend_reference));
  25280. value = &tmp;
  25281. } else {
  25282. value = Z_REFVAL_P(value);
  25283. Z_TRY_ADDREF_P(value);
  25284. }
  25285. } else {
  25286. value = Z_REFVAL_P(value);
  25287. Z_TRY_ADDREF_P(value);
  25288. }
  25289. } else if (IS_VAR == IS_CV) {
  25290. Z_TRY_ADDREF_P(value);
  25291. }
  25292. }
  25293. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  25294. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25295. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25296. }
  25297. goto exit_assign_obj;
  25298. }
  25299. }
  25300. }
  25301. if (!Z_OBJ_HT_P(object)->write_property) {
  25302. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  25303. zval_ptr_dtor_nogc(free_op_data);
  25304. goto exit_assign_obj;
  25305. }
  25306. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  25307. ZVAL_DEREF(value);
  25308. }
  25309. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  25310. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25311. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25312. }
  25313. zval_ptr_dtor_nogc(free_op_data);
  25314. exit_assign_obj:
  25315. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  25316. /* assign_obj has two opcodes! */
  25317. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  25318. }
  25319. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25320. {
  25321. USE_OPLINE
  25322. zend_free_op free_op1;
  25323. zval *object, *property, *value, tmp;
  25324. SAVE_OPLINE();
  25325. object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  25326. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  25327. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  25328. }
  25329. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25330. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  25331. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  25332. if (Z_ISREF_P(object)) {
  25333. object = Z_REFVAL_P(object);
  25334. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  25335. goto assign_object;
  25336. }
  25337. }
  25338. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  25339. goto exit_assign_obj;
  25340. }
  25341. }
  25342. assign_object:
  25343. if (IS_CV == IS_CONST &&
  25344. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  25345. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  25346. zend_object *zobj = Z_OBJ_P(object);
  25347. zval *property_val;
  25348. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  25349. property_val = OBJ_PROP(zobj, prop_offset);
  25350. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  25351. fast_assign_obj:
  25352. value = zend_assign_to_variable(property_val, value, IS_CV);
  25353. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25354. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25355. }
  25356. goto exit_assign_obj;
  25357. }
  25358. } else {
  25359. if (EXPECTED(zobj->properties != NULL)) {
  25360. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  25361. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  25362. GC_DELREF(zobj->properties);
  25363. }
  25364. zobj->properties = zend_array_dup(zobj->properties);
  25365. }
  25366. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  25367. if (property_val) {
  25368. goto fast_assign_obj;
  25369. }
  25370. }
  25371. if (!zobj->ce->__set) {
  25372. if (EXPECTED(zobj->properties == NULL)) {
  25373. rebuild_object_properties(zobj);
  25374. }
  25375. if (IS_CV == IS_CONST) {
  25376. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  25377. Z_ADDREF_P(value);
  25378. }
  25379. } else if (IS_CV != IS_TMP_VAR) {
  25380. if (Z_ISREF_P(value)) {
  25381. if (IS_CV == IS_VAR) {
  25382. zend_reference *ref = Z_REF_P(value);
  25383. if (GC_DELREF(ref) == 0) {
  25384. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  25385. efree_size(ref, sizeof(zend_reference));
  25386. value = &tmp;
  25387. } else {
  25388. value = Z_REFVAL_P(value);
  25389. Z_TRY_ADDREF_P(value);
  25390. }
  25391. } else {
  25392. value = Z_REFVAL_P(value);
  25393. Z_TRY_ADDREF_P(value);
  25394. }
  25395. } else if (IS_CV == IS_CV) {
  25396. Z_TRY_ADDREF_P(value);
  25397. }
  25398. }
  25399. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  25400. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25401. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25402. }
  25403. goto exit_assign_obj;
  25404. }
  25405. }
  25406. }
  25407. if (!Z_OBJ_HT_P(object)->write_property) {
  25408. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  25409. goto exit_assign_obj;
  25410. }
  25411. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  25412. ZVAL_DEREF(value);
  25413. }
  25414. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  25415. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25416. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25417. }
  25418. exit_assign_obj:
  25419. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  25420. /* assign_obj has two opcodes! */
  25421. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  25422. }
  25423. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25424. {
  25425. USE_OPLINE
  25426. zend_free_op free_op1;
  25427. zval *object_ptr;
  25428. zend_free_op free_op_data;
  25429. zval *value;
  25430. zval *variable_ptr;
  25431. zval *dim;
  25432. SAVE_OPLINE();
  25433. object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  25434. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  25435. try_assign_dim_array:
  25436. SEPARATE_ARRAY(object_ptr);
  25437. if (IS_CV == IS_UNUSED) {
  25438. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  25439. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  25440. ZVAL_DEREF(value);
  25441. }
  25442. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  25443. if (UNEXPECTED(variable_ptr == NULL)) {
  25444. zend_cannot_add_element();
  25445. goto assign_dim_error;
  25446. } else if (IS_CONST == IS_CV) {
  25447. if (Z_REFCOUNTED_P(value)) {
  25448. Z_ADDREF_P(value);
  25449. }
  25450. } else if (IS_CONST == IS_VAR) {
  25451. if (value != free_op_data) {
  25452. if (Z_REFCOUNTED_P(value)) {
  25453. Z_ADDREF_P(value);
  25454. }
  25455. }
  25456. } else if (IS_CONST == IS_CONST) {
  25457. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  25458. Z_ADDREF_P(value);
  25459. }
  25460. }
  25461. } else {
  25462. dim = EX_VAR(opline->op2.var);
  25463. if (IS_CV == IS_CONST) {
  25464. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  25465. } else {
  25466. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  25467. }
  25468. if (UNEXPECTED(variable_ptr == NULL)) {
  25469. goto assign_dim_error;
  25470. }
  25471. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  25472. value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
  25473. }
  25474. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25475. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25476. }
  25477. } else {
  25478. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  25479. object_ptr = Z_REFVAL_P(object_ptr);
  25480. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  25481. goto try_assign_dim_array;
  25482. }
  25483. }
  25484. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  25485. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25486. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  25487. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  25488. dim++;
  25489. }
  25490. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  25491. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  25492. if (IS_CV == IS_UNUSED) {
  25493. zend_use_new_element_for_string();
  25494. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  25495. UNDEF_RESULT();
  25496. HANDLE_EXCEPTION();
  25497. } else {
  25498. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25499. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  25500. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  25501. }
  25502. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  25503. ZVAL_ARR(object_ptr, zend_new_array(8));
  25504. goto try_assign_dim_array;
  25505. } else {
  25506. if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  25507. zend_use_scalar_as_array();
  25508. }
  25509. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25510. assign_dim_error:
  25511. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25512. ZVAL_NULL(EX_VAR(opline->result.var));
  25513. }
  25514. }
  25515. }
  25516. if (IS_CV != IS_UNUSED) {
  25517. }
  25518. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  25519. /* assign_dim has two opcodes! */
  25520. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  25521. }
  25522. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25523. {
  25524. USE_OPLINE
  25525. zend_free_op free_op1;
  25526. zval *object_ptr;
  25527. zend_free_op free_op_data;
  25528. zval *value;
  25529. zval *variable_ptr;
  25530. zval *dim;
  25531. SAVE_OPLINE();
  25532. object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  25533. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  25534. try_assign_dim_array:
  25535. SEPARATE_ARRAY(object_ptr);
  25536. if (IS_CV == IS_UNUSED) {
  25537. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  25538. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  25539. ZVAL_DEREF(value);
  25540. }
  25541. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  25542. if (UNEXPECTED(variable_ptr == NULL)) {
  25543. zval_ptr_dtor_nogc(free_op_data);
  25544. zend_cannot_add_element();
  25545. goto assign_dim_error;
  25546. } else if (IS_TMP_VAR == IS_CV) {
  25547. if (Z_REFCOUNTED_P(value)) {
  25548. Z_ADDREF_P(value);
  25549. }
  25550. } else if (IS_TMP_VAR == IS_VAR) {
  25551. if (value != free_op_data) {
  25552. if (Z_REFCOUNTED_P(value)) {
  25553. Z_ADDREF_P(value);
  25554. }
  25555. zval_ptr_dtor_nogc(free_op_data);
  25556. }
  25557. } else if (IS_TMP_VAR == IS_CONST) {
  25558. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  25559. Z_ADDREF_P(value);
  25560. }
  25561. }
  25562. } else {
  25563. dim = EX_VAR(opline->op2.var);
  25564. if (IS_CV == IS_CONST) {
  25565. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  25566. } else {
  25567. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  25568. }
  25569. if (UNEXPECTED(variable_ptr == NULL)) {
  25570. goto assign_dim_error;
  25571. }
  25572. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  25573. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
  25574. }
  25575. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25576. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25577. }
  25578. } else {
  25579. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  25580. object_ptr = Z_REFVAL_P(object_ptr);
  25581. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  25582. goto try_assign_dim_array;
  25583. }
  25584. }
  25585. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  25586. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25587. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  25588. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  25589. dim++;
  25590. }
  25591. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  25592. zval_ptr_dtor_nogc(free_op_data);
  25593. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  25594. if (IS_CV == IS_UNUSED) {
  25595. zend_use_new_element_for_string();
  25596. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  25597. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  25598. UNDEF_RESULT();
  25599. HANDLE_EXCEPTION();
  25600. } else {
  25601. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25602. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  25603. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  25604. zval_ptr_dtor_nogc(free_op_data);
  25605. }
  25606. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  25607. ZVAL_ARR(object_ptr, zend_new_array(8));
  25608. goto try_assign_dim_array;
  25609. } else {
  25610. if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  25611. zend_use_scalar_as_array();
  25612. }
  25613. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25614. assign_dim_error:
  25615. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  25616. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25617. ZVAL_NULL(EX_VAR(opline->result.var));
  25618. }
  25619. }
  25620. }
  25621. if (IS_CV != IS_UNUSED) {
  25622. }
  25623. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  25624. /* assign_dim has two opcodes! */
  25625. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  25626. }
  25627. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25628. {
  25629. USE_OPLINE
  25630. zend_free_op free_op1;
  25631. zval *object_ptr;
  25632. zend_free_op free_op_data;
  25633. zval *value;
  25634. zval *variable_ptr;
  25635. zval *dim;
  25636. SAVE_OPLINE();
  25637. object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  25638. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  25639. try_assign_dim_array:
  25640. SEPARATE_ARRAY(object_ptr);
  25641. if (IS_CV == IS_UNUSED) {
  25642. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  25643. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  25644. ZVAL_DEREF(value);
  25645. }
  25646. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  25647. if (UNEXPECTED(variable_ptr == NULL)) {
  25648. zval_ptr_dtor_nogc(free_op_data);
  25649. zend_cannot_add_element();
  25650. goto assign_dim_error;
  25651. } else if (IS_VAR == IS_CV) {
  25652. if (Z_REFCOUNTED_P(value)) {
  25653. Z_ADDREF_P(value);
  25654. }
  25655. } else if (IS_VAR == IS_VAR) {
  25656. if (value != free_op_data) {
  25657. if (Z_REFCOUNTED_P(value)) {
  25658. Z_ADDREF_P(value);
  25659. }
  25660. zval_ptr_dtor_nogc(free_op_data);
  25661. }
  25662. } else if (IS_VAR == IS_CONST) {
  25663. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  25664. Z_ADDREF_P(value);
  25665. }
  25666. }
  25667. } else {
  25668. dim = EX_VAR(opline->op2.var);
  25669. if (IS_CV == IS_CONST) {
  25670. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  25671. } else {
  25672. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  25673. }
  25674. if (UNEXPECTED(variable_ptr == NULL)) {
  25675. goto assign_dim_error;
  25676. }
  25677. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  25678. value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
  25679. }
  25680. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25681. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25682. }
  25683. } else {
  25684. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  25685. object_ptr = Z_REFVAL_P(object_ptr);
  25686. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  25687. goto try_assign_dim_array;
  25688. }
  25689. }
  25690. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  25691. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25692. value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  25693. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  25694. dim++;
  25695. }
  25696. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  25697. zval_ptr_dtor_nogc(free_op_data);
  25698. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  25699. if (IS_CV == IS_UNUSED) {
  25700. zend_use_new_element_for_string();
  25701. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  25702. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  25703. UNDEF_RESULT();
  25704. HANDLE_EXCEPTION();
  25705. } else {
  25706. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25707. value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  25708. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  25709. zval_ptr_dtor_nogc(free_op_data);
  25710. }
  25711. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  25712. ZVAL_ARR(object_ptr, zend_new_array(8));
  25713. goto try_assign_dim_array;
  25714. } else {
  25715. if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  25716. zend_use_scalar_as_array();
  25717. }
  25718. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25719. assign_dim_error:
  25720. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  25721. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25722. ZVAL_NULL(EX_VAR(opline->result.var));
  25723. }
  25724. }
  25725. }
  25726. if (IS_CV != IS_UNUSED) {
  25727. }
  25728. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  25729. /* assign_dim has two opcodes! */
  25730. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  25731. }
  25732. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25733. {
  25734. USE_OPLINE
  25735. zend_free_op free_op1;
  25736. zval *object_ptr;
  25737. zend_free_op free_op_data;
  25738. zval *value;
  25739. zval *variable_ptr;
  25740. zval *dim;
  25741. SAVE_OPLINE();
  25742. object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  25743. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  25744. try_assign_dim_array:
  25745. SEPARATE_ARRAY(object_ptr);
  25746. if (IS_CV == IS_UNUSED) {
  25747. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  25748. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  25749. ZVAL_DEREF(value);
  25750. }
  25751. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  25752. if (UNEXPECTED(variable_ptr == NULL)) {
  25753. zend_cannot_add_element();
  25754. goto assign_dim_error;
  25755. } else if (IS_CV == IS_CV) {
  25756. if (Z_REFCOUNTED_P(value)) {
  25757. Z_ADDREF_P(value);
  25758. }
  25759. } else if (IS_CV == IS_VAR) {
  25760. if (value != free_op_data) {
  25761. if (Z_REFCOUNTED_P(value)) {
  25762. Z_ADDREF_P(value);
  25763. }
  25764. }
  25765. } else if (IS_CV == IS_CONST) {
  25766. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  25767. Z_ADDREF_P(value);
  25768. }
  25769. }
  25770. } else {
  25771. dim = EX_VAR(opline->op2.var);
  25772. if (IS_CV == IS_CONST) {
  25773. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  25774. } else {
  25775. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  25776. }
  25777. if (UNEXPECTED(variable_ptr == NULL)) {
  25778. goto assign_dim_error;
  25779. }
  25780. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  25781. value = zend_assign_to_variable(variable_ptr, value, IS_CV);
  25782. }
  25783. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25784. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25785. }
  25786. } else {
  25787. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  25788. object_ptr = Z_REFVAL_P(object_ptr);
  25789. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  25790. goto try_assign_dim_array;
  25791. }
  25792. }
  25793. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  25794. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25795. value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  25796. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  25797. dim++;
  25798. }
  25799. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  25800. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  25801. if (IS_CV == IS_UNUSED) {
  25802. zend_use_new_element_for_string();
  25803. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  25804. UNDEF_RESULT();
  25805. HANDLE_EXCEPTION();
  25806. } else {
  25807. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25808. value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  25809. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  25810. }
  25811. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  25812. ZVAL_ARR(object_ptr, zend_new_array(8));
  25813. goto try_assign_dim_array;
  25814. } else {
  25815. if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  25816. zend_use_scalar_as_array();
  25817. }
  25818. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25819. assign_dim_error:
  25820. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25821. ZVAL_NULL(EX_VAR(opline->result.var));
  25822. }
  25823. }
  25824. }
  25825. if (IS_CV != IS_UNUSED) {
  25826. }
  25827. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  25828. /* assign_dim has two opcodes! */
  25829. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  25830. }
  25831. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25832. {
  25833. USE_OPLINE
  25834. zend_free_op free_op1;
  25835. zval *value;
  25836. zval *variable_ptr;
  25837. SAVE_OPLINE();
  25838. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25839. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  25840. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  25841. if (UNEXPECTED(0)) {
  25842. ZVAL_NULL(EX_VAR(opline->result.var));
  25843. }
  25844. } else {
  25845. value = zend_assign_to_variable(variable_ptr, value, IS_CV);
  25846. if (UNEXPECTED(0)) {
  25847. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25848. }
  25849. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  25850. /* zend_assign_to_variable() always takes care of op2, never free it! */
  25851. }
  25852. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25853. }
  25854. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25855. {
  25856. USE_OPLINE
  25857. zend_free_op free_op1;
  25858. zval *value;
  25859. zval *variable_ptr;
  25860. SAVE_OPLINE();
  25861. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  25862. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  25863. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  25864. if (UNEXPECTED(1)) {
  25865. ZVAL_NULL(EX_VAR(opline->result.var));
  25866. }
  25867. } else {
  25868. value = zend_assign_to_variable(variable_ptr, value, IS_CV);
  25869. if (UNEXPECTED(1)) {
  25870. ZVAL_COPY(EX_VAR(opline->result.var), value);
  25871. }
  25872. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  25873. /* zend_assign_to_variable() always takes care of op2, never free it! */
  25874. }
  25875. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25876. }
  25877. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25878. {
  25879. USE_OPLINE
  25880. zend_free_op free_op1;
  25881. zval *variable_ptr;
  25882. zval *value_ptr;
  25883. SAVE_OPLINE();
  25884. value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
  25885. variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  25886. if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  25887. variable_ptr = &EG(uninitialized_zval);
  25888. } else if (IS_VAR == IS_VAR &&
  25889. UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
  25890. zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
  25891. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  25892. UNDEF_RESULT();
  25893. HANDLE_EXCEPTION();
  25894. } else if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
  25895. variable_ptr = &EG(uninitialized_zval);
  25896. } else if (IS_CV == IS_VAR &&
  25897. opline->extended_value == ZEND_RETURNS_FUNCTION &&
  25898. UNEXPECTED(!Z_ISREF_P(value_ptr))) {
  25899. if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(variable_ptr, value_ptr, IS_CV OPLINE_CC EXECUTE_DATA_CC))) {
  25900. UNDEF_RESULT();
  25901. HANDLE_EXCEPTION();
  25902. }
  25903. /* op2 freed by assign_to_variable */
  25904. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  25905. ZEND_VM_NEXT_OPCODE();
  25906. } else {
  25907. zend_assign_to_variable_reference(variable_ptr, value_ptr);
  25908. }
  25909. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  25910. ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
  25911. }
  25912. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  25913. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  25914. }
  25915. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  25916. {
  25917. USE_OPLINE
  25918. zval *function_name;
  25919. zend_class_entry *ce;
  25920. zend_object *object;
  25921. zend_function *fbc;
  25922. zend_execute_data *call;
  25923. SAVE_OPLINE();
  25924. if (IS_VAR == IS_CONST) {
  25925. /* no function found. try a static method in class */
  25926. ce = CACHED_PTR(opline->result.num);
  25927. if (UNEXPECTED(ce == NULL)) {
  25928. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  25929. if (UNEXPECTED(ce == NULL)) {
  25930. ZEND_ASSERT(EG(exception));
  25931. HANDLE_EXCEPTION();
  25932. }
  25933. if (IS_CV != IS_CONST) {
  25934. CACHE_PTR(opline->result.num, ce);
  25935. }
  25936. }
  25937. } else if (IS_VAR == IS_UNUSED) {
  25938. ce = zend_fetch_class(NULL, opline->op1.num);
  25939. if (UNEXPECTED(ce == NULL)) {
  25940. ZEND_ASSERT(EG(exception));
  25941. HANDLE_EXCEPTION();
  25942. }
  25943. } else {
  25944. ce = Z_CE_P(EX_VAR(opline->op1.var));
  25945. }
  25946. if (IS_VAR == IS_CONST &&
  25947. IS_CV == IS_CONST &&
  25948. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  25949. /* nothing to do */
  25950. } else if (IS_VAR != IS_CONST &&
  25951. IS_CV == IS_CONST &&
  25952. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  25953. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  25954. } else if (IS_CV != IS_UNUSED) {
  25955. function_name = EX_VAR(opline->op2.var);
  25956. if (IS_CV != IS_CONST) {
  25957. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  25958. do {
  25959. if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  25960. function_name = Z_REFVAL_P(function_name);
  25961. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  25962. break;
  25963. }
  25964. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  25965. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  25966. if (UNEXPECTED(EG(exception) != NULL)) {
  25967. HANDLE_EXCEPTION();
  25968. }
  25969. }
  25970. zend_throw_error(NULL, "Function name must be a string");
  25971. HANDLE_EXCEPTION();
  25972. } while (0);
  25973. }
  25974. }
  25975. if (ce->get_static_method) {
  25976. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  25977. } else {
  25978. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  25979. }
  25980. if (UNEXPECTED(fbc == NULL)) {
  25981. if (EXPECTED(!EG(exception))) {
  25982. zend_undefined_method(ce, Z_STR_P(function_name));
  25983. }
  25984. HANDLE_EXCEPTION();
  25985. }
  25986. if (IS_CV == IS_CONST &&
  25987. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  25988. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
  25989. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  25990. }
  25991. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  25992. init_func_run_time_cache(&fbc->op_array);
  25993. }
  25994. if (IS_CV != IS_CONST) {
  25995. }
  25996. } else {
  25997. if (UNEXPECTED(ce->constructor == NULL)) {
  25998. zend_throw_error(NULL, "Cannot call constructor");
  25999. HANDLE_EXCEPTION();
  26000. }
  26001. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  26002. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  26003. HANDLE_EXCEPTION();
  26004. }
  26005. fbc = ce->constructor;
  26006. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  26007. init_func_run_time_cache(&fbc->op_array);
  26008. }
  26009. }
  26010. object = NULL;
  26011. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  26012. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  26013. object = Z_OBJ(EX(This));
  26014. ce = object->ce;
  26015. } else {
  26016. zend_non_static_method_call(fbc);
  26017. if (UNEXPECTED(EG(exception) != NULL)) {
  26018. HANDLE_EXCEPTION();
  26019. }
  26020. }
  26021. }
  26022. if (IS_VAR == IS_UNUSED) {
  26023. /* previous opcode is ZEND_FETCH_CLASS */
  26024. if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  26025. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
  26026. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  26027. ce = Z_OBJCE(EX(This));
  26028. } else {
  26029. ce = Z_CE(EX(This));
  26030. }
  26031. }
  26032. }
  26033. call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  26034. fbc, opline->extended_value, ce, object);
  26035. call->prev_execute_data = EX(call);
  26036. EX(call) = call;
  26037. ZEND_VM_NEXT_OPCODE();
  26038. }
  26039. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26040. {
  26041. USE_OPLINE
  26042. zend_free_op free_op1;
  26043. zval *expr_ptr, new_expr;
  26044. SAVE_OPLINE();
  26045. if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
  26046. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  26047. expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  26048. if (Z_ISREF_P(expr_ptr)) {
  26049. Z_ADDREF_P(expr_ptr);
  26050. } else {
  26051. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  26052. }
  26053. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  26054. } else {
  26055. expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  26056. if (IS_VAR == IS_TMP_VAR) {
  26057. /* pass */
  26058. } else if (IS_VAR == IS_CONST) {
  26059. Z_TRY_ADDREF_P(expr_ptr);
  26060. } else if (IS_VAR == IS_CV) {
  26061. ZVAL_DEREF(expr_ptr);
  26062. Z_TRY_ADDREF_P(expr_ptr);
  26063. } else /* if (IS_VAR == IS_VAR) */ {
  26064. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  26065. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  26066. expr_ptr = Z_REFVAL_P(expr_ptr);
  26067. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  26068. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  26069. expr_ptr = &new_expr;
  26070. efree_size(ref, sizeof(zend_reference));
  26071. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  26072. Z_ADDREF_P(expr_ptr);
  26073. }
  26074. }
  26075. }
  26076. }
  26077. if (IS_CV != IS_UNUSED) {
  26078. zval *offset = EX_VAR(opline->op2.var);
  26079. zend_string *str;
  26080. zend_ulong hval;
  26081. add_again:
  26082. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  26083. str = Z_STR_P(offset);
  26084. if (IS_CV != IS_CONST) {
  26085. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  26086. goto num_index;
  26087. }
  26088. }
  26089. str_index:
  26090. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  26091. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  26092. hval = Z_LVAL_P(offset);
  26093. num_index:
  26094. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  26095. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  26096. offset = Z_REFVAL_P(offset);
  26097. goto add_again;
  26098. } else if (Z_TYPE_P(offset) == IS_NULL) {
  26099. str = ZSTR_EMPTY_ALLOC();
  26100. goto str_index;
  26101. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  26102. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  26103. goto num_index;
  26104. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  26105. hval = 0;
  26106. goto num_index;
  26107. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  26108. hval = 1;
  26109. goto num_index;
  26110. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  26111. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  26112. str = ZSTR_EMPTY_ALLOC();
  26113. goto str_index;
  26114. } else {
  26115. zend_illegal_offset();
  26116. zval_ptr_dtor_nogc(expr_ptr);
  26117. }
  26118. } else {
  26119. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  26120. zend_cannot_add_element();
  26121. zval_ptr_dtor_nogc(expr_ptr);
  26122. }
  26123. }
  26124. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26125. }
  26126. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26127. {
  26128. zval *array;
  26129. uint32_t size;
  26130. USE_OPLINE
  26131. array = EX_VAR(opline->result.var);
  26132. if (IS_VAR != IS_UNUSED) {
  26133. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  26134. ZVAL_ARR(array, zend_new_array(size));
  26135. /* Explicitly initialize array as not-packed if flag is set */
  26136. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  26137. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  26138. }
  26139. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26140. } else {
  26141. ZVAL_EMPTY_ARRAY(array);
  26142. ZEND_VM_NEXT_OPCODE();
  26143. }
  26144. }
  26145. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26146. {
  26147. USE_OPLINE
  26148. zend_free_op free_op1;
  26149. zval *container;
  26150. zval *offset;
  26151. zend_ulong hval;
  26152. zend_string *key;
  26153. SAVE_OPLINE();
  26154. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  26155. offset = EX_VAR(opline->op2.var);
  26156. do {
  26157. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  26158. HashTable *ht;
  26159. unset_dim_array:
  26160. SEPARATE_ARRAY(container);
  26161. ht = Z_ARRVAL_P(container);
  26162. offset_again:
  26163. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  26164. key = Z_STR_P(offset);
  26165. if (IS_CV != IS_CONST) {
  26166. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  26167. goto num_index_dim;
  26168. }
  26169. }
  26170. str_index_dim:
  26171. if (ht == &EG(symbol_table)) {
  26172. zend_delete_global_variable(key);
  26173. } else {
  26174. zend_hash_del(ht, key);
  26175. }
  26176. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  26177. hval = Z_LVAL_P(offset);
  26178. num_index_dim:
  26179. zend_hash_index_del(ht, hval);
  26180. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  26181. offset = Z_REFVAL_P(offset);
  26182. goto offset_again;
  26183. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  26184. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  26185. goto num_index_dim;
  26186. } else if (Z_TYPE_P(offset) == IS_NULL) {
  26187. key = ZSTR_EMPTY_ALLOC();
  26188. goto str_index_dim;
  26189. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  26190. hval = 0;
  26191. goto num_index_dim;
  26192. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  26193. hval = 1;
  26194. goto num_index_dim;
  26195. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  26196. hval = Z_RES_HANDLE_P(offset);
  26197. goto num_index_dim;
  26198. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  26199. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  26200. key = ZSTR_EMPTY_ALLOC();
  26201. goto str_index_dim;
  26202. } else {
  26203. zend_error(E_WARNING, "Illegal offset type in unset");
  26204. }
  26205. break;
  26206. } else if (Z_ISREF_P(container)) {
  26207. container = Z_REFVAL_P(container);
  26208. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  26209. goto unset_dim_array;
  26210. }
  26211. }
  26212. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  26213. container = GET_OP1_UNDEF_CV(container, BP_VAR_R);
  26214. }
  26215. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  26216. offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  26217. }
  26218. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  26219. if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
  26220. zend_use_object_as_array();
  26221. } else {
  26222. if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  26223. offset++;
  26224. }
  26225. Z_OBJ_HT_P(container)->unset_dimension(container, offset);
  26226. }
  26227. } else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  26228. zend_throw_error(NULL, "Cannot unset string offsets");
  26229. }
  26230. } while (0);
  26231. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  26232. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26233. }
  26234. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26235. {
  26236. USE_OPLINE
  26237. zend_free_op free_op1;
  26238. zval *container;
  26239. zval *offset;
  26240. SAVE_OPLINE();
  26241. container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  26242. if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  26243. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26244. }
  26245. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26246. do {
  26247. if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  26248. if (Z_ISREF_P(container)) {
  26249. container = Z_REFVAL_P(container);
  26250. if (Z_TYPE_P(container) != IS_OBJECT) {
  26251. break;
  26252. }
  26253. } else {
  26254. break;
  26255. }
  26256. }
  26257. if (Z_OBJ_HT_P(container)->unset_property) {
  26258. Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  26259. } else {
  26260. zend_wrong_property_unset(offset);
  26261. }
  26262. } while (0);
  26263. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  26264. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26265. }
  26266. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26267. {
  26268. USE_OPLINE
  26269. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  26270. SAVE_OPLINE();
  26271. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  26272. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26273. }
  26274. /* Destroy the previously yielded value */
  26275. zval_ptr_dtor(&generator->value);
  26276. /* Destroy the previously yielded key */
  26277. zval_ptr_dtor(&generator->key);
  26278. /* Set the new yielded value */
  26279. if (IS_VAR != IS_UNUSED) {
  26280. zend_free_op free_op1;
  26281. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  26282. /* Constants and temporary variables aren't yieldable by reference,
  26283. * but we still allow them with a notice. */
  26284. if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
  26285. zval *value;
  26286. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  26287. value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  26288. ZVAL_COPY_VALUE(&generator->value, value);
  26289. if (IS_VAR == IS_CONST) {
  26290. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  26291. Z_ADDREF(generator->value);
  26292. }
  26293. }
  26294. } else {
  26295. zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  26296. /* If a function call result is yielded and the function did
  26297. * not return by reference we throw a notice. */
  26298. if (IS_VAR == IS_VAR &&
  26299. (value_ptr == &EG(uninitialized_zval) ||
  26300. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  26301. !Z_ISREF_P(value_ptr)))) {
  26302. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  26303. ZVAL_COPY(&generator->value, value_ptr);
  26304. } else {
  26305. if (Z_ISREF_P(value_ptr)) {
  26306. Z_ADDREF_P(value_ptr);
  26307. } else {
  26308. ZVAL_MAKE_REF_EX(value_ptr, 2);
  26309. }
  26310. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  26311. }
  26312. if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
  26313. }
  26314. } else {
  26315. zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  26316. /* Consts, temporary variables and references need copying */
  26317. if (IS_VAR == IS_CONST) {
  26318. ZVAL_COPY_VALUE(&generator->value, value);
  26319. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  26320. Z_ADDREF(generator->value);
  26321. }
  26322. } else if (IS_VAR == IS_TMP_VAR) {
  26323. ZVAL_COPY_VALUE(&generator->value, value);
  26324. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  26325. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  26326. zval_ptr_dtor_nogc(free_op1);
  26327. } else {
  26328. ZVAL_COPY_VALUE(&generator->value, value);
  26329. if (IS_VAR == IS_CV) {
  26330. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  26331. }
  26332. }
  26333. }
  26334. } else {
  26335. /* If no value was specified yield null */
  26336. ZVAL_NULL(&generator->value);
  26337. }
  26338. /* Set the new yielded key */
  26339. if (IS_CV != IS_UNUSED) {
  26340. zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  26341. /* Consts, temporary variables and references need copying */
  26342. if (IS_CV == IS_CONST) {
  26343. ZVAL_COPY_VALUE(&generator->key, key);
  26344. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  26345. Z_ADDREF(generator->key);
  26346. }
  26347. } else if (IS_CV == IS_TMP_VAR) {
  26348. ZVAL_COPY_VALUE(&generator->key, key);
  26349. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  26350. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  26351. } else {
  26352. ZVAL_COPY_VALUE(&generator->key, key);
  26353. if (IS_CV == IS_CV) {
  26354. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  26355. }
  26356. }
  26357. if (Z_TYPE(generator->key) == IS_LONG
  26358. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  26359. ) {
  26360. generator->largest_used_integer_key = Z_LVAL(generator->key);
  26361. }
  26362. } else {
  26363. /* If no key was specified we use auto-increment keys */
  26364. generator->largest_used_integer_key++;
  26365. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  26366. }
  26367. if (RETURN_VALUE_USED(opline)) {
  26368. /* If the return value of yield is used set the send
  26369. * target and initialize it to NULL */
  26370. generator->send_target = EX_VAR(opline->result.var);
  26371. ZVAL_NULL(generator->send_target);
  26372. } else {
  26373. generator->send_target = NULL;
  26374. }
  26375. /* We increment to the next op, so we are at the correct position when the
  26376. * generator is resumed. */
  26377. ZEND_VM_INC_OPCODE();
  26378. /* The GOTO VM uses a local opline variable. We need to set the opline
  26379. * variable in execute_data so we don't resume at an old position. */
  26380. SAVE_OPLINE();
  26381. ZEND_VM_RETURN();
  26382. }
  26383. 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)
  26384. {
  26385. USE_OPLINE
  26386. zval *array;
  26387. zval *value, *variable_ptr;
  26388. uint32_t value_type;
  26389. HashTable *fe_ht;
  26390. HashPosition pos;
  26391. Bucket *p;
  26392. array = EX_VAR(opline->op1.var);
  26393. SAVE_OPLINE();
  26394. fe_ht = Z_ARRVAL_P(array);
  26395. pos = Z_FE_POS_P(array);
  26396. p = fe_ht->arData + pos;
  26397. while (1) {
  26398. if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
  26399. /* reached end of iteration */
  26400. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  26401. ZEND_VM_CONTINUE();
  26402. }
  26403. value = &p->val;
  26404. value_type = Z_TYPE_INFO_P(value);
  26405. if (EXPECTED(value_type != IS_UNDEF)) {
  26406. if (UNEXPECTED(value_type == IS_INDIRECT)) {
  26407. value = Z_INDIRECT_P(value);
  26408. value_type = Z_TYPE_INFO_P(value);
  26409. if (EXPECTED(value_type != IS_UNDEF)) {
  26410. break;
  26411. }
  26412. } else {
  26413. break;
  26414. }
  26415. }
  26416. pos++;
  26417. p++;
  26418. }
  26419. Z_FE_POS_P(array) = pos + 1;
  26420. if (0) {
  26421. if (!p->key) {
  26422. ZVAL_LONG(EX_VAR(opline->result.var), p->h);
  26423. } else {
  26424. ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
  26425. }
  26426. }
  26427. variable_ptr = EX_VAR(opline->op2.var);
  26428. zend_assign_to_variable(variable_ptr, value, IS_CV);
  26429. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26430. }
  26431. 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)
  26432. {
  26433. USE_OPLINE
  26434. zval *array;
  26435. zval *value, *variable_ptr;
  26436. uint32_t value_type;
  26437. HashTable *fe_ht;
  26438. HashPosition pos;
  26439. Bucket *p;
  26440. array = EX_VAR(opline->op1.var);
  26441. SAVE_OPLINE();
  26442. fe_ht = Z_ARRVAL_P(array);
  26443. pos = Z_FE_POS_P(array);
  26444. p = fe_ht->arData + pos;
  26445. while (1) {
  26446. if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
  26447. /* reached end of iteration */
  26448. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  26449. ZEND_VM_CONTINUE();
  26450. }
  26451. value = &p->val;
  26452. value_type = Z_TYPE_INFO_P(value);
  26453. if (EXPECTED(value_type != IS_UNDEF)) {
  26454. if (UNEXPECTED(value_type == IS_INDIRECT)) {
  26455. value = Z_INDIRECT_P(value);
  26456. value_type = Z_TYPE_INFO_P(value);
  26457. if (EXPECTED(value_type != IS_UNDEF)) {
  26458. break;
  26459. }
  26460. } else {
  26461. break;
  26462. }
  26463. }
  26464. pos++;
  26465. p++;
  26466. }
  26467. Z_FE_POS_P(array) = pos + 1;
  26468. if (1) {
  26469. if (!p->key) {
  26470. ZVAL_LONG(EX_VAR(opline->result.var), p->h);
  26471. } else {
  26472. ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
  26473. }
  26474. }
  26475. variable_ptr = EX_VAR(opline->op2.var);
  26476. zend_assign_to_variable(variable_ptr, value, IS_CV);
  26477. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26478. }
  26479. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26480. {
  26481. USE_OPLINE
  26482. uint32_t arg_num = opline->op2.num;
  26483. if (EXPECTED(0)) {
  26484. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  26485. ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  26486. } else {
  26487. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  26488. }
  26489. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  26490. ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  26491. } else {
  26492. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  26493. }
  26494. ZEND_VM_NEXT_OPCODE();
  26495. }
  26496. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26497. {
  26498. USE_OPLINE
  26499. uint32_t arg_num = opline->op2.num;
  26500. if (EXPECTED(1)) {
  26501. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  26502. ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  26503. } else {
  26504. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  26505. }
  26506. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  26507. ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  26508. } else {
  26509. ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
  26510. }
  26511. ZEND_VM_NEXT_OPCODE();
  26512. }
  26513. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26514. {
  26515. USE_OPLINE
  26516. zval *obj;
  26517. zend_class_entry *ce, *scope;
  26518. zend_function *clone;
  26519. zend_object_clone_obj_t clone_call;
  26520. SAVE_OPLINE();
  26521. obj = &EX(This);
  26522. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
  26523. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26524. }
  26525. do {
  26526. if (IS_UNUSED == IS_CONST ||
  26527. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
  26528. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
  26529. obj = Z_REFVAL_P(obj);
  26530. if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
  26531. break;
  26532. }
  26533. }
  26534. ZVAL_UNDEF(EX_VAR(opline->result.var));
  26535. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
  26536. GET_OP1_UNDEF_CV(obj, BP_VAR_R);
  26537. if (UNEXPECTED(EG(exception) != NULL)) {
  26538. HANDLE_EXCEPTION();
  26539. }
  26540. }
  26541. zend_throw_error(NULL, "__clone method called on non-object");
  26542. HANDLE_EXCEPTION();
  26543. }
  26544. } while (0);
  26545. ce = Z_OBJCE_P(obj);
  26546. clone = ce->clone;
  26547. clone_call = Z_OBJ_HT_P(obj)->clone_obj;
  26548. if (UNEXPECTED(clone_call == NULL)) {
  26549. zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
  26550. ZVAL_UNDEF(EX_VAR(opline->result.var));
  26551. HANDLE_EXCEPTION();
  26552. }
  26553. if (clone) {
  26554. if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
  26555. /* Ensure that if we're calling a private function, we're allowed to do so.
  26556. */
  26557. scope = EX(func)->op_array.scope;
  26558. if (!zend_check_private(clone, scope, clone->common.function_name)) {
  26559. zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
  26560. ZVAL_UNDEF(EX_VAR(opline->result.var));
  26561. HANDLE_EXCEPTION();
  26562. }
  26563. } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
  26564. /* Ensure that if we're calling a protected function, we're allowed to do so.
  26565. */
  26566. scope = EX(func)->op_array.scope;
  26567. if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
  26568. zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
  26569. ZVAL_UNDEF(EX_VAR(opline->result.var));
  26570. HANDLE_EXCEPTION();
  26571. }
  26572. }
  26573. }
  26574. ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
  26575. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26576. }
  26577. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26578. {
  26579. USE_OPLINE
  26580. SAVE_OPLINE();
  26581. if (IS_UNUSED != IS_UNUSED) {
  26582. zval *ptr = NULL;
  26583. do {
  26584. if (Z_TYPE_P(ptr) == IS_LONG) {
  26585. EG(exit_status) = Z_LVAL_P(ptr);
  26586. } else {
  26587. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
  26588. ptr = Z_REFVAL_P(ptr);
  26589. if (Z_TYPE_P(ptr) == IS_LONG) {
  26590. EG(exit_status) = Z_LVAL_P(ptr);
  26591. break;
  26592. }
  26593. }
  26594. zend_print_zval(ptr, 0);
  26595. }
  26596. } while (0);
  26597. }
  26598. zend_bailout();
  26599. ZEND_VM_NEXT_OPCODE(); /* Never reached */
  26600. }
  26601. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26602. {
  26603. uint32_t fetch_type;
  26604. zend_class_entry *called_scope, *scope;
  26605. USE_OPLINE
  26606. fetch_type = opline->op1.num;
  26607. scope = EX(func)->op_array.scope;
  26608. if (UNEXPECTED(scope == NULL)) {
  26609. SAVE_OPLINE();
  26610. zend_throw_error(NULL, "Cannot use \"%s\" when no class scope is active",
  26611. fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
  26612. fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
  26613. ZVAL_UNDEF(EX_VAR(opline->result.var));
  26614. HANDLE_EXCEPTION();
  26615. }
  26616. switch (fetch_type) {
  26617. case ZEND_FETCH_CLASS_SELF:
  26618. ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
  26619. break;
  26620. case ZEND_FETCH_CLASS_PARENT:
  26621. if (UNEXPECTED(scope->parent == NULL)) {
  26622. SAVE_OPLINE();
  26623. zend_throw_error(NULL,
  26624. "Cannot use \"parent\" when current class scope has no parent");
  26625. ZVAL_UNDEF(EX_VAR(opline->result.var));
  26626. HANDLE_EXCEPTION();
  26627. }
  26628. ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
  26629. break;
  26630. case ZEND_FETCH_CLASS_STATIC:
  26631. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  26632. called_scope = Z_OBJCE(EX(This));
  26633. } else {
  26634. called_scope = Z_CE(EX(This));
  26635. }
  26636. ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
  26637. break;
  26638. EMPTY_SWITCH_DEFAULT_CASE()
  26639. }
  26640. ZEND_VM_NEXT_OPCODE();
  26641. }
  26642. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  26643. {
  26644. USE_OPLINE
  26645. zend_free_op free_op_data1;
  26646. zval *object;
  26647. zval *property;
  26648. zval *value;
  26649. zval *zptr;
  26650. SAVE_OPLINE();
  26651. object = &EX(This);
  26652. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  26653. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26654. }
  26655. property = RT_CONSTANT(opline, opline->op2);
  26656. do {
  26657. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  26658. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  26659. if (Z_ISREF_P(object)) {
  26660. object = Z_REFVAL_P(object);
  26661. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  26662. goto assign_op_object;
  26663. }
  26664. }
  26665. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  26666. break;
  26667. }
  26668. }
  26669. /* here we are sure we are dealing with an object */
  26670. assign_op_object:
  26671. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  26672. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
  26673. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  26674. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26675. ZVAL_NULL(EX_VAR(opline->result.var));
  26676. }
  26677. } else {
  26678. ZVAL_DEREF(zptr);
  26679. binary_op(zptr, zptr, value);
  26680. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26681. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  26682. }
  26683. }
  26684. } else {
  26685. zend_assign_op_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC);
  26686. }
  26687. } while (0);
  26688. FREE_OP(free_op_data1);
  26689. /* assign_obj has two opcodes! */
  26690. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  26691. }
  26692. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  26693. {
  26694. #if 1 && IS_CONST == IS_UNUSED
  26695. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26696. #else
  26697. # if 0 || IS_UNUSED != IS_UNUSED
  26698. # if 0
  26699. /* opline->extended_value checks are specialized, don't need opline */
  26700. USE_OPLINE
  26701. # endif
  26702. if (EXPECTED(0)) {
  26703. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_UNUSED_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26704. }
  26705. if (EXPECTED(0)) {
  26706. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26707. }
  26708. # endif
  26709. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26710. #endif
  26711. }
  26712. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26713. {
  26714. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26715. }
  26716. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26717. {
  26718. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26719. }
  26720. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26721. {
  26722. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26723. }
  26724. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26725. {
  26726. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26727. }
  26728. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26729. {
  26730. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26731. }
  26732. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26733. {
  26734. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26735. }
  26736. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26737. {
  26738. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26739. }
  26740. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26741. {
  26742. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26743. }
  26744. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26745. {
  26746. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26747. }
  26748. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26749. {
  26750. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26751. }
  26752. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26753. {
  26754. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26755. }
  26756. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26757. {
  26758. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26759. }
  26760. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  26761. {
  26762. USE_OPLINE
  26763. zval *object;
  26764. zval *property;
  26765. zval *zptr;
  26766. SAVE_OPLINE();
  26767. object = &EX(This);
  26768. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  26769. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26770. }
  26771. property = RT_CONSTANT(opline, opline->op2);
  26772. do {
  26773. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  26774. if (Z_ISREF_P(object)) {
  26775. object = Z_REFVAL_P(object);
  26776. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  26777. goto pre_incdec_object;
  26778. }
  26779. }
  26780. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  26781. break;
  26782. }
  26783. }
  26784. /* here we are sure we are dealing with an object */
  26785. pre_incdec_object:
  26786. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  26787. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  26788. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  26789. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26790. ZVAL_NULL(EX_VAR(opline->result.var));
  26791. }
  26792. } else {
  26793. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  26794. if (inc) {
  26795. fast_long_increment_function(zptr);
  26796. } else {
  26797. fast_long_decrement_function(zptr);
  26798. }
  26799. } else {
  26800. ZVAL_DEREF(zptr);
  26801. if (inc) {
  26802. increment_function(zptr);
  26803. } else {
  26804. decrement_function(zptr);
  26805. }
  26806. }
  26807. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  26808. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  26809. }
  26810. }
  26811. } else {
  26812. zend_pre_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  26813. }
  26814. } while (0);
  26815. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26816. }
  26817. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26818. {
  26819. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26820. }
  26821. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26822. {
  26823. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26824. }
  26825. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  26826. {
  26827. USE_OPLINE
  26828. zval *object;
  26829. zval *property;
  26830. zval *zptr;
  26831. SAVE_OPLINE();
  26832. object = &EX(This);
  26833. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  26834. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26835. }
  26836. property = RT_CONSTANT(opline, opline->op2);
  26837. do {
  26838. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  26839. if (Z_ISREF_P(object)) {
  26840. object = Z_REFVAL_P(object);
  26841. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  26842. goto post_incdec_object;
  26843. }
  26844. }
  26845. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  26846. break;
  26847. }
  26848. }
  26849. /* here we are sure we are dealing with an object */
  26850. post_incdec_object:
  26851. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  26852. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  26853. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  26854. ZVAL_NULL(EX_VAR(opline->result.var));
  26855. } else {
  26856. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  26857. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr));
  26858. if (inc) {
  26859. fast_long_increment_function(zptr);
  26860. } else {
  26861. fast_long_decrement_function(zptr);
  26862. }
  26863. } else {
  26864. ZVAL_DEREF(zptr);
  26865. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  26866. if (inc) {
  26867. increment_function(zptr);
  26868. } else {
  26869. decrement_function(zptr);
  26870. }
  26871. }
  26872. }
  26873. } else {
  26874. zend_post_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  26875. }
  26876. } while (0);
  26877. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26878. }
  26879. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26880. {
  26881. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26882. }
  26883. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26884. {
  26885. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  26886. }
  26887. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26888. {
  26889. USE_OPLINE
  26890. zval *container;
  26891. zval *offset;
  26892. void **cache_slot = NULL;
  26893. SAVE_OPLINE();
  26894. container = &EX(This);
  26895. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  26896. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26897. }
  26898. offset = RT_CONSTANT(opline, opline->op2);
  26899. if (IS_UNUSED == IS_CONST ||
  26900. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  26901. do {
  26902. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  26903. container = Z_REFVAL_P(container);
  26904. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  26905. break;
  26906. }
  26907. }
  26908. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  26909. GET_OP1_UNDEF_CV(container, BP_VAR_R);
  26910. }
  26911. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  26912. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  26913. }
  26914. goto fetch_obj_r_no_object;
  26915. } while (0);
  26916. }
  26917. /* here we are sure we are dealing with an object */
  26918. do {
  26919. zend_object *zobj = Z_OBJ_P(container);
  26920. zval *retval;
  26921. if (IS_CONST == IS_CONST) {
  26922. cache_slot = CACHE_ADDR(opline->extended_value);
  26923. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  26924. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  26925. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  26926. retval = OBJ_PROP(zobj, prop_offset);
  26927. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  26928. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  26929. break;
  26930. }
  26931. } else if (EXPECTED(zobj->properties != NULL)) {
  26932. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  26933. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  26934. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  26935. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  26936. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  26937. (EXPECTED(p->key == Z_STR_P(offset)) ||
  26938. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  26939. EXPECTED(p->key != NULL) &&
  26940. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  26941. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
  26942. break;
  26943. }
  26944. }
  26945. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  26946. }
  26947. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  26948. if (EXPECTED(retval)) {
  26949. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  26950. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  26951. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  26952. break;
  26953. }
  26954. }
  26955. }
  26956. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
  26957. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  26958. }
  26959. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  26960. fetch_obj_r_no_object:
  26961. zend_wrong_property_read(offset);
  26962. ZVAL_NULL(EX_VAR(opline->result.var));
  26963. } else {
  26964. retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  26965. if (retval != EX_VAR(opline->result.var)) {
  26966. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  26967. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  26968. zend_unwrap_reference(retval);
  26969. }
  26970. }
  26971. } while (0);
  26972. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26973. }
  26974. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26975. {
  26976. USE_OPLINE
  26977. zend_free_op free_op1;
  26978. zval *property, *container, *result;
  26979. SAVE_OPLINE();
  26980. container = &EX(This);
  26981. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  26982. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  26983. }
  26984. property = RT_CONSTANT(opline, opline->op2);
  26985. result = EX_VAR(opline->result.var);
  26986. zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC);
  26987. if (IS_UNUSED == IS_VAR) {
  26988. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  26989. }
  26990. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  26991. }
  26992. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  26993. {
  26994. USE_OPLINE
  26995. zend_free_op free_op1;
  26996. zval *property, *container, *result;
  26997. SAVE_OPLINE();
  26998. container = &EX(This);
  26999. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  27000. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27001. }
  27002. property = RT_CONSTANT(opline, opline->op2);
  27003. result = EX_VAR(opline->result.var);
  27004. zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC);
  27005. if (IS_UNUSED == IS_VAR) {
  27006. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  27007. }
  27008. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27009. }
  27010. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27011. {
  27012. USE_OPLINE
  27013. zval *container;
  27014. zval *offset;
  27015. void **cache_slot = NULL;
  27016. SAVE_OPLINE();
  27017. container = &EX(This);
  27018. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  27019. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27020. }
  27021. offset = RT_CONSTANT(opline, opline->op2);
  27022. if (IS_UNUSED == IS_CONST ||
  27023. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  27024. do {
  27025. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  27026. container = Z_REFVAL_P(container);
  27027. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  27028. break;
  27029. }
  27030. }
  27031. goto fetch_obj_is_no_object;
  27032. } while (0);
  27033. }
  27034. /* here we are sure we are dealing with an object */
  27035. do {
  27036. zend_object *zobj = Z_OBJ_P(container);
  27037. zval *retval;
  27038. if (IS_CONST == IS_CONST) {
  27039. cache_slot = CACHE_ADDR(opline->extended_value);
  27040. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  27041. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  27042. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  27043. retval = OBJ_PROP(zobj, prop_offset);
  27044. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  27045. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  27046. break;
  27047. }
  27048. } else if (EXPECTED(zobj->properties != NULL)) {
  27049. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  27050. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  27051. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  27052. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  27053. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  27054. (EXPECTED(p->key == Z_STR_P(offset)) ||
  27055. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  27056. EXPECTED(p->key != NULL) &&
  27057. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  27058. ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
  27059. break;
  27060. }
  27061. }
  27062. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  27063. }
  27064. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  27065. if (EXPECTED(retval)) {
  27066. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  27067. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  27068. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  27069. break;
  27070. }
  27071. }
  27072. }
  27073. }
  27074. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  27075. fetch_obj_is_no_object:
  27076. ZVAL_NULL(EX_VAR(opline->result.var));
  27077. } else {
  27078. retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  27079. if (retval != EX_VAR(opline->result.var)) {
  27080. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  27081. }
  27082. }
  27083. } while (0);
  27084. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27085. }
  27086. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27087. {
  27088. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  27089. /* Behave like FETCH_OBJ_W */
  27090. if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
  27091. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27092. }
  27093. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27094. } else {
  27095. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27096. }
  27097. }
  27098. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27099. {
  27100. USE_OPLINE
  27101. zend_free_op free_op1;
  27102. zval *container, *property, *result;
  27103. SAVE_OPLINE();
  27104. container = &EX(This);
  27105. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  27106. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27107. }
  27108. property = RT_CONSTANT(opline, opline->op2);
  27109. result = EX_VAR(opline->result.var);
  27110. zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC);
  27111. if (IS_UNUSED == IS_VAR) {
  27112. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  27113. }
  27114. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27115. }
  27116. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27117. {
  27118. USE_OPLINE
  27119. zval *object, *property, *value, tmp;
  27120. SAVE_OPLINE();
  27121. object = &EX(This);
  27122. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  27123. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27124. }
  27125. property = RT_CONSTANT(opline, opline->op2);
  27126. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  27127. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  27128. if (Z_ISREF_P(object)) {
  27129. object = Z_REFVAL_P(object);
  27130. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  27131. goto assign_object;
  27132. }
  27133. }
  27134. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  27135. goto exit_assign_obj;
  27136. }
  27137. }
  27138. assign_object:
  27139. if (IS_CONST == IS_CONST &&
  27140. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  27141. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  27142. zend_object *zobj = Z_OBJ_P(object);
  27143. zval *property_val;
  27144. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  27145. property_val = OBJ_PROP(zobj, prop_offset);
  27146. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  27147. fast_assign_obj:
  27148. value = zend_assign_to_variable(property_val, value, IS_CONST);
  27149. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27150. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27151. }
  27152. goto exit_assign_obj;
  27153. }
  27154. } else {
  27155. if (EXPECTED(zobj->properties != NULL)) {
  27156. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  27157. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  27158. GC_DELREF(zobj->properties);
  27159. }
  27160. zobj->properties = zend_array_dup(zobj->properties);
  27161. }
  27162. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  27163. if (property_val) {
  27164. goto fast_assign_obj;
  27165. }
  27166. }
  27167. if (!zobj->ce->__set) {
  27168. if (EXPECTED(zobj->properties == NULL)) {
  27169. rebuild_object_properties(zobj);
  27170. }
  27171. if (IS_CONST == IS_CONST) {
  27172. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  27173. Z_ADDREF_P(value);
  27174. }
  27175. } else if (IS_CONST != IS_TMP_VAR) {
  27176. if (Z_ISREF_P(value)) {
  27177. if (IS_CONST == IS_VAR) {
  27178. zend_reference *ref = Z_REF_P(value);
  27179. if (GC_DELREF(ref) == 0) {
  27180. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  27181. efree_size(ref, sizeof(zend_reference));
  27182. value = &tmp;
  27183. } else {
  27184. value = Z_REFVAL_P(value);
  27185. Z_TRY_ADDREF_P(value);
  27186. }
  27187. } else {
  27188. value = Z_REFVAL_P(value);
  27189. Z_TRY_ADDREF_P(value);
  27190. }
  27191. } else if (IS_CONST == IS_CV) {
  27192. Z_TRY_ADDREF_P(value);
  27193. }
  27194. }
  27195. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  27196. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27197. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27198. }
  27199. goto exit_assign_obj;
  27200. }
  27201. }
  27202. }
  27203. if (!Z_OBJ_HT_P(object)->write_property) {
  27204. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  27205. goto exit_assign_obj;
  27206. }
  27207. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  27208. ZVAL_DEREF(value);
  27209. }
  27210. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  27211. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27212. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27213. }
  27214. exit_assign_obj:
  27215. /* assign_obj has two opcodes! */
  27216. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  27217. }
  27218. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27219. {
  27220. USE_OPLINE
  27221. zend_free_op free_op_data;
  27222. zval *object, *property, *value, tmp;
  27223. SAVE_OPLINE();
  27224. object = &EX(This);
  27225. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  27226. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27227. }
  27228. property = RT_CONSTANT(opline, opline->op2);
  27229. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  27230. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  27231. if (Z_ISREF_P(object)) {
  27232. object = Z_REFVAL_P(object);
  27233. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  27234. goto assign_object;
  27235. }
  27236. }
  27237. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  27238. zval_ptr_dtor_nogc(free_op_data);
  27239. goto exit_assign_obj;
  27240. }
  27241. }
  27242. assign_object:
  27243. if (IS_CONST == IS_CONST &&
  27244. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  27245. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  27246. zend_object *zobj = Z_OBJ_P(object);
  27247. zval *property_val;
  27248. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  27249. property_val = OBJ_PROP(zobj, prop_offset);
  27250. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  27251. fast_assign_obj:
  27252. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
  27253. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27254. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27255. }
  27256. goto exit_assign_obj;
  27257. }
  27258. } else {
  27259. if (EXPECTED(zobj->properties != NULL)) {
  27260. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  27261. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  27262. GC_DELREF(zobj->properties);
  27263. }
  27264. zobj->properties = zend_array_dup(zobj->properties);
  27265. }
  27266. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  27267. if (property_val) {
  27268. goto fast_assign_obj;
  27269. }
  27270. }
  27271. if (!zobj->ce->__set) {
  27272. if (EXPECTED(zobj->properties == NULL)) {
  27273. rebuild_object_properties(zobj);
  27274. }
  27275. if (IS_TMP_VAR == IS_CONST) {
  27276. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  27277. Z_ADDREF_P(value);
  27278. }
  27279. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  27280. if (Z_ISREF_P(value)) {
  27281. if (IS_TMP_VAR == IS_VAR) {
  27282. zend_reference *ref = Z_REF_P(value);
  27283. if (GC_DELREF(ref) == 0) {
  27284. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  27285. efree_size(ref, sizeof(zend_reference));
  27286. value = &tmp;
  27287. } else {
  27288. value = Z_REFVAL_P(value);
  27289. Z_TRY_ADDREF_P(value);
  27290. }
  27291. } else {
  27292. value = Z_REFVAL_P(value);
  27293. Z_TRY_ADDREF_P(value);
  27294. }
  27295. } else if (IS_TMP_VAR == IS_CV) {
  27296. Z_TRY_ADDREF_P(value);
  27297. }
  27298. }
  27299. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  27300. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27301. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27302. }
  27303. goto exit_assign_obj;
  27304. }
  27305. }
  27306. }
  27307. if (!Z_OBJ_HT_P(object)->write_property) {
  27308. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  27309. zval_ptr_dtor_nogc(free_op_data);
  27310. goto exit_assign_obj;
  27311. }
  27312. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  27313. ZVAL_DEREF(value);
  27314. }
  27315. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  27316. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27317. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27318. }
  27319. zval_ptr_dtor_nogc(free_op_data);
  27320. exit_assign_obj:
  27321. /* assign_obj has two opcodes! */
  27322. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  27323. }
  27324. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27325. {
  27326. USE_OPLINE
  27327. zend_free_op free_op_data;
  27328. zval *object, *property, *value, tmp;
  27329. SAVE_OPLINE();
  27330. object = &EX(This);
  27331. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  27332. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27333. }
  27334. property = RT_CONSTANT(opline, opline->op2);
  27335. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  27336. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  27337. if (Z_ISREF_P(object)) {
  27338. object = Z_REFVAL_P(object);
  27339. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  27340. goto assign_object;
  27341. }
  27342. }
  27343. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  27344. zval_ptr_dtor_nogc(free_op_data);
  27345. goto exit_assign_obj;
  27346. }
  27347. }
  27348. assign_object:
  27349. if (IS_CONST == IS_CONST &&
  27350. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  27351. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  27352. zend_object *zobj = Z_OBJ_P(object);
  27353. zval *property_val;
  27354. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  27355. property_val = OBJ_PROP(zobj, prop_offset);
  27356. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  27357. fast_assign_obj:
  27358. value = zend_assign_to_variable(property_val, value, IS_VAR);
  27359. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27360. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27361. }
  27362. goto exit_assign_obj;
  27363. }
  27364. } else {
  27365. if (EXPECTED(zobj->properties != NULL)) {
  27366. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  27367. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  27368. GC_DELREF(zobj->properties);
  27369. }
  27370. zobj->properties = zend_array_dup(zobj->properties);
  27371. }
  27372. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  27373. if (property_val) {
  27374. goto fast_assign_obj;
  27375. }
  27376. }
  27377. if (!zobj->ce->__set) {
  27378. if (EXPECTED(zobj->properties == NULL)) {
  27379. rebuild_object_properties(zobj);
  27380. }
  27381. if (IS_VAR == IS_CONST) {
  27382. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  27383. Z_ADDREF_P(value);
  27384. }
  27385. } else if (IS_VAR != IS_TMP_VAR) {
  27386. if (Z_ISREF_P(value)) {
  27387. if (IS_VAR == IS_VAR) {
  27388. zend_reference *ref = Z_REF_P(value);
  27389. if (GC_DELREF(ref) == 0) {
  27390. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  27391. efree_size(ref, sizeof(zend_reference));
  27392. value = &tmp;
  27393. } else {
  27394. value = Z_REFVAL_P(value);
  27395. Z_TRY_ADDREF_P(value);
  27396. }
  27397. } else {
  27398. value = Z_REFVAL_P(value);
  27399. Z_TRY_ADDREF_P(value);
  27400. }
  27401. } else if (IS_VAR == IS_CV) {
  27402. Z_TRY_ADDREF_P(value);
  27403. }
  27404. }
  27405. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  27406. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27407. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27408. }
  27409. goto exit_assign_obj;
  27410. }
  27411. }
  27412. }
  27413. if (!Z_OBJ_HT_P(object)->write_property) {
  27414. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  27415. zval_ptr_dtor_nogc(free_op_data);
  27416. goto exit_assign_obj;
  27417. }
  27418. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  27419. ZVAL_DEREF(value);
  27420. }
  27421. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  27422. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27423. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27424. }
  27425. zval_ptr_dtor_nogc(free_op_data);
  27426. exit_assign_obj:
  27427. /* assign_obj has two opcodes! */
  27428. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  27429. }
  27430. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27431. {
  27432. USE_OPLINE
  27433. zval *object, *property, *value, tmp;
  27434. SAVE_OPLINE();
  27435. object = &EX(This);
  27436. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  27437. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27438. }
  27439. property = RT_CONSTANT(opline, opline->op2);
  27440. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  27441. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  27442. if (Z_ISREF_P(object)) {
  27443. object = Z_REFVAL_P(object);
  27444. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  27445. goto assign_object;
  27446. }
  27447. }
  27448. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  27449. goto exit_assign_obj;
  27450. }
  27451. }
  27452. assign_object:
  27453. if (IS_CONST == IS_CONST &&
  27454. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  27455. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  27456. zend_object *zobj = Z_OBJ_P(object);
  27457. zval *property_val;
  27458. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  27459. property_val = OBJ_PROP(zobj, prop_offset);
  27460. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  27461. fast_assign_obj:
  27462. value = zend_assign_to_variable(property_val, value, IS_CV);
  27463. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27464. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27465. }
  27466. goto exit_assign_obj;
  27467. }
  27468. } else {
  27469. if (EXPECTED(zobj->properties != NULL)) {
  27470. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  27471. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  27472. GC_DELREF(zobj->properties);
  27473. }
  27474. zobj->properties = zend_array_dup(zobj->properties);
  27475. }
  27476. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  27477. if (property_val) {
  27478. goto fast_assign_obj;
  27479. }
  27480. }
  27481. if (!zobj->ce->__set) {
  27482. if (EXPECTED(zobj->properties == NULL)) {
  27483. rebuild_object_properties(zobj);
  27484. }
  27485. if (IS_CV == IS_CONST) {
  27486. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  27487. Z_ADDREF_P(value);
  27488. }
  27489. } else if (IS_CV != IS_TMP_VAR) {
  27490. if (Z_ISREF_P(value)) {
  27491. if (IS_CV == IS_VAR) {
  27492. zend_reference *ref = Z_REF_P(value);
  27493. if (GC_DELREF(ref) == 0) {
  27494. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  27495. efree_size(ref, sizeof(zend_reference));
  27496. value = &tmp;
  27497. } else {
  27498. value = Z_REFVAL_P(value);
  27499. Z_TRY_ADDREF_P(value);
  27500. }
  27501. } else {
  27502. value = Z_REFVAL_P(value);
  27503. Z_TRY_ADDREF_P(value);
  27504. }
  27505. } else if (IS_CV == IS_CV) {
  27506. Z_TRY_ADDREF_P(value);
  27507. }
  27508. }
  27509. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  27510. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27511. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27512. }
  27513. goto exit_assign_obj;
  27514. }
  27515. }
  27516. }
  27517. if (!Z_OBJ_HT_P(object)->write_property) {
  27518. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  27519. goto exit_assign_obj;
  27520. }
  27521. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  27522. ZVAL_DEREF(value);
  27523. }
  27524. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  27525. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  27526. ZVAL_COPY(EX_VAR(opline->result.var), value);
  27527. }
  27528. exit_assign_obj:
  27529. /* assign_obj has two opcodes! */
  27530. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  27531. }
  27532. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27533. {
  27534. USE_OPLINE
  27535. zend_string **rope;
  27536. zval *var;
  27537. /* Compiler allocates the necessary number of zval slots to keep the rope */
  27538. rope = (zend_string**)EX_VAR(opline->result.var);
  27539. if (IS_CONST == IS_CONST) {
  27540. var = RT_CONSTANT(opline, opline->op2);
  27541. rope[0] = Z_STR_P(var);
  27542. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  27543. Z_ADDREF_P(var);
  27544. }
  27545. } else {
  27546. var = RT_CONSTANT(opline, opline->op2);
  27547. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  27548. if (IS_CONST == IS_CV) {
  27549. rope[0] = zend_string_copy(Z_STR_P(var));
  27550. } else {
  27551. rope[0] = Z_STR_P(var);
  27552. }
  27553. } else {
  27554. SAVE_OPLINE();
  27555. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  27556. GET_OP2_UNDEF_CV(var, BP_VAR_R);
  27557. }
  27558. rope[0] = zval_get_string_func(var);
  27559. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27560. }
  27561. }
  27562. ZEND_VM_NEXT_OPCODE();
  27563. }
  27564. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27565. {
  27566. zval *class_name;
  27567. USE_OPLINE
  27568. SAVE_OPLINE();
  27569. if (IS_CONST == IS_UNUSED) {
  27570. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
  27571. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27572. } else if (IS_CONST == IS_CONST) {
  27573. zend_class_entry *ce = CACHED_PTR(opline->extended_value);
  27574. if (UNEXPECTED(ce == NULL)) {
  27575. class_name = RT_CONSTANT(opline, opline->op2);
  27576. ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, opline->op1.num);
  27577. CACHE_PTR(opline->extended_value, ce);
  27578. }
  27579. Z_CE_P(EX_VAR(opline->result.var)) = ce;
  27580. } else {
  27581. class_name = RT_CONSTANT(opline, opline->op2);
  27582. try_class_name:
  27583. if (Z_TYPE_P(class_name) == IS_OBJECT) {
  27584. Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
  27585. } else if (Z_TYPE_P(class_name) == IS_STRING) {
  27586. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
  27587. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
  27588. class_name = Z_REFVAL_P(class_name);
  27589. goto try_class_name;
  27590. } else {
  27591. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
  27592. GET_OP2_UNDEF_CV(class_name, BP_VAR_R);
  27593. if (UNEXPECTED(EG(exception) != NULL)) {
  27594. HANDLE_EXCEPTION();
  27595. }
  27596. }
  27597. zend_throw_error(NULL, "Class name must be a valid object or a string");
  27598. }
  27599. }
  27600. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27601. }
  27602. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27603. {
  27604. USE_OPLINE
  27605. zval *function_name;
  27606. zend_free_op free_op1;
  27607. zval *object;
  27608. zend_function *fbc;
  27609. zend_class_entry *called_scope;
  27610. zend_object *obj;
  27611. zend_execute_data *call;
  27612. uint32_t call_info;
  27613. SAVE_OPLINE();
  27614. object = &EX(This);
  27615. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  27616. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27617. }
  27618. if (IS_CONST != IS_CONST) {
  27619. function_name = RT_CONSTANT(opline, opline->op2);
  27620. }
  27621. if (IS_CONST != IS_CONST &&
  27622. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  27623. do {
  27624. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  27625. function_name = Z_REFVAL_P(function_name);
  27626. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  27627. break;
  27628. }
  27629. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  27630. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  27631. if (UNEXPECTED(EG(exception) != NULL)) {
  27632. HANDLE_EXCEPTION();
  27633. }
  27634. }
  27635. zend_throw_error(NULL, "Method name must be a string");
  27636. HANDLE_EXCEPTION();
  27637. } while (0);
  27638. }
  27639. if (IS_UNUSED != IS_UNUSED) {
  27640. do {
  27641. if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  27642. if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  27643. object = Z_REFVAL_P(object);
  27644. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  27645. break;
  27646. }
  27647. }
  27648. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  27649. object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
  27650. if (UNEXPECTED(EG(exception) != NULL)) {
  27651. if (IS_CONST != IS_CONST) {
  27652. }
  27653. HANDLE_EXCEPTION();
  27654. }
  27655. }
  27656. if (IS_CONST == IS_CONST) {
  27657. function_name = RT_CONSTANT(opline, opline->op2);
  27658. }
  27659. zend_invalid_method_call(object, function_name);
  27660. HANDLE_EXCEPTION();
  27661. }
  27662. } while (0);
  27663. }
  27664. obj = Z_OBJ_P(object);
  27665. called_scope = obj->ce;
  27666. if (IS_CONST == IS_CONST &&
  27667. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  27668. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  27669. } else {
  27670. zend_object *orig_obj = obj;
  27671. if (UNEXPECTED(obj->handlers->get_method == NULL)) {
  27672. zend_throw_error(NULL, "Object does not support method calls");
  27673. HANDLE_EXCEPTION();
  27674. }
  27675. if (IS_CONST == IS_CONST) {
  27676. function_name = RT_CONSTANT(opline, opline->op2);
  27677. }
  27678. /* First, locate the function. */
  27679. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  27680. if (UNEXPECTED(fbc == NULL)) {
  27681. if (EXPECTED(!EG(exception))) {
  27682. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  27683. }
  27684. HANDLE_EXCEPTION();
  27685. }
  27686. if (IS_CONST == IS_CONST &&
  27687. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  27688. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  27689. EXPECTED(obj == orig_obj)) {
  27690. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  27691. }
  27692. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  27693. /* Reset "object" to trigger reference counting */
  27694. object = NULL;
  27695. }
  27696. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  27697. init_func_run_time_cache(&fbc->op_array);
  27698. }
  27699. }
  27700. if (IS_CONST != IS_CONST) {
  27701. }
  27702. call_info = ZEND_CALL_NESTED_FUNCTION;
  27703. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  27704. obj = NULL;
  27705. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
  27706. HANDLE_EXCEPTION();
  27707. }
  27708. } else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  27709. /* CV may be changed indirectly (e.g. when it's a reference) */
  27710. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
  27711. if (IS_UNUSED == IS_CV) {
  27712. GC_ADDREF(obj); /* For $this pointer */
  27713. } else if (free_op1 != object) {
  27714. GC_ADDREF(obj); /* For $this pointer */
  27715. }
  27716. }
  27717. call = zend_vm_stack_push_call_frame(call_info,
  27718. fbc, opline->extended_value, called_scope, obj);
  27719. call->prev_execute_data = EX(call);
  27720. EX(call) = call;
  27721. ZEND_VM_NEXT_OPCODE();
  27722. }
  27723. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27724. {
  27725. USE_OPLINE
  27726. zval *function_name;
  27727. zend_class_entry *ce;
  27728. zend_object *object;
  27729. zend_function *fbc;
  27730. zend_execute_data *call;
  27731. SAVE_OPLINE();
  27732. if (IS_UNUSED == IS_CONST) {
  27733. /* no function found. try a static method in class */
  27734. ce = CACHED_PTR(opline->result.num);
  27735. if (UNEXPECTED(ce == NULL)) {
  27736. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  27737. if (UNEXPECTED(ce == NULL)) {
  27738. ZEND_ASSERT(EG(exception));
  27739. HANDLE_EXCEPTION();
  27740. }
  27741. if (IS_CONST != IS_CONST) {
  27742. CACHE_PTR(opline->result.num, ce);
  27743. }
  27744. }
  27745. } else if (IS_UNUSED == IS_UNUSED) {
  27746. ce = zend_fetch_class(NULL, opline->op1.num);
  27747. if (UNEXPECTED(ce == NULL)) {
  27748. ZEND_ASSERT(EG(exception));
  27749. HANDLE_EXCEPTION();
  27750. }
  27751. } else {
  27752. ce = Z_CE_P(EX_VAR(opline->op1.var));
  27753. }
  27754. if (IS_UNUSED == IS_CONST &&
  27755. IS_CONST == IS_CONST &&
  27756. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  27757. /* nothing to do */
  27758. } else if (IS_UNUSED != IS_CONST &&
  27759. IS_CONST == IS_CONST &&
  27760. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  27761. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  27762. } else if (IS_CONST != IS_UNUSED) {
  27763. function_name = RT_CONSTANT(opline, opline->op2);
  27764. if (IS_CONST != IS_CONST) {
  27765. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  27766. do {
  27767. if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  27768. function_name = Z_REFVAL_P(function_name);
  27769. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  27770. break;
  27771. }
  27772. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  27773. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  27774. if (UNEXPECTED(EG(exception) != NULL)) {
  27775. HANDLE_EXCEPTION();
  27776. }
  27777. }
  27778. zend_throw_error(NULL, "Function name must be a string");
  27779. HANDLE_EXCEPTION();
  27780. } while (0);
  27781. }
  27782. }
  27783. if (ce->get_static_method) {
  27784. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  27785. } else {
  27786. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  27787. }
  27788. if (UNEXPECTED(fbc == NULL)) {
  27789. if (EXPECTED(!EG(exception))) {
  27790. zend_undefined_method(ce, Z_STR_P(function_name));
  27791. }
  27792. HANDLE_EXCEPTION();
  27793. }
  27794. if (IS_CONST == IS_CONST &&
  27795. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  27796. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
  27797. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  27798. }
  27799. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  27800. init_func_run_time_cache(&fbc->op_array);
  27801. }
  27802. if (IS_CONST != IS_CONST) {
  27803. }
  27804. } else {
  27805. if (UNEXPECTED(ce->constructor == NULL)) {
  27806. zend_throw_error(NULL, "Cannot call constructor");
  27807. HANDLE_EXCEPTION();
  27808. }
  27809. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  27810. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  27811. HANDLE_EXCEPTION();
  27812. }
  27813. fbc = ce->constructor;
  27814. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  27815. init_func_run_time_cache(&fbc->op_array);
  27816. }
  27817. }
  27818. object = NULL;
  27819. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  27820. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  27821. object = Z_OBJ(EX(This));
  27822. ce = object->ce;
  27823. } else {
  27824. zend_non_static_method_call(fbc);
  27825. if (UNEXPECTED(EG(exception) != NULL)) {
  27826. HANDLE_EXCEPTION();
  27827. }
  27828. }
  27829. }
  27830. if (IS_UNUSED == IS_UNUSED) {
  27831. /* previous opcode is ZEND_FETCH_CLASS */
  27832. if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  27833. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
  27834. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  27835. ce = Z_OBJCE(EX(This));
  27836. } else {
  27837. ce = Z_CE(EX(This));
  27838. }
  27839. }
  27840. }
  27841. call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  27842. fbc, opline->extended_value, ce, object);
  27843. call->prev_execute_data = EX(call);
  27844. EX(call) = call;
  27845. ZEND_VM_NEXT_OPCODE();
  27846. }
  27847. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27848. {
  27849. USE_OPLINE
  27850. zend_constant *c;
  27851. c = CACHED_PTR(opline->extended_value);
  27852. if (EXPECTED(c != NULL) && EXPECTED(!IS_SPECIAL_CACHE_VAL(c))) {
  27853. ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), &c->value);
  27854. ZEND_VM_NEXT_OPCODE();
  27855. }
  27856. SAVE_OPLINE();
  27857. zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->op1.num OPLINE_CC EXECUTE_DATA_CC);
  27858. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27859. }
  27860. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27861. {
  27862. zend_class_entry *ce, *scope;
  27863. zend_class_constant *c;
  27864. zval *value, *zv;
  27865. USE_OPLINE
  27866. SAVE_OPLINE();
  27867. do {
  27868. if (IS_UNUSED == IS_CONST) {
  27869. if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
  27870. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  27871. break;
  27872. } else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
  27873. ce = CACHED_PTR(opline->extended_value);
  27874. } else {
  27875. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  27876. if (UNEXPECTED(ce == NULL)) {
  27877. ZEND_ASSERT(EG(exception));
  27878. ZVAL_UNDEF(EX_VAR(opline->result.var));
  27879. HANDLE_EXCEPTION();
  27880. }
  27881. }
  27882. } else {
  27883. if (IS_UNUSED == IS_UNUSED) {
  27884. ce = zend_fetch_class(NULL, opline->op1.num);
  27885. if (UNEXPECTED(ce == NULL)) {
  27886. ZEND_ASSERT(EG(exception));
  27887. ZVAL_UNDEF(EX_VAR(opline->result.var));
  27888. HANDLE_EXCEPTION();
  27889. }
  27890. } else {
  27891. ce = Z_CE_P(EX_VAR(opline->op1.var));
  27892. }
  27893. if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  27894. value = CACHED_PTR(opline->extended_value + sizeof(void*));
  27895. break;
  27896. }
  27897. }
  27898. zv = zend_hash_find_ex(&ce->constants_table, Z_STR_P(RT_CONSTANT(opline, opline->op2)), 1);
  27899. if (EXPECTED(zv != NULL)) {
  27900. c = Z_PTR_P(zv);
  27901. scope = EX(func)->op_array.scope;
  27902. if (!zend_verify_const_access(c, scope)) {
  27903. zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
  27904. ZVAL_UNDEF(EX_VAR(opline->result.var));
  27905. HANDLE_EXCEPTION();
  27906. }
  27907. value = &c->value;
  27908. if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
  27909. zval_update_constant_ex(value, c->ce);
  27910. if (UNEXPECTED(EG(exception) != NULL)) {
  27911. ZVAL_UNDEF(EX_VAR(opline->result.var));
  27912. HANDLE_EXCEPTION();
  27913. }
  27914. }
  27915. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
  27916. } else {
  27917. zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
  27918. ZVAL_UNDEF(EX_VAR(opline->result.var));
  27919. HANDLE_EXCEPTION();
  27920. }
  27921. } while (0);
  27922. ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
  27923. ZEND_VM_NEXT_OPCODE();
  27924. }
  27925. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27926. {
  27927. USE_OPLINE
  27928. zval *container;
  27929. zval *offset;
  27930. SAVE_OPLINE();
  27931. container = &EX(This);
  27932. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  27933. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27934. }
  27935. offset = RT_CONSTANT(opline, opline->op2);
  27936. do {
  27937. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  27938. if (Z_ISREF_P(container)) {
  27939. container = Z_REFVAL_P(container);
  27940. if (Z_TYPE_P(container) != IS_OBJECT) {
  27941. break;
  27942. }
  27943. } else {
  27944. break;
  27945. }
  27946. }
  27947. if (Z_OBJ_HT_P(container)->unset_property) {
  27948. Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  27949. } else {
  27950. zend_wrong_property_unset(offset);
  27951. }
  27952. } while (0);
  27953. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27954. }
  27955. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27956. {
  27957. USE_OPLINE
  27958. zval *container;
  27959. int result;
  27960. zval *offset;
  27961. SAVE_OPLINE();
  27962. container = &EX(This);
  27963. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  27964. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27965. }
  27966. offset = RT_CONSTANT(opline, opline->op2);
  27967. if (IS_UNUSED == IS_CONST ||
  27968. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  27969. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  27970. container = Z_REFVAL_P(container);
  27971. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  27972. goto isset_no_object;
  27973. }
  27974. } else {
  27975. goto isset_no_object;
  27976. }
  27977. }
  27978. if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
  27979. zend_wrong_property_check(offset);
  27980. isset_no_object:
  27981. result = (opline->extended_value & ZEND_ISEMPTY);
  27982. } else {
  27983. result =
  27984. (opline->extended_value & ZEND_ISEMPTY) ^
  27985. Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  27986. }
  27987. ZEND_VM_SMART_BRANCH(result, 1);
  27988. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  27989. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  27990. }
  27991. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  27992. {
  27993. USE_OPLINE
  27994. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  27995. SAVE_OPLINE();
  27996. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  27997. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  27998. }
  27999. /* Destroy the previously yielded value */
  28000. zval_ptr_dtor(&generator->value);
  28001. /* Destroy the previously yielded key */
  28002. zval_ptr_dtor(&generator->key);
  28003. /* Set the new yielded value */
  28004. if (IS_UNUSED != IS_UNUSED) {
  28005. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  28006. /* Constants and temporary variables aren't yieldable by reference,
  28007. * but we still allow them with a notice. */
  28008. if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
  28009. zval *value;
  28010. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  28011. value = NULL;
  28012. ZVAL_COPY_VALUE(&generator->value, value);
  28013. if (IS_UNUSED == IS_CONST) {
  28014. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  28015. Z_ADDREF(generator->value);
  28016. }
  28017. }
  28018. } else {
  28019. zval *value_ptr = NULL;
  28020. /* If a function call result is yielded and the function did
  28021. * not return by reference we throw a notice. */
  28022. if (IS_UNUSED == IS_VAR &&
  28023. (value_ptr == &EG(uninitialized_zval) ||
  28024. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  28025. !Z_ISREF_P(value_ptr)))) {
  28026. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  28027. ZVAL_COPY(&generator->value, value_ptr);
  28028. } else {
  28029. if (Z_ISREF_P(value_ptr)) {
  28030. Z_ADDREF_P(value_ptr);
  28031. } else {
  28032. ZVAL_MAKE_REF_EX(value_ptr, 2);
  28033. }
  28034. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  28035. }
  28036. }
  28037. } else {
  28038. zval *value = NULL;
  28039. /* Consts, temporary variables and references need copying */
  28040. if (IS_UNUSED == IS_CONST) {
  28041. ZVAL_COPY_VALUE(&generator->value, value);
  28042. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  28043. Z_ADDREF(generator->value);
  28044. }
  28045. } else if (IS_UNUSED == IS_TMP_VAR) {
  28046. ZVAL_COPY_VALUE(&generator->value, value);
  28047. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  28048. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  28049. } else {
  28050. ZVAL_COPY_VALUE(&generator->value, value);
  28051. if (IS_UNUSED == IS_CV) {
  28052. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  28053. }
  28054. }
  28055. }
  28056. } else {
  28057. /* If no value was specified yield null */
  28058. ZVAL_NULL(&generator->value);
  28059. }
  28060. /* Set the new yielded key */
  28061. if (IS_CONST != IS_UNUSED) {
  28062. zval *key = RT_CONSTANT(opline, opline->op2);
  28063. /* Consts, temporary variables and references need copying */
  28064. if (IS_CONST == IS_CONST) {
  28065. ZVAL_COPY_VALUE(&generator->key, key);
  28066. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  28067. Z_ADDREF(generator->key);
  28068. }
  28069. } else if (IS_CONST == IS_TMP_VAR) {
  28070. ZVAL_COPY_VALUE(&generator->key, key);
  28071. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  28072. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  28073. } else {
  28074. ZVAL_COPY_VALUE(&generator->key, key);
  28075. if (IS_CONST == IS_CV) {
  28076. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  28077. }
  28078. }
  28079. if (Z_TYPE(generator->key) == IS_LONG
  28080. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  28081. ) {
  28082. generator->largest_used_integer_key = Z_LVAL(generator->key);
  28083. }
  28084. } else {
  28085. /* If no key was specified we use auto-increment keys */
  28086. generator->largest_used_integer_key++;
  28087. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  28088. }
  28089. if (RETURN_VALUE_USED(opline)) {
  28090. /* If the return value of yield is used set the send
  28091. * target and initialize it to NULL */
  28092. generator->send_target = EX_VAR(opline->result.var);
  28093. ZVAL_NULL(generator->send_target);
  28094. } else {
  28095. generator->send_target = NULL;
  28096. }
  28097. /* We increment to the next op, so we are at the correct position when the
  28098. * generator is resumed. */
  28099. ZEND_VM_INC_OPCODE();
  28100. /* The GOTO VM uses a local opline variable. We need to set the opline
  28101. * variable in execute_data so we don't resume at an old position. */
  28102. SAVE_OPLINE();
  28103. ZEND_VM_RETURN();
  28104. }
  28105. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  28106. {
  28107. USE_OPLINE
  28108. zend_free_op free_op2, free_op_data1;
  28109. zval *object;
  28110. zval *property;
  28111. zval *value;
  28112. zval *zptr;
  28113. SAVE_OPLINE();
  28114. object = &EX(This);
  28115. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  28116. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28117. }
  28118. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  28119. do {
  28120. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  28121. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28122. if (Z_ISREF_P(object)) {
  28123. object = Z_REFVAL_P(object);
  28124. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  28125. goto assign_op_object;
  28126. }
  28127. }
  28128. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  28129. break;
  28130. }
  28131. }
  28132. /* here we are sure we are dealing with an object */
  28133. assign_op_object:
  28134. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  28135. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
  28136. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  28137. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28138. ZVAL_NULL(EX_VAR(opline->result.var));
  28139. }
  28140. } else {
  28141. ZVAL_DEREF(zptr);
  28142. binary_op(zptr, zptr, value);
  28143. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28144. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  28145. }
  28146. }
  28147. } else {
  28148. zend_assign_op_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC);
  28149. }
  28150. } while (0);
  28151. FREE_OP(free_op_data1);
  28152. zval_ptr_dtor_nogc(free_op2);
  28153. /* assign_obj has two opcodes! */
  28154. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  28155. }
  28156. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  28157. {
  28158. #if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED
  28159. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28160. #else
  28161. # if 0 || IS_UNUSED != IS_UNUSED
  28162. # if 0
  28163. /* opline->extended_value checks are specialized, don't need opline */
  28164. USE_OPLINE
  28165. # endif
  28166. if (EXPECTED(0)) {
  28167. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_UNUSED_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28168. }
  28169. if (EXPECTED(0)) {
  28170. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28171. }
  28172. # endif
  28173. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28174. #endif
  28175. }
  28176. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28177. {
  28178. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28179. }
  28180. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28181. {
  28182. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28183. }
  28184. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28185. {
  28186. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28187. }
  28188. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28189. {
  28190. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28191. }
  28192. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28193. {
  28194. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28195. }
  28196. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28197. {
  28198. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28199. }
  28200. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28201. {
  28202. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28203. }
  28204. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28205. {
  28206. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28207. }
  28208. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28209. {
  28210. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28211. }
  28212. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28213. {
  28214. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28215. }
  28216. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28217. {
  28218. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28219. }
  28220. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28221. {
  28222. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28223. }
  28224. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  28225. {
  28226. USE_OPLINE
  28227. zend_free_op free_op2;
  28228. zval *object;
  28229. zval *property;
  28230. zval *zptr;
  28231. SAVE_OPLINE();
  28232. object = &EX(This);
  28233. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  28234. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28235. }
  28236. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  28237. do {
  28238. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28239. if (Z_ISREF_P(object)) {
  28240. object = Z_REFVAL_P(object);
  28241. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  28242. goto pre_incdec_object;
  28243. }
  28244. }
  28245. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  28246. break;
  28247. }
  28248. }
  28249. /* here we are sure we are dealing with an object */
  28250. pre_incdec_object:
  28251. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  28252. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  28253. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  28254. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28255. ZVAL_NULL(EX_VAR(opline->result.var));
  28256. }
  28257. } else {
  28258. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  28259. if (inc) {
  28260. fast_long_increment_function(zptr);
  28261. } else {
  28262. fast_long_decrement_function(zptr);
  28263. }
  28264. } else {
  28265. ZVAL_DEREF(zptr);
  28266. if (inc) {
  28267. increment_function(zptr);
  28268. } else {
  28269. decrement_function(zptr);
  28270. }
  28271. }
  28272. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28273. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  28274. }
  28275. }
  28276. } else {
  28277. zend_pre_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  28278. }
  28279. } while (0);
  28280. zval_ptr_dtor_nogc(free_op2);
  28281. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28282. }
  28283. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28284. {
  28285. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28286. }
  28287. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28288. {
  28289. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28290. }
  28291. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  28292. {
  28293. USE_OPLINE
  28294. zend_free_op free_op2;
  28295. zval *object;
  28296. zval *property;
  28297. zval *zptr;
  28298. SAVE_OPLINE();
  28299. object = &EX(This);
  28300. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  28301. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28302. }
  28303. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  28304. do {
  28305. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28306. if (Z_ISREF_P(object)) {
  28307. object = Z_REFVAL_P(object);
  28308. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  28309. goto post_incdec_object;
  28310. }
  28311. }
  28312. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  28313. break;
  28314. }
  28315. }
  28316. /* here we are sure we are dealing with an object */
  28317. post_incdec_object:
  28318. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  28319. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  28320. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  28321. ZVAL_NULL(EX_VAR(opline->result.var));
  28322. } else {
  28323. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  28324. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr));
  28325. if (inc) {
  28326. fast_long_increment_function(zptr);
  28327. } else {
  28328. fast_long_decrement_function(zptr);
  28329. }
  28330. } else {
  28331. ZVAL_DEREF(zptr);
  28332. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  28333. if (inc) {
  28334. increment_function(zptr);
  28335. } else {
  28336. decrement_function(zptr);
  28337. }
  28338. }
  28339. }
  28340. } else {
  28341. zend_post_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  28342. }
  28343. } while (0);
  28344. zval_ptr_dtor_nogc(free_op2);
  28345. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28346. }
  28347. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28348. {
  28349. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28350. }
  28351. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28352. {
  28353. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  28354. }
  28355. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28356. {
  28357. USE_OPLINE
  28358. zval *container;
  28359. zend_free_op free_op2;
  28360. zval *offset;
  28361. void **cache_slot = NULL;
  28362. SAVE_OPLINE();
  28363. container = &EX(This);
  28364. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  28365. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28366. }
  28367. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  28368. if (IS_UNUSED == IS_CONST ||
  28369. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  28370. do {
  28371. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  28372. container = Z_REFVAL_P(container);
  28373. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  28374. break;
  28375. }
  28376. }
  28377. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  28378. GET_OP1_UNDEF_CV(container, BP_VAR_R);
  28379. }
  28380. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  28381. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  28382. }
  28383. goto fetch_obj_r_no_object;
  28384. } while (0);
  28385. }
  28386. /* here we are sure we are dealing with an object */
  28387. do {
  28388. zend_object *zobj = Z_OBJ_P(container);
  28389. zval *retval;
  28390. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  28391. cache_slot = CACHE_ADDR(opline->extended_value);
  28392. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  28393. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  28394. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  28395. retval = OBJ_PROP(zobj, prop_offset);
  28396. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  28397. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  28398. break;
  28399. }
  28400. } else if (EXPECTED(zobj->properties != NULL)) {
  28401. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  28402. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  28403. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  28404. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  28405. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  28406. (EXPECTED(p->key == Z_STR_P(offset)) ||
  28407. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  28408. EXPECTED(p->key != NULL) &&
  28409. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  28410. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
  28411. break;
  28412. }
  28413. }
  28414. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  28415. }
  28416. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  28417. if (EXPECTED(retval)) {
  28418. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  28419. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  28420. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  28421. break;
  28422. }
  28423. }
  28424. }
  28425. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
  28426. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  28427. }
  28428. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  28429. fetch_obj_r_no_object:
  28430. zend_wrong_property_read(offset);
  28431. ZVAL_NULL(EX_VAR(opline->result.var));
  28432. } else {
  28433. retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  28434. if (retval != EX_VAR(opline->result.var)) {
  28435. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  28436. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  28437. zend_unwrap_reference(retval);
  28438. }
  28439. }
  28440. } while (0);
  28441. zval_ptr_dtor_nogc(free_op2);
  28442. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28443. }
  28444. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28445. {
  28446. USE_OPLINE
  28447. zend_free_op free_op1, free_op2;
  28448. zval *property, *container, *result;
  28449. SAVE_OPLINE();
  28450. container = &EX(This);
  28451. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  28452. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28453. }
  28454. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  28455. result = EX_VAR(opline->result.var);
  28456. zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC);
  28457. zval_ptr_dtor_nogc(free_op2);
  28458. if (IS_UNUSED == IS_VAR) {
  28459. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  28460. }
  28461. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28462. }
  28463. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28464. {
  28465. USE_OPLINE
  28466. zend_free_op free_op1, free_op2;
  28467. zval *property, *container, *result;
  28468. SAVE_OPLINE();
  28469. container = &EX(This);
  28470. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  28471. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28472. }
  28473. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  28474. result = EX_VAR(opline->result.var);
  28475. zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC);
  28476. zval_ptr_dtor_nogc(free_op2);
  28477. if (IS_UNUSED == IS_VAR) {
  28478. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  28479. }
  28480. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28481. }
  28482. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28483. {
  28484. USE_OPLINE
  28485. zval *container;
  28486. zend_free_op free_op2;
  28487. zval *offset;
  28488. void **cache_slot = NULL;
  28489. SAVE_OPLINE();
  28490. container = &EX(This);
  28491. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  28492. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28493. }
  28494. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  28495. if (IS_UNUSED == IS_CONST ||
  28496. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  28497. do {
  28498. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  28499. container = Z_REFVAL_P(container);
  28500. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  28501. break;
  28502. }
  28503. }
  28504. goto fetch_obj_is_no_object;
  28505. } while (0);
  28506. }
  28507. /* here we are sure we are dealing with an object */
  28508. do {
  28509. zend_object *zobj = Z_OBJ_P(container);
  28510. zval *retval;
  28511. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  28512. cache_slot = CACHE_ADDR(opline->extended_value);
  28513. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  28514. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  28515. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  28516. retval = OBJ_PROP(zobj, prop_offset);
  28517. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  28518. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  28519. break;
  28520. }
  28521. } else if (EXPECTED(zobj->properties != NULL)) {
  28522. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  28523. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  28524. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  28525. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  28526. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  28527. (EXPECTED(p->key == Z_STR_P(offset)) ||
  28528. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  28529. EXPECTED(p->key != NULL) &&
  28530. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  28531. ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
  28532. break;
  28533. }
  28534. }
  28535. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  28536. }
  28537. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  28538. if (EXPECTED(retval)) {
  28539. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  28540. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  28541. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  28542. break;
  28543. }
  28544. }
  28545. }
  28546. }
  28547. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  28548. fetch_obj_is_no_object:
  28549. ZVAL_NULL(EX_VAR(opline->result.var));
  28550. } else {
  28551. retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  28552. if (retval != EX_VAR(opline->result.var)) {
  28553. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  28554. }
  28555. }
  28556. } while (0);
  28557. zval_ptr_dtor_nogc(free_op2);
  28558. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28559. }
  28560. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28561. {
  28562. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  28563. /* Behave like FETCH_OBJ_W */
  28564. if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
  28565. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28566. }
  28567. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28568. } else {
  28569. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28570. }
  28571. }
  28572. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28573. {
  28574. USE_OPLINE
  28575. zend_free_op free_op1, free_op2;
  28576. zval *container, *property, *result;
  28577. SAVE_OPLINE();
  28578. container = &EX(This);
  28579. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  28580. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28581. }
  28582. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  28583. result = EX_VAR(opline->result.var);
  28584. zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC);
  28585. zval_ptr_dtor_nogc(free_op2);
  28586. if (IS_UNUSED == IS_VAR) {
  28587. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  28588. }
  28589. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  28590. }
  28591. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28592. {
  28593. USE_OPLINE
  28594. zend_free_op free_op2;
  28595. zval *object, *property, *value, tmp;
  28596. SAVE_OPLINE();
  28597. object = &EX(This);
  28598. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  28599. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28600. }
  28601. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  28602. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  28603. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28604. if (Z_ISREF_P(object)) {
  28605. object = Z_REFVAL_P(object);
  28606. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  28607. goto assign_object;
  28608. }
  28609. }
  28610. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  28611. goto exit_assign_obj;
  28612. }
  28613. }
  28614. assign_object:
  28615. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  28616. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  28617. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  28618. zend_object *zobj = Z_OBJ_P(object);
  28619. zval *property_val;
  28620. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  28621. property_val = OBJ_PROP(zobj, prop_offset);
  28622. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  28623. fast_assign_obj:
  28624. value = zend_assign_to_variable(property_val, value, IS_CONST);
  28625. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28626. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28627. }
  28628. goto exit_assign_obj;
  28629. }
  28630. } else {
  28631. if (EXPECTED(zobj->properties != NULL)) {
  28632. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  28633. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  28634. GC_DELREF(zobj->properties);
  28635. }
  28636. zobj->properties = zend_array_dup(zobj->properties);
  28637. }
  28638. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  28639. if (property_val) {
  28640. goto fast_assign_obj;
  28641. }
  28642. }
  28643. if (!zobj->ce->__set) {
  28644. if (EXPECTED(zobj->properties == NULL)) {
  28645. rebuild_object_properties(zobj);
  28646. }
  28647. if (IS_CONST == IS_CONST) {
  28648. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  28649. Z_ADDREF_P(value);
  28650. }
  28651. } else if (IS_CONST != IS_TMP_VAR) {
  28652. if (Z_ISREF_P(value)) {
  28653. if (IS_CONST == IS_VAR) {
  28654. zend_reference *ref = Z_REF_P(value);
  28655. if (GC_DELREF(ref) == 0) {
  28656. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  28657. efree_size(ref, sizeof(zend_reference));
  28658. value = &tmp;
  28659. } else {
  28660. value = Z_REFVAL_P(value);
  28661. Z_TRY_ADDREF_P(value);
  28662. }
  28663. } else {
  28664. value = Z_REFVAL_P(value);
  28665. Z_TRY_ADDREF_P(value);
  28666. }
  28667. } else if (IS_CONST == IS_CV) {
  28668. Z_TRY_ADDREF_P(value);
  28669. }
  28670. }
  28671. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  28672. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28673. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28674. }
  28675. goto exit_assign_obj;
  28676. }
  28677. }
  28678. }
  28679. if (!Z_OBJ_HT_P(object)->write_property) {
  28680. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  28681. goto exit_assign_obj;
  28682. }
  28683. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  28684. ZVAL_DEREF(value);
  28685. }
  28686. Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  28687. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28688. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28689. }
  28690. exit_assign_obj:
  28691. zval_ptr_dtor_nogc(free_op2);
  28692. /* assign_obj has two opcodes! */
  28693. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  28694. }
  28695. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28696. {
  28697. USE_OPLINE
  28698. zend_free_op free_op2, free_op_data;
  28699. zval *object, *property, *value, tmp;
  28700. SAVE_OPLINE();
  28701. object = &EX(This);
  28702. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  28703. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28704. }
  28705. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  28706. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  28707. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28708. if (Z_ISREF_P(object)) {
  28709. object = Z_REFVAL_P(object);
  28710. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  28711. goto assign_object;
  28712. }
  28713. }
  28714. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  28715. zval_ptr_dtor_nogc(free_op_data);
  28716. goto exit_assign_obj;
  28717. }
  28718. }
  28719. assign_object:
  28720. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  28721. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  28722. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  28723. zend_object *zobj = Z_OBJ_P(object);
  28724. zval *property_val;
  28725. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  28726. property_val = OBJ_PROP(zobj, prop_offset);
  28727. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  28728. fast_assign_obj:
  28729. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
  28730. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28731. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28732. }
  28733. goto exit_assign_obj;
  28734. }
  28735. } else {
  28736. if (EXPECTED(zobj->properties != NULL)) {
  28737. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  28738. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  28739. GC_DELREF(zobj->properties);
  28740. }
  28741. zobj->properties = zend_array_dup(zobj->properties);
  28742. }
  28743. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  28744. if (property_val) {
  28745. goto fast_assign_obj;
  28746. }
  28747. }
  28748. if (!zobj->ce->__set) {
  28749. if (EXPECTED(zobj->properties == NULL)) {
  28750. rebuild_object_properties(zobj);
  28751. }
  28752. if (IS_TMP_VAR == IS_CONST) {
  28753. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  28754. Z_ADDREF_P(value);
  28755. }
  28756. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  28757. if (Z_ISREF_P(value)) {
  28758. if (IS_TMP_VAR == IS_VAR) {
  28759. zend_reference *ref = Z_REF_P(value);
  28760. if (GC_DELREF(ref) == 0) {
  28761. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  28762. efree_size(ref, sizeof(zend_reference));
  28763. value = &tmp;
  28764. } else {
  28765. value = Z_REFVAL_P(value);
  28766. Z_TRY_ADDREF_P(value);
  28767. }
  28768. } else {
  28769. value = Z_REFVAL_P(value);
  28770. Z_TRY_ADDREF_P(value);
  28771. }
  28772. } else if (IS_TMP_VAR == IS_CV) {
  28773. Z_TRY_ADDREF_P(value);
  28774. }
  28775. }
  28776. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  28777. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28778. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28779. }
  28780. goto exit_assign_obj;
  28781. }
  28782. }
  28783. }
  28784. if (!Z_OBJ_HT_P(object)->write_property) {
  28785. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  28786. zval_ptr_dtor_nogc(free_op_data);
  28787. goto exit_assign_obj;
  28788. }
  28789. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  28790. ZVAL_DEREF(value);
  28791. }
  28792. Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  28793. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28794. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28795. }
  28796. zval_ptr_dtor_nogc(free_op_data);
  28797. exit_assign_obj:
  28798. zval_ptr_dtor_nogc(free_op2);
  28799. /* assign_obj has two opcodes! */
  28800. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  28801. }
  28802. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28803. {
  28804. USE_OPLINE
  28805. zend_free_op free_op2, free_op_data;
  28806. zval *object, *property, *value, tmp;
  28807. SAVE_OPLINE();
  28808. object = &EX(This);
  28809. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  28810. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28811. }
  28812. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  28813. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  28814. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28815. if (Z_ISREF_P(object)) {
  28816. object = Z_REFVAL_P(object);
  28817. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  28818. goto assign_object;
  28819. }
  28820. }
  28821. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  28822. zval_ptr_dtor_nogc(free_op_data);
  28823. goto exit_assign_obj;
  28824. }
  28825. }
  28826. assign_object:
  28827. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  28828. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  28829. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  28830. zend_object *zobj = Z_OBJ_P(object);
  28831. zval *property_val;
  28832. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  28833. property_val = OBJ_PROP(zobj, prop_offset);
  28834. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  28835. fast_assign_obj:
  28836. value = zend_assign_to_variable(property_val, value, IS_VAR);
  28837. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28838. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28839. }
  28840. goto exit_assign_obj;
  28841. }
  28842. } else {
  28843. if (EXPECTED(zobj->properties != NULL)) {
  28844. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  28845. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  28846. GC_DELREF(zobj->properties);
  28847. }
  28848. zobj->properties = zend_array_dup(zobj->properties);
  28849. }
  28850. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  28851. if (property_val) {
  28852. goto fast_assign_obj;
  28853. }
  28854. }
  28855. if (!zobj->ce->__set) {
  28856. if (EXPECTED(zobj->properties == NULL)) {
  28857. rebuild_object_properties(zobj);
  28858. }
  28859. if (IS_VAR == IS_CONST) {
  28860. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  28861. Z_ADDREF_P(value);
  28862. }
  28863. } else if (IS_VAR != IS_TMP_VAR) {
  28864. if (Z_ISREF_P(value)) {
  28865. if (IS_VAR == IS_VAR) {
  28866. zend_reference *ref = Z_REF_P(value);
  28867. if (GC_DELREF(ref) == 0) {
  28868. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  28869. efree_size(ref, sizeof(zend_reference));
  28870. value = &tmp;
  28871. } else {
  28872. value = Z_REFVAL_P(value);
  28873. Z_TRY_ADDREF_P(value);
  28874. }
  28875. } else {
  28876. value = Z_REFVAL_P(value);
  28877. Z_TRY_ADDREF_P(value);
  28878. }
  28879. } else if (IS_VAR == IS_CV) {
  28880. Z_TRY_ADDREF_P(value);
  28881. }
  28882. }
  28883. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  28884. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28885. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28886. }
  28887. goto exit_assign_obj;
  28888. }
  28889. }
  28890. }
  28891. if (!Z_OBJ_HT_P(object)->write_property) {
  28892. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  28893. zval_ptr_dtor_nogc(free_op_data);
  28894. goto exit_assign_obj;
  28895. }
  28896. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  28897. ZVAL_DEREF(value);
  28898. }
  28899. Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  28900. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28901. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28902. }
  28903. zval_ptr_dtor_nogc(free_op_data);
  28904. exit_assign_obj:
  28905. zval_ptr_dtor_nogc(free_op2);
  28906. /* assign_obj has two opcodes! */
  28907. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  28908. }
  28909. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  28910. {
  28911. USE_OPLINE
  28912. zend_free_op free_op2;
  28913. zval *object, *property, *value, tmp;
  28914. SAVE_OPLINE();
  28915. object = &EX(This);
  28916. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  28917. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  28918. }
  28919. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  28920. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  28921. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  28922. if (Z_ISREF_P(object)) {
  28923. object = Z_REFVAL_P(object);
  28924. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  28925. goto assign_object;
  28926. }
  28927. }
  28928. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  28929. goto exit_assign_obj;
  28930. }
  28931. }
  28932. assign_object:
  28933. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  28934. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  28935. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  28936. zend_object *zobj = Z_OBJ_P(object);
  28937. zval *property_val;
  28938. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  28939. property_val = OBJ_PROP(zobj, prop_offset);
  28940. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  28941. fast_assign_obj:
  28942. value = zend_assign_to_variable(property_val, value, IS_CV);
  28943. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28944. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28945. }
  28946. goto exit_assign_obj;
  28947. }
  28948. } else {
  28949. if (EXPECTED(zobj->properties != NULL)) {
  28950. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  28951. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  28952. GC_DELREF(zobj->properties);
  28953. }
  28954. zobj->properties = zend_array_dup(zobj->properties);
  28955. }
  28956. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  28957. if (property_val) {
  28958. goto fast_assign_obj;
  28959. }
  28960. }
  28961. if (!zobj->ce->__set) {
  28962. if (EXPECTED(zobj->properties == NULL)) {
  28963. rebuild_object_properties(zobj);
  28964. }
  28965. if (IS_CV == IS_CONST) {
  28966. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  28967. Z_ADDREF_P(value);
  28968. }
  28969. } else if (IS_CV != IS_TMP_VAR) {
  28970. if (Z_ISREF_P(value)) {
  28971. if (IS_CV == IS_VAR) {
  28972. zend_reference *ref = Z_REF_P(value);
  28973. if (GC_DELREF(ref) == 0) {
  28974. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  28975. efree_size(ref, sizeof(zend_reference));
  28976. value = &tmp;
  28977. } else {
  28978. value = Z_REFVAL_P(value);
  28979. Z_TRY_ADDREF_P(value);
  28980. }
  28981. } else {
  28982. value = Z_REFVAL_P(value);
  28983. Z_TRY_ADDREF_P(value);
  28984. }
  28985. } else if (IS_CV == IS_CV) {
  28986. Z_TRY_ADDREF_P(value);
  28987. }
  28988. }
  28989. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  28990. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  28991. ZVAL_COPY(EX_VAR(opline->result.var), value);
  28992. }
  28993. goto exit_assign_obj;
  28994. }
  28995. }
  28996. }
  28997. if (!Z_OBJ_HT_P(object)->write_property) {
  28998. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  28999. goto exit_assign_obj;
  29000. }
  29001. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  29002. ZVAL_DEREF(value);
  29003. }
  29004. Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  29005. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  29006. ZVAL_COPY(EX_VAR(opline->result.var), value);
  29007. }
  29008. exit_assign_obj:
  29009. zval_ptr_dtor_nogc(free_op2);
  29010. /* assign_obj has two opcodes! */
  29011. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  29012. }
  29013. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29014. {
  29015. USE_OPLINE
  29016. zend_free_op free_op2;
  29017. zend_string **rope;
  29018. zval *var;
  29019. /* Compiler allocates the necessary number of zval slots to keep the rope */
  29020. rope = (zend_string**)EX_VAR(opline->result.var);
  29021. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  29022. var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  29023. rope[0] = Z_STR_P(var);
  29024. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  29025. Z_ADDREF_P(var);
  29026. }
  29027. } else {
  29028. var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  29029. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  29030. if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
  29031. rope[0] = zend_string_copy(Z_STR_P(var));
  29032. } else {
  29033. rope[0] = Z_STR_P(var);
  29034. }
  29035. } else {
  29036. SAVE_OPLINE();
  29037. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  29038. GET_OP2_UNDEF_CV(var, BP_VAR_R);
  29039. }
  29040. rope[0] = zval_get_string_func(var);
  29041. zval_ptr_dtor_nogc(free_op2);
  29042. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29043. }
  29044. }
  29045. ZEND_VM_NEXT_OPCODE();
  29046. }
  29047. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29048. {
  29049. zend_free_op free_op2;
  29050. zval *class_name;
  29051. USE_OPLINE
  29052. SAVE_OPLINE();
  29053. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  29054. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
  29055. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29056. } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  29057. zend_class_entry *ce = CACHED_PTR(opline->extended_value);
  29058. if (UNEXPECTED(ce == NULL)) {
  29059. class_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  29060. ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, opline->op1.num);
  29061. CACHE_PTR(opline->extended_value, ce);
  29062. }
  29063. Z_CE_P(EX_VAR(opline->result.var)) = ce;
  29064. } else {
  29065. class_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  29066. try_class_name:
  29067. if (Z_TYPE_P(class_name) == IS_OBJECT) {
  29068. Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
  29069. } else if (Z_TYPE_P(class_name) == IS_STRING) {
  29070. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
  29071. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
  29072. class_name = Z_REFVAL_P(class_name);
  29073. goto try_class_name;
  29074. } else {
  29075. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
  29076. GET_OP2_UNDEF_CV(class_name, BP_VAR_R);
  29077. if (UNEXPECTED(EG(exception) != NULL)) {
  29078. HANDLE_EXCEPTION();
  29079. }
  29080. }
  29081. zend_throw_error(NULL, "Class name must be a valid object or a string");
  29082. }
  29083. }
  29084. zval_ptr_dtor_nogc(free_op2);
  29085. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29086. }
  29087. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29088. {
  29089. USE_OPLINE
  29090. zval *function_name;
  29091. zend_free_op free_op1, free_op2;
  29092. zval *object;
  29093. zend_function *fbc;
  29094. zend_class_entry *called_scope;
  29095. zend_object *obj;
  29096. zend_execute_data *call;
  29097. uint32_t call_info;
  29098. SAVE_OPLINE();
  29099. object = &EX(This);
  29100. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  29101. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  29102. }
  29103. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  29104. function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  29105. }
  29106. if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
  29107. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  29108. do {
  29109. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  29110. function_name = Z_REFVAL_P(function_name);
  29111. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  29112. break;
  29113. }
  29114. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  29115. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  29116. if (UNEXPECTED(EG(exception) != NULL)) {
  29117. HANDLE_EXCEPTION();
  29118. }
  29119. }
  29120. zend_throw_error(NULL, "Method name must be a string");
  29121. zval_ptr_dtor_nogc(free_op2);
  29122. HANDLE_EXCEPTION();
  29123. } while (0);
  29124. }
  29125. if (IS_UNUSED != IS_UNUSED) {
  29126. do {
  29127. if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  29128. if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  29129. object = Z_REFVAL_P(object);
  29130. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  29131. break;
  29132. }
  29133. }
  29134. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  29135. object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
  29136. if (UNEXPECTED(EG(exception) != NULL)) {
  29137. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  29138. zval_ptr_dtor_nogc(free_op2);
  29139. }
  29140. HANDLE_EXCEPTION();
  29141. }
  29142. }
  29143. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  29144. function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  29145. }
  29146. zend_invalid_method_call(object, function_name);
  29147. zval_ptr_dtor_nogc(free_op2);
  29148. HANDLE_EXCEPTION();
  29149. }
  29150. } while (0);
  29151. }
  29152. obj = Z_OBJ_P(object);
  29153. called_scope = obj->ce;
  29154. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  29155. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  29156. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  29157. } else {
  29158. zend_object *orig_obj = obj;
  29159. if (UNEXPECTED(obj->handlers->get_method == NULL)) {
  29160. zend_throw_error(NULL, "Object does not support method calls");
  29161. zval_ptr_dtor_nogc(free_op2);
  29162. HANDLE_EXCEPTION();
  29163. }
  29164. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  29165. function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  29166. }
  29167. /* First, locate the function. */
  29168. 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));
  29169. if (UNEXPECTED(fbc == NULL)) {
  29170. if (EXPECTED(!EG(exception))) {
  29171. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  29172. }
  29173. zval_ptr_dtor_nogc(free_op2);
  29174. HANDLE_EXCEPTION();
  29175. }
  29176. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  29177. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  29178. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  29179. EXPECTED(obj == orig_obj)) {
  29180. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  29181. }
  29182. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  29183. /* Reset "object" to trigger reference counting */
  29184. object = NULL;
  29185. }
  29186. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  29187. init_func_run_time_cache(&fbc->op_array);
  29188. }
  29189. }
  29190. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  29191. zval_ptr_dtor_nogc(free_op2);
  29192. }
  29193. call_info = ZEND_CALL_NESTED_FUNCTION;
  29194. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  29195. obj = NULL;
  29196. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
  29197. HANDLE_EXCEPTION();
  29198. }
  29199. } else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  29200. /* CV may be changed indirectly (e.g. when it's a reference) */
  29201. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
  29202. if (IS_UNUSED == IS_CV) {
  29203. GC_ADDREF(obj); /* For $this pointer */
  29204. } else if (free_op1 != object) {
  29205. GC_ADDREF(obj); /* For $this pointer */
  29206. }
  29207. }
  29208. call = zend_vm_stack_push_call_frame(call_info,
  29209. fbc, opline->extended_value, called_scope, obj);
  29210. call->prev_execute_data = EX(call);
  29211. EX(call) = call;
  29212. ZEND_VM_NEXT_OPCODE();
  29213. }
  29214. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29215. {
  29216. USE_OPLINE
  29217. zval *function_name;
  29218. zend_class_entry *ce;
  29219. zend_object *object;
  29220. zend_function *fbc;
  29221. zend_execute_data *call;
  29222. SAVE_OPLINE();
  29223. if (IS_UNUSED == IS_CONST) {
  29224. /* no function found. try a static method in class */
  29225. ce = CACHED_PTR(opline->result.num);
  29226. if (UNEXPECTED(ce == NULL)) {
  29227. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  29228. if (UNEXPECTED(ce == NULL)) {
  29229. ZEND_ASSERT(EG(exception));
  29230. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  29231. HANDLE_EXCEPTION();
  29232. }
  29233. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  29234. CACHE_PTR(opline->result.num, ce);
  29235. }
  29236. }
  29237. } else if (IS_UNUSED == IS_UNUSED) {
  29238. ce = zend_fetch_class(NULL, opline->op1.num);
  29239. if (UNEXPECTED(ce == NULL)) {
  29240. ZEND_ASSERT(EG(exception));
  29241. zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
  29242. HANDLE_EXCEPTION();
  29243. }
  29244. } else {
  29245. ce = Z_CE_P(EX_VAR(opline->op1.var));
  29246. }
  29247. if (IS_UNUSED == IS_CONST &&
  29248. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  29249. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  29250. /* nothing to do */
  29251. } else if (IS_UNUSED != IS_CONST &&
  29252. (IS_TMP_VAR|IS_VAR) == IS_CONST &&
  29253. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  29254. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  29255. } else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  29256. zend_free_op free_op2;
  29257. function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  29258. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  29259. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  29260. do {
  29261. if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  29262. function_name = Z_REFVAL_P(function_name);
  29263. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  29264. break;
  29265. }
  29266. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  29267. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  29268. if (UNEXPECTED(EG(exception) != NULL)) {
  29269. HANDLE_EXCEPTION();
  29270. }
  29271. }
  29272. zend_throw_error(NULL, "Function name must be a string");
  29273. zval_ptr_dtor_nogc(free_op2);
  29274. HANDLE_EXCEPTION();
  29275. } while (0);
  29276. }
  29277. }
  29278. if (ce->get_static_method) {
  29279. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  29280. } else {
  29281. 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));
  29282. }
  29283. if (UNEXPECTED(fbc == NULL)) {
  29284. if (EXPECTED(!EG(exception))) {
  29285. zend_undefined_method(ce, Z_STR_P(function_name));
  29286. }
  29287. zval_ptr_dtor_nogc(free_op2);
  29288. HANDLE_EXCEPTION();
  29289. }
  29290. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  29291. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  29292. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
  29293. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  29294. }
  29295. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  29296. init_func_run_time_cache(&fbc->op_array);
  29297. }
  29298. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  29299. zval_ptr_dtor_nogc(free_op2);
  29300. }
  29301. } else {
  29302. if (UNEXPECTED(ce->constructor == NULL)) {
  29303. zend_throw_error(NULL, "Cannot call constructor");
  29304. HANDLE_EXCEPTION();
  29305. }
  29306. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  29307. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  29308. HANDLE_EXCEPTION();
  29309. }
  29310. fbc = ce->constructor;
  29311. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  29312. init_func_run_time_cache(&fbc->op_array);
  29313. }
  29314. }
  29315. object = NULL;
  29316. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  29317. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  29318. object = Z_OBJ(EX(This));
  29319. ce = object->ce;
  29320. } else {
  29321. zend_non_static_method_call(fbc);
  29322. if (UNEXPECTED(EG(exception) != NULL)) {
  29323. HANDLE_EXCEPTION();
  29324. }
  29325. }
  29326. }
  29327. if (IS_UNUSED == IS_UNUSED) {
  29328. /* previous opcode is ZEND_FETCH_CLASS */
  29329. if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  29330. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
  29331. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  29332. ce = Z_OBJCE(EX(This));
  29333. } else {
  29334. ce = Z_CE(EX(This));
  29335. }
  29336. }
  29337. }
  29338. call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  29339. fbc, opline->extended_value, ce, object);
  29340. call->prev_execute_data = EX(call);
  29341. EX(call) = call;
  29342. ZEND_VM_NEXT_OPCODE();
  29343. }
  29344. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29345. {
  29346. USE_OPLINE
  29347. zend_free_op free_op2;
  29348. zval *container;
  29349. zval *offset;
  29350. SAVE_OPLINE();
  29351. container = &EX(This);
  29352. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  29353. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  29354. }
  29355. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  29356. do {
  29357. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  29358. if (Z_ISREF_P(container)) {
  29359. container = Z_REFVAL_P(container);
  29360. if (Z_TYPE_P(container) != IS_OBJECT) {
  29361. break;
  29362. }
  29363. } else {
  29364. break;
  29365. }
  29366. }
  29367. if (Z_OBJ_HT_P(container)->unset_property) {
  29368. Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  29369. } else {
  29370. zend_wrong_property_unset(offset);
  29371. }
  29372. } while (0);
  29373. zval_ptr_dtor_nogc(free_op2);
  29374. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29375. }
  29376. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29377. {
  29378. USE_OPLINE
  29379. zend_free_op free_op2;
  29380. zval *container;
  29381. int result;
  29382. zval *offset;
  29383. SAVE_OPLINE();
  29384. container = &EX(This);
  29385. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  29386. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  29387. }
  29388. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  29389. if (IS_UNUSED == IS_CONST ||
  29390. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  29391. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  29392. container = Z_REFVAL_P(container);
  29393. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  29394. goto isset_no_object;
  29395. }
  29396. } else {
  29397. goto isset_no_object;
  29398. }
  29399. }
  29400. if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
  29401. zend_wrong_property_check(offset);
  29402. isset_no_object:
  29403. result = (opline->extended_value & ZEND_ISEMPTY);
  29404. } else {
  29405. result =
  29406. (opline->extended_value & ZEND_ISEMPTY) ^
  29407. Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  29408. }
  29409. zval_ptr_dtor_nogc(free_op2);
  29410. ZEND_VM_SMART_BRANCH(result, 1);
  29411. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  29412. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29413. }
  29414. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29415. {
  29416. USE_OPLINE
  29417. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  29418. SAVE_OPLINE();
  29419. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  29420. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  29421. }
  29422. /* Destroy the previously yielded value */
  29423. zval_ptr_dtor(&generator->value);
  29424. /* Destroy the previously yielded key */
  29425. zval_ptr_dtor(&generator->key);
  29426. /* Set the new yielded value */
  29427. if (IS_UNUSED != IS_UNUSED) {
  29428. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  29429. /* Constants and temporary variables aren't yieldable by reference,
  29430. * but we still allow them with a notice. */
  29431. if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
  29432. zval *value;
  29433. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  29434. value = NULL;
  29435. ZVAL_COPY_VALUE(&generator->value, value);
  29436. if (IS_UNUSED == IS_CONST) {
  29437. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  29438. Z_ADDREF(generator->value);
  29439. }
  29440. }
  29441. } else {
  29442. zval *value_ptr = NULL;
  29443. /* If a function call result is yielded and the function did
  29444. * not return by reference we throw a notice. */
  29445. if (IS_UNUSED == IS_VAR &&
  29446. (value_ptr == &EG(uninitialized_zval) ||
  29447. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  29448. !Z_ISREF_P(value_ptr)))) {
  29449. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  29450. ZVAL_COPY(&generator->value, value_ptr);
  29451. } else {
  29452. if (Z_ISREF_P(value_ptr)) {
  29453. Z_ADDREF_P(value_ptr);
  29454. } else {
  29455. ZVAL_MAKE_REF_EX(value_ptr, 2);
  29456. }
  29457. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  29458. }
  29459. }
  29460. } else {
  29461. zval *value = NULL;
  29462. /* Consts, temporary variables and references need copying */
  29463. if (IS_UNUSED == IS_CONST) {
  29464. ZVAL_COPY_VALUE(&generator->value, value);
  29465. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  29466. Z_ADDREF(generator->value);
  29467. }
  29468. } else if (IS_UNUSED == IS_TMP_VAR) {
  29469. ZVAL_COPY_VALUE(&generator->value, value);
  29470. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  29471. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  29472. } else {
  29473. ZVAL_COPY_VALUE(&generator->value, value);
  29474. if (IS_UNUSED == IS_CV) {
  29475. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  29476. }
  29477. }
  29478. }
  29479. } else {
  29480. /* If no value was specified yield null */
  29481. ZVAL_NULL(&generator->value);
  29482. }
  29483. /* Set the new yielded key */
  29484. if (IS_TMP_VAR != IS_UNUSED) {
  29485. zend_free_op free_op2;
  29486. zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  29487. /* Consts, temporary variables and references need copying */
  29488. if (IS_TMP_VAR == IS_CONST) {
  29489. ZVAL_COPY_VALUE(&generator->key, key);
  29490. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  29491. Z_ADDREF(generator->key);
  29492. }
  29493. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  29494. ZVAL_COPY_VALUE(&generator->key, key);
  29495. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  29496. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  29497. } else {
  29498. ZVAL_COPY_VALUE(&generator->key, key);
  29499. if (IS_TMP_VAR == IS_CV) {
  29500. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  29501. }
  29502. }
  29503. if (Z_TYPE(generator->key) == IS_LONG
  29504. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  29505. ) {
  29506. generator->largest_used_integer_key = Z_LVAL(generator->key);
  29507. }
  29508. } else {
  29509. /* If no key was specified we use auto-increment keys */
  29510. generator->largest_used_integer_key++;
  29511. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  29512. }
  29513. if (RETURN_VALUE_USED(opline)) {
  29514. /* If the return value of yield is used set the send
  29515. * target and initialize it to NULL */
  29516. generator->send_target = EX_VAR(opline->result.var);
  29517. ZVAL_NULL(generator->send_target);
  29518. } else {
  29519. generator->send_target = NULL;
  29520. }
  29521. /* We increment to the next op, so we are at the correct position when the
  29522. * generator is resumed. */
  29523. ZEND_VM_INC_OPCODE();
  29524. /* The GOTO VM uses a local opline variable. We need to set the opline
  29525. * variable in execute_data so we don't resume at an old position. */
  29526. SAVE_OPLINE();
  29527. ZEND_VM_RETURN();
  29528. }
  29529. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29530. {
  29531. USE_OPLINE
  29532. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  29533. SAVE_OPLINE();
  29534. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  29535. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  29536. }
  29537. /* Destroy the previously yielded value */
  29538. zval_ptr_dtor(&generator->value);
  29539. /* Destroy the previously yielded key */
  29540. zval_ptr_dtor(&generator->key);
  29541. /* Set the new yielded value */
  29542. if (IS_UNUSED != IS_UNUSED) {
  29543. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  29544. /* Constants and temporary variables aren't yieldable by reference,
  29545. * but we still allow them with a notice. */
  29546. if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
  29547. zval *value;
  29548. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  29549. value = NULL;
  29550. ZVAL_COPY_VALUE(&generator->value, value);
  29551. if (IS_UNUSED == IS_CONST) {
  29552. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  29553. Z_ADDREF(generator->value);
  29554. }
  29555. }
  29556. } else {
  29557. zval *value_ptr = NULL;
  29558. /* If a function call result is yielded and the function did
  29559. * not return by reference we throw a notice. */
  29560. if (IS_UNUSED == IS_VAR &&
  29561. (value_ptr == &EG(uninitialized_zval) ||
  29562. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  29563. !Z_ISREF_P(value_ptr)))) {
  29564. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  29565. ZVAL_COPY(&generator->value, value_ptr);
  29566. } else {
  29567. if (Z_ISREF_P(value_ptr)) {
  29568. Z_ADDREF_P(value_ptr);
  29569. } else {
  29570. ZVAL_MAKE_REF_EX(value_ptr, 2);
  29571. }
  29572. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  29573. }
  29574. }
  29575. } else {
  29576. zval *value = NULL;
  29577. /* Consts, temporary variables and references need copying */
  29578. if (IS_UNUSED == IS_CONST) {
  29579. ZVAL_COPY_VALUE(&generator->value, value);
  29580. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  29581. Z_ADDREF(generator->value);
  29582. }
  29583. } else if (IS_UNUSED == IS_TMP_VAR) {
  29584. ZVAL_COPY_VALUE(&generator->value, value);
  29585. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  29586. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  29587. } else {
  29588. ZVAL_COPY_VALUE(&generator->value, value);
  29589. if (IS_UNUSED == IS_CV) {
  29590. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  29591. }
  29592. }
  29593. }
  29594. } else {
  29595. /* If no value was specified yield null */
  29596. ZVAL_NULL(&generator->value);
  29597. }
  29598. /* Set the new yielded key */
  29599. if (IS_VAR != IS_UNUSED) {
  29600. zend_free_op free_op2;
  29601. zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  29602. /* Consts, temporary variables and references need copying */
  29603. if (IS_VAR == IS_CONST) {
  29604. ZVAL_COPY_VALUE(&generator->key, key);
  29605. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  29606. Z_ADDREF(generator->key);
  29607. }
  29608. } else if (IS_VAR == IS_TMP_VAR) {
  29609. ZVAL_COPY_VALUE(&generator->key, key);
  29610. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  29611. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  29612. zval_ptr_dtor_nogc(free_op2);
  29613. } else {
  29614. ZVAL_COPY_VALUE(&generator->key, key);
  29615. if (IS_VAR == IS_CV) {
  29616. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  29617. }
  29618. }
  29619. if (Z_TYPE(generator->key) == IS_LONG
  29620. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  29621. ) {
  29622. generator->largest_used_integer_key = Z_LVAL(generator->key);
  29623. }
  29624. } else {
  29625. /* If no key was specified we use auto-increment keys */
  29626. generator->largest_used_integer_key++;
  29627. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  29628. }
  29629. if (RETURN_VALUE_USED(opline)) {
  29630. /* If the return value of yield is used set the send
  29631. * target and initialize it to NULL */
  29632. generator->send_target = EX_VAR(opline->result.var);
  29633. ZVAL_NULL(generator->send_target);
  29634. } else {
  29635. generator->send_target = NULL;
  29636. }
  29637. /* We increment to the next op, so we are at the correct position when the
  29638. * generator is resumed. */
  29639. ZEND_VM_INC_OPCODE();
  29640. /* The GOTO VM uses a local opline variable. We need to set the opline
  29641. * variable in execute_data so we don't resume at an old position. */
  29642. SAVE_OPLINE();
  29643. ZEND_VM_RETURN();
  29644. }
  29645. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29646. {
  29647. zval *class_name;
  29648. USE_OPLINE
  29649. SAVE_OPLINE();
  29650. if (IS_UNUSED == IS_UNUSED) {
  29651. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
  29652. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29653. } else if (IS_UNUSED == IS_CONST) {
  29654. zend_class_entry *ce = CACHED_PTR(opline->extended_value);
  29655. if (UNEXPECTED(ce == NULL)) {
  29656. class_name = NULL;
  29657. ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, opline->op1.num);
  29658. CACHE_PTR(opline->extended_value, ce);
  29659. }
  29660. Z_CE_P(EX_VAR(opline->result.var)) = ce;
  29661. } else {
  29662. class_name = NULL;
  29663. try_class_name:
  29664. if (Z_TYPE_P(class_name) == IS_OBJECT) {
  29665. Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
  29666. } else if (Z_TYPE_P(class_name) == IS_STRING) {
  29667. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
  29668. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
  29669. class_name = Z_REFVAL_P(class_name);
  29670. goto try_class_name;
  29671. } else {
  29672. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
  29673. GET_OP2_UNDEF_CV(class_name, BP_VAR_R);
  29674. if (UNEXPECTED(EG(exception) != NULL)) {
  29675. HANDLE_EXCEPTION();
  29676. }
  29677. }
  29678. zend_throw_error(NULL, "Class name must be a valid object or a string");
  29679. }
  29680. }
  29681. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29682. }
  29683. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29684. {
  29685. USE_OPLINE
  29686. zval *function_name;
  29687. zend_class_entry *ce;
  29688. zend_object *object;
  29689. zend_function *fbc;
  29690. zend_execute_data *call;
  29691. SAVE_OPLINE();
  29692. if (IS_UNUSED == IS_CONST) {
  29693. /* no function found. try a static method in class */
  29694. ce = CACHED_PTR(opline->result.num);
  29695. if (UNEXPECTED(ce == NULL)) {
  29696. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  29697. if (UNEXPECTED(ce == NULL)) {
  29698. ZEND_ASSERT(EG(exception));
  29699. HANDLE_EXCEPTION();
  29700. }
  29701. if (IS_UNUSED != IS_CONST) {
  29702. CACHE_PTR(opline->result.num, ce);
  29703. }
  29704. }
  29705. } else if (IS_UNUSED == IS_UNUSED) {
  29706. ce = zend_fetch_class(NULL, opline->op1.num);
  29707. if (UNEXPECTED(ce == NULL)) {
  29708. ZEND_ASSERT(EG(exception));
  29709. HANDLE_EXCEPTION();
  29710. }
  29711. } else {
  29712. ce = Z_CE_P(EX_VAR(opline->op1.var));
  29713. }
  29714. if (IS_UNUSED == IS_CONST &&
  29715. IS_UNUSED == IS_CONST &&
  29716. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  29717. /* nothing to do */
  29718. } else if (IS_UNUSED != IS_CONST &&
  29719. IS_UNUSED == IS_CONST &&
  29720. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  29721. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  29722. } else if (IS_UNUSED != IS_UNUSED) {
  29723. function_name = NULL;
  29724. if (IS_UNUSED != IS_CONST) {
  29725. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  29726. do {
  29727. if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  29728. function_name = Z_REFVAL_P(function_name);
  29729. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  29730. break;
  29731. }
  29732. } else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  29733. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  29734. if (UNEXPECTED(EG(exception) != NULL)) {
  29735. HANDLE_EXCEPTION();
  29736. }
  29737. }
  29738. zend_throw_error(NULL, "Function name must be a string");
  29739. HANDLE_EXCEPTION();
  29740. } while (0);
  29741. }
  29742. }
  29743. if (ce->get_static_method) {
  29744. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  29745. } else {
  29746. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  29747. }
  29748. if (UNEXPECTED(fbc == NULL)) {
  29749. if (EXPECTED(!EG(exception))) {
  29750. zend_undefined_method(ce, Z_STR_P(function_name));
  29751. }
  29752. HANDLE_EXCEPTION();
  29753. }
  29754. if (IS_UNUSED == IS_CONST &&
  29755. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  29756. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
  29757. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  29758. }
  29759. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  29760. init_func_run_time_cache(&fbc->op_array);
  29761. }
  29762. if (IS_UNUSED != IS_CONST) {
  29763. }
  29764. } else {
  29765. if (UNEXPECTED(ce->constructor == NULL)) {
  29766. zend_throw_error(NULL, "Cannot call constructor");
  29767. HANDLE_EXCEPTION();
  29768. }
  29769. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  29770. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  29771. HANDLE_EXCEPTION();
  29772. }
  29773. fbc = ce->constructor;
  29774. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  29775. init_func_run_time_cache(&fbc->op_array);
  29776. }
  29777. }
  29778. object = NULL;
  29779. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  29780. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  29781. object = Z_OBJ(EX(This));
  29782. ce = object->ce;
  29783. } else {
  29784. zend_non_static_method_call(fbc);
  29785. if (UNEXPECTED(EG(exception) != NULL)) {
  29786. HANDLE_EXCEPTION();
  29787. }
  29788. }
  29789. }
  29790. if (IS_UNUSED == IS_UNUSED) {
  29791. /* previous opcode is ZEND_FETCH_CLASS */
  29792. if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  29793. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
  29794. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  29795. ce = Z_OBJCE(EX(This));
  29796. } else {
  29797. ce = Z_CE(EX(This));
  29798. }
  29799. }
  29800. }
  29801. call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  29802. fbc, opline->extended_value, ce, object);
  29803. call->prev_execute_data = EX(call);
  29804. EX(call) = call;
  29805. ZEND_VM_NEXT_OPCODE();
  29806. }
  29807. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29808. {
  29809. USE_OPLINE
  29810. SAVE_OPLINE();
  29811. if (IS_UNUSED == IS_UNUSED) {
  29812. zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
  29813. } else {
  29814. /* prevents "undefined variable opline" errors */
  29815. #if 0 || (IS_UNUSED != IS_UNUSED)
  29816. zval *retval_ref, *retval_ptr;
  29817. zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
  29818. retval_ref = retval_ptr = NULL;
  29819. if (IS_UNUSED == IS_CONST) {
  29820. ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
  29821. retval_ref = retval_ptr = EX_VAR(opline->result.var);
  29822. } else if (IS_UNUSED == IS_VAR) {
  29823. if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
  29824. retval_ptr = Z_INDIRECT_P(retval_ptr);
  29825. }
  29826. ZVAL_DEREF(retval_ptr);
  29827. } else if (IS_UNUSED == IS_CV) {
  29828. ZVAL_DEREF(retval_ptr);
  29829. }
  29830. if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type)
  29831. && ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE
  29832. && ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE
  29833. && !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr))
  29834. && !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  29835. && retval_ref != retval_ptr)
  29836. ) {
  29837. /* A cast might happen - unwrap the reference if this is a by-value return */
  29838. if (Z_REFCOUNT_P(retval_ref) == 1) {
  29839. ZVAL_UNREF(retval_ref);
  29840. } else {
  29841. Z_DELREF_P(retval_ref);
  29842. ZVAL_COPY(retval_ref, retval_ptr);
  29843. }
  29844. retval_ptr = retval_ref;
  29845. }
  29846. zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
  29847. #endif
  29848. }
  29849. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  29850. }
  29851. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29852. {
  29853. USE_OPLINE
  29854. zval *result;
  29855. zend_function *constructor;
  29856. zend_class_entry *ce;
  29857. zend_execute_data *call;
  29858. SAVE_OPLINE();
  29859. if (IS_UNUSED == IS_CONST) {
  29860. ce = CACHED_PTR(opline->op2.num);
  29861. if (UNEXPECTED(ce == NULL)) {
  29862. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  29863. if (UNEXPECTED(ce == NULL)) {
  29864. ZEND_ASSERT(EG(exception));
  29865. ZVAL_UNDEF(EX_VAR(opline->result.var));
  29866. HANDLE_EXCEPTION();
  29867. }
  29868. CACHE_PTR(opline->op2.num, ce);
  29869. }
  29870. } else if (IS_UNUSED == IS_UNUSED) {
  29871. ce = zend_fetch_class(NULL, opline->op1.num);
  29872. if (UNEXPECTED(ce == NULL)) {
  29873. ZEND_ASSERT(EG(exception));
  29874. ZVAL_UNDEF(EX_VAR(opline->result.var));
  29875. HANDLE_EXCEPTION();
  29876. }
  29877. } else {
  29878. ce = Z_CE_P(EX_VAR(opline->op1.var));
  29879. }
  29880. result = EX_VAR(opline->result.var);
  29881. if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
  29882. ZVAL_UNDEF(result);
  29883. HANDLE_EXCEPTION();
  29884. }
  29885. constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
  29886. if (constructor == NULL) {
  29887. if (UNEXPECTED(EG(exception))) {
  29888. HANDLE_EXCEPTION();
  29889. }
  29890. /* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
  29891. * opcode is DO_FCALL in case EXT instructions are used. */
  29892. if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
  29893. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  29894. }
  29895. /* Perform a dummy function call */
  29896. call = zend_vm_stack_push_call_frame(
  29897. ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
  29898. opline->extended_value, NULL, NULL);
  29899. } else {
  29900. if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!constructor->op_array.run_time_cache)) {
  29901. init_func_run_time_cache(&constructor->op_array);
  29902. }
  29903. /* We are not handling overloaded classes right now */
  29904. call = zend_vm_stack_push_call_frame(
  29905. ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_CTOR,
  29906. constructor,
  29907. opline->extended_value,
  29908. ce,
  29909. Z_OBJ_P(result));
  29910. Z_ADDREF_P(result);
  29911. }
  29912. call->prev_execute_data = EX(call);
  29913. EX(call) = call;
  29914. ZEND_VM_NEXT_OPCODE();
  29915. }
  29916. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  29917. {
  29918. USE_OPLINE
  29919. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  29920. SAVE_OPLINE();
  29921. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  29922. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  29923. }
  29924. /* Destroy the previously yielded value */
  29925. zval_ptr_dtor(&generator->value);
  29926. /* Destroy the previously yielded key */
  29927. zval_ptr_dtor(&generator->key);
  29928. /* Set the new yielded value */
  29929. if (IS_UNUSED != IS_UNUSED) {
  29930. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  29931. /* Constants and temporary variables aren't yieldable by reference,
  29932. * but we still allow them with a notice. */
  29933. if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
  29934. zval *value;
  29935. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  29936. value = NULL;
  29937. ZVAL_COPY_VALUE(&generator->value, value);
  29938. if (IS_UNUSED == IS_CONST) {
  29939. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  29940. Z_ADDREF(generator->value);
  29941. }
  29942. }
  29943. } else {
  29944. zval *value_ptr = NULL;
  29945. /* If a function call result is yielded and the function did
  29946. * not return by reference we throw a notice. */
  29947. if (IS_UNUSED == IS_VAR &&
  29948. (value_ptr == &EG(uninitialized_zval) ||
  29949. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  29950. !Z_ISREF_P(value_ptr)))) {
  29951. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  29952. ZVAL_COPY(&generator->value, value_ptr);
  29953. } else {
  29954. if (Z_ISREF_P(value_ptr)) {
  29955. Z_ADDREF_P(value_ptr);
  29956. } else {
  29957. ZVAL_MAKE_REF_EX(value_ptr, 2);
  29958. }
  29959. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  29960. }
  29961. }
  29962. } else {
  29963. zval *value = NULL;
  29964. /* Consts, temporary variables and references need copying */
  29965. if (IS_UNUSED == IS_CONST) {
  29966. ZVAL_COPY_VALUE(&generator->value, value);
  29967. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  29968. Z_ADDREF(generator->value);
  29969. }
  29970. } else if (IS_UNUSED == IS_TMP_VAR) {
  29971. ZVAL_COPY_VALUE(&generator->value, value);
  29972. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  29973. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  29974. } else {
  29975. ZVAL_COPY_VALUE(&generator->value, value);
  29976. if (IS_UNUSED == IS_CV) {
  29977. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  29978. }
  29979. }
  29980. }
  29981. } else {
  29982. /* If no value was specified yield null */
  29983. ZVAL_NULL(&generator->value);
  29984. }
  29985. /* Set the new yielded key */
  29986. if (IS_UNUSED != IS_UNUSED) {
  29987. zval *key = NULL;
  29988. /* Consts, temporary variables and references need copying */
  29989. if (IS_UNUSED == IS_CONST) {
  29990. ZVAL_COPY_VALUE(&generator->key, key);
  29991. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  29992. Z_ADDREF(generator->key);
  29993. }
  29994. } else if (IS_UNUSED == IS_TMP_VAR) {
  29995. ZVAL_COPY_VALUE(&generator->key, key);
  29996. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  29997. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  29998. } else {
  29999. ZVAL_COPY_VALUE(&generator->key, key);
  30000. if (IS_UNUSED == IS_CV) {
  30001. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  30002. }
  30003. }
  30004. if (Z_TYPE(generator->key) == IS_LONG
  30005. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  30006. ) {
  30007. generator->largest_used_integer_key = Z_LVAL(generator->key);
  30008. }
  30009. } else {
  30010. /* If no key was specified we use auto-increment keys */
  30011. generator->largest_used_integer_key++;
  30012. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  30013. }
  30014. if (RETURN_VALUE_USED(opline)) {
  30015. /* If the return value of yield is used set the send
  30016. * target and initialize it to NULL */
  30017. generator->send_target = EX_VAR(opline->result.var);
  30018. ZVAL_NULL(generator->send_target);
  30019. } else {
  30020. generator->send_target = NULL;
  30021. }
  30022. /* We increment to the next op, so we are at the correct position when the
  30023. * generator is resumed. */
  30024. ZEND_VM_INC_OPCODE();
  30025. /* The GOTO VM uses a local opline variable. We need to set the opline
  30026. * variable in execute_data so we don't resume at an old position. */
  30027. SAVE_OPLINE();
  30028. ZEND_VM_RETURN();
  30029. }
  30030. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30031. {
  30032. USE_OPLINE
  30033. if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
  30034. zval *result = EX_VAR(opline->result.var);
  30035. ZVAL_OBJ(result, Z_OBJ(EX(This)));
  30036. Z_ADDREF_P(result);
  30037. ZEND_VM_NEXT_OPCODE();
  30038. } else {
  30039. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30040. }
  30041. }
  30042. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30043. {
  30044. USE_OPLINE
  30045. ZVAL_BOOL(EX_VAR(opline->result.var),
  30046. (opline->extended_value & ZEND_ISEMPTY) ^
  30047. (Z_TYPE(EX(This)) == IS_OBJECT));
  30048. ZEND_VM_NEXT_OPCODE();
  30049. }
  30050. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30051. {
  30052. USE_OPLINE
  30053. if (IS_UNUSED == IS_UNUSED) {
  30054. if (UNEXPECTED(!EX(func)->common.scope)) {
  30055. SAVE_OPLINE();
  30056. zend_error(E_WARNING, "get_class() called without object from outside a class");
  30057. ZVAL_FALSE(EX_VAR(opline->result.var));
  30058. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30059. } else {
  30060. ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
  30061. ZEND_VM_NEXT_OPCODE();
  30062. }
  30063. } else {
  30064. zval *op1;
  30065. SAVE_OPLINE();
  30066. op1 = NULL;
  30067. if (Z_TYPE_P(op1) == IS_OBJECT) {
  30068. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
  30069. } else {
  30070. zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1)));
  30071. ZVAL_FALSE(EX_VAR(opline->result.var));
  30072. }
  30073. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30074. }
  30075. }
  30076. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30077. {
  30078. USE_OPLINE
  30079. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  30080. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE(EX(This))->name);
  30081. } else if (Z_CE(EX(This))) {
  30082. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_CE(EX(This))->name);
  30083. } else {
  30084. ZVAL_FALSE(EX_VAR(opline->result.var));
  30085. if (UNEXPECTED(!EX(func)->common.scope)) {
  30086. SAVE_OPLINE();
  30087. zend_error(E_WARNING, "get_called_class() called from outside a class");
  30088. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30089. }
  30090. }
  30091. ZEND_VM_NEXT_OPCODE();
  30092. }
  30093. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30094. {
  30095. USE_OPLINE
  30096. ZVAL_LONG(EX_VAR(opline->result.var), EX_NUM_ARGS());
  30097. ZEND_VM_NEXT_OPCODE();
  30098. }
  30099. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30100. {
  30101. USE_OPLINE
  30102. zend_array *ht;
  30103. uint32_t arg_count, result_size, skip;
  30104. arg_count = EX_NUM_ARGS();
  30105. if (IS_UNUSED == IS_CONST) {
  30106. skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
  30107. if (arg_count < skip) {
  30108. result_size = 0;
  30109. } else {
  30110. result_size = arg_count - skip;
  30111. }
  30112. } else {
  30113. skip = 0;
  30114. result_size = arg_count;
  30115. }
  30116. if (result_size) {
  30117. uint32_t first_extra_arg = EX(func)->op_array.num_args;
  30118. ht = zend_new_array(result_size);
  30119. ZVAL_ARR(EX_VAR(opline->result.var), ht);
  30120. zend_hash_real_init_packed(ht);
  30121. ZEND_HASH_FILL_PACKED(ht) {
  30122. zval *p, *q;
  30123. uint32_t i = skip;
  30124. p = EX_VAR_NUM(i);
  30125. if (arg_count > first_extra_arg) {
  30126. while (i < first_extra_arg) {
  30127. q = p;
  30128. if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
  30129. ZVAL_DEREF(q);
  30130. if (Z_OPT_REFCOUNTED_P(q)) {
  30131. Z_ADDREF_P(q);
  30132. }
  30133. } else {
  30134. q = &EG(uninitialized_zval);
  30135. }
  30136. ZEND_HASH_FILL_ADD(q);
  30137. p++;
  30138. i++;
  30139. }
  30140. if (skip < first_extra_arg) {
  30141. skip = 0;
  30142. } else {
  30143. skip -= first_extra_arg;
  30144. }
  30145. p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
  30146. }
  30147. while (i < arg_count) {
  30148. q = p;
  30149. if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
  30150. ZVAL_DEREF(q);
  30151. if (Z_OPT_REFCOUNTED_P(q)) {
  30152. Z_ADDREF_P(q);
  30153. }
  30154. } else {
  30155. q = &EG(uninitialized_zval);
  30156. }
  30157. ZEND_HASH_FILL_ADD(q);
  30158. p++;
  30159. i++;
  30160. }
  30161. } ZEND_HASH_FILL_END();
  30162. ht->nNumOfElements = result_size;
  30163. } else {
  30164. ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
  30165. }
  30166. ZEND_VM_NEXT_OPCODE();
  30167. }
  30168. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  30169. {
  30170. USE_OPLINE
  30171. zend_free_op free_op_data1;
  30172. zval *object;
  30173. zval *property;
  30174. zval *value;
  30175. zval *zptr;
  30176. SAVE_OPLINE();
  30177. object = &EX(This);
  30178. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  30179. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30180. }
  30181. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  30182. do {
  30183. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  30184. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  30185. if (Z_ISREF_P(object)) {
  30186. object = Z_REFVAL_P(object);
  30187. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  30188. goto assign_op_object;
  30189. }
  30190. }
  30191. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  30192. break;
  30193. }
  30194. }
  30195. /* here we are sure we are dealing with an object */
  30196. assign_op_object:
  30197. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  30198. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
  30199. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  30200. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30201. ZVAL_NULL(EX_VAR(opline->result.var));
  30202. }
  30203. } else {
  30204. ZVAL_DEREF(zptr);
  30205. binary_op(zptr, zptr, value);
  30206. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30207. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  30208. }
  30209. }
  30210. } else {
  30211. zend_assign_op_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC);
  30212. }
  30213. } while (0);
  30214. FREE_OP(free_op_data1);
  30215. /* assign_obj has two opcodes! */
  30216. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  30217. }
  30218. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  30219. {
  30220. #if 1 && IS_CV == IS_UNUSED
  30221. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30222. #else
  30223. # if 0 || IS_UNUSED != IS_UNUSED
  30224. # if 0
  30225. /* opline->extended_value checks are specialized, don't need opline */
  30226. USE_OPLINE
  30227. # endif
  30228. if (EXPECTED(0)) {
  30229. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_UNUSED_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30230. }
  30231. if (EXPECTED(0)) {
  30232. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30233. }
  30234. # endif
  30235. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30236. #endif
  30237. }
  30238. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30239. {
  30240. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30241. }
  30242. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30243. {
  30244. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30245. }
  30246. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30247. {
  30248. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30249. }
  30250. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30251. {
  30252. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30253. }
  30254. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30255. {
  30256. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30257. }
  30258. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30259. {
  30260. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30261. }
  30262. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30263. {
  30264. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30265. }
  30266. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30267. {
  30268. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30269. }
  30270. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30271. {
  30272. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30273. }
  30274. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30275. {
  30276. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30277. }
  30278. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30279. {
  30280. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30281. }
  30282. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30283. {
  30284. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30285. }
  30286. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  30287. {
  30288. USE_OPLINE
  30289. zval *object;
  30290. zval *property;
  30291. zval *zptr;
  30292. SAVE_OPLINE();
  30293. object = &EX(This);
  30294. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  30295. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30296. }
  30297. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  30298. do {
  30299. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  30300. if (Z_ISREF_P(object)) {
  30301. object = Z_REFVAL_P(object);
  30302. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  30303. goto pre_incdec_object;
  30304. }
  30305. }
  30306. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  30307. break;
  30308. }
  30309. }
  30310. /* here we are sure we are dealing with an object */
  30311. pre_incdec_object:
  30312. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  30313. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  30314. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  30315. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30316. ZVAL_NULL(EX_VAR(opline->result.var));
  30317. }
  30318. } else {
  30319. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  30320. if (inc) {
  30321. fast_long_increment_function(zptr);
  30322. } else {
  30323. fast_long_decrement_function(zptr);
  30324. }
  30325. } else {
  30326. ZVAL_DEREF(zptr);
  30327. if (inc) {
  30328. increment_function(zptr);
  30329. } else {
  30330. decrement_function(zptr);
  30331. }
  30332. }
  30333. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30334. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  30335. }
  30336. }
  30337. } else {
  30338. zend_pre_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  30339. }
  30340. } while (0);
  30341. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30342. }
  30343. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30344. {
  30345. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30346. }
  30347. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30348. {
  30349. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30350. }
  30351. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  30352. {
  30353. USE_OPLINE
  30354. zval *object;
  30355. zval *property;
  30356. zval *zptr;
  30357. SAVE_OPLINE();
  30358. object = &EX(This);
  30359. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  30360. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30361. }
  30362. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  30363. do {
  30364. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  30365. if (Z_ISREF_P(object)) {
  30366. object = Z_REFVAL_P(object);
  30367. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  30368. goto post_incdec_object;
  30369. }
  30370. }
  30371. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  30372. break;
  30373. }
  30374. }
  30375. /* here we are sure we are dealing with an object */
  30376. post_incdec_object:
  30377. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  30378. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  30379. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  30380. ZVAL_NULL(EX_VAR(opline->result.var));
  30381. } else {
  30382. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  30383. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr));
  30384. if (inc) {
  30385. fast_long_increment_function(zptr);
  30386. } else {
  30387. fast_long_decrement_function(zptr);
  30388. }
  30389. } else {
  30390. ZVAL_DEREF(zptr);
  30391. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  30392. if (inc) {
  30393. increment_function(zptr);
  30394. } else {
  30395. decrement_function(zptr);
  30396. }
  30397. }
  30398. }
  30399. } else {
  30400. zend_post_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  30401. }
  30402. } while (0);
  30403. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30404. }
  30405. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30406. {
  30407. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30408. }
  30409. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30410. {
  30411. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  30412. }
  30413. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30414. {
  30415. USE_OPLINE
  30416. zval *container;
  30417. zval *offset;
  30418. void **cache_slot = NULL;
  30419. SAVE_OPLINE();
  30420. container = &EX(This);
  30421. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  30422. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30423. }
  30424. offset = EX_VAR(opline->op2.var);
  30425. if (IS_UNUSED == IS_CONST ||
  30426. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  30427. do {
  30428. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  30429. container = Z_REFVAL_P(container);
  30430. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  30431. break;
  30432. }
  30433. }
  30434. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  30435. GET_OP1_UNDEF_CV(container, BP_VAR_R);
  30436. }
  30437. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  30438. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  30439. }
  30440. goto fetch_obj_r_no_object;
  30441. } while (0);
  30442. }
  30443. /* here we are sure we are dealing with an object */
  30444. do {
  30445. zend_object *zobj = Z_OBJ_P(container);
  30446. zval *retval;
  30447. if (IS_CV == IS_CONST) {
  30448. cache_slot = CACHE_ADDR(opline->extended_value);
  30449. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  30450. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  30451. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30452. retval = OBJ_PROP(zobj, prop_offset);
  30453. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  30454. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  30455. break;
  30456. }
  30457. } else if (EXPECTED(zobj->properties != NULL)) {
  30458. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  30459. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  30460. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  30461. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  30462. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  30463. (EXPECTED(p->key == Z_STR_P(offset)) ||
  30464. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  30465. EXPECTED(p->key != NULL) &&
  30466. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  30467. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
  30468. break;
  30469. }
  30470. }
  30471. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  30472. }
  30473. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  30474. if (EXPECTED(retval)) {
  30475. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  30476. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  30477. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  30478. break;
  30479. }
  30480. }
  30481. }
  30482. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
  30483. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  30484. }
  30485. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  30486. fetch_obj_r_no_object:
  30487. zend_wrong_property_read(offset);
  30488. ZVAL_NULL(EX_VAR(opline->result.var));
  30489. } else {
  30490. retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  30491. if (retval != EX_VAR(opline->result.var)) {
  30492. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  30493. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  30494. zend_unwrap_reference(retval);
  30495. }
  30496. }
  30497. } while (0);
  30498. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30499. }
  30500. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30501. {
  30502. USE_OPLINE
  30503. zend_free_op free_op1;
  30504. zval *property, *container, *result;
  30505. SAVE_OPLINE();
  30506. container = &EX(This);
  30507. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  30508. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30509. }
  30510. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  30511. result = EX_VAR(opline->result.var);
  30512. zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC);
  30513. if (IS_UNUSED == IS_VAR) {
  30514. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  30515. }
  30516. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30517. }
  30518. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30519. {
  30520. USE_OPLINE
  30521. zend_free_op free_op1;
  30522. zval *property, *container, *result;
  30523. SAVE_OPLINE();
  30524. container = &EX(This);
  30525. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  30526. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30527. }
  30528. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  30529. result = EX_VAR(opline->result.var);
  30530. zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC);
  30531. if (IS_UNUSED == IS_VAR) {
  30532. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  30533. }
  30534. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30535. }
  30536. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30537. {
  30538. USE_OPLINE
  30539. zval *container;
  30540. zval *offset;
  30541. void **cache_slot = NULL;
  30542. SAVE_OPLINE();
  30543. container = &EX(This);
  30544. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  30545. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30546. }
  30547. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  30548. if (IS_UNUSED == IS_CONST ||
  30549. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  30550. do {
  30551. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  30552. container = Z_REFVAL_P(container);
  30553. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  30554. break;
  30555. }
  30556. }
  30557. goto fetch_obj_is_no_object;
  30558. } while (0);
  30559. }
  30560. /* here we are sure we are dealing with an object */
  30561. do {
  30562. zend_object *zobj = Z_OBJ_P(container);
  30563. zval *retval;
  30564. if (IS_CV == IS_CONST) {
  30565. cache_slot = CACHE_ADDR(opline->extended_value);
  30566. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  30567. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  30568. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30569. retval = OBJ_PROP(zobj, prop_offset);
  30570. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  30571. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  30572. break;
  30573. }
  30574. } else if (EXPECTED(zobj->properties != NULL)) {
  30575. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  30576. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  30577. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  30578. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  30579. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  30580. (EXPECTED(p->key == Z_STR_P(offset)) ||
  30581. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  30582. EXPECTED(p->key != NULL) &&
  30583. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  30584. ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
  30585. break;
  30586. }
  30587. }
  30588. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  30589. }
  30590. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  30591. if (EXPECTED(retval)) {
  30592. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  30593. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  30594. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  30595. break;
  30596. }
  30597. }
  30598. }
  30599. }
  30600. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  30601. fetch_obj_is_no_object:
  30602. ZVAL_NULL(EX_VAR(opline->result.var));
  30603. } else {
  30604. retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  30605. if (retval != EX_VAR(opline->result.var)) {
  30606. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  30607. }
  30608. }
  30609. } while (0);
  30610. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30611. }
  30612. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30613. {
  30614. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  30615. /* Behave like FETCH_OBJ_W */
  30616. if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
  30617. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30618. }
  30619. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30620. } else {
  30621. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30622. }
  30623. }
  30624. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30625. {
  30626. USE_OPLINE
  30627. zend_free_op free_op1;
  30628. zval *container, *property, *result;
  30629. SAVE_OPLINE();
  30630. container = &EX(This);
  30631. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  30632. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30633. }
  30634. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  30635. result = EX_VAR(opline->result.var);
  30636. zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC);
  30637. if (IS_UNUSED == IS_VAR) {
  30638. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  30639. }
  30640. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  30641. }
  30642. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30643. {
  30644. USE_OPLINE
  30645. zval *object, *property, *value, tmp;
  30646. SAVE_OPLINE();
  30647. object = &EX(This);
  30648. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  30649. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30650. }
  30651. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  30652. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  30653. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  30654. if (Z_ISREF_P(object)) {
  30655. object = Z_REFVAL_P(object);
  30656. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  30657. goto assign_object;
  30658. }
  30659. }
  30660. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  30661. goto exit_assign_obj;
  30662. }
  30663. }
  30664. assign_object:
  30665. if (IS_CV == IS_CONST &&
  30666. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  30667. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  30668. zend_object *zobj = Z_OBJ_P(object);
  30669. zval *property_val;
  30670. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30671. property_val = OBJ_PROP(zobj, prop_offset);
  30672. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  30673. fast_assign_obj:
  30674. value = zend_assign_to_variable(property_val, value, IS_CONST);
  30675. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30676. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30677. }
  30678. goto exit_assign_obj;
  30679. }
  30680. } else {
  30681. if (EXPECTED(zobj->properties != NULL)) {
  30682. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  30683. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  30684. GC_DELREF(zobj->properties);
  30685. }
  30686. zobj->properties = zend_array_dup(zobj->properties);
  30687. }
  30688. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  30689. if (property_val) {
  30690. goto fast_assign_obj;
  30691. }
  30692. }
  30693. if (!zobj->ce->__set) {
  30694. if (EXPECTED(zobj->properties == NULL)) {
  30695. rebuild_object_properties(zobj);
  30696. }
  30697. if (IS_CONST == IS_CONST) {
  30698. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  30699. Z_ADDREF_P(value);
  30700. }
  30701. } else if (IS_CONST != IS_TMP_VAR) {
  30702. if (Z_ISREF_P(value)) {
  30703. if (IS_CONST == IS_VAR) {
  30704. zend_reference *ref = Z_REF_P(value);
  30705. if (GC_DELREF(ref) == 0) {
  30706. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  30707. efree_size(ref, sizeof(zend_reference));
  30708. value = &tmp;
  30709. } else {
  30710. value = Z_REFVAL_P(value);
  30711. Z_TRY_ADDREF_P(value);
  30712. }
  30713. } else {
  30714. value = Z_REFVAL_P(value);
  30715. Z_TRY_ADDREF_P(value);
  30716. }
  30717. } else if (IS_CONST == IS_CV) {
  30718. Z_TRY_ADDREF_P(value);
  30719. }
  30720. }
  30721. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  30722. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30723. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30724. }
  30725. goto exit_assign_obj;
  30726. }
  30727. }
  30728. }
  30729. if (!Z_OBJ_HT_P(object)->write_property) {
  30730. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  30731. goto exit_assign_obj;
  30732. }
  30733. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  30734. ZVAL_DEREF(value);
  30735. }
  30736. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  30737. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30738. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30739. }
  30740. exit_assign_obj:
  30741. /* assign_obj has two opcodes! */
  30742. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  30743. }
  30744. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30745. {
  30746. USE_OPLINE
  30747. zend_free_op free_op_data;
  30748. zval *object, *property, *value, tmp;
  30749. SAVE_OPLINE();
  30750. object = &EX(This);
  30751. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  30752. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30753. }
  30754. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  30755. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  30756. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  30757. if (Z_ISREF_P(object)) {
  30758. object = Z_REFVAL_P(object);
  30759. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  30760. goto assign_object;
  30761. }
  30762. }
  30763. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  30764. zval_ptr_dtor_nogc(free_op_data);
  30765. goto exit_assign_obj;
  30766. }
  30767. }
  30768. assign_object:
  30769. if (IS_CV == IS_CONST &&
  30770. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  30771. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  30772. zend_object *zobj = Z_OBJ_P(object);
  30773. zval *property_val;
  30774. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30775. property_val = OBJ_PROP(zobj, prop_offset);
  30776. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  30777. fast_assign_obj:
  30778. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
  30779. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30780. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30781. }
  30782. goto exit_assign_obj;
  30783. }
  30784. } else {
  30785. if (EXPECTED(zobj->properties != NULL)) {
  30786. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  30787. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  30788. GC_DELREF(zobj->properties);
  30789. }
  30790. zobj->properties = zend_array_dup(zobj->properties);
  30791. }
  30792. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  30793. if (property_val) {
  30794. goto fast_assign_obj;
  30795. }
  30796. }
  30797. if (!zobj->ce->__set) {
  30798. if (EXPECTED(zobj->properties == NULL)) {
  30799. rebuild_object_properties(zobj);
  30800. }
  30801. if (IS_TMP_VAR == IS_CONST) {
  30802. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  30803. Z_ADDREF_P(value);
  30804. }
  30805. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  30806. if (Z_ISREF_P(value)) {
  30807. if (IS_TMP_VAR == IS_VAR) {
  30808. zend_reference *ref = Z_REF_P(value);
  30809. if (GC_DELREF(ref) == 0) {
  30810. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  30811. efree_size(ref, sizeof(zend_reference));
  30812. value = &tmp;
  30813. } else {
  30814. value = Z_REFVAL_P(value);
  30815. Z_TRY_ADDREF_P(value);
  30816. }
  30817. } else {
  30818. value = Z_REFVAL_P(value);
  30819. Z_TRY_ADDREF_P(value);
  30820. }
  30821. } else if (IS_TMP_VAR == IS_CV) {
  30822. Z_TRY_ADDREF_P(value);
  30823. }
  30824. }
  30825. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  30826. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30827. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30828. }
  30829. goto exit_assign_obj;
  30830. }
  30831. }
  30832. }
  30833. if (!Z_OBJ_HT_P(object)->write_property) {
  30834. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  30835. zval_ptr_dtor_nogc(free_op_data);
  30836. goto exit_assign_obj;
  30837. }
  30838. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  30839. ZVAL_DEREF(value);
  30840. }
  30841. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  30842. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30843. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30844. }
  30845. zval_ptr_dtor_nogc(free_op_data);
  30846. exit_assign_obj:
  30847. /* assign_obj has two opcodes! */
  30848. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  30849. }
  30850. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30851. {
  30852. USE_OPLINE
  30853. zend_free_op free_op_data;
  30854. zval *object, *property, *value, tmp;
  30855. SAVE_OPLINE();
  30856. object = &EX(This);
  30857. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  30858. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30859. }
  30860. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  30861. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  30862. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  30863. if (Z_ISREF_P(object)) {
  30864. object = Z_REFVAL_P(object);
  30865. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  30866. goto assign_object;
  30867. }
  30868. }
  30869. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  30870. zval_ptr_dtor_nogc(free_op_data);
  30871. goto exit_assign_obj;
  30872. }
  30873. }
  30874. assign_object:
  30875. if (IS_CV == IS_CONST &&
  30876. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  30877. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  30878. zend_object *zobj = Z_OBJ_P(object);
  30879. zval *property_val;
  30880. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30881. property_val = OBJ_PROP(zobj, prop_offset);
  30882. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  30883. fast_assign_obj:
  30884. value = zend_assign_to_variable(property_val, value, IS_VAR);
  30885. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30886. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30887. }
  30888. goto exit_assign_obj;
  30889. }
  30890. } else {
  30891. if (EXPECTED(zobj->properties != NULL)) {
  30892. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  30893. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  30894. GC_DELREF(zobj->properties);
  30895. }
  30896. zobj->properties = zend_array_dup(zobj->properties);
  30897. }
  30898. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  30899. if (property_val) {
  30900. goto fast_assign_obj;
  30901. }
  30902. }
  30903. if (!zobj->ce->__set) {
  30904. if (EXPECTED(zobj->properties == NULL)) {
  30905. rebuild_object_properties(zobj);
  30906. }
  30907. if (IS_VAR == IS_CONST) {
  30908. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  30909. Z_ADDREF_P(value);
  30910. }
  30911. } else if (IS_VAR != IS_TMP_VAR) {
  30912. if (Z_ISREF_P(value)) {
  30913. if (IS_VAR == IS_VAR) {
  30914. zend_reference *ref = Z_REF_P(value);
  30915. if (GC_DELREF(ref) == 0) {
  30916. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  30917. efree_size(ref, sizeof(zend_reference));
  30918. value = &tmp;
  30919. } else {
  30920. value = Z_REFVAL_P(value);
  30921. Z_TRY_ADDREF_P(value);
  30922. }
  30923. } else {
  30924. value = Z_REFVAL_P(value);
  30925. Z_TRY_ADDREF_P(value);
  30926. }
  30927. } else if (IS_VAR == IS_CV) {
  30928. Z_TRY_ADDREF_P(value);
  30929. }
  30930. }
  30931. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  30932. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30933. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30934. }
  30935. goto exit_assign_obj;
  30936. }
  30937. }
  30938. }
  30939. if (!Z_OBJ_HT_P(object)->write_property) {
  30940. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  30941. zval_ptr_dtor_nogc(free_op_data);
  30942. goto exit_assign_obj;
  30943. }
  30944. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  30945. ZVAL_DEREF(value);
  30946. }
  30947. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  30948. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30949. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30950. }
  30951. zval_ptr_dtor_nogc(free_op_data);
  30952. exit_assign_obj:
  30953. /* assign_obj has two opcodes! */
  30954. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  30955. }
  30956. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  30957. {
  30958. USE_OPLINE
  30959. zval *object, *property, *value, tmp;
  30960. SAVE_OPLINE();
  30961. object = &EX(This);
  30962. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  30963. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  30964. }
  30965. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  30966. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  30967. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  30968. if (Z_ISREF_P(object)) {
  30969. object = Z_REFVAL_P(object);
  30970. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  30971. goto assign_object;
  30972. }
  30973. }
  30974. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  30975. goto exit_assign_obj;
  30976. }
  30977. }
  30978. assign_object:
  30979. if (IS_CV == IS_CONST &&
  30980. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  30981. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  30982. zend_object *zobj = Z_OBJ_P(object);
  30983. zval *property_val;
  30984. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  30985. property_val = OBJ_PROP(zobj, prop_offset);
  30986. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  30987. fast_assign_obj:
  30988. value = zend_assign_to_variable(property_val, value, IS_CV);
  30989. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  30990. ZVAL_COPY(EX_VAR(opline->result.var), value);
  30991. }
  30992. goto exit_assign_obj;
  30993. }
  30994. } else {
  30995. if (EXPECTED(zobj->properties != NULL)) {
  30996. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  30997. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  30998. GC_DELREF(zobj->properties);
  30999. }
  31000. zobj->properties = zend_array_dup(zobj->properties);
  31001. }
  31002. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  31003. if (property_val) {
  31004. goto fast_assign_obj;
  31005. }
  31006. }
  31007. if (!zobj->ce->__set) {
  31008. if (EXPECTED(zobj->properties == NULL)) {
  31009. rebuild_object_properties(zobj);
  31010. }
  31011. if (IS_CV == IS_CONST) {
  31012. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  31013. Z_ADDREF_P(value);
  31014. }
  31015. } else if (IS_CV != IS_TMP_VAR) {
  31016. if (Z_ISREF_P(value)) {
  31017. if (IS_CV == IS_VAR) {
  31018. zend_reference *ref = Z_REF_P(value);
  31019. if (GC_DELREF(ref) == 0) {
  31020. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  31021. efree_size(ref, sizeof(zend_reference));
  31022. value = &tmp;
  31023. } else {
  31024. value = Z_REFVAL_P(value);
  31025. Z_TRY_ADDREF_P(value);
  31026. }
  31027. } else {
  31028. value = Z_REFVAL_P(value);
  31029. Z_TRY_ADDREF_P(value);
  31030. }
  31031. } else if (IS_CV == IS_CV) {
  31032. Z_TRY_ADDREF_P(value);
  31033. }
  31034. }
  31035. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  31036. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  31037. ZVAL_COPY(EX_VAR(opline->result.var), value);
  31038. }
  31039. goto exit_assign_obj;
  31040. }
  31041. }
  31042. }
  31043. if (!Z_OBJ_HT_P(object)->write_property) {
  31044. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  31045. goto exit_assign_obj;
  31046. }
  31047. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  31048. ZVAL_DEREF(value);
  31049. }
  31050. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  31051. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  31052. ZVAL_COPY(EX_VAR(opline->result.var), value);
  31053. }
  31054. exit_assign_obj:
  31055. /* assign_obj has two opcodes! */
  31056. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  31057. }
  31058. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31059. {
  31060. USE_OPLINE
  31061. zend_string **rope;
  31062. zval *var;
  31063. /* Compiler allocates the necessary number of zval slots to keep the rope */
  31064. rope = (zend_string**)EX_VAR(opline->result.var);
  31065. if (IS_CV == IS_CONST) {
  31066. var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  31067. rope[0] = Z_STR_P(var);
  31068. if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
  31069. Z_ADDREF_P(var);
  31070. }
  31071. } else {
  31072. var = EX_VAR(opline->op2.var);
  31073. if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
  31074. if (IS_CV == IS_CV) {
  31075. rope[0] = zend_string_copy(Z_STR_P(var));
  31076. } else {
  31077. rope[0] = Z_STR_P(var);
  31078. }
  31079. } else {
  31080. SAVE_OPLINE();
  31081. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
  31082. GET_OP2_UNDEF_CV(var, BP_VAR_R);
  31083. }
  31084. rope[0] = zval_get_string_func(var);
  31085. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31086. }
  31087. }
  31088. ZEND_VM_NEXT_OPCODE();
  31089. }
  31090. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31091. {
  31092. zval *class_name;
  31093. USE_OPLINE
  31094. SAVE_OPLINE();
  31095. if (IS_CV == IS_UNUSED) {
  31096. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
  31097. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31098. } else if (IS_CV == IS_CONST) {
  31099. zend_class_entry *ce = CACHED_PTR(opline->extended_value);
  31100. if (UNEXPECTED(ce == NULL)) {
  31101. class_name = EX_VAR(opline->op2.var);
  31102. ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, opline->op1.num);
  31103. CACHE_PTR(opline->extended_value, ce);
  31104. }
  31105. Z_CE_P(EX_VAR(opline->result.var)) = ce;
  31106. } else {
  31107. class_name = EX_VAR(opline->op2.var);
  31108. try_class_name:
  31109. if (Z_TYPE_P(class_name) == IS_OBJECT) {
  31110. Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
  31111. } else if (Z_TYPE_P(class_name) == IS_STRING) {
  31112. Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
  31113. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
  31114. class_name = Z_REFVAL_P(class_name);
  31115. goto try_class_name;
  31116. } else {
  31117. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
  31118. GET_OP2_UNDEF_CV(class_name, BP_VAR_R);
  31119. if (UNEXPECTED(EG(exception) != NULL)) {
  31120. HANDLE_EXCEPTION();
  31121. }
  31122. }
  31123. zend_throw_error(NULL, "Class name must be a valid object or a string");
  31124. }
  31125. }
  31126. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31127. }
  31128. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31129. {
  31130. USE_OPLINE
  31131. zval *function_name;
  31132. zend_free_op free_op1;
  31133. zval *object;
  31134. zend_function *fbc;
  31135. zend_class_entry *called_scope;
  31136. zend_object *obj;
  31137. zend_execute_data *call;
  31138. uint32_t call_info;
  31139. SAVE_OPLINE();
  31140. object = &EX(This);
  31141. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  31142. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  31143. }
  31144. if (IS_CV != IS_CONST) {
  31145. function_name = EX_VAR(opline->op2.var);
  31146. }
  31147. if (IS_CV != IS_CONST &&
  31148. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  31149. do {
  31150. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  31151. function_name = Z_REFVAL_P(function_name);
  31152. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  31153. break;
  31154. }
  31155. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  31156. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  31157. if (UNEXPECTED(EG(exception) != NULL)) {
  31158. HANDLE_EXCEPTION();
  31159. }
  31160. }
  31161. zend_throw_error(NULL, "Method name must be a string");
  31162. HANDLE_EXCEPTION();
  31163. } while (0);
  31164. }
  31165. if (IS_UNUSED != IS_UNUSED) {
  31166. do {
  31167. if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  31168. if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  31169. object = Z_REFVAL_P(object);
  31170. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  31171. break;
  31172. }
  31173. }
  31174. if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  31175. object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
  31176. if (UNEXPECTED(EG(exception) != NULL)) {
  31177. if (IS_CV != IS_CONST) {
  31178. }
  31179. HANDLE_EXCEPTION();
  31180. }
  31181. }
  31182. if (IS_CV == IS_CONST) {
  31183. function_name = EX_VAR(opline->op2.var);
  31184. }
  31185. zend_invalid_method_call(object, function_name);
  31186. HANDLE_EXCEPTION();
  31187. }
  31188. } while (0);
  31189. }
  31190. obj = Z_OBJ_P(object);
  31191. called_scope = obj->ce;
  31192. if (IS_CV == IS_CONST &&
  31193. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  31194. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  31195. } else {
  31196. zend_object *orig_obj = obj;
  31197. if (UNEXPECTED(obj->handlers->get_method == NULL)) {
  31198. zend_throw_error(NULL, "Object does not support method calls");
  31199. HANDLE_EXCEPTION();
  31200. }
  31201. if (IS_CV == IS_CONST) {
  31202. function_name = EX_VAR(opline->op2.var);
  31203. }
  31204. /* First, locate the function. */
  31205. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  31206. if (UNEXPECTED(fbc == NULL)) {
  31207. if (EXPECTED(!EG(exception))) {
  31208. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  31209. }
  31210. HANDLE_EXCEPTION();
  31211. }
  31212. if (IS_CV == IS_CONST &&
  31213. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  31214. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  31215. EXPECTED(obj == orig_obj)) {
  31216. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  31217. }
  31218. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  31219. /* Reset "object" to trigger reference counting */
  31220. object = NULL;
  31221. }
  31222. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  31223. init_func_run_time_cache(&fbc->op_array);
  31224. }
  31225. }
  31226. if (IS_CV != IS_CONST) {
  31227. }
  31228. call_info = ZEND_CALL_NESTED_FUNCTION;
  31229. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  31230. obj = NULL;
  31231. if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
  31232. HANDLE_EXCEPTION();
  31233. }
  31234. } else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  31235. /* CV may be changed indirectly (e.g. when it's a reference) */
  31236. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
  31237. if (IS_UNUSED == IS_CV) {
  31238. GC_ADDREF(obj); /* For $this pointer */
  31239. } else if (free_op1 != object) {
  31240. GC_ADDREF(obj); /* For $this pointer */
  31241. }
  31242. }
  31243. call = zend_vm_stack_push_call_frame(call_info,
  31244. fbc, opline->extended_value, called_scope, obj);
  31245. call->prev_execute_data = EX(call);
  31246. EX(call) = call;
  31247. ZEND_VM_NEXT_OPCODE();
  31248. }
  31249. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31250. {
  31251. USE_OPLINE
  31252. zval *function_name;
  31253. zend_class_entry *ce;
  31254. zend_object *object;
  31255. zend_function *fbc;
  31256. zend_execute_data *call;
  31257. SAVE_OPLINE();
  31258. if (IS_UNUSED == IS_CONST) {
  31259. /* no function found. try a static method in class */
  31260. ce = CACHED_PTR(opline->result.num);
  31261. if (UNEXPECTED(ce == NULL)) {
  31262. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  31263. if (UNEXPECTED(ce == NULL)) {
  31264. ZEND_ASSERT(EG(exception));
  31265. HANDLE_EXCEPTION();
  31266. }
  31267. if (IS_CV != IS_CONST) {
  31268. CACHE_PTR(opline->result.num, ce);
  31269. }
  31270. }
  31271. } else if (IS_UNUSED == IS_UNUSED) {
  31272. ce = zend_fetch_class(NULL, opline->op1.num);
  31273. if (UNEXPECTED(ce == NULL)) {
  31274. ZEND_ASSERT(EG(exception));
  31275. HANDLE_EXCEPTION();
  31276. }
  31277. } else {
  31278. ce = Z_CE_P(EX_VAR(opline->op1.var));
  31279. }
  31280. if (IS_UNUSED == IS_CONST &&
  31281. IS_CV == IS_CONST &&
  31282. EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
  31283. /* nothing to do */
  31284. } else if (IS_UNUSED != IS_CONST &&
  31285. IS_CV == IS_CONST &&
  31286. EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
  31287. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  31288. } else if (IS_CV != IS_UNUSED) {
  31289. function_name = EX_VAR(opline->op2.var);
  31290. if (IS_CV != IS_CONST) {
  31291. if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  31292. do {
  31293. if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
  31294. function_name = Z_REFVAL_P(function_name);
  31295. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  31296. break;
  31297. }
  31298. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  31299. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  31300. if (UNEXPECTED(EG(exception) != NULL)) {
  31301. HANDLE_EXCEPTION();
  31302. }
  31303. }
  31304. zend_throw_error(NULL, "Function name must be a string");
  31305. HANDLE_EXCEPTION();
  31306. } while (0);
  31307. }
  31308. }
  31309. if (ce->get_static_method) {
  31310. fbc = ce->get_static_method(ce, Z_STR_P(function_name));
  31311. } else {
  31312. fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  31313. }
  31314. if (UNEXPECTED(fbc == NULL)) {
  31315. if (EXPECTED(!EG(exception))) {
  31316. zend_undefined_method(ce, Z_STR_P(function_name));
  31317. }
  31318. HANDLE_EXCEPTION();
  31319. }
  31320. if (IS_CV == IS_CONST &&
  31321. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  31322. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
  31323. CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
  31324. }
  31325. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  31326. init_func_run_time_cache(&fbc->op_array);
  31327. }
  31328. if (IS_CV != IS_CONST) {
  31329. }
  31330. } else {
  31331. if (UNEXPECTED(ce->constructor == NULL)) {
  31332. zend_throw_error(NULL, "Cannot call constructor");
  31333. HANDLE_EXCEPTION();
  31334. }
  31335. if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
  31336. zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
  31337. HANDLE_EXCEPTION();
  31338. }
  31339. fbc = ce->constructor;
  31340. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  31341. init_func_run_time_cache(&fbc->op_array);
  31342. }
  31343. }
  31344. object = NULL;
  31345. if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
  31346. if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
  31347. object = Z_OBJ(EX(This));
  31348. ce = object->ce;
  31349. } else {
  31350. zend_non_static_method_call(fbc);
  31351. if (UNEXPECTED(EG(exception) != NULL)) {
  31352. HANDLE_EXCEPTION();
  31353. }
  31354. }
  31355. }
  31356. if (IS_UNUSED == IS_UNUSED) {
  31357. /* previous opcode is ZEND_FETCH_CLASS */
  31358. if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
  31359. (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
  31360. if (Z_TYPE(EX(This)) == IS_OBJECT) {
  31361. ce = Z_OBJCE(EX(This));
  31362. } else {
  31363. ce = Z_CE(EX(This));
  31364. }
  31365. }
  31366. }
  31367. call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
  31368. fbc, opline->extended_value, ce, object);
  31369. call->prev_execute_data = EX(call);
  31370. EX(call) = call;
  31371. ZEND_VM_NEXT_OPCODE();
  31372. }
  31373. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31374. {
  31375. USE_OPLINE
  31376. zval *container;
  31377. zval *offset;
  31378. SAVE_OPLINE();
  31379. container = &EX(This);
  31380. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  31381. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  31382. }
  31383. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  31384. do {
  31385. if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  31386. if (Z_ISREF_P(container)) {
  31387. container = Z_REFVAL_P(container);
  31388. if (Z_TYPE_P(container) != IS_OBJECT) {
  31389. break;
  31390. }
  31391. } else {
  31392. break;
  31393. }
  31394. }
  31395. if (Z_OBJ_HT_P(container)->unset_property) {
  31396. Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  31397. } else {
  31398. zend_wrong_property_unset(offset);
  31399. }
  31400. } while (0);
  31401. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31402. }
  31403. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31404. {
  31405. USE_OPLINE
  31406. zval *container;
  31407. int result;
  31408. zval *offset;
  31409. SAVE_OPLINE();
  31410. container = &EX(This);
  31411. if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  31412. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  31413. }
  31414. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  31415. if (IS_UNUSED == IS_CONST ||
  31416. (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  31417. if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  31418. container = Z_REFVAL_P(container);
  31419. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  31420. goto isset_no_object;
  31421. }
  31422. } else {
  31423. goto isset_no_object;
  31424. }
  31425. }
  31426. if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
  31427. zend_wrong_property_check(offset);
  31428. isset_no_object:
  31429. result = (opline->extended_value & ZEND_ISEMPTY);
  31430. } else {
  31431. result =
  31432. (opline->extended_value & ZEND_ISEMPTY) ^
  31433. Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  31434. }
  31435. ZEND_VM_SMART_BRANCH(result, 1);
  31436. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  31437. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31438. }
  31439. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31440. {
  31441. USE_OPLINE
  31442. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  31443. SAVE_OPLINE();
  31444. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  31445. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  31446. }
  31447. /* Destroy the previously yielded value */
  31448. zval_ptr_dtor(&generator->value);
  31449. /* Destroy the previously yielded key */
  31450. zval_ptr_dtor(&generator->key);
  31451. /* Set the new yielded value */
  31452. if (IS_UNUSED != IS_UNUSED) {
  31453. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  31454. /* Constants and temporary variables aren't yieldable by reference,
  31455. * but we still allow them with a notice. */
  31456. if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
  31457. zval *value;
  31458. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  31459. value = NULL;
  31460. ZVAL_COPY_VALUE(&generator->value, value);
  31461. if (IS_UNUSED == IS_CONST) {
  31462. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  31463. Z_ADDREF(generator->value);
  31464. }
  31465. }
  31466. } else {
  31467. zval *value_ptr = NULL;
  31468. /* If a function call result is yielded and the function did
  31469. * not return by reference we throw a notice. */
  31470. if (IS_UNUSED == IS_VAR &&
  31471. (value_ptr == &EG(uninitialized_zval) ||
  31472. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  31473. !Z_ISREF_P(value_ptr)))) {
  31474. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  31475. ZVAL_COPY(&generator->value, value_ptr);
  31476. } else {
  31477. if (Z_ISREF_P(value_ptr)) {
  31478. Z_ADDREF_P(value_ptr);
  31479. } else {
  31480. ZVAL_MAKE_REF_EX(value_ptr, 2);
  31481. }
  31482. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  31483. }
  31484. }
  31485. } else {
  31486. zval *value = NULL;
  31487. /* Consts, temporary variables and references need copying */
  31488. if (IS_UNUSED == IS_CONST) {
  31489. ZVAL_COPY_VALUE(&generator->value, value);
  31490. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  31491. Z_ADDREF(generator->value);
  31492. }
  31493. } else if (IS_UNUSED == IS_TMP_VAR) {
  31494. ZVAL_COPY_VALUE(&generator->value, value);
  31495. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  31496. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  31497. } else {
  31498. ZVAL_COPY_VALUE(&generator->value, value);
  31499. if (IS_UNUSED == IS_CV) {
  31500. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  31501. }
  31502. }
  31503. }
  31504. } else {
  31505. /* If no value was specified yield null */
  31506. ZVAL_NULL(&generator->value);
  31507. }
  31508. /* Set the new yielded key */
  31509. if (IS_CV != IS_UNUSED) {
  31510. zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  31511. /* Consts, temporary variables and references need copying */
  31512. if (IS_CV == IS_CONST) {
  31513. ZVAL_COPY_VALUE(&generator->key, key);
  31514. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  31515. Z_ADDREF(generator->key);
  31516. }
  31517. } else if (IS_CV == IS_TMP_VAR) {
  31518. ZVAL_COPY_VALUE(&generator->key, key);
  31519. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  31520. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  31521. } else {
  31522. ZVAL_COPY_VALUE(&generator->key, key);
  31523. if (IS_CV == IS_CV) {
  31524. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  31525. }
  31526. }
  31527. if (Z_TYPE(generator->key) == IS_LONG
  31528. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  31529. ) {
  31530. generator->largest_used_integer_key = Z_LVAL(generator->key);
  31531. }
  31532. } else {
  31533. /* If no key was specified we use auto-increment keys */
  31534. generator->largest_used_integer_key++;
  31535. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  31536. }
  31537. if (RETURN_VALUE_USED(opline)) {
  31538. /* If the return value of yield is used set the send
  31539. * target and initialize it to NULL */
  31540. generator->send_target = EX_VAR(opline->result.var);
  31541. ZVAL_NULL(generator->send_target);
  31542. } else {
  31543. generator->send_target = NULL;
  31544. }
  31545. /* We increment to the next op, so we are at the correct position when the
  31546. * generator is resumed. */
  31547. ZEND_VM_INC_OPCODE();
  31548. /* The GOTO VM uses a local opline variable. We need to set the opline
  31549. * variable in execute_data so we don't resume at an old position. */
  31550. SAVE_OPLINE();
  31551. ZEND_VM_RETURN();
  31552. }
  31553. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31554. {
  31555. USE_OPLINE
  31556. zval *op1;
  31557. op1 = EX_VAR(opline->op1.var);
  31558. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  31559. ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
  31560. ZEND_VM_NEXT_OPCODE();
  31561. }
  31562. SAVE_OPLINE();
  31563. bitwise_not_function(EX_VAR(opline->result.var),
  31564. _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC));
  31565. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31566. }
  31567. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31568. {
  31569. USE_OPLINE
  31570. zval *val;
  31571. val = EX_VAR(opline->op1.var);
  31572. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  31573. ZVAL_FALSE(EX_VAR(opline->result.var));
  31574. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  31575. /* The result and op1 can be the same cv zval */
  31576. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  31577. ZVAL_TRUE(EX_VAR(opline->result.var));
  31578. if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  31579. SAVE_OPLINE();
  31580. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  31581. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31582. }
  31583. } else {
  31584. SAVE_OPLINE();
  31585. ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
  31586. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31587. }
  31588. ZEND_VM_NEXT_OPCODE();
  31589. }
  31590. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31591. {
  31592. USE_OPLINE
  31593. zval *var_ptr;
  31594. var_ptr = EX_VAR(opline->op1.var);
  31595. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  31596. fast_long_increment_function(var_ptr);
  31597. if (UNEXPECTED(0)) {
  31598. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  31599. }
  31600. ZEND_VM_NEXT_OPCODE();
  31601. }
  31602. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  31603. if (UNEXPECTED(0)) {
  31604. ZVAL_NULL(EX_VAR(opline->result.var));
  31605. }
  31606. ZEND_VM_NEXT_OPCODE();
  31607. }
  31608. SAVE_OPLINE();
  31609. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  31610. var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
  31611. }
  31612. ZVAL_DEREF(var_ptr);
  31613. increment_function(var_ptr);
  31614. if (UNEXPECTED(0)) {
  31615. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  31616. }
  31617. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31618. }
  31619. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31620. {
  31621. USE_OPLINE
  31622. zval *var_ptr;
  31623. var_ptr = EX_VAR(opline->op1.var);
  31624. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  31625. fast_long_increment_function(var_ptr);
  31626. if (UNEXPECTED(1)) {
  31627. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  31628. }
  31629. ZEND_VM_NEXT_OPCODE();
  31630. }
  31631. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  31632. if (UNEXPECTED(1)) {
  31633. ZVAL_NULL(EX_VAR(opline->result.var));
  31634. }
  31635. ZEND_VM_NEXT_OPCODE();
  31636. }
  31637. SAVE_OPLINE();
  31638. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  31639. var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
  31640. }
  31641. ZVAL_DEREF(var_ptr);
  31642. increment_function(var_ptr);
  31643. if (UNEXPECTED(1)) {
  31644. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  31645. }
  31646. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31647. }
  31648. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31649. {
  31650. USE_OPLINE
  31651. zval *var_ptr;
  31652. var_ptr = EX_VAR(opline->op1.var);
  31653. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  31654. fast_long_decrement_function(var_ptr);
  31655. if (UNEXPECTED(0)) {
  31656. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  31657. }
  31658. ZEND_VM_NEXT_OPCODE();
  31659. }
  31660. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  31661. if (UNEXPECTED(0)) {
  31662. ZVAL_NULL(EX_VAR(opline->result.var));
  31663. }
  31664. ZEND_VM_NEXT_OPCODE();
  31665. }
  31666. SAVE_OPLINE();
  31667. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  31668. var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
  31669. }
  31670. ZVAL_DEREF(var_ptr);
  31671. decrement_function(var_ptr);
  31672. if (UNEXPECTED(0)) {
  31673. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  31674. }
  31675. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31676. }
  31677. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31678. {
  31679. USE_OPLINE
  31680. zval *var_ptr;
  31681. var_ptr = EX_VAR(opline->op1.var);
  31682. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  31683. fast_long_decrement_function(var_ptr);
  31684. if (UNEXPECTED(1)) {
  31685. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  31686. }
  31687. ZEND_VM_NEXT_OPCODE();
  31688. }
  31689. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  31690. if (UNEXPECTED(1)) {
  31691. ZVAL_NULL(EX_VAR(opline->result.var));
  31692. }
  31693. ZEND_VM_NEXT_OPCODE();
  31694. }
  31695. SAVE_OPLINE();
  31696. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  31697. var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
  31698. }
  31699. ZVAL_DEREF(var_ptr);
  31700. decrement_function(var_ptr);
  31701. if (UNEXPECTED(1)) {
  31702. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  31703. }
  31704. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31705. }
  31706. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31707. {
  31708. USE_OPLINE
  31709. zval *var_ptr;
  31710. var_ptr = EX_VAR(opline->op1.var);
  31711. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  31712. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  31713. fast_long_increment_function(var_ptr);
  31714. ZEND_VM_NEXT_OPCODE();
  31715. }
  31716. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  31717. ZVAL_NULL(EX_VAR(opline->result.var));
  31718. ZEND_VM_NEXT_OPCODE();
  31719. }
  31720. SAVE_OPLINE();
  31721. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  31722. var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
  31723. }
  31724. ZVAL_DEREF(var_ptr);
  31725. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  31726. increment_function(var_ptr);
  31727. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31728. }
  31729. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31730. {
  31731. USE_OPLINE
  31732. zval *var_ptr;
  31733. var_ptr = EX_VAR(opline->op1.var);
  31734. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  31735. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  31736. fast_long_decrement_function(var_ptr);
  31737. ZEND_VM_NEXT_OPCODE();
  31738. }
  31739. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  31740. ZVAL_NULL(EX_VAR(opline->result.var));
  31741. ZEND_VM_NEXT_OPCODE();
  31742. }
  31743. SAVE_OPLINE();
  31744. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
  31745. var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
  31746. }
  31747. ZVAL_DEREF(var_ptr);
  31748. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  31749. decrement_function(var_ptr);
  31750. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31751. }
  31752. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31753. {
  31754. USE_OPLINE
  31755. zval *z;
  31756. SAVE_OPLINE();
  31757. z = EX_VAR(opline->op1.var);
  31758. if (Z_TYPE_P(z) == IS_STRING) {
  31759. zend_string *str = Z_STR_P(z);
  31760. if (ZSTR_LEN(str) != 0) {
  31761. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  31762. }
  31763. } else {
  31764. zend_string *str = zval_get_string_func(z);
  31765. if (ZSTR_LEN(str) != 0) {
  31766. zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
  31767. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
  31768. GET_OP1_UNDEF_CV(z, BP_VAR_R);
  31769. }
  31770. zend_string_release_ex(str, 0);
  31771. }
  31772. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31773. }
  31774. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31775. {
  31776. USE_OPLINE
  31777. zval *val;
  31778. val = EX_VAR(opline->op1.var);
  31779. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  31780. ZEND_VM_NEXT_OPCODE();
  31781. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  31782. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  31783. SAVE_OPLINE();
  31784. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  31785. if (UNEXPECTED(EG(exception))) {
  31786. HANDLE_EXCEPTION();
  31787. }
  31788. }
  31789. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  31790. }
  31791. SAVE_OPLINE();
  31792. if (i_zend_is_true(val)) {
  31793. opline++;
  31794. } else {
  31795. opline = OP_JMP_ADDR(opline, opline->op2);
  31796. }
  31797. ZEND_VM_JMP(opline);
  31798. }
  31799. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31800. {
  31801. USE_OPLINE
  31802. zval *val;
  31803. val = EX_VAR(opline->op1.var);
  31804. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  31805. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  31806. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  31807. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  31808. SAVE_OPLINE();
  31809. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  31810. if (UNEXPECTED(EG(exception))) {
  31811. HANDLE_EXCEPTION();
  31812. }
  31813. }
  31814. ZEND_VM_NEXT_OPCODE();
  31815. }
  31816. SAVE_OPLINE();
  31817. if (i_zend_is_true(val)) {
  31818. opline = OP_JMP_ADDR(opline, opline->op2);
  31819. } else {
  31820. opline++;
  31821. }
  31822. ZEND_VM_JMP(opline);
  31823. }
  31824. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31825. {
  31826. USE_OPLINE
  31827. zval *val;
  31828. val = EX_VAR(opline->op1.var);
  31829. if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
  31830. ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
  31831. ZEND_VM_CONTINUE();
  31832. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  31833. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  31834. SAVE_OPLINE();
  31835. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  31836. if (UNEXPECTED(EG(exception))) {
  31837. HANDLE_EXCEPTION();
  31838. }
  31839. }
  31840. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  31841. }
  31842. SAVE_OPLINE();
  31843. if (i_zend_is_true(val)) {
  31844. opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
  31845. } else {
  31846. opline = OP_JMP_ADDR(opline, opline->op2);
  31847. }
  31848. ZEND_VM_JMP(opline);
  31849. }
  31850. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31851. {
  31852. USE_OPLINE
  31853. zval *val;
  31854. int ret;
  31855. val = EX_VAR(opline->op1.var);
  31856. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  31857. ZVAL_TRUE(EX_VAR(opline->result.var));
  31858. ZEND_VM_NEXT_OPCODE();
  31859. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  31860. ZVAL_FALSE(EX_VAR(opline->result.var));
  31861. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  31862. SAVE_OPLINE();
  31863. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  31864. if (UNEXPECTED(EG(exception))) {
  31865. HANDLE_EXCEPTION();
  31866. }
  31867. }
  31868. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  31869. }
  31870. SAVE_OPLINE();
  31871. ret = i_zend_is_true(val);
  31872. if (ret) {
  31873. ZVAL_TRUE(EX_VAR(opline->result.var));
  31874. opline++;
  31875. } else {
  31876. ZVAL_FALSE(EX_VAR(opline->result.var));
  31877. opline = OP_JMP_ADDR(opline, opline->op2);
  31878. }
  31879. ZEND_VM_JMP(opline);
  31880. }
  31881. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31882. {
  31883. USE_OPLINE
  31884. zval *val;
  31885. int ret;
  31886. val = EX_VAR(opline->op1.var);
  31887. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  31888. ZVAL_TRUE(EX_VAR(opline->result.var));
  31889. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  31890. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  31891. ZVAL_FALSE(EX_VAR(opline->result.var));
  31892. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
  31893. SAVE_OPLINE();
  31894. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  31895. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  31896. } else {
  31897. ZEND_VM_NEXT_OPCODE();
  31898. }
  31899. }
  31900. SAVE_OPLINE();
  31901. ret = i_zend_is_true(val);
  31902. if (ret) {
  31903. ZVAL_TRUE(EX_VAR(opline->result.var));
  31904. opline = OP_JMP_ADDR(opline, opline->op2);
  31905. } else {
  31906. ZVAL_FALSE(EX_VAR(opline->result.var));
  31907. opline++;
  31908. }
  31909. ZEND_VM_JMP(opline);
  31910. }
  31911. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31912. {
  31913. USE_OPLINE
  31914. zval *retval_ptr;
  31915. zval *return_value;
  31916. zend_free_op free_op1;
  31917. retval_ptr = EX_VAR(opline->op1.var);
  31918. return_value = EX(return_value);
  31919. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  31920. SAVE_OPLINE();
  31921. retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R);
  31922. if (return_value) {
  31923. ZVAL_NULL(return_value);
  31924. }
  31925. } else if (!return_value) {
  31926. if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
  31927. if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
  31928. SAVE_OPLINE();
  31929. rc_dtor_func(Z_COUNTED_P(free_op1));
  31930. }
  31931. }
  31932. } else {
  31933. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  31934. ZVAL_COPY_VALUE(return_value, retval_ptr);
  31935. if (IS_CV == IS_CONST) {
  31936. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  31937. Z_ADDREF_P(return_value);
  31938. }
  31939. }
  31940. } else if (IS_CV == IS_CV) {
  31941. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  31942. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  31943. ZVAL_COPY_VALUE(return_value, retval_ptr);
  31944. if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
  31945. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  31946. if (GC_MAY_LEAK(ref)) {
  31947. gc_possible_root(ref);
  31948. }
  31949. ZVAL_NULL(retval_ptr);
  31950. } else {
  31951. Z_ADDREF_P(return_value);
  31952. }
  31953. } else {
  31954. retval_ptr = Z_REFVAL_P(retval_ptr);
  31955. ZVAL_COPY(return_value, retval_ptr);
  31956. }
  31957. } else {
  31958. ZVAL_COPY_VALUE(return_value, retval_ptr);
  31959. }
  31960. } else /* if (IS_CV == IS_VAR) */ {
  31961. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  31962. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  31963. retval_ptr = Z_REFVAL_P(retval_ptr);
  31964. ZVAL_COPY_VALUE(return_value, retval_ptr);
  31965. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  31966. efree_size(ref, sizeof(zend_reference));
  31967. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  31968. Z_ADDREF_P(retval_ptr);
  31969. }
  31970. } else {
  31971. ZVAL_COPY_VALUE(return_value, retval_ptr);
  31972. }
  31973. }
  31974. }
  31975. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  31976. }
  31977. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  31978. {
  31979. USE_OPLINE
  31980. zval *retval_ptr;
  31981. SAVE_OPLINE();
  31982. do {
  31983. if ((IS_CV & (IS_CONST|IS_TMP_VAR)) ||
  31984. (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
  31985. /* Not supposed to happen, but we'll allow it */
  31986. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  31987. retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  31988. if (!EX(return_value)) {
  31989. } else {
  31990. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  31991. ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
  31992. break;
  31993. }
  31994. ZVAL_NEW_REF(EX(return_value), retval_ptr);
  31995. if (IS_CV == IS_CONST) {
  31996. Z_TRY_ADDREF_P(retval_ptr);
  31997. }
  31998. }
  31999. break;
  32000. }
  32001. retval_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  32002. if (IS_CV == IS_VAR) {
  32003. if (retval_ptr == &EG(uninitialized_zval) ||
  32004. (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr))) {
  32005. zend_error(E_NOTICE, "Only variable references should be returned by reference");
  32006. if (EX(return_value)) {
  32007. ZVAL_NEW_REF(EX(return_value), retval_ptr);
  32008. } else {
  32009. }
  32010. break;
  32011. }
  32012. }
  32013. if (EX(return_value)) {
  32014. if (Z_ISREF_P(retval_ptr)) {
  32015. Z_ADDREF_P(retval_ptr);
  32016. } else {
  32017. ZVAL_MAKE_REF_EX(retval_ptr, 2);
  32018. }
  32019. ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
  32020. }
  32021. } while (0);
  32022. ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  32023. }
  32024. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32025. {
  32026. USE_OPLINE
  32027. zval *retval;
  32028. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  32029. SAVE_OPLINE();
  32030. retval = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  32031. /* Copy return value into generator->retval */
  32032. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  32033. ZVAL_COPY_VALUE(&generator->retval, retval);
  32034. if (IS_CV == IS_CONST) {
  32035. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
  32036. Z_ADDREF(generator->retval);
  32037. }
  32038. }
  32039. } else if (IS_CV == IS_CV) {
  32040. ZVAL_COPY_DEREF(&generator->retval, retval);
  32041. } else /* if (IS_CV == IS_VAR) */ {
  32042. if (UNEXPECTED(Z_ISREF_P(retval))) {
  32043. zend_refcounted *ref = Z_COUNTED_P(retval);
  32044. retval = Z_REFVAL_P(retval);
  32045. ZVAL_COPY_VALUE(&generator->retval, retval);
  32046. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  32047. efree_size(ref, sizeof(zend_reference));
  32048. } else if (Z_OPT_REFCOUNTED_P(retval)) {
  32049. Z_ADDREF_P(retval);
  32050. }
  32051. } else {
  32052. ZVAL_COPY_VALUE(&generator->retval, retval);
  32053. }
  32054. }
  32055. /* Close the generator to free up resources */
  32056. zend_generator_close(generator, 1);
  32057. /* Pass execution back to handling code */
  32058. ZEND_VM_RETURN();
  32059. }
  32060. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32061. {
  32062. USE_OPLINE
  32063. zval *value;
  32064. SAVE_OPLINE();
  32065. value = EX_VAR(opline->op1.var);
  32066. do {
  32067. if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
  32068. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  32069. value = Z_REFVAL_P(value);
  32070. if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
  32071. break;
  32072. }
  32073. }
  32074. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  32075. GET_OP1_UNDEF_CV(value, BP_VAR_R);
  32076. if (UNEXPECTED(EG(exception) != NULL)) {
  32077. HANDLE_EXCEPTION();
  32078. }
  32079. }
  32080. zend_throw_error(NULL, "Can only throw objects");
  32081. HANDLE_EXCEPTION();
  32082. }
  32083. } while (0);
  32084. zend_exception_save();
  32085. if (IS_CV != IS_TMP_VAR) {
  32086. Z_TRY_ADDREF_P(value);
  32087. }
  32088. zend_throw_exception_object(value);
  32089. zend_exception_restore();
  32090. HANDLE_EXCEPTION();
  32091. }
  32092. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32093. {
  32094. USE_OPLINE
  32095. zval *varptr, *arg;
  32096. varptr = EX_VAR(opline->op1.var);
  32097. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  32098. SAVE_OPLINE();
  32099. GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
  32100. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  32101. ZVAL_NULL(arg);
  32102. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32103. }
  32104. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  32105. if (IS_CV == IS_CV) {
  32106. ZVAL_COPY_DEREF(arg, varptr);
  32107. } else /* if (IS_CV == IS_VAR) */ {
  32108. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  32109. zend_refcounted *ref = Z_COUNTED_P(varptr);
  32110. varptr = Z_REFVAL_P(varptr);
  32111. ZVAL_COPY_VALUE(arg, varptr);
  32112. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  32113. efree_size(ref, sizeof(zend_reference));
  32114. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  32115. Z_ADDREF_P(arg);
  32116. }
  32117. } else {
  32118. ZVAL_COPY_VALUE(arg, varptr);
  32119. }
  32120. }
  32121. ZEND_VM_NEXT_OPCODE();
  32122. }
  32123. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32124. {
  32125. USE_OPLINE
  32126. zval *varptr, *arg;
  32127. SAVE_OPLINE();
  32128. varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  32129. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  32130. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(varptr))) {
  32131. ZVAL_NEW_EMPTY_REF(arg);
  32132. ZVAL_NULL(Z_REFVAL_P(arg));
  32133. ZEND_VM_NEXT_OPCODE();
  32134. }
  32135. if (Z_ISREF_P(varptr)) {
  32136. Z_ADDREF_P(varptr);
  32137. } else {
  32138. ZVAL_MAKE_REF_EX(varptr, 2);
  32139. }
  32140. ZVAL_REF(arg, Z_REF_P(varptr));
  32141. ZEND_VM_NEXT_OPCODE();
  32142. }
  32143. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32144. {
  32145. USE_OPLINE
  32146. zval *varptr, *arg;
  32147. uint32_t arg_num = opline->op2.num;
  32148. if (EXPECTED(0)) {
  32149. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  32150. goto send_var_by_ref;
  32151. }
  32152. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  32153. send_var_by_ref:
  32154. ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  32155. }
  32156. varptr = EX_VAR(opline->op1.var);
  32157. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  32158. SAVE_OPLINE();
  32159. GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
  32160. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  32161. ZVAL_NULL(arg);
  32162. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32163. }
  32164. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  32165. if (IS_CV == IS_CV) {
  32166. ZVAL_COPY_DEREF(arg, varptr);
  32167. } else /* if (IS_CV == IS_VAR) */ {
  32168. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  32169. zend_refcounted *ref = Z_COUNTED_P(varptr);
  32170. varptr = Z_REFVAL_P(varptr);
  32171. ZVAL_COPY_VALUE(arg, varptr);
  32172. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  32173. efree_size(ref, sizeof(zend_reference));
  32174. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  32175. Z_ADDREF_P(arg);
  32176. }
  32177. } else {
  32178. ZVAL_COPY_VALUE(arg, varptr);
  32179. }
  32180. }
  32181. ZEND_VM_NEXT_OPCODE();
  32182. }
  32183. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32184. {
  32185. USE_OPLINE
  32186. zval *varptr, *arg;
  32187. uint32_t arg_num = opline->op2.num;
  32188. if (EXPECTED(1)) {
  32189. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  32190. goto send_var_by_ref;
  32191. }
  32192. } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  32193. send_var_by_ref:
  32194. ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  32195. }
  32196. varptr = EX_VAR(opline->op1.var);
  32197. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
  32198. SAVE_OPLINE();
  32199. GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
  32200. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  32201. ZVAL_NULL(arg);
  32202. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32203. }
  32204. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  32205. if (IS_CV == IS_CV) {
  32206. ZVAL_COPY_DEREF(arg, varptr);
  32207. } else /* if (IS_CV == IS_VAR) */ {
  32208. if (UNEXPECTED(Z_ISREF_P(varptr))) {
  32209. zend_refcounted *ref = Z_COUNTED_P(varptr);
  32210. varptr = Z_REFVAL_P(varptr);
  32211. ZVAL_COPY_VALUE(arg, varptr);
  32212. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  32213. efree_size(ref, sizeof(zend_reference));
  32214. } else if (Z_OPT_REFCOUNTED_P(arg)) {
  32215. Z_ADDREF_P(arg);
  32216. }
  32217. } else {
  32218. ZVAL_COPY_VALUE(arg, varptr);
  32219. }
  32220. }
  32221. ZEND_VM_NEXT_OPCODE();
  32222. }
  32223. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32224. {
  32225. USE_OPLINE
  32226. zval *arg, *param;
  32227. SAVE_OPLINE();
  32228. arg = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  32229. param = ZEND_CALL_VAR(EX(call), opline->result.var);
  32230. if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
  32231. zend_param_must_be_ref(EX(call)->func, opline->op2.num);
  32232. }
  32233. ZVAL_COPY(param, arg);
  32234. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32235. }
  32236. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32237. {
  32238. USE_OPLINE
  32239. zval *val;
  32240. val = EX_VAR(opline->op1.var);
  32241. if (Z_TYPE_INFO_P(val) == IS_TRUE) {
  32242. ZVAL_TRUE(EX_VAR(opline->result.var));
  32243. } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
  32244. /* The result and op1 can be the same cv zval */
  32245. const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
  32246. ZVAL_FALSE(EX_VAR(opline->result.var));
  32247. if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
  32248. SAVE_OPLINE();
  32249. GET_OP1_UNDEF_CV(val, BP_VAR_R);
  32250. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32251. }
  32252. } else {
  32253. SAVE_OPLINE();
  32254. ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
  32255. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32256. }
  32257. ZEND_VM_NEXT_OPCODE();
  32258. }
  32259. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32260. {
  32261. USE_OPLINE
  32262. zval *obj;
  32263. zend_class_entry *ce, *scope;
  32264. zend_function *clone;
  32265. zend_object_clone_obj_t clone_call;
  32266. SAVE_OPLINE();
  32267. obj = EX_VAR(opline->op1.var);
  32268. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
  32269. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  32270. }
  32271. do {
  32272. if (IS_CV == IS_CONST ||
  32273. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
  32274. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
  32275. obj = Z_REFVAL_P(obj);
  32276. if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
  32277. break;
  32278. }
  32279. }
  32280. ZVAL_UNDEF(EX_VAR(opline->result.var));
  32281. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
  32282. GET_OP1_UNDEF_CV(obj, BP_VAR_R);
  32283. if (UNEXPECTED(EG(exception) != NULL)) {
  32284. HANDLE_EXCEPTION();
  32285. }
  32286. }
  32287. zend_throw_error(NULL, "__clone method called on non-object");
  32288. HANDLE_EXCEPTION();
  32289. }
  32290. } while (0);
  32291. ce = Z_OBJCE_P(obj);
  32292. clone = ce->clone;
  32293. clone_call = Z_OBJ_HT_P(obj)->clone_obj;
  32294. if (UNEXPECTED(clone_call == NULL)) {
  32295. zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
  32296. ZVAL_UNDEF(EX_VAR(opline->result.var));
  32297. HANDLE_EXCEPTION();
  32298. }
  32299. if (clone) {
  32300. if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
  32301. /* Ensure that if we're calling a private function, we're allowed to do so.
  32302. */
  32303. scope = EX(func)->op_array.scope;
  32304. if (!zend_check_private(clone, scope, clone->common.function_name)) {
  32305. zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
  32306. ZVAL_UNDEF(EX_VAR(opline->result.var));
  32307. HANDLE_EXCEPTION();
  32308. }
  32309. } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
  32310. /* Ensure that if we're calling a protected function, we're allowed to do so.
  32311. */
  32312. scope = EX(func)->op_array.scope;
  32313. if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
  32314. zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
  32315. ZVAL_UNDEF(EX_VAR(opline->result.var));
  32316. HANDLE_EXCEPTION();
  32317. }
  32318. }
  32319. }
  32320. ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
  32321. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32322. }
  32323. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32324. {
  32325. USE_OPLINE
  32326. zval *expr;
  32327. zval *result = EX_VAR(opline->result.var);
  32328. HashTable *ht;
  32329. SAVE_OPLINE();
  32330. expr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  32331. switch (opline->extended_value) {
  32332. case IS_NULL:
  32333. ZVAL_NULL(result);
  32334. break;
  32335. case _IS_BOOL:
  32336. ZVAL_BOOL(result, zend_is_true(expr));
  32337. break;
  32338. case IS_LONG:
  32339. ZVAL_LONG(result, zval_get_long(expr));
  32340. break;
  32341. case IS_DOUBLE:
  32342. ZVAL_DOUBLE(result, zval_get_double(expr));
  32343. break;
  32344. case IS_STRING:
  32345. ZVAL_STR(result, zval_get_string(expr));
  32346. break;
  32347. default:
  32348. if (IS_CV & (IS_VAR|IS_CV)) {
  32349. ZVAL_DEREF(expr);
  32350. }
  32351. /* If value is already of correct type, return it directly */
  32352. if (Z_TYPE_P(expr) == opline->extended_value) {
  32353. ZVAL_COPY_VALUE(result, expr);
  32354. if (IS_CV == IS_CONST) {
  32355. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  32356. } else if (IS_CV != IS_TMP_VAR) {
  32357. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  32358. }
  32359. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32360. }
  32361. if (opline->extended_value == IS_ARRAY) {
  32362. if (IS_CV == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
  32363. if (Z_TYPE_P(expr) != IS_NULL) {
  32364. ZVAL_ARR(result, zend_new_array(1));
  32365. expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
  32366. if (IS_CV == IS_CONST) {
  32367. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  32368. } else {
  32369. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  32370. }
  32371. } else {
  32372. ZVAL_EMPTY_ARRAY(result);
  32373. }
  32374. } else if (Z_OBJ_HT_P(expr)->get_properties) {
  32375. HashTable *obj_ht = Z_OBJ_HT_P(expr)->get_properties(expr);
  32376. if (obj_ht) {
  32377. /* fast copy */
  32378. obj_ht = zend_proptable_to_symtable(obj_ht,
  32379. (Z_OBJCE_P(expr)->default_properties_count ||
  32380. Z_OBJ_P(expr)->handlers != &std_object_handlers ||
  32381. GC_IS_RECURSIVE(obj_ht)));
  32382. ZVAL_ARR(result, obj_ht);
  32383. } else {
  32384. ZVAL_EMPTY_ARRAY(result);
  32385. }
  32386. } else {
  32387. ZVAL_COPY_VALUE(result, expr);
  32388. Z_ADDREF_P(result);
  32389. convert_to_array(result);
  32390. }
  32391. } else {
  32392. ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
  32393. if (Z_TYPE_P(expr) == IS_ARRAY) {
  32394. ht = zend_symtable_to_proptable(Z_ARR_P(expr));
  32395. if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
  32396. /* TODO: try not to duplicate immutable arrays as well ??? */
  32397. ht = zend_array_dup(ht);
  32398. }
  32399. Z_OBJ_P(result)->properties = ht;
  32400. } else if (Z_TYPE_P(expr) != IS_NULL) {
  32401. Z_OBJ_P(result)->properties = ht = zend_new_array(1);
  32402. expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
  32403. if (IS_CV == IS_CONST) {
  32404. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
  32405. } else {
  32406. if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
  32407. }
  32408. }
  32409. }
  32410. }
  32411. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32412. }
  32413. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32414. {
  32415. USE_OPLINE
  32416. zend_op_array *new_op_array;
  32417. zval *inc_filename;
  32418. SAVE_OPLINE();
  32419. inc_filename = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  32420. new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
  32421. if (UNEXPECTED(EG(exception) != NULL)) {
  32422. if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
  32423. destroy_op_array(new_op_array);
  32424. efree_size(new_op_array, sizeof(zend_op_array));
  32425. }
  32426. UNDEF_RESULT();
  32427. HANDLE_EXCEPTION();
  32428. } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
  32429. if (RETURN_VALUE_USED(opline)) {
  32430. ZVAL_TRUE(EX_VAR(opline->result.var));
  32431. }
  32432. } else if (EXPECTED(new_op_array != NULL)) {
  32433. zval *return_value = NULL;
  32434. zend_execute_data *call;
  32435. if (RETURN_VALUE_USED(opline)) {
  32436. return_value = EX_VAR(opline->result.var);
  32437. ZVAL_NULL(return_value);
  32438. }
  32439. new_op_array->scope = EX(func)->op_array.scope;
  32440. call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
  32441. (zend_function*)new_op_array, 0,
  32442. Z_TYPE(EX(This)) != IS_OBJECT ? Z_CE(EX(This)) : NULL,
  32443. Z_TYPE(EX(This)) == IS_OBJECT ? Z_OBJ(EX(This)) : NULL);
  32444. if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
  32445. call->symbol_table = EX(symbol_table);
  32446. } else {
  32447. call->symbol_table = zend_rebuild_symbol_table();
  32448. }
  32449. call->prev_execute_data = execute_data;
  32450. i_init_code_execute_data(call, new_op_array, return_value);
  32451. if (EXPECTED(zend_execute_ex == execute_ex)) {
  32452. ZEND_VM_ENTER();
  32453. } else {
  32454. ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
  32455. zend_execute_ex(call);
  32456. zend_vm_stack_free_call_frame(call);
  32457. }
  32458. destroy_op_array(new_op_array);
  32459. efree_size(new_op_array, sizeof(zend_op_array));
  32460. if (UNEXPECTED(EG(exception) != NULL)) {
  32461. zend_rethrow_exception(execute_data);
  32462. UNDEF_RESULT();
  32463. HANDLE_EXCEPTION();
  32464. }
  32465. } else if (RETURN_VALUE_USED(opline)) {
  32466. ZVAL_FALSE(EX_VAR(opline->result.var));
  32467. }
  32468. ZEND_VM_NEXT_OPCODE();
  32469. }
  32470. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32471. {
  32472. USE_OPLINE
  32473. zval *array_ptr, *result;
  32474. SAVE_OPLINE();
  32475. array_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  32476. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  32477. result = EX_VAR(opline->result.var);
  32478. ZVAL_COPY_VALUE(result, array_ptr);
  32479. if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
  32480. Z_ADDREF_P(array_ptr);
  32481. }
  32482. Z_FE_POS_P(result) = 0;
  32483. ZEND_VM_NEXT_OPCODE();
  32484. } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  32485. if (!Z_OBJCE_P(array_ptr)->get_iterator) {
  32486. result = EX_VAR(opline->result.var);
  32487. ZVAL_COPY_VALUE(result, array_ptr);
  32488. if (IS_CV != IS_TMP_VAR) {
  32489. Z_ADDREF_P(array_ptr);
  32490. }
  32491. if (Z_OBJ_P(array_ptr)->properties
  32492. && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
  32493. if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
  32494. GC_DELREF(Z_OBJ_P(array_ptr)->properties);
  32495. }
  32496. Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
  32497. }
  32498. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
  32499. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32500. } else {
  32501. zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
  32502. if (UNEXPECTED(EG(exception))) {
  32503. HANDLE_EXCEPTION();
  32504. } else if (is_empty) {
  32505. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  32506. } else {
  32507. ZEND_VM_NEXT_OPCODE();
  32508. }
  32509. }
  32510. } else {
  32511. zend_error(E_WARNING, "Invalid argument supplied for foreach()");
  32512. ZVAL_UNDEF(EX_VAR(opline->result.var));
  32513. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  32514. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  32515. }
  32516. }
  32517. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32518. {
  32519. USE_OPLINE
  32520. zval *array_ptr, *array_ref;
  32521. SAVE_OPLINE();
  32522. if (IS_CV == IS_VAR || IS_CV == IS_CV) {
  32523. array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  32524. if (Z_ISREF_P(array_ref)) {
  32525. array_ptr = Z_REFVAL_P(array_ref);
  32526. }
  32527. } else {
  32528. array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  32529. }
  32530. if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
  32531. if (IS_CV == IS_VAR || IS_CV == IS_CV) {
  32532. if (array_ptr == array_ref) {
  32533. ZVAL_NEW_REF(array_ref, array_ref);
  32534. array_ptr = Z_REFVAL_P(array_ref);
  32535. }
  32536. Z_ADDREF_P(array_ref);
  32537. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  32538. } else {
  32539. array_ref = EX_VAR(opline->result.var);
  32540. ZVAL_NEW_REF(array_ref, array_ptr);
  32541. array_ptr = Z_REFVAL_P(array_ref);
  32542. }
  32543. if (IS_CV == IS_CONST) {
  32544. ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
  32545. } else {
  32546. SEPARATE_ARRAY(array_ptr);
  32547. }
  32548. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
  32549. if (IS_CV == IS_VAR) {
  32550. }
  32551. ZEND_VM_NEXT_OPCODE();
  32552. } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
  32553. if (!Z_OBJCE_P(array_ptr)->get_iterator) {
  32554. if (IS_CV == IS_VAR || IS_CV == IS_CV) {
  32555. if (array_ptr == array_ref) {
  32556. ZVAL_NEW_REF(array_ref, array_ref);
  32557. array_ptr = Z_REFVAL_P(array_ref);
  32558. }
  32559. Z_ADDREF_P(array_ref);
  32560. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
  32561. } else {
  32562. array_ptr = EX_VAR(opline->result.var);
  32563. ZVAL_COPY_VALUE(array_ptr, array_ref);
  32564. }
  32565. if (Z_OBJ_P(array_ptr)->properties
  32566. && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
  32567. if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
  32568. GC_DELREF(Z_OBJ_P(array_ptr)->properties);
  32569. }
  32570. Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
  32571. }
  32572. Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
  32573. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32574. } else {
  32575. zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
  32576. if (IS_CV == IS_VAR) {
  32577. } else {
  32578. }
  32579. if (UNEXPECTED(EG(exception))) {
  32580. HANDLE_EXCEPTION();
  32581. } else if (is_empty) {
  32582. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  32583. } else {
  32584. ZEND_VM_NEXT_OPCODE();
  32585. }
  32586. }
  32587. } else {
  32588. zend_error(E_WARNING, "Invalid argument supplied for foreach()");
  32589. ZVAL_UNDEF(EX_VAR(opline->result.var));
  32590. Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
  32591. if (IS_CV == IS_VAR) {
  32592. } else {
  32593. }
  32594. ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
  32595. }
  32596. }
  32597. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32598. {
  32599. USE_OPLINE
  32600. SAVE_OPLINE();
  32601. if (IS_CV != IS_UNUSED) {
  32602. zval *ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  32603. do {
  32604. if (Z_TYPE_P(ptr) == IS_LONG) {
  32605. EG(exit_status) = Z_LVAL_P(ptr);
  32606. } else {
  32607. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
  32608. ptr = Z_REFVAL_P(ptr);
  32609. if (Z_TYPE_P(ptr) == IS_LONG) {
  32610. EG(exit_status) = Z_LVAL_P(ptr);
  32611. break;
  32612. }
  32613. }
  32614. zend_print_zval(ptr, 0);
  32615. }
  32616. } while (0);
  32617. }
  32618. zend_bailout();
  32619. ZEND_VM_NEXT_OPCODE(); /* Never reached */
  32620. }
  32621. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32622. {
  32623. USE_OPLINE
  32624. zval *value;
  32625. zval *ref = NULL;
  32626. int ret;
  32627. SAVE_OPLINE();
  32628. value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  32629. if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
  32630. if (IS_CV == IS_VAR) {
  32631. ref = value;
  32632. }
  32633. value = Z_REFVAL_P(value);
  32634. }
  32635. ret = i_zend_is_true(value);
  32636. if (UNEXPECTED(EG(exception))) {
  32637. ZVAL_UNDEF(EX_VAR(opline->result.var));
  32638. HANDLE_EXCEPTION();
  32639. }
  32640. if (ret) {
  32641. zval *result = EX_VAR(opline->result.var);
  32642. ZVAL_COPY_VALUE(result, value);
  32643. if (IS_CV == IS_CONST) {
  32644. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  32645. } else if (IS_CV == IS_CV) {
  32646. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  32647. } else if (IS_CV == IS_VAR && ref) {
  32648. zend_reference *r = Z_REF_P(ref);
  32649. if (UNEXPECTED(GC_DELREF(r) == 0)) {
  32650. efree_size(r, sizeof(zend_reference));
  32651. } else if (Z_OPT_REFCOUNTED_P(result)) {
  32652. Z_ADDREF_P(result);
  32653. }
  32654. }
  32655. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  32656. }
  32657. ZEND_VM_NEXT_OPCODE();
  32658. }
  32659. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32660. {
  32661. USE_OPLINE
  32662. zval *value;
  32663. zval *ref = NULL;
  32664. SAVE_OPLINE();
  32665. value = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  32666. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  32667. if (IS_CV & IS_VAR) {
  32668. ref = value;
  32669. }
  32670. value = Z_REFVAL_P(value);
  32671. }
  32672. if (Z_TYPE_P(value) > IS_NULL) {
  32673. zval *result = EX_VAR(opline->result.var);
  32674. ZVAL_COPY_VALUE(result, value);
  32675. if (IS_CV == IS_CONST) {
  32676. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
  32677. } else if (IS_CV == IS_CV) {
  32678. if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
  32679. } else if ((IS_CV & IS_VAR) && ref) {
  32680. zend_reference *r = Z_REF_P(ref);
  32681. if (UNEXPECTED(GC_DELREF(r) == 0)) {
  32682. efree_size(r, sizeof(zend_reference));
  32683. } else if (Z_OPT_REFCOUNTED_P(result)) {
  32684. Z_ADDREF_P(result);
  32685. }
  32686. }
  32687. ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
  32688. }
  32689. ZEND_VM_NEXT_OPCODE();
  32690. }
  32691. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32692. {
  32693. USE_OPLINE
  32694. zval *value;
  32695. zval *result = EX_VAR(opline->result.var);
  32696. value = EX_VAR(opline->op1.var);
  32697. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  32698. SAVE_OPLINE();
  32699. GET_OP1_UNDEF_CV(value, BP_VAR_R);
  32700. ZVAL_NULL(result);
  32701. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32702. }
  32703. if (IS_CV == IS_CV) {
  32704. ZVAL_COPY_DEREF(result, value);
  32705. } else if (IS_CV == IS_VAR) {
  32706. if (UNEXPECTED(Z_ISREF_P(value))) {
  32707. ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
  32708. if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
  32709. efree_size(Z_REF_P(value), sizeof(zend_reference));
  32710. } else if (Z_OPT_REFCOUNTED_P(result)) {
  32711. Z_ADDREF_P(result);
  32712. }
  32713. } else {
  32714. ZVAL_COPY_VALUE(result, value);
  32715. }
  32716. } else {
  32717. ZVAL_COPY_VALUE(result, value);
  32718. if (IS_CV == IS_CONST) {
  32719. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
  32720. Z_ADDREF_P(result);
  32721. }
  32722. }
  32723. }
  32724. ZEND_VM_NEXT_OPCODE();
  32725. }
  32726. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32727. {
  32728. USE_OPLINE
  32729. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  32730. zval *val;
  32731. SAVE_OPLINE();
  32732. val = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  32733. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  32734. zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
  32735. UNDEF_RESULT();
  32736. HANDLE_EXCEPTION();
  32737. }
  32738. if (Z_TYPE_P(val) == IS_ARRAY) {
  32739. ZVAL_COPY_VALUE(&generator->values, val);
  32740. if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
  32741. Z_ADDREF_P(val);
  32742. }
  32743. Z_FE_POS(generator->values) = 0;
  32744. } else if (IS_CV != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
  32745. zend_class_entry *ce = Z_OBJCE_P(val);
  32746. if (ce == zend_ce_generator) {
  32747. zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
  32748. if (IS_CV != IS_TMP_VAR) {
  32749. Z_ADDREF_P(val);
  32750. }
  32751. if (Z_ISUNDEF(new_gen->retval)) {
  32752. if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
  32753. zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
  32754. zval_ptr_dtor(val);
  32755. UNDEF_RESULT();
  32756. HANDLE_EXCEPTION();
  32757. } else {
  32758. zend_generator_yield_from(generator, new_gen);
  32759. }
  32760. } else if (UNEXPECTED(new_gen->execute_data == NULL)) {
  32761. zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
  32762. zval_ptr_dtor(val);
  32763. UNDEF_RESULT();
  32764. HANDLE_EXCEPTION();
  32765. } else {
  32766. if (RETURN_VALUE_USED(opline)) {
  32767. ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
  32768. }
  32769. ZEND_VM_NEXT_OPCODE();
  32770. }
  32771. } else {
  32772. zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
  32773. if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
  32774. if (!EG(exception)) {
  32775. zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
  32776. }
  32777. UNDEF_RESULT();
  32778. HANDLE_EXCEPTION();
  32779. }
  32780. iter->index = 0;
  32781. if (iter->funcs->rewind) {
  32782. iter->funcs->rewind(iter);
  32783. if (UNEXPECTED(EG(exception) != NULL)) {
  32784. OBJ_RELEASE(&iter->std);
  32785. UNDEF_RESULT();
  32786. HANDLE_EXCEPTION();
  32787. }
  32788. }
  32789. ZVAL_OBJ(&generator->values, &iter->std);
  32790. }
  32791. } else {
  32792. zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
  32793. UNDEF_RESULT();
  32794. HANDLE_EXCEPTION();
  32795. }
  32796. /* This is the default return value
  32797. * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
  32798. if (RETURN_VALUE_USED(opline)) {
  32799. ZVAL_NULL(EX_VAR(opline->result.var));
  32800. }
  32801. /* This generator has no send target (though the generator we delegate to might have one) */
  32802. generator->send_target = NULL;
  32803. /* We increment to the next op, so we are at the correct position when the
  32804. * generator is resumed. */
  32805. ZEND_VM_INC_OPCODE();
  32806. /* The GOTO VM uses a local opline variable. We need to set the opline
  32807. * variable in execute_data so we don't resume at an old position. */
  32808. SAVE_OPLINE();
  32809. ZEND_VM_RETURN();
  32810. }
  32811. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32812. {
  32813. USE_OPLINE
  32814. zval *value;
  32815. value = EX_VAR(opline->op1.var);
  32816. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  32817. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  32818. ZEND_VM_NEXT_OPCODE();
  32819. } else {
  32820. zend_bool strict;
  32821. if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
  32822. value = Z_REFVAL_P(value);
  32823. if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
  32824. ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
  32825. ZEND_VM_NEXT_OPCODE();
  32826. }
  32827. }
  32828. SAVE_OPLINE();
  32829. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  32830. value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
  32831. }
  32832. strict = EX_USES_STRICT_TYPES();
  32833. do {
  32834. if (EXPECTED(!strict)) {
  32835. zend_string *str;
  32836. zval tmp;
  32837. ZVAL_COPY(&tmp, value);
  32838. if (zend_parse_arg_str_weak(&tmp, &str)) {
  32839. ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
  32840. zval_ptr_dtor(&tmp);
  32841. break;
  32842. }
  32843. zval_ptr_dtor(&tmp);
  32844. }
  32845. zend_internal_type_error(strict, "strlen() expects parameter 1 to be string, %s given", zend_get_type_by_const(Z_TYPE_P(value)));
  32846. ZVAL_NULL(EX_VAR(opline->result.var));
  32847. } while (0);
  32848. }
  32849. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32850. }
  32851. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32852. {
  32853. USE_OPLINE
  32854. zval *value;
  32855. int result = 0;
  32856. value = EX_VAR(opline->op1.var);
  32857. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  32858. type_check_resource:
  32859. if (EXPECTED(Z_TYPE_P(value) != IS_RESOURCE)
  32860. || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
  32861. result = 1;
  32862. }
  32863. } else if ((IS_CV & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
  32864. value = Z_REFVAL_P(value);
  32865. if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
  32866. goto type_check_resource;
  32867. }
  32868. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  32869. result = ((1 << IS_NULL) & opline->extended_value) != 0;
  32870. SAVE_OPLINE();
  32871. GET_OP1_UNDEF_CV(value, BP_VAR_R);
  32872. ZEND_VM_SMART_BRANCH(result, 1);
  32873. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  32874. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32875. }
  32876. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  32877. SAVE_OPLINE();
  32878. ZEND_VM_SMART_BRANCH(result, 1);
  32879. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  32880. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  32881. } else {
  32882. ZEND_VM_SMART_BRANCH(result, 0);
  32883. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  32884. ZEND_VM_NEXT_OPCODE();
  32885. }
  32886. }
  32887. 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)
  32888. {
  32889. USE_OPLINE
  32890. zval *var_ptr;
  32891. var_ptr = EX_VAR(opline->op1.var);
  32892. Z_LVAL_P(var_ptr)++;
  32893. if (UNEXPECTED(0)) {
  32894. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  32895. }
  32896. ZEND_VM_NEXT_OPCODE();
  32897. }
  32898. 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)
  32899. {
  32900. USE_OPLINE
  32901. zval *var_ptr;
  32902. var_ptr = EX_VAR(opline->op1.var);
  32903. Z_LVAL_P(var_ptr)++;
  32904. if (UNEXPECTED(1)) {
  32905. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  32906. }
  32907. ZEND_VM_NEXT_OPCODE();
  32908. }
  32909. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32910. {
  32911. USE_OPLINE
  32912. zval *var_ptr;
  32913. var_ptr = EX_VAR(opline->op1.var);
  32914. fast_long_increment_function(var_ptr);
  32915. if (UNEXPECTED(0)) {
  32916. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  32917. }
  32918. ZEND_VM_NEXT_OPCODE();
  32919. }
  32920. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32921. {
  32922. USE_OPLINE
  32923. zval *var_ptr;
  32924. var_ptr = EX_VAR(opline->op1.var);
  32925. fast_long_increment_function(var_ptr);
  32926. if (UNEXPECTED(1)) {
  32927. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  32928. }
  32929. ZEND_VM_NEXT_OPCODE();
  32930. }
  32931. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32932. {
  32933. USE_OPLINE
  32934. zval *var_ptr;
  32935. var_ptr = EX_VAR(opline->op1.var);
  32936. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  32937. fast_long_increment_function(var_ptr);
  32938. } else {
  32939. Z_DVAL_P(var_ptr)++;
  32940. }
  32941. if (UNEXPECTED(0)) {
  32942. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  32943. }
  32944. ZEND_VM_NEXT_OPCODE();
  32945. }
  32946. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32947. {
  32948. USE_OPLINE
  32949. zval *var_ptr;
  32950. var_ptr = EX_VAR(opline->op1.var);
  32951. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  32952. fast_long_increment_function(var_ptr);
  32953. } else {
  32954. Z_DVAL_P(var_ptr)++;
  32955. }
  32956. if (UNEXPECTED(1)) {
  32957. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  32958. }
  32959. ZEND_VM_NEXT_OPCODE();
  32960. }
  32961. 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)
  32962. {
  32963. USE_OPLINE
  32964. zval *var_ptr;
  32965. var_ptr = EX_VAR(opline->op1.var);
  32966. Z_LVAL_P(var_ptr)--;
  32967. if (UNEXPECTED(0)) {
  32968. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  32969. }
  32970. ZEND_VM_NEXT_OPCODE();
  32971. }
  32972. 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)
  32973. {
  32974. USE_OPLINE
  32975. zval *var_ptr;
  32976. var_ptr = EX_VAR(opline->op1.var);
  32977. Z_LVAL_P(var_ptr)--;
  32978. if (UNEXPECTED(1)) {
  32979. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  32980. }
  32981. ZEND_VM_NEXT_OPCODE();
  32982. }
  32983. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32984. {
  32985. USE_OPLINE
  32986. zval *var_ptr;
  32987. var_ptr = EX_VAR(opline->op1.var);
  32988. fast_long_decrement_function(var_ptr);
  32989. if (UNEXPECTED(0)) {
  32990. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  32991. }
  32992. ZEND_VM_NEXT_OPCODE();
  32993. }
  32994. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  32995. {
  32996. USE_OPLINE
  32997. zval *var_ptr;
  32998. var_ptr = EX_VAR(opline->op1.var);
  32999. fast_long_decrement_function(var_ptr);
  33000. if (UNEXPECTED(1)) {
  33001. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  33002. }
  33003. ZEND_VM_NEXT_OPCODE();
  33004. }
  33005. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33006. {
  33007. USE_OPLINE
  33008. zval *var_ptr;
  33009. var_ptr = EX_VAR(opline->op1.var);
  33010. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  33011. fast_long_decrement_function(var_ptr);
  33012. } else {
  33013. Z_DVAL_P(var_ptr)--;
  33014. }
  33015. if (UNEXPECTED(0)) {
  33016. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  33017. }
  33018. ZEND_VM_NEXT_OPCODE();
  33019. }
  33020. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33021. {
  33022. USE_OPLINE
  33023. zval *var_ptr;
  33024. var_ptr = EX_VAR(opline->op1.var);
  33025. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  33026. fast_long_decrement_function(var_ptr);
  33027. } else {
  33028. Z_DVAL_P(var_ptr)--;
  33029. }
  33030. if (UNEXPECTED(1)) {
  33031. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
  33032. }
  33033. ZEND_VM_NEXT_OPCODE();
  33034. }
  33035. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33036. {
  33037. USE_OPLINE
  33038. zval *var_ptr;
  33039. var_ptr = EX_VAR(opline->op1.var);
  33040. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  33041. Z_LVAL_P(var_ptr)++;
  33042. ZEND_VM_NEXT_OPCODE();
  33043. }
  33044. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33045. {
  33046. USE_OPLINE
  33047. zval *var_ptr;
  33048. var_ptr = EX_VAR(opline->op1.var);
  33049. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  33050. fast_long_increment_function(var_ptr);
  33051. ZEND_VM_NEXT_OPCODE();
  33052. }
  33053. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33054. {
  33055. USE_OPLINE
  33056. zval *var_ptr;
  33057. var_ptr = EX_VAR(opline->op1.var);
  33058. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  33059. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  33060. fast_long_increment_function(var_ptr);
  33061. } else {
  33062. ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(var_ptr));
  33063. Z_DVAL_P(var_ptr)++;
  33064. }
  33065. ZEND_VM_NEXT_OPCODE();
  33066. }
  33067. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33068. {
  33069. USE_OPLINE
  33070. zval *var_ptr;
  33071. var_ptr = EX_VAR(opline->op1.var);
  33072. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  33073. Z_LVAL_P(var_ptr)--;
  33074. ZEND_VM_NEXT_OPCODE();
  33075. }
  33076. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33077. {
  33078. USE_OPLINE
  33079. zval *var_ptr;
  33080. var_ptr = EX_VAR(opline->op1.var);
  33081. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  33082. fast_long_decrement_function(var_ptr);
  33083. ZEND_VM_NEXT_OPCODE();
  33084. }
  33085. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33086. {
  33087. USE_OPLINE
  33088. zval *var_ptr;
  33089. var_ptr = EX_VAR(opline->op1.var);
  33090. if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
  33091. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
  33092. fast_long_decrement_function(var_ptr);
  33093. } else {
  33094. ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(var_ptr));
  33095. Z_DVAL_P(var_ptr)--;
  33096. }
  33097. ZEND_VM_NEXT_OPCODE();
  33098. }
  33099. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33100. {
  33101. USE_OPLINE
  33102. zval *varptr, *arg;
  33103. varptr = EX_VAR(opline->op1.var);
  33104. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  33105. if (IS_CV == IS_CV) {
  33106. ZVAL_COPY(arg, varptr);
  33107. } else /* if (IS_CV == IS_VAR) */ {
  33108. ZVAL_COPY_VALUE(arg, varptr);
  33109. }
  33110. ZEND_VM_NEXT_OPCODE();
  33111. }
  33112. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33113. {
  33114. USE_OPLINE
  33115. zval *varptr, *arg;
  33116. uint32_t arg_num = opline->op2.num;
  33117. if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
  33118. ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33119. }
  33120. varptr = EX_VAR(opline->op1.var);
  33121. arg = ZEND_CALL_VAR(EX(call), opline->result.var);
  33122. if (IS_CV == IS_CV) {
  33123. ZVAL_COPY(arg, varptr);
  33124. } else /* if (IS_CV == IS_VAR) */ {
  33125. ZVAL_COPY_VALUE(arg, varptr);
  33126. }
  33127. ZEND_VM_NEXT_OPCODE();
  33128. }
  33129. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33130. {
  33131. USE_OPLINE
  33132. zval *op1, *op2, *result;
  33133. op1 = EX_VAR(opline->op1.var);
  33134. op2 = RT_CONSTANT(opline, opline->op2);
  33135. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  33136. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  33137. result = EX_VAR(opline->result.var);
  33138. fast_long_add_function(result, op1, op2);
  33139. ZEND_VM_NEXT_OPCODE();
  33140. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  33141. result = EX_VAR(opline->result.var);
  33142. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
  33143. ZEND_VM_NEXT_OPCODE();
  33144. }
  33145. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  33146. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  33147. result = EX_VAR(opline->result.var);
  33148. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
  33149. ZEND_VM_NEXT_OPCODE();
  33150. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  33151. result = EX_VAR(opline->result.var);
  33152. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
  33153. ZEND_VM_NEXT_OPCODE();
  33154. }
  33155. }
  33156. SAVE_OPLINE();
  33157. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  33158. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  33159. }
  33160. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  33161. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  33162. }
  33163. add_function(EX_VAR(opline->result.var), op1, op2);
  33164. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33165. }
  33166. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33167. {
  33168. USE_OPLINE
  33169. zval *op1, *op2, *result;
  33170. op1 = EX_VAR(opline->op1.var);
  33171. op2 = RT_CONSTANT(opline, opline->op2);
  33172. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  33173. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  33174. result = EX_VAR(opline->result.var);
  33175. fast_long_sub_function(result, op1, op2);
  33176. ZEND_VM_NEXT_OPCODE();
  33177. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  33178. result = EX_VAR(opline->result.var);
  33179. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
  33180. ZEND_VM_NEXT_OPCODE();
  33181. }
  33182. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  33183. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  33184. result = EX_VAR(opline->result.var);
  33185. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  33186. ZEND_VM_NEXT_OPCODE();
  33187. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  33188. result = EX_VAR(opline->result.var);
  33189. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
  33190. ZEND_VM_NEXT_OPCODE();
  33191. }
  33192. }
  33193. SAVE_OPLINE();
  33194. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  33195. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  33196. }
  33197. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  33198. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  33199. }
  33200. sub_function(EX_VAR(opline->result.var), op1, op2);
  33201. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33202. }
  33203. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33204. {
  33205. USE_OPLINE
  33206. zval *op1, *op2, *result;
  33207. op1 = EX_VAR(opline->op1.var);
  33208. op2 = RT_CONSTANT(opline, opline->op2);
  33209. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  33210. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  33211. zend_long overflow;
  33212. result = EX_VAR(opline->result.var);
  33213. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  33214. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  33215. ZEND_VM_NEXT_OPCODE();
  33216. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  33217. result = EX_VAR(opline->result.var);
  33218. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
  33219. ZEND_VM_NEXT_OPCODE();
  33220. }
  33221. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  33222. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  33223. result = EX_VAR(opline->result.var);
  33224. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
  33225. ZEND_VM_NEXT_OPCODE();
  33226. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  33227. result = EX_VAR(opline->result.var);
  33228. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
  33229. ZEND_VM_NEXT_OPCODE();
  33230. }
  33231. }
  33232. SAVE_OPLINE();
  33233. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  33234. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  33235. }
  33236. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  33237. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  33238. }
  33239. mul_function(EX_VAR(opline->result.var), op1, op2);
  33240. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33241. }
  33242. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33243. {
  33244. USE_OPLINE
  33245. zval *op1, *op2;
  33246. SAVE_OPLINE();
  33247. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  33248. op2 = RT_CONSTANT(opline, opline->op2);
  33249. fast_div_function(EX_VAR(opline->result.var), op1, op2);
  33250. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33251. }
  33252. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33253. {
  33254. USE_OPLINE
  33255. zval *op1, *op2, *result;
  33256. op1 = EX_VAR(opline->op1.var);
  33257. op2 = RT_CONSTANT(opline, opline->op2);
  33258. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  33259. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  33260. result = EX_VAR(opline->result.var);
  33261. if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
  33262. ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33263. } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
  33264. /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
  33265. ZVAL_LONG(result, 0);
  33266. } else {
  33267. ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
  33268. }
  33269. ZEND_VM_NEXT_OPCODE();
  33270. }
  33271. }
  33272. SAVE_OPLINE();
  33273. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  33274. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  33275. }
  33276. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  33277. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  33278. }
  33279. mod_function(EX_VAR(opline->result.var), op1, op2);
  33280. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33281. }
  33282. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33283. {
  33284. USE_OPLINE
  33285. zval *op1, *op2;
  33286. op1 = EX_VAR(opline->op1.var);
  33287. op2 = RT_CONSTANT(opline, opline->op2);
  33288. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  33289. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  33290. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  33291. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
  33292. ZEND_VM_NEXT_OPCODE();
  33293. }
  33294. SAVE_OPLINE();
  33295. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  33296. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  33297. }
  33298. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  33299. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  33300. }
  33301. shift_left_function(EX_VAR(opline->result.var), op1, op2);
  33302. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33303. }
  33304. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33305. {
  33306. USE_OPLINE
  33307. zval *op1, *op2;
  33308. op1 = EX_VAR(opline->op1.var);
  33309. op2 = RT_CONSTANT(opline, opline->op2);
  33310. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  33311. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  33312. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  33313. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
  33314. ZEND_VM_NEXT_OPCODE();
  33315. }
  33316. SAVE_OPLINE();
  33317. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  33318. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  33319. }
  33320. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  33321. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  33322. }
  33323. shift_right_function(EX_VAR(opline->result.var), op1, op2);
  33324. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33325. }
  33326. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33327. {
  33328. USE_OPLINE
  33329. zval *op1, *op2;
  33330. SAVE_OPLINE();
  33331. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  33332. op2 = RT_CONSTANT(opline, opline->op2);
  33333. pow_function(EX_VAR(opline->result.var), op1, op2);
  33334. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33335. }
  33336. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33337. {
  33338. USE_OPLINE
  33339. zval *op1, *op2;
  33340. op1 = EX_VAR(opline->op1.var);
  33341. op2 = RT_CONSTANT(opline, opline->op2);
  33342. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  33343. (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  33344. zend_string *op1_str = Z_STR_P(op1);
  33345. zend_string *op2_str = Z_STR_P(op2);
  33346. zend_string *str;
  33347. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  33348. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  33349. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  33350. } else {
  33351. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  33352. }
  33353. } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  33354. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  33355. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  33356. } else {
  33357. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  33358. }
  33359. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  33360. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  33361. size_t len = ZSTR_LEN(op1_str);
  33362. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  33363. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  33364. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  33365. } else {
  33366. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  33367. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  33368. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  33369. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  33370. }
  33371. ZEND_VM_NEXT_OPCODE();
  33372. } else {
  33373. SAVE_OPLINE();
  33374. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  33375. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  33376. }
  33377. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  33378. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  33379. }
  33380. concat_function(EX_VAR(opline->result.var), op1, op2);
  33381. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33382. }
  33383. }
  33384. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33385. {
  33386. USE_OPLINE
  33387. zval *op1, *op2;
  33388. int result;
  33389. SAVE_OPLINE();
  33390. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  33391. op2 = RT_CONSTANT(opline, opline->op2);
  33392. result = fast_is_identical_function(op1, op2);
  33393. ZEND_VM_SMART_BRANCH(result, 1);
  33394. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  33395. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33396. }
  33397. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33398. {
  33399. USE_OPLINE
  33400. zval *op1, *op2;
  33401. int result;
  33402. SAVE_OPLINE();
  33403. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  33404. op2 = RT_CONSTANT(opline, opline->op2);
  33405. result = fast_is_not_identical_function(op1, op2);
  33406. ZEND_VM_SMART_BRANCH(result, 1);
  33407. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  33408. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33409. }
  33410. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33411. {
  33412. USE_OPLINE
  33413. zval *op1, *op2, *result;
  33414. op1 = EX_VAR(opline->op1.var);
  33415. op2 = RT_CONSTANT(opline, opline->op2);
  33416. do {
  33417. int result;
  33418. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  33419. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  33420. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  33421. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  33422. result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
  33423. } else {
  33424. break;
  33425. }
  33426. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  33427. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  33428. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  33429. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  33430. result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
  33431. } else {
  33432. break;
  33433. }
  33434. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  33435. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  33436. result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  33437. } else {
  33438. break;
  33439. }
  33440. } else {
  33441. break;
  33442. }
  33443. ZEND_VM_SMART_BRANCH(result, 0);
  33444. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  33445. ZEND_VM_NEXT_OPCODE();
  33446. } while (0);
  33447. SAVE_OPLINE();
  33448. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  33449. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  33450. }
  33451. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  33452. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  33453. }
  33454. result = EX_VAR(opline->result.var);
  33455. compare_function(result, op1, op2);
  33456. ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
  33457. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33458. }
  33459. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33460. {
  33461. USE_OPLINE
  33462. zval *op1, *op2, *result;
  33463. op1 = EX_VAR(opline->op1.var);
  33464. op2 = RT_CONSTANT(opline, opline->op2);
  33465. do {
  33466. int result;
  33467. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  33468. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  33469. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  33470. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  33471. result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
  33472. } else {
  33473. break;
  33474. }
  33475. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  33476. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  33477. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  33478. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  33479. result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
  33480. } else {
  33481. break;
  33482. }
  33483. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  33484. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  33485. result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  33486. } else {
  33487. break;
  33488. }
  33489. } else {
  33490. break;
  33491. }
  33492. ZEND_VM_SMART_BRANCH(result, 0);
  33493. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  33494. ZEND_VM_NEXT_OPCODE();
  33495. } while (0);
  33496. SAVE_OPLINE();
  33497. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  33498. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  33499. }
  33500. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  33501. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  33502. }
  33503. result = EX_VAR(opline->result.var);
  33504. compare_function(result, op1, op2);
  33505. ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
  33506. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33507. }
  33508. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33509. {
  33510. USE_OPLINE
  33511. zval *op1, *op2, *result;
  33512. op1 = EX_VAR(opline->op1.var);
  33513. op2 = RT_CONSTANT(opline, opline->op2);
  33514. do {
  33515. int result;
  33516. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  33517. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  33518. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  33519. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  33520. result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
  33521. } else {
  33522. break;
  33523. }
  33524. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  33525. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  33526. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  33527. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  33528. result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
  33529. } else {
  33530. break;
  33531. }
  33532. } else {
  33533. break;
  33534. }
  33535. ZEND_VM_SMART_BRANCH(result, 0);
  33536. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  33537. ZEND_VM_NEXT_OPCODE();
  33538. } while (0);
  33539. SAVE_OPLINE();
  33540. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  33541. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  33542. }
  33543. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  33544. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  33545. }
  33546. result = EX_VAR(opline->result.var);
  33547. compare_function(result, op1, op2);
  33548. ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
  33549. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33550. }
  33551. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33552. {
  33553. USE_OPLINE
  33554. zval *op1, *op2, *result;
  33555. op1 = EX_VAR(opline->op1.var);
  33556. op2 = RT_CONSTANT(opline, opline->op2);
  33557. do {
  33558. int result;
  33559. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  33560. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  33561. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  33562. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  33563. result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
  33564. } else {
  33565. break;
  33566. }
  33567. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  33568. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  33569. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  33570. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  33571. result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
  33572. } else {
  33573. break;
  33574. }
  33575. } else {
  33576. break;
  33577. }
  33578. ZEND_VM_SMART_BRANCH(result, 0);
  33579. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  33580. ZEND_VM_NEXT_OPCODE();
  33581. } while (0);
  33582. SAVE_OPLINE();
  33583. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  33584. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  33585. }
  33586. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  33587. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  33588. }
  33589. result = EX_VAR(opline->result.var);
  33590. compare_function(result, op1, op2);
  33591. ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
  33592. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33593. }
  33594. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33595. {
  33596. USE_OPLINE
  33597. zval *op1, *op2;
  33598. SAVE_OPLINE();
  33599. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  33600. op2 = RT_CONSTANT(opline, opline->op2);
  33601. compare_function(EX_VAR(opline->result.var), op1, op2);
  33602. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33603. }
  33604. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33605. {
  33606. USE_OPLINE
  33607. zval *op1, *op2;
  33608. op1 = EX_VAR(opline->op1.var);
  33609. op2 = RT_CONSTANT(opline, opline->op2);
  33610. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  33611. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  33612. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
  33613. ZEND_VM_NEXT_OPCODE();
  33614. }
  33615. SAVE_OPLINE();
  33616. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  33617. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  33618. }
  33619. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  33620. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  33621. }
  33622. bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
  33623. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33624. }
  33625. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33626. {
  33627. USE_OPLINE
  33628. zval *op1, *op2;
  33629. op1 = EX_VAR(opline->op1.var);
  33630. op2 = RT_CONSTANT(opline, opline->op2);
  33631. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  33632. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  33633. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
  33634. ZEND_VM_NEXT_OPCODE();
  33635. }
  33636. SAVE_OPLINE();
  33637. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  33638. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  33639. }
  33640. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  33641. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  33642. }
  33643. bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
  33644. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33645. }
  33646. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33647. {
  33648. USE_OPLINE
  33649. zval *op1, *op2;
  33650. op1 = EX_VAR(opline->op1.var);
  33651. op2 = RT_CONSTANT(opline, opline->op2);
  33652. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  33653. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  33654. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
  33655. ZEND_VM_NEXT_OPCODE();
  33656. }
  33657. SAVE_OPLINE();
  33658. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  33659. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  33660. }
  33661. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  33662. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  33663. }
  33664. bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
  33665. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33666. }
  33667. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33668. {
  33669. USE_OPLINE
  33670. zval *op1, *op2;
  33671. SAVE_OPLINE();
  33672. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  33673. op2 = RT_CONSTANT(opline, opline->op2);
  33674. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  33675. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33676. }
  33677. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  33678. {
  33679. USE_OPLINE
  33680. zend_free_op free_op_data1;
  33681. zval *object;
  33682. zval *property;
  33683. zval *value;
  33684. zval *zptr;
  33685. SAVE_OPLINE();
  33686. object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  33687. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  33688. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  33689. }
  33690. property = RT_CONSTANT(opline, opline->op2);
  33691. do {
  33692. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  33693. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  33694. if (Z_ISREF_P(object)) {
  33695. object = Z_REFVAL_P(object);
  33696. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  33697. goto assign_op_object;
  33698. }
  33699. }
  33700. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  33701. break;
  33702. }
  33703. }
  33704. /* here we are sure we are dealing with an object */
  33705. assign_op_object:
  33706. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  33707. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
  33708. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  33709. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  33710. ZVAL_NULL(EX_VAR(opline->result.var));
  33711. }
  33712. } else {
  33713. ZVAL_DEREF(zptr);
  33714. binary_op(zptr, zptr, value);
  33715. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  33716. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  33717. }
  33718. }
  33719. } else {
  33720. zend_assign_op_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC);
  33721. }
  33722. } while (0);
  33723. FREE_OP(free_op_data1);
  33724. /* assign_obj has two opcodes! */
  33725. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  33726. }
  33727. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  33728. {
  33729. USE_OPLINE
  33730. zend_free_op free_op_data1;
  33731. zval *var_ptr;
  33732. zval *value, *container, *dim;
  33733. SAVE_OPLINE();
  33734. container = EX_VAR(opline->op1.var);
  33735. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  33736. assign_dim_op_array:
  33737. SEPARATE_ARRAY(container);
  33738. assign_dim_op_new_array:
  33739. dim = RT_CONSTANT(opline, opline->op2);
  33740. if (IS_CONST == IS_UNUSED) {
  33741. var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
  33742. if (UNEXPECTED(!var_ptr)) {
  33743. zend_cannot_add_element();
  33744. goto assign_dim_op_ret_null;
  33745. }
  33746. } else {
  33747. if (IS_CONST == IS_CONST) {
  33748. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
  33749. } else {
  33750. var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
  33751. }
  33752. if (UNEXPECTED(!var_ptr)) {
  33753. goto assign_dim_op_ret_null;
  33754. }
  33755. ZVAL_DEREF(var_ptr);
  33756. }
  33757. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  33758. binary_op(var_ptr, var_ptr, value);
  33759. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  33760. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  33761. }
  33762. } else {
  33763. if (EXPECTED(Z_ISREF_P(container))) {
  33764. container = Z_REFVAL_P(container);
  33765. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  33766. goto assign_dim_op_array;
  33767. }
  33768. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  33769. container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
  33770. assign_dim_op_convert_to_array:
  33771. ZVAL_ARR(container, zend_new_array(8));
  33772. goto assign_dim_op_new_array;
  33773. }
  33774. dim = RT_CONSTANT(opline, opline->op2);
  33775. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  33776. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  33777. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  33778. dim++;
  33779. }
  33780. zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC);
  33781. } else {
  33782. if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  33783. if (IS_CONST == IS_UNUSED) {
  33784. zend_use_new_element_for_string();
  33785. } else {
  33786. zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC);
  33787. zend_wrong_string_offset(EXECUTE_DATA_C);
  33788. }
  33789. UNDEF_RESULT();
  33790. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  33791. goto assign_dim_op_convert_to_array;
  33792. } else {
  33793. if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
  33794. zend_use_scalar_as_array();
  33795. }
  33796. assign_dim_op_ret_null:
  33797. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  33798. ZVAL_NULL(EX_VAR(opline->result.var));
  33799. }
  33800. }
  33801. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  33802. }
  33803. }
  33804. FREE_OP(free_op_data1);
  33805. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  33806. }
  33807. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_CV_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  33808. {
  33809. USE_OPLINE
  33810. zval *var_ptr;
  33811. zval *value;
  33812. SAVE_OPLINE();
  33813. value = RT_CONSTANT(opline, opline->op2);
  33814. var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  33815. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  33816. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  33817. ZVAL_NULL(EX_VAR(opline->result.var));
  33818. }
  33819. } else {
  33820. ZVAL_DEREF(var_ptr);
  33821. binary_op(var_ptr, var_ptr, value);
  33822. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  33823. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  33824. }
  33825. }
  33826. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  33827. }
  33828. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  33829. {
  33830. #if 1 && IS_CONST == IS_UNUSED
  33831. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33832. #else
  33833. # if 0 || IS_CV != IS_UNUSED
  33834. # if 0
  33835. /* opline->extended_value checks are specialized, don't need opline */
  33836. USE_OPLINE
  33837. # endif
  33838. if (EXPECTED(1)) {
  33839. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33840. }
  33841. if (EXPECTED(0)) {
  33842. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33843. }
  33844. # endif
  33845. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33846. #endif
  33847. }
  33848. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  33849. {
  33850. #if 1 && IS_CONST == IS_UNUSED
  33851. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33852. #else
  33853. # if 0 || IS_CV != IS_UNUSED
  33854. # if 0
  33855. /* opline->extended_value checks are specialized, don't need opline */
  33856. USE_OPLINE
  33857. # endif
  33858. if (EXPECTED(0)) {
  33859. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33860. }
  33861. if (EXPECTED(1)) {
  33862. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33863. }
  33864. # endif
  33865. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33866. #endif
  33867. }
  33868. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  33869. {
  33870. #if 1 && IS_CONST == IS_UNUSED
  33871. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33872. #else
  33873. # if 0 || IS_CV != IS_UNUSED
  33874. # if 0
  33875. /* opline->extended_value checks are specialized, don't need opline */
  33876. USE_OPLINE
  33877. # endif
  33878. if (EXPECTED(0)) {
  33879. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33880. }
  33881. if (EXPECTED(0)) {
  33882. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33883. }
  33884. # endif
  33885. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33886. #endif
  33887. }
  33888. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33889. {
  33890. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33891. }
  33892. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33893. {
  33894. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33895. }
  33896. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33897. {
  33898. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33899. }
  33900. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33901. {
  33902. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33903. }
  33904. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33905. {
  33906. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33907. }
  33908. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33909. {
  33910. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33911. }
  33912. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33913. {
  33914. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33915. }
  33916. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33917. {
  33918. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33919. }
  33920. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33921. {
  33922. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33923. }
  33924. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33925. {
  33926. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33927. }
  33928. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33929. {
  33930. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33931. }
  33932. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33933. {
  33934. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33935. }
  33936. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33937. {
  33938. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33939. }
  33940. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33941. {
  33942. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33943. }
  33944. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33945. {
  33946. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33947. }
  33948. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33949. {
  33950. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33951. }
  33952. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33953. {
  33954. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33955. }
  33956. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33957. {
  33958. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33959. }
  33960. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33961. {
  33962. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33963. }
  33964. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33965. {
  33966. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33967. }
  33968. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33969. {
  33970. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33971. }
  33972. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33973. {
  33974. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33975. }
  33976. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33977. {
  33978. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33979. }
  33980. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33981. {
  33982. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33983. }
  33984. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33985. {
  33986. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33987. }
  33988. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33989. {
  33990. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33991. }
  33992. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33993. {
  33994. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33995. }
  33996. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  33997. {
  33998. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  33999. }
  34000. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34001. {
  34002. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34003. }
  34004. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34005. {
  34006. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34007. }
  34008. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34009. {
  34010. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34011. }
  34012. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34013. {
  34014. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34015. }
  34016. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34017. {
  34018. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34019. }
  34020. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34021. {
  34022. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34023. }
  34024. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34025. {
  34026. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34027. }
  34028. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34029. {
  34030. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34031. }
  34032. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  34033. {
  34034. USE_OPLINE
  34035. zval *object;
  34036. zval *property;
  34037. zval *zptr;
  34038. SAVE_OPLINE();
  34039. object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  34040. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  34041. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34042. }
  34043. property = RT_CONSTANT(opline, opline->op2);
  34044. do {
  34045. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  34046. if (Z_ISREF_P(object)) {
  34047. object = Z_REFVAL_P(object);
  34048. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  34049. goto pre_incdec_object;
  34050. }
  34051. }
  34052. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  34053. break;
  34054. }
  34055. }
  34056. /* here we are sure we are dealing with an object */
  34057. pre_incdec_object:
  34058. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  34059. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  34060. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  34061. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  34062. ZVAL_NULL(EX_VAR(opline->result.var));
  34063. }
  34064. } else {
  34065. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  34066. if (inc) {
  34067. fast_long_increment_function(zptr);
  34068. } else {
  34069. fast_long_decrement_function(zptr);
  34070. }
  34071. } else {
  34072. ZVAL_DEREF(zptr);
  34073. if (inc) {
  34074. increment_function(zptr);
  34075. } else {
  34076. decrement_function(zptr);
  34077. }
  34078. }
  34079. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  34080. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  34081. }
  34082. }
  34083. } else {
  34084. zend_pre_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  34085. }
  34086. } while (0);
  34087. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34088. }
  34089. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34090. {
  34091. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34092. }
  34093. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34094. {
  34095. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34096. }
  34097. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  34098. {
  34099. USE_OPLINE
  34100. zval *object;
  34101. zval *property;
  34102. zval *zptr;
  34103. SAVE_OPLINE();
  34104. object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  34105. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  34106. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34107. }
  34108. property = RT_CONSTANT(opline, opline->op2);
  34109. do {
  34110. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  34111. if (Z_ISREF_P(object)) {
  34112. object = Z_REFVAL_P(object);
  34113. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  34114. goto post_incdec_object;
  34115. }
  34116. }
  34117. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  34118. break;
  34119. }
  34120. }
  34121. /* here we are sure we are dealing with an object */
  34122. post_incdec_object:
  34123. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  34124. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  34125. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  34126. ZVAL_NULL(EX_VAR(opline->result.var));
  34127. } else {
  34128. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  34129. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr));
  34130. if (inc) {
  34131. fast_long_increment_function(zptr);
  34132. } else {
  34133. fast_long_decrement_function(zptr);
  34134. }
  34135. } else {
  34136. ZVAL_DEREF(zptr);
  34137. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  34138. if (inc) {
  34139. increment_function(zptr);
  34140. } else {
  34141. decrement_function(zptr);
  34142. }
  34143. }
  34144. }
  34145. } else {
  34146. zend_post_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  34147. }
  34148. } while (0);
  34149. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34150. }
  34151. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34152. {
  34153. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34154. }
  34155. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34156. {
  34157. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34158. }
  34159. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CV_CONST(int type ZEND_OPCODE_HANDLER_ARGS_DC)
  34160. {
  34161. USE_OPLINE
  34162. zval *varname;
  34163. zval *retval;
  34164. zend_string *name, *tmp_name;
  34165. zend_class_entry *ce;
  34166. SAVE_OPLINE();
  34167. do {
  34168. if (IS_CONST == IS_CONST) {
  34169. if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) {
  34170. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  34171. break;
  34172. } else {
  34173. zval *class_name = RT_CONSTANT(opline, opline->op2);
  34174. if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) {
  34175. ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  34176. if (UNEXPECTED(ce == NULL)) {
  34177. retval = NULL;
  34178. break;
  34179. }
  34180. if (IS_CV != IS_CONST) {
  34181. CACHE_PTR(opline->extended_value, ce);
  34182. }
  34183. }
  34184. }
  34185. } else {
  34186. if (IS_CONST == IS_UNUSED) {
  34187. ce = zend_fetch_class(NULL, opline->op2.num);
  34188. if (UNEXPECTED(ce == NULL)) {
  34189. retval = NULL;
  34190. break;
  34191. }
  34192. } else {
  34193. ce = Z_CE_P(EX_VAR(opline->op2.var));
  34194. }
  34195. if (IS_CV == IS_CONST &&
  34196. EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  34197. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  34198. break;
  34199. }
  34200. }
  34201. varname = EX_VAR(opline->op1.var);
  34202. if (IS_CV == IS_CONST) {
  34203. name = Z_STR_P(varname);
  34204. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  34205. name = Z_STR_P(varname);
  34206. tmp_name = NULL;
  34207. } else {
  34208. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  34209. zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC);
  34210. }
  34211. name = zval_get_tmp_string(varname, &tmp_name);
  34212. }
  34213. retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
  34214. if (IS_CV != IS_CONST) {
  34215. zend_tmp_string_release(tmp_name);
  34216. }
  34217. if (IS_CV == IS_CONST && EXPECTED(retval)) {
  34218. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval);
  34219. }
  34220. } while (0);
  34221. if (UNEXPECTED(retval == NULL)) {
  34222. if (EG(exception)) {
  34223. ZVAL_UNDEF(EX_VAR(opline->result.var));
  34224. HANDLE_EXCEPTION();
  34225. } else {
  34226. ZEND_ASSERT(type == BP_VAR_IS);
  34227. retval = &EG(uninitialized_zval);
  34228. }
  34229. }
  34230. if (type == BP_VAR_R || type == BP_VAR_IS) {
  34231. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  34232. } else {
  34233. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  34234. }
  34235. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34236. }
  34237. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34238. {
  34239. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34240. }
  34241. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34242. {
  34243. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34244. }
  34245. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34246. {
  34247. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34248. }
  34249. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34250. {
  34251. int fetch_type =
  34252. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  34253. BP_VAR_W : BP_VAR_R;
  34254. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34255. }
  34256. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34257. {
  34258. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34259. }
  34260. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34261. {
  34262. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  34263. }
  34264. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34265. {
  34266. USE_OPLINE
  34267. zval *container, *dim, *value, *result;
  34268. SAVE_OPLINE();
  34269. container = EX_VAR(opline->op1.var);
  34270. dim = RT_CONSTANT(opline, opline->op2);
  34271. if (IS_CV != IS_CONST) {
  34272. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  34273. fetch_dim_r_array:
  34274. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
  34275. result = EX_VAR(opline->result.var);
  34276. ZVAL_COPY_DEREF(result, value);
  34277. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  34278. container = Z_REFVAL_P(container);
  34279. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  34280. goto fetch_dim_r_array;
  34281. } else {
  34282. goto fetch_dim_r_slow;
  34283. }
  34284. } else {
  34285. fetch_dim_r_slow:
  34286. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  34287. dim++;
  34288. }
  34289. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  34290. }
  34291. } else {
  34292. zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  34293. }
  34294. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34295. }
  34296. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34297. {
  34298. USE_OPLINE
  34299. zend_free_op free_op1;
  34300. zval *container;
  34301. SAVE_OPLINE();
  34302. container = EX_VAR(opline->op1.var);
  34303. zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  34304. if (IS_CV == IS_VAR) {
  34305. zval *result = EX_VAR(opline->result.var);
  34306. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  34307. }
  34308. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34309. }
  34310. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34311. {
  34312. USE_OPLINE
  34313. zend_free_op free_op1;
  34314. zval *container;
  34315. SAVE_OPLINE();
  34316. container = EX_VAR(opline->op1.var);
  34317. zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  34318. if (IS_CV == IS_VAR) {
  34319. zval *result = EX_VAR(opline->result.var);
  34320. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  34321. }
  34322. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34323. }
  34324. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34325. {
  34326. USE_OPLINE
  34327. zval *container;
  34328. SAVE_OPLINE();
  34329. container = EX_VAR(opline->op1.var);
  34330. zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  34331. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34332. }
  34333. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34334. {
  34335. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  34336. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  34337. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34338. }
  34339. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34340. } else {
  34341. if (IS_CONST == IS_UNUSED) {
  34342. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34343. }
  34344. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34345. }
  34346. }
  34347. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34348. {
  34349. USE_OPLINE
  34350. zend_free_op free_op1;
  34351. zval *container;
  34352. SAVE_OPLINE();
  34353. container = EX_VAR(opline->op1.var);
  34354. zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
  34355. if (IS_CV == IS_VAR) {
  34356. zval *result = EX_VAR(opline->result.var);
  34357. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  34358. }
  34359. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34360. }
  34361. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34362. {
  34363. USE_OPLINE
  34364. zval *container;
  34365. zval *offset;
  34366. void **cache_slot = NULL;
  34367. SAVE_OPLINE();
  34368. container = EX_VAR(opline->op1.var);
  34369. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  34370. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34371. }
  34372. offset = RT_CONSTANT(opline, opline->op2);
  34373. if (IS_CV == IS_CONST ||
  34374. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  34375. do {
  34376. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  34377. container = Z_REFVAL_P(container);
  34378. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  34379. break;
  34380. }
  34381. }
  34382. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  34383. GET_OP1_UNDEF_CV(container, BP_VAR_R);
  34384. }
  34385. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  34386. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  34387. }
  34388. goto fetch_obj_r_no_object;
  34389. } while (0);
  34390. }
  34391. /* here we are sure we are dealing with an object */
  34392. do {
  34393. zend_object *zobj = Z_OBJ_P(container);
  34394. zval *retval;
  34395. if (IS_CONST == IS_CONST) {
  34396. cache_slot = CACHE_ADDR(opline->extended_value);
  34397. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  34398. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  34399. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  34400. retval = OBJ_PROP(zobj, prop_offset);
  34401. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  34402. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  34403. break;
  34404. }
  34405. } else if (EXPECTED(zobj->properties != NULL)) {
  34406. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  34407. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  34408. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  34409. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  34410. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  34411. (EXPECTED(p->key == Z_STR_P(offset)) ||
  34412. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  34413. EXPECTED(p->key != NULL) &&
  34414. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  34415. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
  34416. break;
  34417. }
  34418. }
  34419. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  34420. }
  34421. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  34422. if (EXPECTED(retval)) {
  34423. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  34424. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  34425. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  34426. break;
  34427. }
  34428. }
  34429. }
  34430. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
  34431. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  34432. }
  34433. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  34434. fetch_obj_r_no_object:
  34435. zend_wrong_property_read(offset);
  34436. ZVAL_NULL(EX_VAR(opline->result.var));
  34437. } else {
  34438. retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  34439. if (retval != EX_VAR(opline->result.var)) {
  34440. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  34441. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  34442. zend_unwrap_reference(retval);
  34443. }
  34444. }
  34445. } while (0);
  34446. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34447. }
  34448. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34449. {
  34450. USE_OPLINE
  34451. zend_free_op free_op1;
  34452. zval *property, *container, *result;
  34453. SAVE_OPLINE();
  34454. container = EX_VAR(opline->op1.var);
  34455. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  34456. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34457. }
  34458. property = RT_CONSTANT(opline, opline->op2);
  34459. result = EX_VAR(opline->result.var);
  34460. zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC);
  34461. if (IS_CV == IS_VAR) {
  34462. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  34463. }
  34464. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34465. }
  34466. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34467. {
  34468. USE_OPLINE
  34469. zend_free_op free_op1;
  34470. zval *property, *container, *result;
  34471. SAVE_OPLINE();
  34472. container = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  34473. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  34474. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34475. }
  34476. property = RT_CONSTANT(opline, opline->op2);
  34477. result = EX_VAR(opline->result.var);
  34478. zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC);
  34479. if (IS_CV == IS_VAR) {
  34480. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  34481. }
  34482. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34483. }
  34484. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34485. {
  34486. USE_OPLINE
  34487. zval *container;
  34488. zval *offset;
  34489. void **cache_slot = NULL;
  34490. SAVE_OPLINE();
  34491. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  34492. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  34493. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34494. }
  34495. offset = RT_CONSTANT(opline, opline->op2);
  34496. if (IS_CV == IS_CONST ||
  34497. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  34498. do {
  34499. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  34500. container = Z_REFVAL_P(container);
  34501. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  34502. break;
  34503. }
  34504. }
  34505. goto fetch_obj_is_no_object;
  34506. } while (0);
  34507. }
  34508. /* here we are sure we are dealing with an object */
  34509. do {
  34510. zend_object *zobj = Z_OBJ_P(container);
  34511. zval *retval;
  34512. if (IS_CONST == IS_CONST) {
  34513. cache_slot = CACHE_ADDR(opline->extended_value);
  34514. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  34515. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  34516. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  34517. retval = OBJ_PROP(zobj, prop_offset);
  34518. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  34519. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  34520. break;
  34521. }
  34522. } else if (EXPECTED(zobj->properties != NULL)) {
  34523. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  34524. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  34525. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  34526. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  34527. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  34528. (EXPECTED(p->key == Z_STR_P(offset)) ||
  34529. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  34530. EXPECTED(p->key != NULL) &&
  34531. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  34532. ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
  34533. break;
  34534. }
  34535. }
  34536. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  34537. }
  34538. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  34539. if (EXPECTED(retval)) {
  34540. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  34541. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  34542. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  34543. break;
  34544. }
  34545. }
  34546. }
  34547. }
  34548. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  34549. fetch_obj_is_no_object:
  34550. ZVAL_NULL(EX_VAR(opline->result.var));
  34551. } else {
  34552. retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  34553. if (retval != EX_VAR(opline->result.var)) {
  34554. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  34555. }
  34556. }
  34557. } while (0);
  34558. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34559. }
  34560. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34561. {
  34562. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  34563. /* Behave like FETCH_OBJ_W */
  34564. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  34565. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34566. }
  34567. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34568. } else {
  34569. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34570. }
  34571. }
  34572. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34573. {
  34574. USE_OPLINE
  34575. zend_free_op free_op1;
  34576. zval *container, *property, *result;
  34577. SAVE_OPLINE();
  34578. container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
  34579. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  34580. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34581. }
  34582. property = RT_CONSTANT(opline, opline->op2);
  34583. result = EX_VAR(opline->result.var);
  34584. zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC);
  34585. if (IS_CV == IS_VAR) {
  34586. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  34587. }
  34588. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  34589. }
  34590. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34591. {
  34592. USE_OPLINE
  34593. zval *object, *property, *value, tmp;
  34594. SAVE_OPLINE();
  34595. object = EX_VAR(opline->op1.var);
  34596. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  34597. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34598. }
  34599. property = RT_CONSTANT(opline, opline->op2);
  34600. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  34601. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  34602. if (Z_ISREF_P(object)) {
  34603. object = Z_REFVAL_P(object);
  34604. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  34605. goto assign_object;
  34606. }
  34607. }
  34608. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  34609. goto exit_assign_obj;
  34610. }
  34611. }
  34612. assign_object:
  34613. if (IS_CONST == IS_CONST &&
  34614. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  34615. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  34616. zend_object *zobj = Z_OBJ_P(object);
  34617. zval *property_val;
  34618. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  34619. property_val = OBJ_PROP(zobj, prop_offset);
  34620. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  34621. fast_assign_obj:
  34622. value = zend_assign_to_variable(property_val, value, IS_CONST);
  34623. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  34624. ZVAL_COPY(EX_VAR(opline->result.var), value);
  34625. }
  34626. goto exit_assign_obj;
  34627. }
  34628. } else {
  34629. if (EXPECTED(zobj->properties != NULL)) {
  34630. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  34631. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  34632. GC_DELREF(zobj->properties);
  34633. }
  34634. zobj->properties = zend_array_dup(zobj->properties);
  34635. }
  34636. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  34637. if (property_val) {
  34638. goto fast_assign_obj;
  34639. }
  34640. }
  34641. if (!zobj->ce->__set) {
  34642. if (EXPECTED(zobj->properties == NULL)) {
  34643. rebuild_object_properties(zobj);
  34644. }
  34645. if (IS_CONST == IS_CONST) {
  34646. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  34647. Z_ADDREF_P(value);
  34648. }
  34649. } else if (IS_CONST != IS_TMP_VAR) {
  34650. if (Z_ISREF_P(value)) {
  34651. if (IS_CONST == IS_VAR) {
  34652. zend_reference *ref = Z_REF_P(value);
  34653. if (GC_DELREF(ref) == 0) {
  34654. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  34655. efree_size(ref, sizeof(zend_reference));
  34656. value = &tmp;
  34657. } else {
  34658. value = Z_REFVAL_P(value);
  34659. Z_TRY_ADDREF_P(value);
  34660. }
  34661. } else {
  34662. value = Z_REFVAL_P(value);
  34663. Z_TRY_ADDREF_P(value);
  34664. }
  34665. } else if (IS_CONST == IS_CV) {
  34666. Z_TRY_ADDREF_P(value);
  34667. }
  34668. }
  34669. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  34670. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  34671. ZVAL_COPY(EX_VAR(opline->result.var), value);
  34672. }
  34673. goto exit_assign_obj;
  34674. }
  34675. }
  34676. }
  34677. if (!Z_OBJ_HT_P(object)->write_property) {
  34678. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  34679. goto exit_assign_obj;
  34680. }
  34681. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  34682. ZVAL_DEREF(value);
  34683. }
  34684. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  34685. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  34686. ZVAL_COPY(EX_VAR(opline->result.var), value);
  34687. }
  34688. exit_assign_obj:
  34689. /* assign_obj has two opcodes! */
  34690. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  34691. }
  34692. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34693. {
  34694. USE_OPLINE
  34695. zend_free_op free_op_data;
  34696. zval *object, *property, *value, tmp;
  34697. SAVE_OPLINE();
  34698. object = EX_VAR(opline->op1.var);
  34699. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  34700. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34701. }
  34702. property = RT_CONSTANT(opline, opline->op2);
  34703. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  34704. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  34705. if (Z_ISREF_P(object)) {
  34706. object = Z_REFVAL_P(object);
  34707. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  34708. goto assign_object;
  34709. }
  34710. }
  34711. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  34712. zval_ptr_dtor_nogc(free_op_data);
  34713. goto exit_assign_obj;
  34714. }
  34715. }
  34716. assign_object:
  34717. if (IS_CONST == IS_CONST &&
  34718. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  34719. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  34720. zend_object *zobj = Z_OBJ_P(object);
  34721. zval *property_val;
  34722. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  34723. property_val = OBJ_PROP(zobj, prop_offset);
  34724. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  34725. fast_assign_obj:
  34726. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
  34727. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  34728. ZVAL_COPY(EX_VAR(opline->result.var), value);
  34729. }
  34730. goto exit_assign_obj;
  34731. }
  34732. } else {
  34733. if (EXPECTED(zobj->properties != NULL)) {
  34734. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  34735. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  34736. GC_DELREF(zobj->properties);
  34737. }
  34738. zobj->properties = zend_array_dup(zobj->properties);
  34739. }
  34740. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  34741. if (property_val) {
  34742. goto fast_assign_obj;
  34743. }
  34744. }
  34745. if (!zobj->ce->__set) {
  34746. if (EXPECTED(zobj->properties == NULL)) {
  34747. rebuild_object_properties(zobj);
  34748. }
  34749. if (IS_TMP_VAR == IS_CONST) {
  34750. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  34751. Z_ADDREF_P(value);
  34752. }
  34753. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  34754. if (Z_ISREF_P(value)) {
  34755. if (IS_TMP_VAR == IS_VAR) {
  34756. zend_reference *ref = Z_REF_P(value);
  34757. if (GC_DELREF(ref) == 0) {
  34758. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  34759. efree_size(ref, sizeof(zend_reference));
  34760. value = &tmp;
  34761. } else {
  34762. value = Z_REFVAL_P(value);
  34763. Z_TRY_ADDREF_P(value);
  34764. }
  34765. } else {
  34766. value = Z_REFVAL_P(value);
  34767. Z_TRY_ADDREF_P(value);
  34768. }
  34769. } else if (IS_TMP_VAR == IS_CV) {
  34770. Z_TRY_ADDREF_P(value);
  34771. }
  34772. }
  34773. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  34774. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  34775. ZVAL_COPY(EX_VAR(opline->result.var), value);
  34776. }
  34777. goto exit_assign_obj;
  34778. }
  34779. }
  34780. }
  34781. if (!Z_OBJ_HT_P(object)->write_property) {
  34782. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  34783. zval_ptr_dtor_nogc(free_op_data);
  34784. goto exit_assign_obj;
  34785. }
  34786. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  34787. ZVAL_DEREF(value);
  34788. }
  34789. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  34790. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  34791. ZVAL_COPY(EX_VAR(opline->result.var), value);
  34792. }
  34793. zval_ptr_dtor_nogc(free_op_data);
  34794. exit_assign_obj:
  34795. /* assign_obj has two opcodes! */
  34796. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  34797. }
  34798. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34799. {
  34800. USE_OPLINE
  34801. zend_free_op free_op_data;
  34802. zval *object, *property, *value, tmp;
  34803. SAVE_OPLINE();
  34804. object = EX_VAR(opline->op1.var);
  34805. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  34806. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34807. }
  34808. property = RT_CONSTANT(opline, opline->op2);
  34809. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  34810. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  34811. if (Z_ISREF_P(object)) {
  34812. object = Z_REFVAL_P(object);
  34813. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  34814. goto assign_object;
  34815. }
  34816. }
  34817. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  34818. zval_ptr_dtor_nogc(free_op_data);
  34819. goto exit_assign_obj;
  34820. }
  34821. }
  34822. assign_object:
  34823. if (IS_CONST == IS_CONST &&
  34824. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  34825. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  34826. zend_object *zobj = Z_OBJ_P(object);
  34827. zval *property_val;
  34828. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  34829. property_val = OBJ_PROP(zobj, prop_offset);
  34830. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  34831. fast_assign_obj:
  34832. value = zend_assign_to_variable(property_val, value, IS_VAR);
  34833. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  34834. ZVAL_COPY(EX_VAR(opline->result.var), value);
  34835. }
  34836. goto exit_assign_obj;
  34837. }
  34838. } else {
  34839. if (EXPECTED(zobj->properties != NULL)) {
  34840. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  34841. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  34842. GC_DELREF(zobj->properties);
  34843. }
  34844. zobj->properties = zend_array_dup(zobj->properties);
  34845. }
  34846. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  34847. if (property_val) {
  34848. goto fast_assign_obj;
  34849. }
  34850. }
  34851. if (!zobj->ce->__set) {
  34852. if (EXPECTED(zobj->properties == NULL)) {
  34853. rebuild_object_properties(zobj);
  34854. }
  34855. if (IS_VAR == IS_CONST) {
  34856. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  34857. Z_ADDREF_P(value);
  34858. }
  34859. } else if (IS_VAR != IS_TMP_VAR) {
  34860. if (Z_ISREF_P(value)) {
  34861. if (IS_VAR == IS_VAR) {
  34862. zend_reference *ref = Z_REF_P(value);
  34863. if (GC_DELREF(ref) == 0) {
  34864. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  34865. efree_size(ref, sizeof(zend_reference));
  34866. value = &tmp;
  34867. } else {
  34868. value = Z_REFVAL_P(value);
  34869. Z_TRY_ADDREF_P(value);
  34870. }
  34871. } else {
  34872. value = Z_REFVAL_P(value);
  34873. Z_TRY_ADDREF_P(value);
  34874. }
  34875. } else if (IS_VAR == IS_CV) {
  34876. Z_TRY_ADDREF_P(value);
  34877. }
  34878. }
  34879. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  34880. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  34881. ZVAL_COPY(EX_VAR(opline->result.var), value);
  34882. }
  34883. goto exit_assign_obj;
  34884. }
  34885. }
  34886. }
  34887. if (!Z_OBJ_HT_P(object)->write_property) {
  34888. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  34889. zval_ptr_dtor_nogc(free_op_data);
  34890. goto exit_assign_obj;
  34891. }
  34892. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  34893. ZVAL_DEREF(value);
  34894. }
  34895. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  34896. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  34897. ZVAL_COPY(EX_VAR(opline->result.var), value);
  34898. }
  34899. zval_ptr_dtor_nogc(free_op_data);
  34900. exit_assign_obj:
  34901. /* assign_obj has two opcodes! */
  34902. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  34903. }
  34904. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  34905. {
  34906. USE_OPLINE
  34907. zval *object, *property, *value, tmp;
  34908. SAVE_OPLINE();
  34909. object = EX_VAR(opline->op1.var);
  34910. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  34911. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  34912. }
  34913. property = RT_CONSTANT(opline, opline->op2);
  34914. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  34915. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  34916. if (Z_ISREF_P(object)) {
  34917. object = Z_REFVAL_P(object);
  34918. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  34919. goto assign_object;
  34920. }
  34921. }
  34922. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  34923. goto exit_assign_obj;
  34924. }
  34925. }
  34926. assign_object:
  34927. if (IS_CONST == IS_CONST &&
  34928. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  34929. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  34930. zend_object *zobj = Z_OBJ_P(object);
  34931. zval *property_val;
  34932. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  34933. property_val = OBJ_PROP(zobj, prop_offset);
  34934. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  34935. fast_assign_obj:
  34936. value = zend_assign_to_variable(property_val, value, IS_CV);
  34937. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  34938. ZVAL_COPY(EX_VAR(opline->result.var), value);
  34939. }
  34940. goto exit_assign_obj;
  34941. }
  34942. } else {
  34943. if (EXPECTED(zobj->properties != NULL)) {
  34944. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  34945. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  34946. GC_DELREF(zobj->properties);
  34947. }
  34948. zobj->properties = zend_array_dup(zobj->properties);
  34949. }
  34950. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  34951. if (property_val) {
  34952. goto fast_assign_obj;
  34953. }
  34954. }
  34955. if (!zobj->ce->__set) {
  34956. if (EXPECTED(zobj->properties == NULL)) {
  34957. rebuild_object_properties(zobj);
  34958. }
  34959. if (IS_CV == IS_CONST) {
  34960. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  34961. Z_ADDREF_P(value);
  34962. }
  34963. } else if (IS_CV != IS_TMP_VAR) {
  34964. if (Z_ISREF_P(value)) {
  34965. if (IS_CV == IS_VAR) {
  34966. zend_reference *ref = Z_REF_P(value);
  34967. if (GC_DELREF(ref) == 0) {
  34968. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  34969. efree_size(ref, sizeof(zend_reference));
  34970. value = &tmp;
  34971. } else {
  34972. value = Z_REFVAL_P(value);
  34973. Z_TRY_ADDREF_P(value);
  34974. }
  34975. } else {
  34976. value = Z_REFVAL_P(value);
  34977. Z_TRY_ADDREF_P(value);
  34978. }
  34979. } else if (IS_CV == IS_CV) {
  34980. Z_TRY_ADDREF_P(value);
  34981. }
  34982. }
  34983. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  34984. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  34985. ZVAL_COPY(EX_VAR(opline->result.var), value);
  34986. }
  34987. goto exit_assign_obj;
  34988. }
  34989. }
  34990. }
  34991. if (!Z_OBJ_HT_P(object)->write_property) {
  34992. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  34993. goto exit_assign_obj;
  34994. }
  34995. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  34996. ZVAL_DEREF(value);
  34997. }
  34998. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  34999. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35000. ZVAL_COPY(EX_VAR(opline->result.var), value);
  35001. }
  35002. exit_assign_obj:
  35003. /* assign_obj has two opcodes! */
  35004. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  35005. }
  35006. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35007. {
  35008. USE_OPLINE
  35009. zval *object_ptr;
  35010. zend_free_op free_op_data;
  35011. zval *value;
  35012. zval *variable_ptr;
  35013. zval *dim;
  35014. SAVE_OPLINE();
  35015. object_ptr = EX_VAR(opline->op1.var);
  35016. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  35017. try_assign_dim_array:
  35018. SEPARATE_ARRAY(object_ptr);
  35019. if (IS_CONST == IS_UNUSED) {
  35020. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  35021. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  35022. ZVAL_DEREF(value);
  35023. }
  35024. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  35025. if (UNEXPECTED(variable_ptr == NULL)) {
  35026. zend_cannot_add_element();
  35027. goto assign_dim_error;
  35028. } else if (IS_CONST == IS_CV) {
  35029. if (Z_REFCOUNTED_P(value)) {
  35030. Z_ADDREF_P(value);
  35031. }
  35032. } else if (IS_CONST == IS_VAR) {
  35033. if (value != free_op_data) {
  35034. if (Z_REFCOUNTED_P(value)) {
  35035. Z_ADDREF_P(value);
  35036. }
  35037. }
  35038. } else if (IS_CONST == IS_CONST) {
  35039. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  35040. Z_ADDREF_P(value);
  35041. }
  35042. }
  35043. } else {
  35044. dim = RT_CONSTANT(opline, opline->op2);
  35045. if (IS_CONST == IS_CONST) {
  35046. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  35047. } else {
  35048. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  35049. }
  35050. if (UNEXPECTED(variable_ptr == NULL)) {
  35051. goto assign_dim_error;
  35052. }
  35053. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  35054. value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
  35055. }
  35056. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35057. ZVAL_COPY(EX_VAR(opline->result.var), value);
  35058. }
  35059. } else {
  35060. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  35061. object_ptr = Z_REFVAL_P(object_ptr);
  35062. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  35063. goto try_assign_dim_array;
  35064. }
  35065. }
  35066. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  35067. dim = RT_CONSTANT(opline, opline->op2);
  35068. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  35069. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  35070. dim++;
  35071. }
  35072. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  35073. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  35074. if (IS_CONST == IS_UNUSED) {
  35075. zend_use_new_element_for_string();
  35076. UNDEF_RESULT();
  35077. HANDLE_EXCEPTION();
  35078. } else {
  35079. dim = RT_CONSTANT(opline, opline->op2);
  35080. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  35081. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  35082. }
  35083. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  35084. ZVAL_ARR(object_ptr, zend_new_array(8));
  35085. goto try_assign_dim_array;
  35086. } else {
  35087. if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  35088. zend_use_scalar_as_array();
  35089. }
  35090. dim = RT_CONSTANT(opline, opline->op2);
  35091. assign_dim_error:
  35092. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35093. ZVAL_NULL(EX_VAR(opline->result.var));
  35094. }
  35095. }
  35096. }
  35097. if (IS_CONST != IS_UNUSED) {
  35098. }
  35099. /* assign_dim has two opcodes! */
  35100. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  35101. }
  35102. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35103. {
  35104. USE_OPLINE
  35105. zval *object_ptr;
  35106. zend_free_op free_op_data;
  35107. zval *value;
  35108. zval *variable_ptr;
  35109. zval *dim;
  35110. SAVE_OPLINE();
  35111. object_ptr = EX_VAR(opline->op1.var);
  35112. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  35113. try_assign_dim_array:
  35114. SEPARATE_ARRAY(object_ptr);
  35115. if (IS_CONST == IS_UNUSED) {
  35116. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  35117. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  35118. ZVAL_DEREF(value);
  35119. }
  35120. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  35121. if (UNEXPECTED(variable_ptr == NULL)) {
  35122. zval_ptr_dtor_nogc(free_op_data);
  35123. zend_cannot_add_element();
  35124. goto assign_dim_error;
  35125. } else if (IS_TMP_VAR == IS_CV) {
  35126. if (Z_REFCOUNTED_P(value)) {
  35127. Z_ADDREF_P(value);
  35128. }
  35129. } else if (IS_TMP_VAR == IS_VAR) {
  35130. if (value != free_op_data) {
  35131. if (Z_REFCOUNTED_P(value)) {
  35132. Z_ADDREF_P(value);
  35133. }
  35134. zval_ptr_dtor_nogc(free_op_data);
  35135. }
  35136. } else if (IS_TMP_VAR == IS_CONST) {
  35137. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  35138. Z_ADDREF_P(value);
  35139. }
  35140. }
  35141. } else {
  35142. dim = RT_CONSTANT(opline, opline->op2);
  35143. if (IS_CONST == IS_CONST) {
  35144. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  35145. } else {
  35146. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  35147. }
  35148. if (UNEXPECTED(variable_ptr == NULL)) {
  35149. goto assign_dim_error;
  35150. }
  35151. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  35152. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
  35153. }
  35154. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35155. ZVAL_COPY(EX_VAR(opline->result.var), value);
  35156. }
  35157. } else {
  35158. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  35159. object_ptr = Z_REFVAL_P(object_ptr);
  35160. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  35161. goto try_assign_dim_array;
  35162. }
  35163. }
  35164. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  35165. dim = RT_CONSTANT(opline, opline->op2);
  35166. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  35167. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  35168. dim++;
  35169. }
  35170. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  35171. zval_ptr_dtor_nogc(free_op_data);
  35172. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  35173. if (IS_CONST == IS_UNUSED) {
  35174. zend_use_new_element_for_string();
  35175. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  35176. UNDEF_RESULT();
  35177. HANDLE_EXCEPTION();
  35178. } else {
  35179. dim = RT_CONSTANT(opline, opline->op2);
  35180. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  35181. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  35182. zval_ptr_dtor_nogc(free_op_data);
  35183. }
  35184. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  35185. ZVAL_ARR(object_ptr, zend_new_array(8));
  35186. goto try_assign_dim_array;
  35187. } else {
  35188. if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  35189. zend_use_scalar_as_array();
  35190. }
  35191. dim = RT_CONSTANT(opline, opline->op2);
  35192. assign_dim_error:
  35193. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  35194. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35195. ZVAL_NULL(EX_VAR(opline->result.var));
  35196. }
  35197. }
  35198. }
  35199. if (IS_CONST != IS_UNUSED) {
  35200. }
  35201. /* assign_dim has two opcodes! */
  35202. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  35203. }
  35204. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35205. {
  35206. USE_OPLINE
  35207. zval *object_ptr;
  35208. zend_free_op free_op_data;
  35209. zval *value;
  35210. zval *variable_ptr;
  35211. zval *dim;
  35212. SAVE_OPLINE();
  35213. object_ptr = EX_VAR(opline->op1.var);
  35214. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  35215. try_assign_dim_array:
  35216. SEPARATE_ARRAY(object_ptr);
  35217. if (IS_CONST == IS_UNUSED) {
  35218. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  35219. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  35220. ZVAL_DEREF(value);
  35221. }
  35222. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  35223. if (UNEXPECTED(variable_ptr == NULL)) {
  35224. zval_ptr_dtor_nogc(free_op_data);
  35225. zend_cannot_add_element();
  35226. goto assign_dim_error;
  35227. } else if (IS_VAR == IS_CV) {
  35228. if (Z_REFCOUNTED_P(value)) {
  35229. Z_ADDREF_P(value);
  35230. }
  35231. } else if (IS_VAR == IS_VAR) {
  35232. if (value != free_op_data) {
  35233. if (Z_REFCOUNTED_P(value)) {
  35234. Z_ADDREF_P(value);
  35235. }
  35236. zval_ptr_dtor_nogc(free_op_data);
  35237. }
  35238. } else if (IS_VAR == IS_CONST) {
  35239. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  35240. Z_ADDREF_P(value);
  35241. }
  35242. }
  35243. } else {
  35244. dim = RT_CONSTANT(opline, opline->op2);
  35245. if (IS_CONST == IS_CONST) {
  35246. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  35247. } else {
  35248. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  35249. }
  35250. if (UNEXPECTED(variable_ptr == NULL)) {
  35251. goto assign_dim_error;
  35252. }
  35253. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  35254. value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
  35255. }
  35256. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35257. ZVAL_COPY(EX_VAR(opline->result.var), value);
  35258. }
  35259. } else {
  35260. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  35261. object_ptr = Z_REFVAL_P(object_ptr);
  35262. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  35263. goto try_assign_dim_array;
  35264. }
  35265. }
  35266. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  35267. dim = RT_CONSTANT(opline, opline->op2);
  35268. value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  35269. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  35270. dim++;
  35271. }
  35272. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  35273. zval_ptr_dtor_nogc(free_op_data);
  35274. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  35275. if (IS_CONST == IS_UNUSED) {
  35276. zend_use_new_element_for_string();
  35277. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  35278. UNDEF_RESULT();
  35279. HANDLE_EXCEPTION();
  35280. } else {
  35281. dim = RT_CONSTANT(opline, opline->op2);
  35282. value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  35283. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  35284. zval_ptr_dtor_nogc(free_op_data);
  35285. }
  35286. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  35287. ZVAL_ARR(object_ptr, zend_new_array(8));
  35288. goto try_assign_dim_array;
  35289. } else {
  35290. if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  35291. zend_use_scalar_as_array();
  35292. }
  35293. dim = RT_CONSTANT(opline, opline->op2);
  35294. assign_dim_error:
  35295. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  35296. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35297. ZVAL_NULL(EX_VAR(opline->result.var));
  35298. }
  35299. }
  35300. }
  35301. if (IS_CONST != IS_UNUSED) {
  35302. }
  35303. /* assign_dim has two opcodes! */
  35304. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  35305. }
  35306. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35307. {
  35308. USE_OPLINE
  35309. zval *object_ptr;
  35310. zend_free_op free_op_data;
  35311. zval *value;
  35312. zval *variable_ptr;
  35313. zval *dim;
  35314. SAVE_OPLINE();
  35315. object_ptr = EX_VAR(opline->op1.var);
  35316. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  35317. try_assign_dim_array:
  35318. SEPARATE_ARRAY(object_ptr);
  35319. if (IS_CONST == IS_UNUSED) {
  35320. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  35321. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  35322. ZVAL_DEREF(value);
  35323. }
  35324. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  35325. if (UNEXPECTED(variable_ptr == NULL)) {
  35326. zend_cannot_add_element();
  35327. goto assign_dim_error;
  35328. } else if (IS_CV == IS_CV) {
  35329. if (Z_REFCOUNTED_P(value)) {
  35330. Z_ADDREF_P(value);
  35331. }
  35332. } else if (IS_CV == IS_VAR) {
  35333. if (value != free_op_data) {
  35334. if (Z_REFCOUNTED_P(value)) {
  35335. Z_ADDREF_P(value);
  35336. }
  35337. }
  35338. } else if (IS_CV == IS_CONST) {
  35339. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  35340. Z_ADDREF_P(value);
  35341. }
  35342. }
  35343. } else {
  35344. dim = RT_CONSTANT(opline, opline->op2);
  35345. if (IS_CONST == IS_CONST) {
  35346. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  35347. } else {
  35348. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  35349. }
  35350. if (UNEXPECTED(variable_ptr == NULL)) {
  35351. goto assign_dim_error;
  35352. }
  35353. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  35354. value = zend_assign_to_variable(variable_ptr, value, IS_CV);
  35355. }
  35356. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35357. ZVAL_COPY(EX_VAR(opline->result.var), value);
  35358. }
  35359. } else {
  35360. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  35361. object_ptr = Z_REFVAL_P(object_ptr);
  35362. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  35363. goto try_assign_dim_array;
  35364. }
  35365. }
  35366. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  35367. dim = RT_CONSTANT(opline, opline->op2);
  35368. value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  35369. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  35370. dim++;
  35371. }
  35372. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  35373. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  35374. if (IS_CONST == IS_UNUSED) {
  35375. zend_use_new_element_for_string();
  35376. UNDEF_RESULT();
  35377. HANDLE_EXCEPTION();
  35378. } else {
  35379. dim = RT_CONSTANT(opline, opline->op2);
  35380. value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  35381. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  35382. }
  35383. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  35384. ZVAL_ARR(object_ptr, zend_new_array(8));
  35385. goto try_assign_dim_array;
  35386. } else {
  35387. if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  35388. zend_use_scalar_as_array();
  35389. }
  35390. dim = RT_CONSTANT(opline, opline->op2);
  35391. assign_dim_error:
  35392. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  35393. ZVAL_NULL(EX_VAR(opline->result.var));
  35394. }
  35395. }
  35396. }
  35397. if (IS_CONST != IS_UNUSED) {
  35398. }
  35399. /* assign_dim has two opcodes! */
  35400. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  35401. }
  35402. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35403. {
  35404. USE_OPLINE
  35405. zval *value;
  35406. zval *variable_ptr;
  35407. SAVE_OPLINE();
  35408. value = RT_CONSTANT(opline, opline->op2);
  35409. variable_ptr = EX_VAR(opline->op1.var);
  35410. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  35411. if (UNEXPECTED(0)) {
  35412. ZVAL_NULL(EX_VAR(opline->result.var));
  35413. }
  35414. } else {
  35415. value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
  35416. if (UNEXPECTED(0)) {
  35417. ZVAL_COPY(EX_VAR(opline->result.var), value);
  35418. }
  35419. /* zend_assign_to_variable() always takes care of op2, never free it! */
  35420. }
  35421. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35422. }
  35423. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35424. {
  35425. USE_OPLINE
  35426. zval *value;
  35427. zval *variable_ptr;
  35428. SAVE_OPLINE();
  35429. value = RT_CONSTANT(opline, opline->op2);
  35430. variable_ptr = EX_VAR(opline->op1.var);
  35431. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  35432. if (UNEXPECTED(1)) {
  35433. ZVAL_NULL(EX_VAR(opline->result.var));
  35434. }
  35435. } else {
  35436. value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
  35437. if (UNEXPECTED(1)) {
  35438. ZVAL_COPY(EX_VAR(opline->result.var), value);
  35439. }
  35440. /* zend_assign_to_variable() always takes care of op2, never free it! */
  35441. }
  35442. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35443. }
  35444. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35445. {
  35446. USE_OPLINE
  35447. zval *op1, *op2;
  35448. zend_string *op1_str, *op2_str, *str;
  35449. op1 = EX_VAR(opline->op1.var);
  35450. op2 = RT_CONSTANT(opline, opline->op2);
  35451. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  35452. (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  35453. zend_string *op1_str = Z_STR_P(op1);
  35454. zend_string *op2_str = Z_STR_P(op2);
  35455. zend_string *str;
  35456. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  35457. if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
  35458. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  35459. } else {
  35460. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  35461. }
  35462. } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  35463. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  35464. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  35465. } else {
  35466. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  35467. }
  35468. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  35469. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  35470. size_t len = ZSTR_LEN(op1_str);
  35471. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  35472. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  35473. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  35474. } else {
  35475. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  35476. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  35477. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  35478. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  35479. }
  35480. ZEND_VM_NEXT_OPCODE();
  35481. }
  35482. SAVE_OPLINE();
  35483. if (IS_CV == IS_CONST) {
  35484. op1_str = Z_STR_P(op1);
  35485. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  35486. op1_str = zend_string_copy(Z_STR_P(op1));
  35487. } else {
  35488. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  35489. GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  35490. }
  35491. op1_str = zval_get_string_func(op1);
  35492. }
  35493. if (IS_CONST == IS_CONST) {
  35494. op2_str = Z_STR_P(op2);
  35495. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  35496. op2_str = zend_string_copy(Z_STR_P(op2));
  35497. } else {
  35498. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  35499. GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  35500. }
  35501. op2_str = zval_get_string_func(op2);
  35502. }
  35503. do {
  35504. if (IS_CV != IS_CONST) {
  35505. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  35506. if (IS_CONST == IS_CONST) {
  35507. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  35508. GC_ADDREF(op2_str);
  35509. }
  35510. }
  35511. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  35512. zend_string_release_ex(op1_str, 0);
  35513. break;
  35514. }
  35515. }
  35516. if (IS_CONST != IS_CONST) {
  35517. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  35518. if (IS_CV == IS_CONST) {
  35519. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  35520. GC_ADDREF(op1_str);
  35521. }
  35522. }
  35523. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  35524. zend_string_release_ex(op2_str, 0);
  35525. break;
  35526. }
  35527. }
  35528. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  35529. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  35530. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  35531. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  35532. if (IS_CV != IS_CONST) {
  35533. zend_string_release_ex(op1_str, 0);
  35534. }
  35535. if (IS_CONST != IS_CONST) {
  35536. zend_string_release_ex(op2_str, 0);
  35537. }
  35538. } while (0);
  35539. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35540. }
  35541. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35542. {
  35543. USE_OPLINE
  35544. zval *function_name;
  35545. zend_free_op free_op1;
  35546. zval *object;
  35547. zend_function *fbc;
  35548. zend_class_entry *called_scope;
  35549. zend_object *obj;
  35550. zend_execute_data *call;
  35551. uint32_t call_info;
  35552. SAVE_OPLINE();
  35553. object = EX_VAR(opline->op1.var);
  35554. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  35555. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  35556. }
  35557. if (IS_CONST != IS_CONST) {
  35558. function_name = RT_CONSTANT(opline, opline->op2);
  35559. }
  35560. if (IS_CONST != IS_CONST &&
  35561. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  35562. do {
  35563. if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  35564. function_name = Z_REFVAL_P(function_name);
  35565. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  35566. break;
  35567. }
  35568. } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  35569. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  35570. if (UNEXPECTED(EG(exception) != NULL)) {
  35571. HANDLE_EXCEPTION();
  35572. }
  35573. }
  35574. zend_throw_error(NULL, "Method name must be a string");
  35575. HANDLE_EXCEPTION();
  35576. } while (0);
  35577. }
  35578. if (IS_CV != IS_UNUSED) {
  35579. do {
  35580. if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  35581. if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  35582. object = Z_REFVAL_P(object);
  35583. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  35584. break;
  35585. }
  35586. }
  35587. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  35588. object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
  35589. if (UNEXPECTED(EG(exception) != NULL)) {
  35590. if (IS_CONST != IS_CONST) {
  35591. }
  35592. HANDLE_EXCEPTION();
  35593. }
  35594. }
  35595. if (IS_CONST == IS_CONST) {
  35596. function_name = RT_CONSTANT(opline, opline->op2);
  35597. }
  35598. zend_invalid_method_call(object, function_name);
  35599. HANDLE_EXCEPTION();
  35600. }
  35601. } while (0);
  35602. }
  35603. obj = Z_OBJ_P(object);
  35604. called_scope = obj->ce;
  35605. if (IS_CONST == IS_CONST &&
  35606. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  35607. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  35608. } else {
  35609. zend_object *orig_obj = obj;
  35610. if (UNEXPECTED(obj->handlers->get_method == NULL)) {
  35611. zend_throw_error(NULL, "Object does not support method calls");
  35612. HANDLE_EXCEPTION();
  35613. }
  35614. if (IS_CONST == IS_CONST) {
  35615. function_name = RT_CONSTANT(opline, opline->op2);
  35616. }
  35617. /* First, locate the function. */
  35618. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  35619. if (UNEXPECTED(fbc == NULL)) {
  35620. if (EXPECTED(!EG(exception))) {
  35621. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  35622. }
  35623. HANDLE_EXCEPTION();
  35624. }
  35625. if (IS_CONST == IS_CONST &&
  35626. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  35627. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  35628. EXPECTED(obj == orig_obj)) {
  35629. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  35630. }
  35631. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  35632. /* Reset "object" to trigger reference counting */
  35633. object = NULL;
  35634. }
  35635. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  35636. init_func_run_time_cache(&fbc->op_array);
  35637. }
  35638. }
  35639. if (IS_CONST != IS_CONST) {
  35640. }
  35641. call_info = ZEND_CALL_NESTED_FUNCTION;
  35642. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  35643. obj = NULL;
  35644. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
  35645. HANDLE_EXCEPTION();
  35646. }
  35647. } else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  35648. /* CV may be changed indirectly (e.g. when it's a reference) */
  35649. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
  35650. if (IS_CV == IS_CV) {
  35651. GC_ADDREF(obj); /* For $this pointer */
  35652. } else if (free_op1 != object) {
  35653. GC_ADDREF(obj); /* For $this pointer */
  35654. }
  35655. }
  35656. call = zend_vm_stack_push_call_frame(call_info,
  35657. fbc, opline->extended_value, called_scope, obj);
  35658. call->prev_execute_data = EX(call);
  35659. EX(call) = call;
  35660. ZEND_VM_NEXT_OPCODE();
  35661. }
  35662. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35663. {
  35664. USE_OPLINE
  35665. zval *expr_ptr, new_expr;
  35666. SAVE_OPLINE();
  35667. if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
  35668. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  35669. expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  35670. if (Z_ISREF_P(expr_ptr)) {
  35671. Z_ADDREF_P(expr_ptr);
  35672. } else {
  35673. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  35674. }
  35675. } else {
  35676. expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  35677. if (IS_CV == IS_TMP_VAR) {
  35678. /* pass */
  35679. } else if (IS_CV == IS_CONST) {
  35680. Z_TRY_ADDREF_P(expr_ptr);
  35681. } else if (IS_CV == IS_CV) {
  35682. ZVAL_DEREF(expr_ptr);
  35683. Z_TRY_ADDREF_P(expr_ptr);
  35684. } else /* if (IS_CV == IS_VAR) */ {
  35685. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  35686. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  35687. expr_ptr = Z_REFVAL_P(expr_ptr);
  35688. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  35689. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  35690. expr_ptr = &new_expr;
  35691. efree_size(ref, sizeof(zend_reference));
  35692. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  35693. Z_ADDREF_P(expr_ptr);
  35694. }
  35695. }
  35696. }
  35697. }
  35698. if (IS_CONST != IS_UNUSED) {
  35699. zval *offset = RT_CONSTANT(opline, opline->op2);
  35700. zend_string *str;
  35701. zend_ulong hval;
  35702. add_again:
  35703. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  35704. str = Z_STR_P(offset);
  35705. if (IS_CONST != IS_CONST) {
  35706. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  35707. goto num_index;
  35708. }
  35709. }
  35710. str_index:
  35711. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  35712. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  35713. hval = Z_LVAL_P(offset);
  35714. num_index:
  35715. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  35716. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  35717. offset = Z_REFVAL_P(offset);
  35718. goto add_again;
  35719. } else if (Z_TYPE_P(offset) == IS_NULL) {
  35720. str = ZSTR_EMPTY_ALLOC();
  35721. goto str_index;
  35722. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  35723. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  35724. goto num_index;
  35725. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  35726. hval = 0;
  35727. goto num_index;
  35728. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  35729. hval = 1;
  35730. goto num_index;
  35731. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  35732. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  35733. str = ZSTR_EMPTY_ALLOC();
  35734. goto str_index;
  35735. } else {
  35736. zend_illegal_offset();
  35737. zval_ptr_dtor_nogc(expr_ptr);
  35738. }
  35739. } else {
  35740. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  35741. zend_cannot_add_element();
  35742. zval_ptr_dtor_nogc(expr_ptr);
  35743. }
  35744. }
  35745. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35746. }
  35747. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35748. {
  35749. zval *array;
  35750. uint32_t size;
  35751. USE_OPLINE
  35752. array = EX_VAR(opline->result.var);
  35753. if (IS_CV != IS_UNUSED) {
  35754. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  35755. ZVAL_ARR(array, zend_new_array(size));
  35756. /* Explicitly initialize array as not-packed if flag is set */
  35757. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  35758. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  35759. }
  35760. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  35761. } else {
  35762. ZVAL_EMPTY_ARRAY(array);
  35763. ZEND_VM_NEXT_OPCODE();
  35764. }
  35765. }
  35766. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35767. {
  35768. USE_OPLINE
  35769. zval *varname;
  35770. zend_string *name, *tmp_name;
  35771. zend_class_entry *ce;
  35772. SAVE_OPLINE();
  35773. if (IS_CONST == IS_CONST) {
  35774. ce = CACHED_PTR(opline->extended_value);
  35775. if (UNEXPECTED(ce == NULL)) {
  35776. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  35777. if (UNEXPECTED(ce == NULL)) {
  35778. ZEND_ASSERT(EG(exception));
  35779. HANDLE_EXCEPTION();
  35780. }
  35781. /*CACHE_PTR(opline->extended_value, ce);*/
  35782. }
  35783. } else if (IS_CONST == IS_UNUSED) {
  35784. ce = zend_fetch_class(NULL, opline->op2.num);
  35785. if (UNEXPECTED(ce == NULL)) {
  35786. ZEND_ASSERT(EG(exception));
  35787. HANDLE_EXCEPTION();
  35788. }
  35789. } else {
  35790. ce = Z_CE_P(EX_VAR(opline->op2.var));
  35791. }
  35792. varname = EX_VAR(opline->op1.var);
  35793. if (IS_CV == IS_CONST) {
  35794. name = Z_STR_P(varname);
  35795. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  35796. name = Z_STR_P(varname);
  35797. tmp_name = NULL;
  35798. } else {
  35799. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  35800. varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
  35801. }
  35802. name = zval_get_tmp_string(varname, &tmp_name);
  35803. }
  35804. zend_std_unset_static_property(ce, name);
  35805. if (IS_CV != IS_CONST) {
  35806. zend_tmp_string_release(tmp_name);
  35807. }
  35808. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35809. }
  35810. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35811. {
  35812. USE_OPLINE
  35813. zval *container;
  35814. zval *offset;
  35815. zend_ulong hval;
  35816. zend_string *key;
  35817. SAVE_OPLINE();
  35818. container = EX_VAR(opline->op1.var);
  35819. offset = RT_CONSTANT(opline, opline->op2);
  35820. do {
  35821. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  35822. HashTable *ht;
  35823. unset_dim_array:
  35824. SEPARATE_ARRAY(container);
  35825. ht = Z_ARRVAL_P(container);
  35826. offset_again:
  35827. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  35828. key = Z_STR_P(offset);
  35829. if (IS_CONST != IS_CONST) {
  35830. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  35831. goto num_index_dim;
  35832. }
  35833. }
  35834. str_index_dim:
  35835. if (ht == &EG(symbol_table)) {
  35836. zend_delete_global_variable(key);
  35837. } else {
  35838. zend_hash_del(ht, key);
  35839. }
  35840. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  35841. hval = Z_LVAL_P(offset);
  35842. num_index_dim:
  35843. zend_hash_index_del(ht, hval);
  35844. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  35845. offset = Z_REFVAL_P(offset);
  35846. goto offset_again;
  35847. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  35848. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  35849. goto num_index_dim;
  35850. } else if (Z_TYPE_P(offset) == IS_NULL) {
  35851. key = ZSTR_EMPTY_ALLOC();
  35852. goto str_index_dim;
  35853. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  35854. hval = 0;
  35855. goto num_index_dim;
  35856. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  35857. hval = 1;
  35858. goto num_index_dim;
  35859. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  35860. hval = Z_RES_HANDLE_P(offset);
  35861. goto num_index_dim;
  35862. } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  35863. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  35864. key = ZSTR_EMPTY_ALLOC();
  35865. goto str_index_dim;
  35866. } else {
  35867. zend_error(E_WARNING, "Illegal offset type in unset");
  35868. }
  35869. break;
  35870. } else if (Z_ISREF_P(container)) {
  35871. container = Z_REFVAL_P(container);
  35872. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  35873. goto unset_dim_array;
  35874. }
  35875. }
  35876. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  35877. container = GET_OP1_UNDEF_CV(container, BP_VAR_R);
  35878. }
  35879. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  35880. offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  35881. }
  35882. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  35883. if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
  35884. zend_use_object_as_array();
  35885. } else {
  35886. if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  35887. offset++;
  35888. }
  35889. Z_OBJ_HT_P(container)->unset_dimension(container, offset);
  35890. }
  35891. } else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  35892. zend_throw_error(NULL, "Cannot unset string offsets");
  35893. }
  35894. } while (0);
  35895. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35896. }
  35897. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35898. {
  35899. USE_OPLINE
  35900. zval *container;
  35901. zval *offset;
  35902. SAVE_OPLINE();
  35903. container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
  35904. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  35905. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  35906. }
  35907. offset = RT_CONSTANT(opline, opline->op2);
  35908. do {
  35909. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  35910. if (Z_ISREF_P(container)) {
  35911. container = Z_REFVAL_P(container);
  35912. if (Z_TYPE_P(container) != IS_OBJECT) {
  35913. break;
  35914. }
  35915. } else {
  35916. break;
  35917. }
  35918. }
  35919. if (Z_OBJ_HT_P(container)->unset_property) {
  35920. Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  35921. } else {
  35922. zend_wrong_property_unset(offset);
  35923. }
  35924. } while (0);
  35925. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35926. }
  35927. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35928. {
  35929. USE_OPLINE
  35930. zval *value;
  35931. int result;
  35932. zval *varname;
  35933. zend_string *name, *tmp_name;
  35934. zend_class_entry *ce;
  35935. SAVE_OPLINE();
  35936. if (IS_CONST == IS_CONST) {
  35937. if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) {
  35938. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  35939. goto is_static_prop_return;
  35940. } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) {
  35941. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  35942. if (UNEXPECTED(ce == NULL)) {
  35943. ZEND_ASSERT(EG(exception));
  35944. ZVAL_UNDEF(EX_VAR(opline->result.var));
  35945. HANDLE_EXCEPTION();
  35946. }
  35947. if (IS_CV != IS_CONST) {
  35948. CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce);
  35949. }
  35950. }
  35951. } else {
  35952. if (IS_CONST == IS_UNUSED) {
  35953. ce = zend_fetch_class(NULL, opline->op2.num);
  35954. if (UNEXPECTED(ce == NULL)) {
  35955. ZEND_ASSERT(EG(exception));
  35956. ZVAL_UNDEF(EX_VAR(opline->result.var));
  35957. HANDLE_EXCEPTION();
  35958. }
  35959. } else {
  35960. ce = Z_CE_P(EX_VAR(opline->op2.var));
  35961. }
  35962. if (IS_CV == IS_CONST &&
  35963. EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) {
  35964. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  35965. goto is_static_prop_return;
  35966. }
  35967. }
  35968. varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  35969. if (IS_CV == IS_CONST) {
  35970. name = Z_STR_P(varname);
  35971. } else {
  35972. name = zval_get_tmp_string(varname, &tmp_name);
  35973. }
  35974. value = zend_std_get_static_property(ce, name, 1);
  35975. if (IS_CV == IS_CONST && value) {
  35976. CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value);
  35977. }
  35978. if (IS_CV != IS_CONST) {
  35979. zend_tmp_string_release(tmp_name);
  35980. }
  35981. is_static_prop_return:
  35982. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  35983. result = value && Z_TYPE_P(value) > IS_NULL &&
  35984. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  35985. } else {
  35986. result = !value || !i_zend_is_true(value);
  35987. }
  35988. ZEND_VM_SMART_BRANCH(result, 1);
  35989. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  35990. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  35991. }
  35992. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  35993. {
  35994. USE_OPLINE
  35995. zval *container;
  35996. int result;
  35997. zend_ulong hval;
  35998. zval *offset;
  35999. SAVE_OPLINE();
  36000. container = EX_VAR(opline->op1.var);
  36001. offset = RT_CONSTANT(opline, opline->op2);
  36002. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  36003. HashTable *ht;
  36004. zval *value;
  36005. zend_string *str;
  36006. isset_dim_obj_array:
  36007. ht = Z_ARRVAL_P(container);
  36008. isset_again:
  36009. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  36010. str = Z_STR_P(offset);
  36011. if (IS_CONST != IS_CONST) {
  36012. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  36013. goto num_index_prop;
  36014. }
  36015. }
  36016. value = zend_hash_find_ex_ind(ht, str, IS_CONST == IS_CONST);
  36017. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  36018. hval = Z_LVAL_P(offset);
  36019. num_index_prop:
  36020. value = zend_hash_index_find(ht, hval);
  36021. } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  36022. offset = Z_REFVAL_P(offset);
  36023. goto isset_again;
  36024. } else {
  36025. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  36026. }
  36027. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  36028. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  36029. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  36030. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  36031. } else {
  36032. result = (value == NULL || !i_zend_is_true(value));
  36033. }
  36034. goto isset_dim_obj_exit;
  36035. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  36036. container = Z_REFVAL_P(container);
  36037. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  36038. goto isset_dim_obj_array;
  36039. }
  36040. }
  36041. if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  36042. offset++;
  36043. }
  36044. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  36045. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  36046. } else {
  36047. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  36048. }
  36049. isset_dim_obj_exit:
  36050. ZEND_VM_SMART_BRANCH(result, 1);
  36051. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  36052. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36053. }
  36054. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36055. {
  36056. USE_OPLINE
  36057. zval *container;
  36058. int result;
  36059. zval *offset;
  36060. SAVE_OPLINE();
  36061. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  36062. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  36063. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  36064. }
  36065. offset = RT_CONSTANT(opline, opline->op2);
  36066. if (IS_CV == IS_CONST ||
  36067. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  36068. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  36069. container = Z_REFVAL_P(container);
  36070. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  36071. goto isset_no_object;
  36072. }
  36073. } else {
  36074. goto isset_no_object;
  36075. }
  36076. }
  36077. if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
  36078. zend_wrong_property_check(offset);
  36079. isset_no_object:
  36080. result = (opline->extended_value & ZEND_ISEMPTY);
  36081. } else {
  36082. result =
  36083. (opline->extended_value & ZEND_ISEMPTY) ^
  36084. Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  36085. }
  36086. ZEND_VM_SMART_BRANCH(result, 1);
  36087. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  36088. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36089. }
  36090. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36091. {
  36092. USE_OPLINE
  36093. zval *expr;
  36094. zend_bool result;
  36095. SAVE_OPLINE();
  36096. expr = EX_VAR(opline->op1.var);
  36097. try_instanceof:
  36098. if (Z_TYPE_P(expr) == IS_OBJECT) {
  36099. zend_class_entry *ce;
  36100. if (IS_CONST == IS_CONST) {
  36101. ce = CACHED_PTR(opline->extended_value);
  36102. if (UNEXPECTED(ce == NULL)) {
  36103. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
  36104. if (EXPECTED(ce)) {
  36105. CACHE_PTR(opline->extended_value, ce);
  36106. }
  36107. }
  36108. } else if (IS_CONST == IS_UNUSED) {
  36109. ce = zend_fetch_class(NULL, opline->op2.num);
  36110. if (UNEXPECTED(ce == NULL)) {
  36111. ZEND_ASSERT(EG(exception));
  36112. ZVAL_UNDEF(EX_VAR(opline->result.var));
  36113. HANDLE_EXCEPTION();
  36114. }
  36115. } else {
  36116. ce = Z_CE_P(EX_VAR(opline->op2.var));
  36117. }
  36118. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  36119. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  36120. expr = Z_REFVAL_P(expr);
  36121. goto try_instanceof;
  36122. } else {
  36123. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  36124. GET_OP1_UNDEF_CV(expr, BP_VAR_R);
  36125. }
  36126. result = 0;
  36127. }
  36128. ZEND_VM_SMART_BRANCH(result, 1);
  36129. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  36130. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36131. }
  36132. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36133. {
  36134. USE_OPLINE
  36135. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  36136. SAVE_OPLINE();
  36137. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  36138. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  36139. }
  36140. /* Destroy the previously yielded value */
  36141. zval_ptr_dtor(&generator->value);
  36142. /* Destroy the previously yielded key */
  36143. zval_ptr_dtor(&generator->key);
  36144. /* Set the new yielded value */
  36145. if (IS_CV != IS_UNUSED) {
  36146. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  36147. /* Constants and temporary variables aren't yieldable by reference,
  36148. * but we still allow them with a notice. */
  36149. if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
  36150. zval *value;
  36151. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  36152. value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  36153. ZVAL_COPY_VALUE(&generator->value, value);
  36154. if (IS_CV == IS_CONST) {
  36155. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  36156. Z_ADDREF(generator->value);
  36157. }
  36158. }
  36159. } else {
  36160. zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  36161. /* If a function call result is yielded and the function did
  36162. * not return by reference we throw a notice. */
  36163. if (IS_CV == IS_VAR &&
  36164. (value_ptr == &EG(uninitialized_zval) ||
  36165. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  36166. !Z_ISREF_P(value_ptr)))) {
  36167. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  36168. ZVAL_COPY(&generator->value, value_ptr);
  36169. } else {
  36170. if (Z_ISREF_P(value_ptr)) {
  36171. Z_ADDREF_P(value_ptr);
  36172. } else {
  36173. ZVAL_MAKE_REF_EX(value_ptr, 2);
  36174. }
  36175. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  36176. }
  36177. }
  36178. } else {
  36179. zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  36180. /* Consts, temporary variables and references need copying */
  36181. if (IS_CV == IS_CONST) {
  36182. ZVAL_COPY_VALUE(&generator->value, value);
  36183. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  36184. Z_ADDREF(generator->value);
  36185. }
  36186. } else if (IS_CV == IS_TMP_VAR) {
  36187. ZVAL_COPY_VALUE(&generator->value, value);
  36188. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  36189. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  36190. } else {
  36191. ZVAL_COPY_VALUE(&generator->value, value);
  36192. if (IS_CV == IS_CV) {
  36193. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  36194. }
  36195. }
  36196. }
  36197. } else {
  36198. /* If no value was specified yield null */
  36199. ZVAL_NULL(&generator->value);
  36200. }
  36201. /* Set the new yielded key */
  36202. if (IS_CONST != IS_UNUSED) {
  36203. zval *key = RT_CONSTANT(opline, opline->op2);
  36204. /* Consts, temporary variables and references need copying */
  36205. if (IS_CONST == IS_CONST) {
  36206. ZVAL_COPY_VALUE(&generator->key, key);
  36207. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  36208. Z_ADDREF(generator->key);
  36209. }
  36210. } else if (IS_CONST == IS_TMP_VAR) {
  36211. ZVAL_COPY_VALUE(&generator->key, key);
  36212. } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  36213. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  36214. } else {
  36215. ZVAL_COPY_VALUE(&generator->key, key);
  36216. if (IS_CONST == IS_CV) {
  36217. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  36218. }
  36219. }
  36220. if (Z_TYPE(generator->key) == IS_LONG
  36221. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  36222. ) {
  36223. generator->largest_used_integer_key = Z_LVAL(generator->key);
  36224. }
  36225. } else {
  36226. /* If no key was specified we use auto-increment keys */
  36227. generator->largest_used_integer_key++;
  36228. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  36229. }
  36230. if (RETURN_VALUE_USED(opline)) {
  36231. /* If the return value of yield is used set the send
  36232. * target and initialize it to NULL */
  36233. generator->send_target = EX_VAR(opline->result.var);
  36234. ZVAL_NULL(generator->send_target);
  36235. } else {
  36236. generator->send_target = NULL;
  36237. }
  36238. /* We increment to the next op, so we are at the correct position when the
  36239. * generator is resumed. */
  36240. ZEND_VM_INC_OPCODE();
  36241. /* The GOTO VM uses a local opline variable. We need to set the opline
  36242. * variable in execute_data so we don't resume at an old position. */
  36243. SAVE_OPLINE();
  36244. ZEND_VM_RETURN();
  36245. }
  36246. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36247. {
  36248. USE_OPLINE
  36249. zval *varname;
  36250. zval *value;
  36251. zval *variable_ptr;
  36252. uintptr_t idx;
  36253. zend_reference *ref;
  36254. ZEND_VM_REPEATABLE_OPCODE
  36255. varname = RT_CONSTANT(opline, opline->op2);
  36256. /* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
  36257. idx = (uintptr_t)CACHED_PTR(opline->extended_value) - 1;
  36258. if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) {
  36259. Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx);
  36260. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  36261. (EXPECTED(p->key == Z_STR_P(varname)) ||
  36262. (EXPECTED(p->h == ZSTR_H(Z_STR_P(varname))) &&
  36263. EXPECTED(p->key != NULL) &&
  36264. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(varname)))))) {
  36265. value = (zval*)p; /* value = &p->val; */
  36266. goto check_indirect;
  36267. }
  36268. }
  36269. value = zend_hash_find_ex(&EG(symbol_table), Z_STR_P(varname), 1);
  36270. if (UNEXPECTED(value == NULL)) {
  36271. value = zend_hash_add_new(&EG(symbol_table), Z_STR_P(varname), &EG(uninitialized_zval));
  36272. idx = (char*)value - (char*)EG(symbol_table).arData;
  36273. /* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
  36274. CACHE_PTR(opline->extended_value, (void*)(idx + 1));
  36275. } else {
  36276. idx = (char*)value - (char*)EG(symbol_table).arData;
  36277. /* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
  36278. CACHE_PTR(opline->extended_value, (void*)(idx + 1));
  36279. check_indirect:
  36280. /* GLOBAL variable may be an INDIRECT pointer to CV */
  36281. if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) {
  36282. value = Z_INDIRECT_P(value);
  36283. if (UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
  36284. ZVAL_NULL(value);
  36285. }
  36286. }
  36287. }
  36288. if (UNEXPECTED(!Z_ISREF_P(value))) {
  36289. ZVAL_MAKE_REF_EX(value, 2);
  36290. ref = Z_REF_P(value);
  36291. } else {
  36292. ref = Z_REF_P(value);
  36293. GC_ADDREF(ref);
  36294. }
  36295. variable_ptr = EX_VAR(opline->op1.var);
  36296. if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
  36297. zend_refcounted *ref = Z_COUNTED_P(variable_ptr);
  36298. uint32_t refcnt = GC_DELREF(ref);
  36299. if (EXPECTED(variable_ptr != value)) {
  36300. if (refcnt == 0) {
  36301. SAVE_OPLINE();
  36302. rc_dtor_func(ref);
  36303. if (UNEXPECTED(EG(exception))) {
  36304. ZVAL_NULL(variable_ptr);
  36305. HANDLE_EXCEPTION();
  36306. }
  36307. } else {
  36308. gc_check_possible_root(ref);
  36309. }
  36310. }
  36311. }
  36312. ZVAL_REF(variable_ptr, ref);
  36313. ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
  36314. ZEND_VM_NEXT_OPCODE();
  36315. }
  36316. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_STATIC_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36317. {
  36318. USE_OPLINE
  36319. HashTable *ht;
  36320. zval *value;
  36321. zval *variable_ptr;
  36322. variable_ptr = EX_VAR(opline->op1.var);
  36323. zval_ptr_dtor(variable_ptr);
  36324. ht = EX(func)->op_array.static_variables;
  36325. ZEND_ASSERT(ht != NULL);
  36326. if (GC_REFCOUNT(ht) > 1) {
  36327. if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
  36328. GC_DELREF(ht);
  36329. }
  36330. EX(func)->op_array.static_variables = ht = zend_array_dup(ht);
  36331. }
  36332. value = (zval*)((char*)ht->arData + (opline->extended_value & ~ZEND_BIND_REF));
  36333. if (opline->extended_value & ZEND_BIND_REF) {
  36334. if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
  36335. SAVE_OPLINE();
  36336. if (UNEXPECTED(zval_update_constant_ex(value, EX(func)->op_array.scope) != SUCCESS)) {
  36337. ZVAL_NULL(variable_ptr);
  36338. HANDLE_EXCEPTION();
  36339. }
  36340. }
  36341. if (UNEXPECTED(!Z_ISREF_P(value))) {
  36342. zend_reference *ref = (zend_reference*)emalloc(sizeof(zend_reference));
  36343. GC_SET_REFCOUNT(ref, 2);
  36344. GC_TYPE_INFO(ref) = IS_REFERENCE;
  36345. ZVAL_COPY_VALUE(&ref->val, value);
  36346. Z_REF_P(value) = ref;
  36347. Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
  36348. ZVAL_REF(variable_ptr, ref);
  36349. } else {
  36350. Z_ADDREF_P(value);
  36351. ZVAL_REF(variable_ptr, Z_REF_P(value));
  36352. }
  36353. } else {
  36354. ZVAL_COPY(variable_ptr, value);
  36355. }
  36356. ZEND_VM_NEXT_OPCODE();
  36357. }
  36358. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36359. {
  36360. USE_OPLINE
  36361. zval *op1;
  36362. HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
  36363. int result;
  36364. SAVE_OPLINE();
  36365. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  36366. if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  36367. result = zend_hash_exists(ht, Z_STR_P(op1));
  36368. } else if (opline->extended_value) {
  36369. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  36370. result = zend_hash_index_exists(ht, Z_LVAL_P(op1));
  36371. } else {
  36372. result = 0;
  36373. }
  36374. } else if (Z_TYPE_P(op1) <= IS_FALSE) {
  36375. result = zend_hash_exists(ht, ZSTR_EMPTY_ALLOC());
  36376. } else {
  36377. zend_string *key;
  36378. zval key_tmp, result_tmp;
  36379. result = 0;
  36380. ZEND_HASH_FOREACH_STR_KEY(ht, key) {
  36381. ZVAL_STR(&key_tmp, key);
  36382. compare_function(&result_tmp, op1, &key_tmp);
  36383. if (Z_LVAL(result_tmp) == 0) {
  36384. result = 1;
  36385. break;
  36386. }
  36387. } ZEND_HASH_FOREACH_END();
  36388. }
  36389. ZEND_VM_SMART_BRANCH(result, 1);
  36390. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  36391. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36392. }
  36393. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36394. {
  36395. USE_OPLINE
  36396. zval *container, *dim, *value;
  36397. zend_long offset;
  36398. HashTable *ht;
  36399. container = EX_VAR(opline->op1.var);
  36400. dim = RT_CONSTANT(opline, opline->op2);
  36401. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  36402. fetch_dim_r_index_array:
  36403. if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
  36404. offset = Z_LVAL_P(dim);
  36405. } else {
  36406. offset = zval_get_long(dim);
  36407. }
  36408. ht = Z_ARRVAL_P(container);
  36409. ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
  36410. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  36411. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  36412. SAVE_OPLINE();
  36413. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36414. } else {
  36415. ZEND_VM_NEXT_OPCODE();
  36416. }
  36417. } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  36418. container = Z_REFVAL_P(container);
  36419. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  36420. goto fetch_dim_r_index_array;
  36421. } else {
  36422. goto fetch_dim_r_index_slow;
  36423. }
  36424. } else {
  36425. fetch_dim_r_index_slow:
  36426. SAVE_OPLINE();
  36427. if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  36428. dim++;
  36429. }
  36430. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  36431. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36432. }
  36433. fetch_dim_r_index_undef:
  36434. ZVAL_NULL(EX_VAR(opline->result.var));
  36435. SAVE_OPLINE();
  36436. zend_undefined_offset(offset);
  36437. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36438. }
  36439. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36440. {
  36441. USE_OPLINE
  36442. zval *container, *dim, *value;
  36443. zend_long offset;
  36444. HashTable *ht;
  36445. container = EX_VAR(opline->op1.var);
  36446. dim = EX_VAR(opline->op2.var);
  36447. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  36448. fetch_dim_r_index_array:
  36449. if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
  36450. offset = Z_LVAL_P(dim);
  36451. } else {
  36452. offset = zval_get_long(dim);
  36453. }
  36454. ht = Z_ARRVAL_P(container);
  36455. ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
  36456. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
  36457. if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
  36458. SAVE_OPLINE();
  36459. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36460. } else {
  36461. ZEND_VM_NEXT_OPCODE();
  36462. }
  36463. } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  36464. container = Z_REFVAL_P(container);
  36465. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  36466. goto fetch_dim_r_index_array;
  36467. } else {
  36468. goto fetch_dim_r_index_slow;
  36469. }
  36470. } else {
  36471. fetch_dim_r_index_slow:
  36472. SAVE_OPLINE();
  36473. if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  36474. dim++;
  36475. }
  36476. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  36477. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36478. }
  36479. fetch_dim_r_index_undef:
  36480. ZVAL_NULL(EX_VAR(opline->result.var));
  36481. SAVE_OPLINE();
  36482. zend_undefined_offset(offset);
  36483. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36484. }
  36485. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36486. {
  36487. USE_OPLINE
  36488. zend_free_op free_op2;
  36489. zval *op1, *op2, *result;
  36490. op1 = EX_VAR(opline->op1.var);
  36491. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  36492. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  36493. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  36494. result = EX_VAR(opline->result.var);
  36495. fast_long_add_function(result, op1, op2);
  36496. ZEND_VM_NEXT_OPCODE();
  36497. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  36498. result = EX_VAR(opline->result.var);
  36499. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
  36500. ZEND_VM_NEXT_OPCODE();
  36501. }
  36502. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  36503. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  36504. result = EX_VAR(opline->result.var);
  36505. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
  36506. ZEND_VM_NEXT_OPCODE();
  36507. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  36508. result = EX_VAR(opline->result.var);
  36509. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
  36510. ZEND_VM_NEXT_OPCODE();
  36511. }
  36512. }
  36513. SAVE_OPLINE();
  36514. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  36515. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  36516. }
  36517. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  36518. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  36519. }
  36520. add_function(EX_VAR(opline->result.var), op1, op2);
  36521. zval_ptr_dtor_nogc(free_op2);
  36522. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36523. }
  36524. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36525. {
  36526. USE_OPLINE
  36527. zend_free_op free_op2;
  36528. zval *op1, *op2, *result;
  36529. op1 = EX_VAR(opline->op1.var);
  36530. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  36531. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  36532. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  36533. result = EX_VAR(opline->result.var);
  36534. fast_long_sub_function(result, op1, op2);
  36535. ZEND_VM_NEXT_OPCODE();
  36536. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  36537. result = EX_VAR(opline->result.var);
  36538. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
  36539. ZEND_VM_NEXT_OPCODE();
  36540. }
  36541. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  36542. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  36543. result = EX_VAR(opline->result.var);
  36544. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  36545. ZEND_VM_NEXT_OPCODE();
  36546. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  36547. result = EX_VAR(opline->result.var);
  36548. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
  36549. ZEND_VM_NEXT_OPCODE();
  36550. }
  36551. }
  36552. SAVE_OPLINE();
  36553. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  36554. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  36555. }
  36556. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  36557. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  36558. }
  36559. sub_function(EX_VAR(opline->result.var), op1, op2);
  36560. zval_ptr_dtor_nogc(free_op2);
  36561. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36562. }
  36563. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36564. {
  36565. USE_OPLINE
  36566. zend_free_op free_op2;
  36567. zval *op1, *op2, *result;
  36568. op1 = EX_VAR(opline->op1.var);
  36569. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  36570. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  36571. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  36572. zend_long overflow;
  36573. result = EX_VAR(opline->result.var);
  36574. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  36575. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  36576. ZEND_VM_NEXT_OPCODE();
  36577. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  36578. result = EX_VAR(opline->result.var);
  36579. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
  36580. ZEND_VM_NEXT_OPCODE();
  36581. }
  36582. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  36583. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  36584. result = EX_VAR(opline->result.var);
  36585. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
  36586. ZEND_VM_NEXT_OPCODE();
  36587. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  36588. result = EX_VAR(opline->result.var);
  36589. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
  36590. ZEND_VM_NEXT_OPCODE();
  36591. }
  36592. }
  36593. SAVE_OPLINE();
  36594. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  36595. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  36596. }
  36597. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  36598. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  36599. }
  36600. mul_function(EX_VAR(opline->result.var), op1, op2);
  36601. zval_ptr_dtor_nogc(free_op2);
  36602. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36603. }
  36604. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36605. {
  36606. USE_OPLINE
  36607. zend_free_op free_op2;
  36608. zval *op1, *op2;
  36609. SAVE_OPLINE();
  36610. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  36611. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  36612. fast_div_function(EX_VAR(opline->result.var), op1, op2);
  36613. zval_ptr_dtor_nogc(free_op2);
  36614. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36615. }
  36616. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36617. {
  36618. USE_OPLINE
  36619. zend_free_op free_op2;
  36620. zval *op1, *op2, *result;
  36621. op1 = EX_VAR(opline->op1.var);
  36622. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  36623. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  36624. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  36625. result = EX_VAR(opline->result.var);
  36626. if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
  36627. ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  36628. } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
  36629. /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
  36630. ZVAL_LONG(result, 0);
  36631. } else {
  36632. ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
  36633. }
  36634. ZEND_VM_NEXT_OPCODE();
  36635. }
  36636. }
  36637. SAVE_OPLINE();
  36638. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  36639. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  36640. }
  36641. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  36642. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  36643. }
  36644. mod_function(EX_VAR(opline->result.var), op1, op2);
  36645. zval_ptr_dtor_nogc(free_op2);
  36646. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36647. }
  36648. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36649. {
  36650. USE_OPLINE
  36651. zend_free_op free_op2;
  36652. zval *op1, *op2;
  36653. op1 = EX_VAR(opline->op1.var);
  36654. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  36655. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  36656. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  36657. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  36658. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
  36659. ZEND_VM_NEXT_OPCODE();
  36660. }
  36661. SAVE_OPLINE();
  36662. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  36663. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  36664. }
  36665. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  36666. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  36667. }
  36668. shift_left_function(EX_VAR(opline->result.var), op1, op2);
  36669. zval_ptr_dtor_nogc(free_op2);
  36670. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36671. }
  36672. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36673. {
  36674. USE_OPLINE
  36675. zend_free_op free_op2;
  36676. zval *op1, *op2;
  36677. op1 = EX_VAR(opline->op1.var);
  36678. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  36679. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  36680. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  36681. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  36682. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
  36683. ZEND_VM_NEXT_OPCODE();
  36684. }
  36685. SAVE_OPLINE();
  36686. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  36687. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  36688. }
  36689. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  36690. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  36691. }
  36692. shift_right_function(EX_VAR(opline->result.var), op1, op2);
  36693. zval_ptr_dtor_nogc(free_op2);
  36694. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36695. }
  36696. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36697. {
  36698. USE_OPLINE
  36699. zend_free_op free_op2;
  36700. zval *op1, *op2;
  36701. SAVE_OPLINE();
  36702. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  36703. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  36704. pow_function(EX_VAR(opline->result.var), op1, op2);
  36705. zval_ptr_dtor_nogc(free_op2);
  36706. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36707. }
  36708. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36709. {
  36710. USE_OPLINE
  36711. zend_free_op free_op2;
  36712. zval *op1, *op2;
  36713. op1 = EX_VAR(opline->op1.var);
  36714. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  36715. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  36716. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  36717. zend_string *op1_str = Z_STR_P(op1);
  36718. zend_string *op2_str = Z_STR_P(op2);
  36719. zend_string *str;
  36720. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  36721. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  36722. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  36723. } else {
  36724. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  36725. }
  36726. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  36727. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  36728. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  36729. } else {
  36730. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  36731. }
  36732. zval_ptr_dtor_nogc(free_op2);
  36733. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  36734. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  36735. size_t len = ZSTR_LEN(op1_str);
  36736. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  36737. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  36738. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  36739. zval_ptr_dtor_nogc(free_op2);
  36740. } else {
  36741. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  36742. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  36743. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  36744. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  36745. zval_ptr_dtor_nogc(free_op2);
  36746. }
  36747. ZEND_VM_NEXT_OPCODE();
  36748. } else {
  36749. SAVE_OPLINE();
  36750. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  36751. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  36752. }
  36753. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  36754. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  36755. }
  36756. concat_function(EX_VAR(opline->result.var), op1, op2);
  36757. zval_ptr_dtor_nogc(free_op2);
  36758. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36759. }
  36760. }
  36761. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36762. {
  36763. USE_OPLINE
  36764. zend_free_op free_op2;
  36765. zval *op1, *op2, *result;
  36766. op1 = EX_VAR(opline->op1.var);
  36767. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  36768. do {
  36769. int result;
  36770. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  36771. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  36772. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  36773. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  36774. result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
  36775. } else {
  36776. break;
  36777. }
  36778. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  36779. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  36780. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  36781. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  36782. result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
  36783. } else {
  36784. break;
  36785. }
  36786. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  36787. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  36788. result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  36789. zval_ptr_dtor_nogc(free_op2);
  36790. } else {
  36791. break;
  36792. }
  36793. } else {
  36794. break;
  36795. }
  36796. ZEND_VM_SMART_BRANCH(result, 0);
  36797. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  36798. ZEND_VM_NEXT_OPCODE();
  36799. } while (0);
  36800. SAVE_OPLINE();
  36801. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  36802. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  36803. }
  36804. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  36805. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  36806. }
  36807. result = EX_VAR(opline->result.var);
  36808. compare_function(result, op1, op2);
  36809. ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
  36810. zval_ptr_dtor_nogc(free_op2);
  36811. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36812. }
  36813. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36814. {
  36815. USE_OPLINE
  36816. zend_free_op free_op2;
  36817. zval *op1, *op2, *result;
  36818. op1 = EX_VAR(opline->op1.var);
  36819. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  36820. do {
  36821. int result;
  36822. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  36823. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  36824. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  36825. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  36826. result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
  36827. } else {
  36828. break;
  36829. }
  36830. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  36831. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  36832. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  36833. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  36834. result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
  36835. } else {
  36836. break;
  36837. }
  36838. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  36839. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  36840. result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  36841. zval_ptr_dtor_nogc(free_op2);
  36842. } else {
  36843. break;
  36844. }
  36845. } else {
  36846. break;
  36847. }
  36848. ZEND_VM_SMART_BRANCH(result, 0);
  36849. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  36850. ZEND_VM_NEXT_OPCODE();
  36851. } while (0);
  36852. SAVE_OPLINE();
  36853. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  36854. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  36855. }
  36856. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  36857. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  36858. }
  36859. result = EX_VAR(opline->result.var);
  36860. compare_function(result, op1, op2);
  36861. ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
  36862. zval_ptr_dtor_nogc(free_op2);
  36863. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36864. }
  36865. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36866. {
  36867. USE_OPLINE
  36868. zend_free_op free_op2;
  36869. zval *op1, *op2, *result;
  36870. op1 = EX_VAR(opline->op1.var);
  36871. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  36872. do {
  36873. int result;
  36874. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  36875. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  36876. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  36877. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  36878. result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
  36879. } else {
  36880. break;
  36881. }
  36882. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  36883. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  36884. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  36885. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  36886. result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
  36887. } else {
  36888. break;
  36889. }
  36890. } else {
  36891. break;
  36892. }
  36893. ZEND_VM_SMART_BRANCH(result, 0);
  36894. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  36895. ZEND_VM_NEXT_OPCODE();
  36896. } while (0);
  36897. SAVE_OPLINE();
  36898. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  36899. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  36900. }
  36901. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  36902. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  36903. }
  36904. result = EX_VAR(opline->result.var);
  36905. compare_function(result, op1, op2);
  36906. ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
  36907. zval_ptr_dtor_nogc(free_op2);
  36908. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36909. }
  36910. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36911. {
  36912. USE_OPLINE
  36913. zend_free_op free_op2;
  36914. zval *op1, *op2, *result;
  36915. op1 = EX_VAR(opline->op1.var);
  36916. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  36917. do {
  36918. int result;
  36919. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  36920. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  36921. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  36922. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  36923. result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
  36924. } else {
  36925. break;
  36926. }
  36927. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  36928. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  36929. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  36930. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  36931. result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
  36932. } else {
  36933. break;
  36934. }
  36935. } else {
  36936. break;
  36937. }
  36938. ZEND_VM_SMART_BRANCH(result, 0);
  36939. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  36940. ZEND_VM_NEXT_OPCODE();
  36941. } while (0);
  36942. SAVE_OPLINE();
  36943. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  36944. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  36945. }
  36946. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  36947. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  36948. }
  36949. result = EX_VAR(opline->result.var);
  36950. compare_function(result, op1, op2);
  36951. ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
  36952. zval_ptr_dtor_nogc(free_op2);
  36953. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36954. }
  36955. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36956. {
  36957. USE_OPLINE
  36958. zend_free_op free_op2;
  36959. zval *op1, *op2;
  36960. SAVE_OPLINE();
  36961. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  36962. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  36963. compare_function(EX_VAR(opline->result.var), op1, op2);
  36964. zval_ptr_dtor_nogc(free_op2);
  36965. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36966. }
  36967. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36968. {
  36969. USE_OPLINE
  36970. zend_free_op free_op2;
  36971. zval *op1, *op2;
  36972. op1 = EX_VAR(opline->op1.var);
  36973. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  36974. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  36975. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  36976. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
  36977. ZEND_VM_NEXT_OPCODE();
  36978. }
  36979. SAVE_OPLINE();
  36980. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  36981. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  36982. }
  36983. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  36984. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  36985. }
  36986. bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
  36987. zval_ptr_dtor_nogc(free_op2);
  36988. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  36989. }
  36990. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  36991. {
  36992. USE_OPLINE
  36993. zend_free_op free_op2;
  36994. zval *op1, *op2;
  36995. op1 = EX_VAR(opline->op1.var);
  36996. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  36997. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  36998. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  36999. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
  37000. ZEND_VM_NEXT_OPCODE();
  37001. }
  37002. SAVE_OPLINE();
  37003. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  37004. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  37005. }
  37006. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  37007. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  37008. }
  37009. bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
  37010. zval_ptr_dtor_nogc(free_op2);
  37011. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37012. }
  37013. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37014. {
  37015. USE_OPLINE
  37016. zend_free_op free_op2;
  37017. zval *op1, *op2;
  37018. op1 = EX_VAR(opline->op1.var);
  37019. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  37020. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  37021. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  37022. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
  37023. ZEND_VM_NEXT_OPCODE();
  37024. }
  37025. SAVE_OPLINE();
  37026. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  37027. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  37028. }
  37029. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  37030. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  37031. }
  37032. bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
  37033. zval_ptr_dtor_nogc(free_op2);
  37034. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37035. }
  37036. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37037. {
  37038. USE_OPLINE
  37039. zend_free_op free_op2;
  37040. zval *op1, *op2;
  37041. SAVE_OPLINE();
  37042. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  37043. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  37044. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  37045. zval_ptr_dtor_nogc(free_op2);
  37046. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37047. }
  37048. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  37049. {
  37050. USE_OPLINE
  37051. zend_free_op free_op2, free_op_data1;
  37052. zval *object;
  37053. zval *property;
  37054. zval *value;
  37055. zval *zptr;
  37056. SAVE_OPLINE();
  37057. object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  37058. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  37059. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37060. }
  37061. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  37062. do {
  37063. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  37064. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  37065. if (Z_ISREF_P(object)) {
  37066. object = Z_REFVAL_P(object);
  37067. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  37068. goto assign_op_object;
  37069. }
  37070. }
  37071. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  37072. break;
  37073. }
  37074. }
  37075. /* here we are sure we are dealing with an object */
  37076. assign_op_object:
  37077. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  37078. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
  37079. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  37080. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  37081. ZVAL_NULL(EX_VAR(opline->result.var));
  37082. }
  37083. } else {
  37084. ZVAL_DEREF(zptr);
  37085. binary_op(zptr, zptr, value);
  37086. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  37087. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  37088. }
  37089. }
  37090. } else {
  37091. zend_assign_op_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC);
  37092. }
  37093. } while (0);
  37094. FREE_OP(free_op_data1);
  37095. zval_ptr_dtor_nogc(free_op2);
  37096. /* assign_obj has two opcodes! */
  37097. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  37098. }
  37099. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  37100. {
  37101. USE_OPLINE
  37102. zend_free_op free_op2, free_op_data1;
  37103. zval *var_ptr;
  37104. zval *value, *container, *dim;
  37105. SAVE_OPLINE();
  37106. container = EX_VAR(opline->op1.var);
  37107. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  37108. assign_dim_op_array:
  37109. SEPARATE_ARRAY(container);
  37110. assign_dim_op_new_array:
  37111. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  37112. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  37113. var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
  37114. if (UNEXPECTED(!var_ptr)) {
  37115. zend_cannot_add_element();
  37116. goto assign_dim_op_ret_null;
  37117. }
  37118. } else {
  37119. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  37120. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
  37121. } else {
  37122. var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
  37123. }
  37124. if (UNEXPECTED(!var_ptr)) {
  37125. goto assign_dim_op_ret_null;
  37126. }
  37127. ZVAL_DEREF(var_ptr);
  37128. }
  37129. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  37130. binary_op(var_ptr, var_ptr, value);
  37131. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  37132. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  37133. }
  37134. } else {
  37135. if (EXPECTED(Z_ISREF_P(container))) {
  37136. container = Z_REFVAL_P(container);
  37137. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  37138. goto assign_dim_op_array;
  37139. }
  37140. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  37141. container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
  37142. assign_dim_op_convert_to_array:
  37143. ZVAL_ARR(container, zend_new_array(8));
  37144. goto assign_dim_op_new_array;
  37145. }
  37146. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  37147. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  37148. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  37149. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  37150. dim++;
  37151. }
  37152. zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC);
  37153. } else {
  37154. if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  37155. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  37156. zend_use_new_element_for_string();
  37157. } else {
  37158. zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC);
  37159. zend_wrong_string_offset(EXECUTE_DATA_C);
  37160. }
  37161. UNDEF_RESULT();
  37162. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  37163. goto assign_dim_op_convert_to_array;
  37164. } else {
  37165. if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
  37166. zend_use_scalar_as_array();
  37167. }
  37168. assign_dim_op_ret_null:
  37169. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  37170. ZVAL_NULL(EX_VAR(opline->result.var));
  37171. }
  37172. }
  37173. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  37174. }
  37175. }
  37176. zval_ptr_dtor_nogc(free_op2);
  37177. FREE_OP(free_op_data1);
  37178. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  37179. }
  37180. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_CV_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  37181. {
  37182. USE_OPLINE
  37183. zend_free_op free_op2;
  37184. zval *var_ptr;
  37185. zval *value;
  37186. SAVE_OPLINE();
  37187. value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  37188. var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  37189. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  37190. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  37191. ZVAL_NULL(EX_VAR(opline->result.var));
  37192. }
  37193. } else {
  37194. ZVAL_DEREF(var_ptr);
  37195. binary_op(var_ptr, var_ptr, value);
  37196. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  37197. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  37198. }
  37199. }
  37200. zval_ptr_dtor_nogc(free_op2);
  37201. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37202. }
  37203. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  37204. {
  37205. #if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED
  37206. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37207. #else
  37208. # if 0 || IS_CV != IS_UNUSED
  37209. # if 0
  37210. /* opline->extended_value checks are specialized, don't need opline */
  37211. USE_OPLINE
  37212. # endif
  37213. if (EXPECTED(1)) {
  37214. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37215. }
  37216. if (EXPECTED(0)) {
  37217. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37218. }
  37219. # endif
  37220. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37221. #endif
  37222. }
  37223. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  37224. {
  37225. #if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED
  37226. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37227. #else
  37228. # if 0 || IS_CV != IS_UNUSED
  37229. # if 0
  37230. /* opline->extended_value checks are specialized, don't need opline */
  37231. USE_OPLINE
  37232. # endif
  37233. if (EXPECTED(0)) {
  37234. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37235. }
  37236. if (EXPECTED(1)) {
  37237. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37238. }
  37239. # endif
  37240. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37241. #endif
  37242. }
  37243. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  37244. {
  37245. #if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED
  37246. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37247. #else
  37248. # if 0 || IS_CV != IS_UNUSED
  37249. # if 0
  37250. /* opline->extended_value checks are specialized, don't need opline */
  37251. USE_OPLINE
  37252. # endif
  37253. if (EXPECTED(0)) {
  37254. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37255. }
  37256. if (EXPECTED(0)) {
  37257. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37258. }
  37259. # endif
  37260. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37261. #endif
  37262. }
  37263. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37264. {
  37265. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37266. }
  37267. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37268. {
  37269. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37270. }
  37271. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37272. {
  37273. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37274. }
  37275. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37276. {
  37277. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37278. }
  37279. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37280. {
  37281. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37282. }
  37283. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37284. {
  37285. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37286. }
  37287. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37288. {
  37289. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37290. }
  37291. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37292. {
  37293. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37294. }
  37295. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37296. {
  37297. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37298. }
  37299. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37300. {
  37301. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37302. }
  37303. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37304. {
  37305. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37306. }
  37307. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37308. {
  37309. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37310. }
  37311. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37312. {
  37313. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37314. }
  37315. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37316. {
  37317. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37318. }
  37319. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37320. {
  37321. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37322. }
  37323. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37324. {
  37325. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37326. }
  37327. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37328. {
  37329. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37330. }
  37331. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37332. {
  37333. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37334. }
  37335. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37336. {
  37337. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37338. }
  37339. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37340. {
  37341. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37342. }
  37343. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37344. {
  37345. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37346. }
  37347. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37348. {
  37349. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37350. }
  37351. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37352. {
  37353. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37354. }
  37355. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37356. {
  37357. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37358. }
  37359. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37360. {
  37361. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37362. }
  37363. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37364. {
  37365. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37366. }
  37367. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37368. {
  37369. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37370. }
  37371. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37372. {
  37373. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37374. }
  37375. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37376. {
  37377. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37378. }
  37379. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37380. {
  37381. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37382. }
  37383. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37384. {
  37385. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37386. }
  37387. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37388. {
  37389. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37390. }
  37391. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37392. {
  37393. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37394. }
  37395. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37396. {
  37397. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37398. }
  37399. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37400. {
  37401. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37402. }
  37403. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37404. {
  37405. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37406. }
  37407. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  37408. {
  37409. USE_OPLINE
  37410. zend_free_op free_op2;
  37411. zval *object;
  37412. zval *property;
  37413. zval *zptr;
  37414. SAVE_OPLINE();
  37415. object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  37416. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  37417. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37418. }
  37419. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  37420. do {
  37421. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  37422. if (Z_ISREF_P(object)) {
  37423. object = Z_REFVAL_P(object);
  37424. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  37425. goto pre_incdec_object;
  37426. }
  37427. }
  37428. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  37429. break;
  37430. }
  37431. }
  37432. /* here we are sure we are dealing with an object */
  37433. pre_incdec_object:
  37434. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  37435. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  37436. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  37437. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  37438. ZVAL_NULL(EX_VAR(opline->result.var));
  37439. }
  37440. } else {
  37441. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  37442. if (inc) {
  37443. fast_long_increment_function(zptr);
  37444. } else {
  37445. fast_long_decrement_function(zptr);
  37446. }
  37447. } else {
  37448. ZVAL_DEREF(zptr);
  37449. if (inc) {
  37450. increment_function(zptr);
  37451. } else {
  37452. decrement_function(zptr);
  37453. }
  37454. }
  37455. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  37456. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  37457. }
  37458. }
  37459. } else {
  37460. zend_pre_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  37461. }
  37462. } while (0);
  37463. zval_ptr_dtor_nogc(free_op2);
  37464. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37465. }
  37466. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37467. {
  37468. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37469. }
  37470. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37471. {
  37472. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37473. }
  37474. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  37475. {
  37476. USE_OPLINE
  37477. zend_free_op free_op2;
  37478. zval *object;
  37479. zval *property;
  37480. zval *zptr;
  37481. SAVE_OPLINE();
  37482. object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  37483. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  37484. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37485. }
  37486. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  37487. do {
  37488. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  37489. if (Z_ISREF_P(object)) {
  37490. object = Z_REFVAL_P(object);
  37491. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  37492. goto post_incdec_object;
  37493. }
  37494. }
  37495. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  37496. break;
  37497. }
  37498. }
  37499. /* here we are sure we are dealing with an object */
  37500. post_incdec_object:
  37501. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  37502. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  37503. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  37504. ZVAL_NULL(EX_VAR(opline->result.var));
  37505. } else {
  37506. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  37507. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr));
  37508. if (inc) {
  37509. fast_long_increment_function(zptr);
  37510. } else {
  37511. fast_long_decrement_function(zptr);
  37512. }
  37513. } else {
  37514. ZVAL_DEREF(zptr);
  37515. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  37516. if (inc) {
  37517. increment_function(zptr);
  37518. } else {
  37519. decrement_function(zptr);
  37520. }
  37521. }
  37522. }
  37523. } else {
  37524. zend_post_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  37525. }
  37526. } while (0);
  37527. zval_ptr_dtor_nogc(free_op2);
  37528. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37529. }
  37530. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37531. {
  37532. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37533. }
  37534. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37535. {
  37536. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  37537. }
  37538. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37539. {
  37540. USE_OPLINE
  37541. zend_free_op free_op2;
  37542. zval *container, *dim, *value, *result;
  37543. SAVE_OPLINE();
  37544. container = EX_VAR(opline->op1.var);
  37545. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  37546. if (IS_CV != IS_CONST) {
  37547. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  37548. fetch_dim_r_array:
  37549. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
  37550. result = EX_VAR(opline->result.var);
  37551. ZVAL_COPY_DEREF(result, value);
  37552. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  37553. container = Z_REFVAL_P(container);
  37554. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  37555. goto fetch_dim_r_array;
  37556. } else {
  37557. goto fetch_dim_r_slow;
  37558. }
  37559. } else {
  37560. fetch_dim_r_slow:
  37561. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  37562. dim++;
  37563. }
  37564. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  37565. }
  37566. } else {
  37567. zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  37568. }
  37569. zval_ptr_dtor_nogc(free_op2);
  37570. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37571. }
  37572. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37573. {
  37574. USE_OPLINE
  37575. zend_free_op free_op1, free_op2;
  37576. zval *container;
  37577. SAVE_OPLINE();
  37578. container = EX_VAR(opline->op1.var);
  37579. zend_fetch_dimension_address_W(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  37580. zval_ptr_dtor_nogc(free_op2);
  37581. if (IS_CV == IS_VAR) {
  37582. zval *result = EX_VAR(opline->result.var);
  37583. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  37584. }
  37585. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37586. }
  37587. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37588. {
  37589. USE_OPLINE
  37590. zend_free_op free_op1, free_op2;
  37591. zval *container;
  37592. SAVE_OPLINE();
  37593. container = EX_VAR(opline->op1.var);
  37594. zend_fetch_dimension_address_RW(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  37595. zval_ptr_dtor_nogc(free_op2);
  37596. if (IS_CV == IS_VAR) {
  37597. zval *result = EX_VAR(opline->result.var);
  37598. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  37599. }
  37600. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37601. }
  37602. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37603. {
  37604. USE_OPLINE
  37605. zend_free_op free_op2;
  37606. zval *container;
  37607. SAVE_OPLINE();
  37608. container = EX_VAR(opline->op1.var);
  37609. zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  37610. zval_ptr_dtor_nogc(free_op2);
  37611. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37612. }
  37613. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37614. {
  37615. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  37616. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  37617. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37618. }
  37619. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37620. } else {
  37621. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  37622. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37623. }
  37624. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37625. }
  37626. }
  37627. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37628. {
  37629. USE_OPLINE
  37630. zend_free_op free_op1, free_op2;
  37631. zval *container;
  37632. SAVE_OPLINE();
  37633. container = EX_VAR(opline->op1.var);
  37634. zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
  37635. zval_ptr_dtor_nogc(free_op2);
  37636. if (IS_CV == IS_VAR) {
  37637. zval *result = EX_VAR(opline->result.var);
  37638. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  37639. }
  37640. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37641. }
  37642. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37643. {
  37644. USE_OPLINE
  37645. zval *container;
  37646. zend_free_op free_op2;
  37647. zval *offset;
  37648. void **cache_slot = NULL;
  37649. SAVE_OPLINE();
  37650. container = EX_VAR(opline->op1.var);
  37651. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  37652. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37653. }
  37654. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  37655. if (IS_CV == IS_CONST ||
  37656. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  37657. do {
  37658. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  37659. container = Z_REFVAL_P(container);
  37660. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  37661. break;
  37662. }
  37663. }
  37664. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  37665. GET_OP1_UNDEF_CV(container, BP_VAR_R);
  37666. }
  37667. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  37668. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  37669. }
  37670. goto fetch_obj_r_no_object;
  37671. } while (0);
  37672. }
  37673. /* here we are sure we are dealing with an object */
  37674. do {
  37675. zend_object *zobj = Z_OBJ_P(container);
  37676. zval *retval;
  37677. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  37678. cache_slot = CACHE_ADDR(opline->extended_value);
  37679. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  37680. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  37681. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  37682. retval = OBJ_PROP(zobj, prop_offset);
  37683. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  37684. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  37685. break;
  37686. }
  37687. } else if (EXPECTED(zobj->properties != NULL)) {
  37688. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  37689. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  37690. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  37691. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  37692. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  37693. (EXPECTED(p->key == Z_STR_P(offset)) ||
  37694. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  37695. EXPECTED(p->key != NULL) &&
  37696. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  37697. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
  37698. break;
  37699. }
  37700. }
  37701. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  37702. }
  37703. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  37704. if (EXPECTED(retval)) {
  37705. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  37706. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  37707. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  37708. break;
  37709. }
  37710. }
  37711. }
  37712. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
  37713. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  37714. }
  37715. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  37716. fetch_obj_r_no_object:
  37717. zend_wrong_property_read(offset);
  37718. ZVAL_NULL(EX_VAR(opline->result.var));
  37719. } else {
  37720. retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  37721. if (retval != EX_VAR(opline->result.var)) {
  37722. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  37723. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  37724. zend_unwrap_reference(retval);
  37725. }
  37726. }
  37727. } while (0);
  37728. zval_ptr_dtor_nogc(free_op2);
  37729. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37730. }
  37731. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37732. {
  37733. USE_OPLINE
  37734. zend_free_op free_op1, free_op2;
  37735. zval *property, *container, *result;
  37736. SAVE_OPLINE();
  37737. container = EX_VAR(opline->op1.var);
  37738. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  37739. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37740. }
  37741. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  37742. result = EX_VAR(opline->result.var);
  37743. zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC);
  37744. zval_ptr_dtor_nogc(free_op2);
  37745. if (IS_CV == IS_VAR) {
  37746. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  37747. }
  37748. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37749. }
  37750. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37751. {
  37752. USE_OPLINE
  37753. zend_free_op free_op1, free_op2;
  37754. zval *property, *container, *result;
  37755. SAVE_OPLINE();
  37756. container = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  37757. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  37758. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37759. }
  37760. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  37761. result = EX_VAR(opline->result.var);
  37762. zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC);
  37763. zval_ptr_dtor_nogc(free_op2);
  37764. if (IS_CV == IS_VAR) {
  37765. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  37766. }
  37767. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37768. }
  37769. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37770. {
  37771. USE_OPLINE
  37772. zval *container;
  37773. zend_free_op free_op2;
  37774. zval *offset;
  37775. void **cache_slot = NULL;
  37776. SAVE_OPLINE();
  37777. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  37778. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  37779. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37780. }
  37781. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  37782. if (IS_CV == IS_CONST ||
  37783. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  37784. do {
  37785. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  37786. container = Z_REFVAL_P(container);
  37787. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  37788. break;
  37789. }
  37790. }
  37791. goto fetch_obj_is_no_object;
  37792. } while (0);
  37793. }
  37794. /* here we are sure we are dealing with an object */
  37795. do {
  37796. zend_object *zobj = Z_OBJ_P(container);
  37797. zval *retval;
  37798. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  37799. cache_slot = CACHE_ADDR(opline->extended_value);
  37800. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  37801. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  37802. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  37803. retval = OBJ_PROP(zobj, prop_offset);
  37804. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  37805. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  37806. break;
  37807. }
  37808. } else if (EXPECTED(zobj->properties != NULL)) {
  37809. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  37810. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  37811. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  37812. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  37813. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  37814. (EXPECTED(p->key == Z_STR_P(offset)) ||
  37815. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  37816. EXPECTED(p->key != NULL) &&
  37817. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  37818. ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
  37819. break;
  37820. }
  37821. }
  37822. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  37823. }
  37824. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  37825. if (EXPECTED(retval)) {
  37826. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  37827. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  37828. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  37829. break;
  37830. }
  37831. }
  37832. }
  37833. }
  37834. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  37835. fetch_obj_is_no_object:
  37836. ZVAL_NULL(EX_VAR(opline->result.var));
  37837. } else {
  37838. retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  37839. if (retval != EX_VAR(opline->result.var)) {
  37840. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  37841. }
  37842. }
  37843. } while (0);
  37844. zval_ptr_dtor_nogc(free_op2);
  37845. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37846. }
  37847. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37848. {
  37849. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  37850. /* Behave like FETCH_OBJ_W */
  37851. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  37852. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37853. }
  37854. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37855. } else {
  37856. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37857. }
  37858. }
  37859. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37860. {
  37861. USE_OPLINE
  37862. zend_free_op free_op1, free_op2;
  37863. zval *container, *property, *result;
  37864. SAVE_OPLINE();
  37865. container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
  37866. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  37867. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37868. }
  37869. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  37870. result = EX_VAR(opline->result.var);
  37871. zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC);
  37872. zval_ptr_dtor_nogc(free_op2);
  37873. if (IS_CV == IS_VAR) {
  37874. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  37875. }
  37876. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  37877. }
  37878. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37879. {
  37880. USE_OPLINE
  37881. zend_free_op free_op2;
  37882. zval *object, *property, *value, tmp;
  37883. SAVE_OPLINE();
  37884. object = EX_VAR(opline->op1.var);
  37885. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  37886. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37887. }
  37888. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  37889. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  37890. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  37891. if (Z_ISREF_P(object)) {
  37892. object = Z_REFVAL_P(object);
  37893. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  37894. goto assign_object;
  37895. }
  37896. }
  37897. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  37898. goto exit_assign_obj;
  37899. }
  37900. }
  37901. assign_object:
  37902. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  37903. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  37904. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  37905. zend_object *zobj = Z_OBJ_P(object);
  37906. zval *property_val;
  37907. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  37908. property_val = OBJ_PROP(zobj, prop_offset);
  37909. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  37910. fast_assign_obj:
  37911. value = zend_assign_to_variable(property_val, value, IS_CONST);
  37912. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  37913. ZVAL_COPY(EX_VAR(opline->result.var), value);
  37914. }
  37915. goto exit_assign_obj;
  37916. }
  37917. } else {
  37918. if (EXPECTED(zobj->properties != NULL)) {
  37919. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  37920. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  37921. GC_DELREF(zobj->properties);
  37922. }
  37923. zobj->properties = zend_array_dup(zobj->properties);
  37924. }
  37925. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  37926. if (property_val) {
  37927. goto fast_assign_obj;
  37928. }
  37929. }
  37930. if (!zobj->ce->__set) {
  37931. if (EXPECTED(zobj->properties == NULL)) {
  37932. rebuild_object_properties(zobj);
  37933. }
  37934. if (IS_CONST == IS_CONST) {
  37935. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  37936. Z_ADDREF_P(value);
  37937. }
  37938. } else if (IS_CONST != IS_TMP_VAR) {
  37939. if (Z_ISREF_P(value)) {
  37940. if (IS_CONST == IS_VAR) {
  37941. zend_reference *ref = Z_REF_P(value);
  37942. if (GC_DELREF(ref) == 0) {
  37943. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  37944. efree_size(ref, sizeof(zend_reference));
  37945. value = &tmp;
  37946. } else {
  37947. value = Z_REFVAL_P(value);
  37948. Z_TRY_ADDREF_P(value);
  37949. }
  37950. } else {
  37951. value = Z_REFVAL_P(value);
  37952. Z_TRY_ADDREF_P(value);
  37953. }
  37954. } else if (IS_CONST == IS_CV) {
  37955. Z_TRY_ADDREF_P(value);
  37956. }
  37957. }
  37958. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  37959. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  37960. ZVAL_COPY(EX_VAR(opline->result.var), value);
  37961. }
  37962. goto exit_assign_obj;
  37963. }
  37964. }
  37965. }
  37966. if (!Z_OBJ_HT_P(object)->write_property) {
  37967. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  37968. goto exit_assign_obj;
  37969. }
  37970. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  37971. ZVAL_DEREF(value);
  37972. }
  37973. Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  37974. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  37975. ZVAL_COPY(EX_VAR(opline->result.var), value);
  37976. }
  37977. exit_assign_obj:
  37978. zval_ptr_dtor_nogc(free_op2);
  37979. /* assign_obj has two opcodes! */
  37980. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  37981. }
  37982. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  37983. {
  37984. USE_OPLINE
  37985. zend_free_op free_op2, free_op_data;
  37986. zval *object, *property, *value, tmp;
  37987. SAVE_OPLINE();
  37988. object = EX_VAR(opline->op1.var);
  37989. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  37990. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  37991. }
  37992. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  37993. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  37994. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  37995. if (Z_ISREF_P(object)) {
  37996. object = Z_REFVAL_P(object);
  37997. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  37998. goto assign_object;
  37999. }
  38000. }
  38001. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  38002. zval_ptr_dtor_nogc(free_op_data);
  38003. goto exit_assign_obj;
  38004. }
  38005. }
  38006. assign_object:
  38007. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  38008. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  38009. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  38010. zend_object *zobj = Z_OBJ_P(object);
  38011. zval *property_val;
  38012. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  38013. property_val = OBJ_PROP(zobj, prop_offset);
  38014. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  38015. fast_assign_obj:
  38016. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
  38017. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38018. ZVAL_COPY(EX_VAR(opline->result.var), value);
  38019. }
  38020. goto exit_assign_obj;
  38021. }
  38022. } else {
  38023. if (EXPECTED(zobj->properties != NULL)) {
  38024. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  38025. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  38026. GC_DELREF(zobj->properties);
  38027. }
  38028. zobj->properties = zend_array_dup(zobj->properties);
  38029. }
  38030. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  38031. if (property_val) {
  38032. goto fast_assign_obj;
  38033. }
  38034. }
  38035. if (!zobj->ce->__set) {
  38036. if (EXPECTED(zobj->properties == NULL)) {
  38037. rebuild_object_properties(zobj);
  38038. }
  38039. if (IS_TMP_VAR == IS_CONST) {
  38040. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  38041. Z_ADDREF_P(value);
  38042. }
  38043. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  38044. if (Z_ISREF_P(value)) {
  38045. if (IS_TMP_VAR == IS_VAR) {
  38046. zend_reference *ref = Z_REF_P(value);
  38047. if (GC_DELREF(ref) == 0) {
  38048. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  38049. efree_size(ref, sizeof(zend_reference));
  38050. value = &tmp;
  38051. } else {
  38052. value = Z_REFVAL_P(value);
  38053. Z_TRY_ADDREF_P(value);
  38054. }
  38055. } else {
  38056. value = Z_REFVAL_P(value);
  38057. Z_TRY_ADDREF_P(value);
  38058. }
  38059. } else if (IS_TMP_VAR == IS_CV) {
  38060. Z_TRY_ADDREF_P(value);
  38061. }
  38062. }
  38063. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  38064. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38065. ZVAL_COPY(EX_VAR(opline->result.var), value);
  38066. }
  38067. goto exit_assign_obj;
  38068. }
  38069. }
  38070. }
  38071. if (!Z_OBJ_HT_P(object)->write_property) {
  38072. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  38073. zval_ptr_dtor_nogc(free_op_data);
  38074. goto exit_assign_obj;
  38075. }
  38076. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  38077. ZVAL_DEREF(value);
  38078. }
  38079. Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  38080. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38081. ZVAL_COPY(EX_VAR(opline->result.var), value);
  38082. }
  38083. zval_ptr_dtor_nogc(free_op_data);
  38084. exit_assign_obj:
  38085. zval_ptr_dtor_nogc(free_op2);
  38086. /* assign_obj has two opcodes! */
  38087. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  38088. }
  38089. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38090. {
  38091. USE_OPLINE
  38092. zend_free_op free_op2, free_op_data;
  38093. zval *object, *property, *value, tmp;
  38094. SAVE_OPLINE();
  38095. object = EX_VAR(opline->op1.var);
  38096. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  38097. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  38098. }
  38099. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38100. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  38101. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  38102. if (Z_ISREF_P(object)) {
  38103. object = Z_REFVAL_P(object);
  38104. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  38105. goto assign_object;
  38106. }
  38107. }
  38108. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  38109. zval_ptr_dtor_nogc(free_op_data);
  38110. goto exit_assign_obj;
  38111. }
  38112. }
  38113. assign_object:
  38114. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  38115. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  38116. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  38117. zend_object *zobj = Z_OBJ_P(object);
  38118. zval *property_val;
  38119. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  38120. property_val = OBJ_PROP(zobj, prop_offset);
  38121. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  38122. fast_assign_obj:
  38123. value = zend_assign_to_variable(property_val, value, IS_VAR);
  38124. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38125. ZVAL_COPY(EX_VAR(opline->result.var), value);
  38126. }
  38127. goto exit_assign_obj;
  38128. }
  38129. } else {
  38130. if (EXPECTED(zobj->properties != NULL)) {
  38131. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  38132. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  38133. GC_DELREF(zobj->properties);
  38134. }
  38135. zobj->properties = zend_array_dup(zobj->properties);
  38136. }
  38137. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  38138. if (property_val) {
  38139. goto fast_assign_obj;
  38140. }
  38141. }
  38142. if (!zobj->ce->__set) {
  38143. if (EXPECTED(zobj->properties == NULL)) {
  38144. rebuild_object_properties(zobj);
  38145. }
  38146. if (IS_VAR == IS_CONST) {
  38147. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  38148. Z_ADDREF_P(value);
  38149. }
  38150. } else if (IS_VAR != IS_TMP_VAR) {
  38151. if (Z_ISREF_P(value)) {
  38152. if (IS_VAR == IS_VAR) {
  38153. zend_reference *ref = Z_REF_P(value);
  38154. if (GC_DELREF(ref) == 0) {
  38155. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  38156. efree_size(ref, sizeof(zend_reference));
  38157. value = &tmp;
  38158. } else {
  38159. value = Z_REFVAL_P(value);
  38160. Z_TRY_ADDREF_P(value);
  38161. }
  38162. } else {
  38163. value = Z_REFVAL_P(value);
  38164. Z_TRY_ADDREF_P(value);
  38165. }
  38166. } else if (IS_VAR == IS_CV) {
  38167. Z_TRY_ADDREF_P(value);
  38168. }
  38169. }
  38170. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  38171. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38172. ZVAL_COPY(EX_VAR(opline->result.var), value);
  38173. }
  38174. goto exit_assign_obj;
  38175. }
  38176. }
  38177. }
  38178. if (!Z_OBJ_HT_P(object)->write_property) {
  38179. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  38180. zval_ptr_dtor_nogc(free_op_data);
  38181. goto exit_assign_obj;
  38182. }
  38183. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  38184. ZVAL_DEREF(value);
  38185. }
  38186. Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  38187. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38188. ZVAL_COPY(EX_VAR(opline->result.var), value);
  38189. }
  38190. zval_ptr_dtor_nogc(free_op_data);
  38191. exit_assign_obj:
  38192. zval_ptr_dtor_nogc(free_op2);
  38193. /* assign_obj has two opcodes! */
  38194. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  38195. }
  38196. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38197. {
  38198. USE_OPLINE
  38199. zend_free_op free_op2;
  38200. zval *object, *property, *value, tmp;
  38201. SAVE_OPLINE();
  38202. object = EX_VAR(opline->op1.var);
  38203. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  38204. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  38205. }
  38206. property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38207. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  38208. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  38209. if (Z_ISREF_P(object)) {
  38210. object = Z_REFVAL_P(object);
  38211. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  38212. goto assign_object;
  38213. }
  38214. }
  38215. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  38216. goto exit_assign_obj;
  38217. }
  38218. }
  38219. assign_object:
  38220. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  38221. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  38222. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  38223. zend_object *zobj = Z_OBJ_P(object);
  38224. zval *property_val;
  38225. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  38226. property_val = OBJ_PROP(zobj, prop_offset);
  38227. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  38228. fast_assign_obj:
  38229. value = zend_assign_to_variable(property_val, value, IS_CV);
  38230. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38231. ZVAL_COPY(EX_VAR(opline->result.var), value);
  38232. }
  38233. goto exit_assign_obj;
  38234. }
  38235. } else {
  38236. if (EXPECTED(zobj->properties != NULL)) {
  38237. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  38238. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  38239. GC_DELREF(zobj->properties);
  38240. }
  38241. zobj->properties = zend_array_dup(zobj->properties);
  38242. }
  38243. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  38244. if (property_val) {
  38245. goto fast_assign_obj;
  38246. }
  38247. }
  38248. if (!zobj->ce->__set) {
  38249. if (EXPECTED(zobj->properties == NULL)) {
  38250. rebuild_object_properties(zobj);
  38251. }
  38252. if (IS_CV == IS_CONST) {
  38253. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  38254. Z_ADDREF_P(value);
  38255. }
  38256. } else if (IS_CV != IS_TMP_VAR) {
  38257. if (Z_ISREF_P(value)) {
  38258. if (IS_CV == IS_VAR) {
  38259. zend_reference *ref = Z_REF_P(value);
  38260. if (GC_DELREF(ref) == 0) {
  38261. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  38262. efree_size(ref, sizeof(zend_reference));
  38263. value = &tmp;
  38264. } else {
  38265. value = Z_REFVAL_P(value);
  38266. Z_TRY_ADDREF_P(value);
  38267. }
  38268. } else {
  38269. value = Z_REFVAL_P(value);
  38270. Z_TRY_ADDREF_P(value);
  38271. }
  38272. } else if (IS_CV == IS_CV) {
  38273. Z_TRY_ADDREF_P(value);
  38274. }
  38275. }
  38276. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  38277. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38278. ZVAL_COPY(EX_VAR(opline->result.var), value);
  38279. }
  38280. goto exit_assign_obj;
  38281. }
  38282. }
  38283. }
  38284. if (!Z_OBJ_HT_P(object)->write_property) {
  38285. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  38286. goto exit_assign_obj;
  38287. }
  38288. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  38289. ZVAL_DEREF(value);
  38290. }
  38291. Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  38292. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38293. ZVAL_COPY(EX_VAR(opline->result.var), value);
  38294. }
  38295. exit_assign_obj:
  38296. zval_ptr_dtor_nogc(free_op2);
  38297. /* assign_obj has two opcodes! */
  38298. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  38299. }
  38300. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38301. {
  38302. USE_OPLINE
  38303. zval *object_ptr;
  38304. zend_free_op free_op2, free_op_data;
  38305. zval *value;
  38306. zval *variable_ptr;
  38307. zval *dim;
  38308. SAVE_OPLINE();
  38309. object_ptr = EX_VAR(opline->op1.var);
  38310. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  38311. try_assign_dim_array:
  38312. SEPARATE_ARRAY(object_ptr);
  38313. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  38314. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  38315. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  38316. ZVAL_DEREF(value);
  38317. }
  38318. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  38319. if (UNEXPECTED(variable_ptr == NULL)) {
  38320. zend_cannot_add_element();
  38321. goto assign_dim_error;
  38322. } else if (IS_CONST == IS_CV) {
  38323. if (Z_REFCOUNTED_P(value)) {
  38324. Z_ADDREF_P(value);
  38325. }
  38326. } else if (IS_CONST == IS_VAR) {
  38327. if (value != free_op_data) {
  38328. if (Z_REFCOUNTED_P(value)) {
  38329. Z_ADDREF_P(value);
  38330. }
  38331. }
  38332. } else if (IS_CONST == IS_CONST) {
  38333. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  38334. Z_ADDREF_P(value);
  38335. }
  38336. }
  38337. } else {
  38338. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38339. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38340. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  38341. } else {
  38342. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  38343. }
  38344. if (UNEXPECTED(variable_ptr == NULL)) {
  38345. goto assign_dim_error;
  38346. }
  38347. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  38348. value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
  38349. }
  38350. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38351. ZVAL_COPY(EX_VAR(opline->result.var), value);
  38352. }
  38353. } else {
  38354. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  38355. object_ptr = Z_REFVAL_P(object_ptr);
  38356. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  38357. goto try_assign_dim_array;
  38358. }
  38359. }
  38360. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  38361. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38362. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  38363. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  38364. dim++;
  38365. }
  38366. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  38367. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  38368. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  38369. zend_use_new_element_for_string();
  38370. UNDEF_RESULT();
  38371. HANDLE_EXCEPTION();
  38372. } else {
  38373. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38374. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  38375. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  38376. }
  38377. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  38378. ZVAL_ARR(object_ptr, zend_new_array(8));
  38379. goto try_assign_dim_array;
  38380. } else {
  38381. if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  38382. zend_use_scalar_as_array();
  38383. }
  38384. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38385. assign_dim_error:
  38386. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38387. ZVAL_NULL(EX_VAR(opline->result.var));
  38388. }
  38389. }
  38390. }
  38391. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  38392. zval_ptr_dtor_nogc(free_op2);
  38393. }
  38394. /* assign_dim has two opcodes! */
  38395. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  38396. }
  38397. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38398. {
  38399. USE_OPLINE
  38400. zval *object_ptr;
  38401. zend_free_op free_op2, free_op_data;
  38402. zval *value;
  38403. zval *variable_ptr;
  38404. zval *dim;
  38405. SAVE_OPLINE();
  38406. object_ptr = EX_VAR(opline->op1.var);
  38407. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  38408. try_assign_dim_array:
  38409. SEPARATE_ARRAY(object_ptr);
  38410. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  38411. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  38412. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  38413. ZVAL_DEREF(value);
  38414. }
  38415. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  38416. if (UNEXPECTED(variable_ptr == NULL)) {
  38417. zval_ptr_dtor_nogc(free_op_data);
  38418. zend_cannot_add_element();
  38419. goto assign_dim_error;
  38420. } else if (IS_TMP_VAR == IS_CV) {
  38421. if (Z_REFCOUNTED_P(value)) {
  38422. Z_ADDREF_P(value);
  38423. }
  38424. } else if (IS_TMP_VAR == IS_VAR) {
  38425. if (value != free_op_data) {
  38426. if (Z_REFCOUNTED_P(value)) {
  38427. Z_ADDREF_P(value);
  38428. }
  38429. zval_ptr_dtor_nogc(free_op_data);
  38430. }
  38431. } else if (IS_TMP_VAR == IS_CONST) {
  38432. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  38433. Z_ADDREF_P(value);
  38434. }
  38435. }
  38436. } else {
  38437. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38438. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38439. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  38440. } else {
  38441. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  38442. }
  38443. if (UNEXPECTED(variable_ptr == NULL)) {
  38444. goto assign_dim_error;
  38445. }
  38446. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  38447. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
  38448. }
  38449. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38450. ZVAL_COPY(EX_VAR(opline->result.var), value);
  38451. }
  38452. } else {
  38453. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  38454. object_ptr = Z_REFVAL_P(object_ptr);
  38455. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  38456. goto try_assign_dim_array;
  38457. }
  38458. }
  38459. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  38460. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38461. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  38462. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  38463. dim++;
  38464. }
  38465. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  38466. zval_ptr_dtor_nogc(free_op_data);
  38467. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  38468. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  38469. zend_use_new_element_for_string();
  38470. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  38471. UNDEF_RESULT();
  38472. HANDLE_EXCEPTION();
  38473. } else {
  38474. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38475. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  38476. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  38477. zval_ptr_dtor_nogc(free_op_data);
  38478. }
  38479. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  38480. ZVAL_ARR(object_ptr, zend_new_array(8));
  38481. goto try_assign_dim_array;
  38482. } else {
  38483. if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  38484. zend_use_scalar_as_array();
  38485. }
  38486. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38487. assign_dim_error:
  38488. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  38489. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38490. ZVAL_NULL(EX_VAR(opline->result.var));
  38491. }
  38492. }
  38493. }
  38494. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  38495. zval_ptr_dtor_nogc(free_op2);
  38496. }
  38497. /* assign_dim has two opcodes! */
  38498. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  38499. }
  38500. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38501. {
  38502. USE_OPLINE
  38503. zval *object_ptr;
  38504. zend_free_op free_op2, free_op_data;
  38505. zval *value;
  38506. zval *variable_ptr;
  38507. zval *dim;
  38508. SAVE_OPLINE();
  38509. object_ptr = EX_VAR(opline->op1.var);
  38510. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  38511. try_assign_dim_array:
  38512. SEPARATE_ARRAY(object_ptr);
  38513. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  38514. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  38515. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  38516. ZVAL_DEREF(value);
  38517. }
  38518. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  38519. if (UNEXPECTED(variable_ptr == NULL)) {
  38520. zval_ptr_dtor_nogc(free_op_data);
  38521. zend_cannot_add_element();
  38522. goto assign_dim_error;
  38523. } else if (IS_VAR == IS_CV) {
  38524. if (Z_REFCOUNTED_P(value)) {
  38525. Z_ADDREF_P(value);
  38526. }
  38527. } else if (IS_VAR == IS_VAR) {
  38528. if (value != free_op_data) {
  38529. if (Z_REFCOUNTED_P(value)) {
  38530. Z_ADDREF_P(value);
  38531. }
  38532. zval_ptr_dtor_nogc(free_op_data);
  38533. }
  38534. } else if (IS_VAR == IS_CONST) {
  38535. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  38536. Z_ADDREF_P(value);
  38537. }
  38538. }
  38539. } else {
  38540. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38541. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38542. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  38543. } else {
  38544. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  38545. }
  38546. if (UNEXPECTED(variable_ptr == NULL)) {
  38547. goto assign_dim_error;
  38548. }
  38549. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  38550. value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
  38551. }
  38552. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38553. ZVAL_COPY(EX_VAR(opline->result.var), value);
  38554. }
  38555. } else {
  38556. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  38557. object_ptr = Z_REFVAL_P(object_ptr);
  38558. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  38559. goto try_assign_dim_array;
  38560. }
  38561. }
  38562. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  38563. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38564. value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  38565. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  38566. dim++;
  38567. }
  38568. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  38569. zval_ptr_dtor_nogc(free_op_data);
  38570. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  38571. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  38572. zend_use_new_element_for_string();
  38573. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  38574. UNDEF_RESULT();
  38575. HANDLE_EXCEPTION();
  38576. } else {
  38577. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38578. value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  38579. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  38580. zval_ptr_dtor_nogc(free_op_data);
  38581. }
  38582. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  38583. ZVAL_ARR(object_ptr, zend_new_array(8));
  38584. goto try_assign_dim_array;
  38585. } else {
  38586. if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  38587. zend_use_scalar_as_array();
  38588. }
  38589. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38590. assign_dim_error:
  38591. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  38592. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38593. ZVAL_NULL(EX_VAR(opline->result.var));
  38594. }
  38595. }
  38596. }
  38597. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  38598. zval_ptr_dtor_nogc(free_op2);
  38599. }
  38600. /* assign_dim has two opcodes! */
  38601. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  38602. }
  38603. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38604. {
  38605. USE_OPLINE
  38606. zval *object_ptr;
  38607. zend_free_op free_op2, free_op_data;
  38608. zval *value;
  38609. zval *variable_ptr;
  38610. zval *dim;
  38611. SAVE_OPLINE();
  38612. object_ptr = EX_VAR(opline->op1.var);
  38613. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  38614. try_assign_dim_array:
  38615. SEPARATE_ARRAY(object_ptr);
  38616. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  38617. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  38618. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  38619. ZVAL_DEREF(value);
  38620. }
  38621. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  38622. if (UNEXPECTED(variable_ptr == NULL)) {
  38623. zend_cannot_add_element();
  38624. goto assign_dim_error;
  38625. } else if (IS_CV == IS_CV) {
  38626. if (Z_REFCOUNTED_P(value)) {
  38627. Z_ADDREF_P(value);
  38628. }
  38629. } else if (IS_CV == IS_VAR) {
  38630. if (value != free_op_data) {
  38631. if (Z_REFCOUNTED_P(value)) {
  38632. Z_ADDREF_P(value);
  38633. }
  38634. }
  38635. } else if (IS_CV == IS_CONST) {
  38636. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  38637. Z_ADDREF_P(value);
  38638. }
  38639. }
  38640. } else {
  38641. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38642. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38643. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  38644. } else {
  38645. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  38646. }
  38647. if (UNEXPECTED(variable_ptr == NULL)) {
  38648. goto assign_dim_error;
  38649. }
  38650. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  38651. value = zend_assign_to_variable(variable_ptr, value, IS_CV);
  38652. }
  38653. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38654. ZVAL_COPY(EX_VAR(opline->result.var), value);
  38655. }
  38656. } else {
  38657. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  38658. object_ptr = Z_REFVAL_P(object_ptr);
  38659. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  38660. goto try_assign_dim_array;
  38661. }
  38662. }
  38663. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  38664. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38665. value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  38666. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  38667. dim++;
  38668. }
  38669. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  38670. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  38671. if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
  38672. zend_use_new_element_for_string();
  38673. UNDEF_RESULT();
  38674. HANDLE_EXCEPTION();
  38675. } else {
  38676. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38677. value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  38678. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  38679. }
  38680. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  38681. ZVAL_ARR(object_ptr, zend_new_array(8));
  38682. goto try_assign_dim_array;
  38683. } else {
  38684. if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  38685. zend_use_scalar_as_array();
  38686. }
  38687. dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38688. assign_dim_error:
  38689. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  38690. ZVAL_NULL(EX_VAR(opline->result.var));
  38691. }
  38692. }
  38693. }
  38694. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  38695. zval_ptr_dtor_nogc(free_op2);
  38696. }
  38697. /* assign_dim has two opcodes! */
  38698. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  38699. }
  38700. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38701. {
  38702. USE_OPLINE
  38703. zend_free_op free_op2;
  38704. zval *op1, *op2;
  38705. zend_string *op1_str, *op2_str, *str;
  38706. op1 = EX_VAR(opline->op1.var);
  38707. op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38708. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  38709. ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  38710. zend_string *op1_str = Z_STR_P(op1);
  38711. zend_string *op2_str = Z_STR_P(op2);
  38712. zend_string *str;
  38713. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  38714. if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
  38715. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  38716. } else {
  38717. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  38718. }
  38719. } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  38720. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  38721. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  38722. } else {
  38723. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  38724. }
  38725. zval_ptr_dtor_nogc(free_op2);
  38726. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  38727. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  38728. size_t len = ZSTR_LEN(op1_str);
  38729. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  38730. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  38731. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  38732. zval_ptr_dtor_nogc(free_op2);
  38733. } else {
  38734. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  38735. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  38736. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  38737. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  38738. zval_ptr_dtor_nogc(free_op2);
  38739. }
  38740. ZEND_VM_NEXT_OPCODE();
  38741. }
  38742. SAVE_OPLINE();
  38743. if (IS_CV == IS_CONST) {
  38744. op1_str = Z_STR_P(op1);
  38745. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  38746. op1_str = zend_string_copy(Z_STR_P(op1));
  38747. } else {
  38748. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  38749. GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  38750. }
  38751. op1_str = zval_get_string_func(op1);
  38752. }
  38753. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38754. op2_str = Z_STR_P(op2);
  38755. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  38756. op2_str = zend_string_copy(Z_STR_P(op2));
  38757. } else {
  38758. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  38759. GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  38760. }
  38761. op2_str = zval_get_string_func(op2);
  38762. }
  38763. do {
  38764. if (IS_CV != IS_CONST) {
  38765. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  38766. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38767. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  38768. GC_ADDREF(op2_str);
  38769. }
  38770. }
  38771. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  38772. zend_string_release_ex(op1_str, 0);
  38773. break;
  38774. }
  38775. }
  38776. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  38777. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  38778. if (IS_CV == IS_CONST) {
  38779. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  38780. GC_ADDREF(op1_str);
  38781. }
  38782. }
  38783. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  38784. zend_string_release_ex(op2_str, 0);
  38785. break;
  38786. }
  38787. }
  38788. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  38789. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  38790. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  38791. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  38792. if (IS_CV != IS_CONST) {
  38793. zend_string_release_ex(op1_str, 0);
  38794. }
  38795. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  38796. zend_string_release_ex(op2_str, 0);
  38797. }
  38798. } while (0);
  38799. zval_ptr_dtor_nogc(free_op2);
  38800. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  38801. }
  38802. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38803. {
  38804. USE_OPLINE
  38805. zval *function_name;
  38806. zend_free_op free_op1, free_op2;
  38807. zval *object;
  38808. zend_function *fbc;
  38809. zend_class_entry *called_scope;
  38810. zend_object *obj;
  38811. zend_execute_data *call;
  38812. uint32_t call_info;
  38813. SAVE_OPLINE();
  38814. object = EX_VAR(opline->op1.var);
  38815. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  38816. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  38817. }
  38818. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  38819. function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38820. }
  38821. if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
  38822. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  38823. do {
  38824. if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  38825. function_name = Z_REFVAL_P(function_name);
  38826. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  38827. break;
  38828. }
  38829. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  38830. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  38831. if (UNEXPECTED(EG(exception) != NULL)) {
  38832. HANDLE_EXCEPTION();
  38833. }
  38834. }
  38835. zend_throw_error(NULL, "Method name must be a string");
  38836. zval_ptr_dtor_nogc(free_op2);
  38837. HANDLE_EXCEPTION();
  38838. } while (0);
  38839. }
  38840. if (IS_CV != IS_UNUSED) {
  38841. do {
  38842. if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  38843. if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  38844. object = Z_REFVAL_P(object);
  38845. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  38846. break;
  38847. }
  38848. }
  38849. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  38850. object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
  38851. if (UNEXPECTED(EG(exception) != NULL)) {
  38852. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  38853. zval_ptr_dtor_nogc(free_op2);
  38854. }
  38855. HANDLE_EXCEPTION();
  38856. }
  38857. }
  38858. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38859. function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38860. }
  38861. zend_invalid_method_call(object, function_name);
  38862. zval_ptr_dtor_nogc(free_op2);
  38863. HANDLE_EXCEPTION();
  38864. }
  38865. } while (0);
  38866. }
  38867. obj = Z_OBJ_P(object);
  38868. called_scope = obj->ce;
  38869. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  38870. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  38871. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  38872. } else {
  38873. zend_object *orig_obj = obj;
  38874. if (UNEXPECTED(obj->handlers->get_method == NULL)) {
  38875. zend_throw_error(NULL, "Object does not support method calls");
  38876. zval_ptr_dtor_nogc(free_op2);
  38877. HANDLE_EXCEPTION();
  38878. }
  38879. if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
  38880. function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38881. }
  38882. /* First, locate the function. */
  38883. 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));
  38884. if (UNEXPECTED(fbc == NULL)) {
  38885. if (EXPECTED(!EG(exception))) {
  38886. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  38887. }
  38888. zval_ptr_dtor_nogc(free_op2);
  38889. HANDLE_EXCEPTION();
  38890. }
  38891. if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
  38892. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  38893. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  38894. EXPECTED(obj == orig_obj)) {
  38895. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  38896. }
  38897. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  38898. /* Reset "object" to trigger reference counting */
  38899. object = NULL;
  38900. }
  38901. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  38902. init_func_run_time_cache(&fbc->op_array);
  38903. }
  38904. }
  38905. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  38906. zval_ptr_dtor_nogc(free_op2);
  38907. }
  38908. call_info = ZEND_CALL_NESTED_FUNCTION;
  38909. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  38910. obj = NULL;
  38911. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
  38912. HANDLE_EXCEPTION();
  38913. }
  38914. } else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  38915. /* CV may be changed indirectly (e.g. when it's a reference) */
  38916. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
  38917. if (IS_CV == IS_CV) {
  38918. GC_ADDREF(obj); /* For $this pointer */
  38919. } else if (free_op1 != object) {
  38920. GC_ADDREF(obj); /* For $this pointer */
  38921. }
  38922. }
  38923. call = zend_vm_stack_push_call_frame(call_info,
  38924. fbc, opline->extended_value, called_scope, obj);
  38925. call->prev_execute_data = EX(call);
  38926. EX(call) = call;
  38927. ZEND_VM_NEXT_OPCODE();
  38928. }
  38929. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  38930. {
  38931. USE_OPLINE
  38932. zval *expr_ptr, new_expr;
  38933. SAVE_OPLINE();
  38934. if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
  38935. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  38936. expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  38937. if (Z_ISREF_P(expr_ptr)) {
  38938. Z_ADDREF_P(expr_ptr);
  38939. } else {
  38940. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  38941. }
  38942. } else {
  38943. expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  38944. if (IS_CV == IS_TMP_VAR) {
  38945. /* pass */
  38946. } else if (IS_CV == IS_CONST) {
  38947. Z_TRY_ADDREF_P(expr_ptr);
  38948. } else if (IS_CV == IS_CV) {
  38949. ZVAL_DEREF(expr_ptr);
  38950. Z_TRY_ADDREF_P(expr_ptr);
  38951. } else /* if (IS_CV == IS_VAR) */ {
  38952. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  38953. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  38954. expr_ptr = Z_REFVAL_P(expr_ptr);
  38955. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  38956. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  38957. expr_ptr = &new_expr;
  38958. efree_size(ref, sizeof(zend_reference));
  38959. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  38960. Z_ADDREF_P(expr_ptr);
  38961. }
  38962. }
  38963. }
  38964. }
  38965. if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
  38966. zend_free_op free_op2;
  38967. zval *offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  38968. zend_string *str;
  38969. zend_ulong hval;
  38970. add_again:
  38971. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  38972. str = Z_STR_P(offset);
  38973. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  38974. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  38975. goto num_index;
  38976. }
  38977. }
  38978. str_index:
  38979. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  38980. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  38981. hval = Z_LVAL_P(offset);
  38982. num_index:
  38983. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  38984. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  38985. offset = Z_REFVAL_P(offset);
  38986. goto add_again;
  38987. } else if (Z_TYPE_P(offset) == IS_NULL) {
  38988. str = ZSTR_EMPTY_ALLOC();
  38989. goto str_index;
  38990. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  38991. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  38992. goto num_index;
  38993. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  38994. hval = 0;
  38995. goto num_index;
  38996. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  38997. hval = 1;
  38998. goto num_index;
  38999. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  39000. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  39001. str = ZSTR_EMPTY_ALLOC();
  39002. goto str_index;
  39003. } else {
  39004. zend_illegal_offset();
  39005. zval_ptr_dtor_nogc(expr_ptr);
  39006. }
  39007. zval_ptr_dtor_nogc(free_op2);
  39008. } else {
  39009. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  39010. zend_cannot_add_element();
  39011. zval_ptr_dtor_nogc(expr_ptr);
  39012. }
  39013. }
  39014. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39015. }
  39016. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39017. {
  39018. zval *array;
  39019. uint32_t size;
  39020. USE_OPLINE
  39021. array = EX_VAR(opline->result.var);
  39022. if (IS_CV != IS_UNUSED) {
  39023. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  39024. ZVAL_ARR(array, zend_new_array(size));
  39025. /* Explicitly initialize array as not-packed if flag is set */
  39026. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  39027. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  39028. }
  39029. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39030. } else {
  39031. ZVAL_EMPTY_ARRAY(array);
  39032. ZEND_VM_NEXT_OPCODE();
  39033. }
  39034. }
  39035. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39036. {
  39037. USE_OPLINE
  39038. zend_free_op free_op2;
  39039. zval *container;
  39040. zval *offset;
  39041. zend_ulong hval;
  39042. zend_string *key;
  39043. SAVE_OPLINE();
  39044. container = EX_VAR(opline->op1.var);
  39045. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  39046. do {
  39047. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  39048. HashTable *ht;
  39049. unset_dim_array:
  39050. SEPARATE_ARRAY(container);
  39051. ht = Z_ARRVAL_P(container);
  39052. offset_again:
  39053. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  39054. key = Z_STR_P(offset);
  39055. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39056. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  39057. goto num_index_dim;
  39058. }
  39059. }
  39060. str_index_dim:
  39061. if (ht == &EG(symbol_table)) {
  39062. zend_delete_global_variable(key);
  39063. } else {
  39064. zend_hash_del(ht, key);
  39065. }
  39066. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  39067. hval = Z_LVAL_P(offset);
  39068. num_index_dim:
  39069. zend_hash_index_del(ht, hval);
  39070. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  39071. offset = Z_REFVAL_P(offset);
  39072. goto offset_again;
  39073. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  39074. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  39075. goto num_index_dim;
  39076. } else if (Z_TYPE_P(offset) == IS_NULL) {
  39077. key = ZSTR_EMPTY_ALLOC();
  39078. goto str_index_dim;
  39079. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  39080. hval = 0;
  39081. goto num_index_dim;
  39082. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  39083. hval = 1;
  39084. goto num_index_dim;
  39085. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  39086. hval = Z_RES_HANDLE_P(offset);
  39087. goto num_index_dim;
  39088. } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  39089. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  39090. key = ZSTR_EMPTY_ALLOC();
  39091. goto str_index_dim;
  39092. } else {
  39093. zend_error(E_WARNING, "Illegal offset type in unset");
  39094. }
  39095. break;
  39096. } else if (Z_ISREF_P(container)) {
  39097. container = Z_REFVAL_P(container);
  39098. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  39099. goto unset_dim_array;
  39100. }
  39101. }
  39102. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  39103. container = GET_OP1_UNDEF_CV(container, BP_VAR_R);
  39104. }
  39105. if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  39106. offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  39107. }
  39108. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  39109. if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
  39110. zend_use_object_as_array();
  39111. } else {
  39112. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  39113. offset++;
  39114. }
  39115. Z_OBJ_HT_P(container)->unset_dimension(container, offset);
  39116. }
  39117. } else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  39118. zend_throw_error(NULL, "Cannot unset string offsets");
  39119. }
  39120. } while (0);
  39121. zval_ptr_dtor_nogc(free_op2);
  39122. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39123. }
  39124. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39125. {
  39126. USE_OPLINE
  39127. zend_free_op free_op2;
  39128. zval *container;
  39129. zval *offset;
  39130. SAVE_OPLINE();
  39131. container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
  39132. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  39133. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39134. }
  39135. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  39136. do {
  39137. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  39138. if (Z_ISREF_P(container)) {
  39139. container = Z_REFVAL_P(container);
  39140. if (Z_TYPE_P(container) != IS_OBJECT) {
  39141. break;
  39142. }
  39143. } else {
  39144. break;
  39145. }
  39146. }
  39147. if (Z_OBJ_HT_P(container)->unset_property) {
  39148. Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  39149. } else {
  39150. zend_wrong_property_unset(offset);
  39151. }
  39152. } while (0);
  39153. zval_ptr_dtor_nogc(free_op2);
  39154. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39155. }
  39156. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39157. {
  39158. USE_OPLINE
  39159. zend_free_op free_op2;
  39160. zval *container;
  39161. int result;
  39162. zend_ulong hval;
  39163. zval *offset;
  39164. SAVE_OPLINE();
  39165. container = EX_VAR(opline->op1.var);
  39166. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  39167. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  39168. HashTable *ht;
  39169. zval *value;
  39170. zend_string *str;
  39171. isset_dim_obj_array:
  39172. ht = Z_ARRVAL_P(container);
  39173. isset_again:
  39174. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  39175. str = Z_STR_P(offset);
  39176. if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
  39177. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  39178. goto num_index_prop;
  39179. }
  39180. }
  39181. value = zend_hash_find_ex_ind(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
  39182. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  39183. hval = Z_LVAL_P(offset);
  39184. num_index_prop:
  39185. value = zend_hash_index_find(ht, hval);
  39186. } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  39187. offset = Z_REFVAL_P(offset);
  39188. goto isset_again;
  39189. } else {
  39190. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  39191. }
  39192. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  39193. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  39194. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  39195. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  39196. } else {
  39197. result = (value == NULL || !i_zend_is_true(value));
  39198. }
  39199. goto isset_dim_obj_exit;
  39200. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  39201. container = Z_REFVAL_P(container);
  39202. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  39203. goto isset_dim_obj_array;
  39204. }
  39205. }
  39206. if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  39207. offset++;
  39208. }
  39209. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  39210. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  39211. } else {
  39212. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  39213. }
  39214. isset_dim_obj_exit:
  39215. zval_ptr_dtor_nogc(free_op2);
  39216. ZEND_VM_SMART_BRANCH(result, 1);
  39217. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  39218. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39219. }
  39220. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39221. {
  39222. USE_OPLINE
  39223. zend_free_op free_op2;
  39224. zval *container;
  39225. int result;
  39226. zval *offset;
  39227. SAVE_OPLINE();
  39228. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  39229. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  39230. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39231. }
  39232. offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  39233. if (IS_CV == IS_CONST ||
  39234. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  39235. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  39236. container = Z_REFVAL_P(container);
  39237. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  39238. goto isset_no_object;
  39239. }
  39240. } else {
  39241. goto isset_no_object;
  39242. }
  39243. }
  39244. if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
  39245. zend_wrong_property_check(offset);
  39246. isset_no_object:
  39247. result = (opline->extended_value & ZEND_ISEMPTY);
  39248. } else {
  39249. result =
  39250. (opline->extended_value & ZEND_ISEMPTY) ^
  39251. Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  39252. }
  39253. zval_ptr_dtor_nogc(free_op2);
  39254. ZEND_VM_SMART_BRANCH(result, 1);
  39255. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  39256. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39257. }
  39258. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39259. {
  39260. USE_OPLINE
  39261. zend_free_op free_op2;
  39262. zval *op1, *op2;
  39263. int result;
  39264. SAVE_OPLINE();
  39265. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  39266. op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  39267. result = fast_is_identical_function(op1, op2);
  39268. zval_ptr_dtor_nogc(free_op2);
  39269. ZEND_VM_SMART_BRANCH(result, 1);
  39270. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  39271. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39272. }
  39273. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39274. {
  39275. USE_OPLINE
  39276. zend_free_op free_op2;
  39277. zval *op1, *op2;
  39278. int result;
  39279. SAVE_OPLINE();
  39280. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  39281. op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  39282. result = fast_is_not_identical_function(op1, op2);
  39283. zval_ptr_dtor_nogc(free_op2);
  39284. ZEND_VM_SMART_BRANCH(result, 1);
  39285. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  39286. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39287. }
  39288. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39289. {
  39290. USE_OPLINE
  39291. zend_free_op free_op2;
  39292. zval *value;
  39293. zval *variable_ptr;
  39294. SAVE_OPLINE();
  39295. value = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  39296. variable_ptr = EX_VAR(opline->op1.var);
  39297. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  39298. zval_ptr_dtor_nogc(free_op2);
  39299. if (UNEXPECTED(0)) {
  39300. ZVAL_NULL(EX_VAR(opline->result.var));
  39301. }
  39302. } else {
  39303. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
  39304. if (UNEXPECTED(0)) {
  39305. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39306. }
  39307. /* zend_assign_to_variable() always takes care of op2, never free it! */
  39308. }
  39309. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39310. }
  39311. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39312. {
  39313. USE_OPLINE
  39314. zend_free_op free_op2;
  39315. zval *value;
  39316. zval *variable_ptr;
  39317. SAVE_OPLINE();
  39318. value = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  39319. variable_ptr = EX_VAR(opline->op1.var);
  39320. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  39321. zval_ptr_dtor_nogc(free_op2);
  39322. if (UNEXPECTED(1)) {
  39323. ZVAL_NULL(EX_VAR(opline->result.var));
  39324. }
  39325. } else {
  39326. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
  39327. if (UNEXPECTED(1)) {
  39328. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39329. }
  39330. /* zend_assign_to_variable() always takes care of op2, never free it! */
  39331. }
  39332. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39333. }
  39334. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39335. {
  39336. USE_OPLINE
  39337. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  39338. SAVE_OPLINE();
  39339. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  39340. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39341. }
  39342. /* Destroy the previously yielded value */
  39343. zval_ptr_dtor(&generator->value);
  39344. /* Destroy the previously yielded key */
  39345. zval_ptr_dtor(&generator->key);
  39346. /* Set the new yielded value */
  39347. if (IS_CV != IS_UNUSED) {
  39348. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  39349. /* Constants and temporary variables aren't yieldable by reference,
  39350. * but we still allow them with a notice. */
  39351. if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
  39352. zval *value;
  39353. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  39354. value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  39355. ZVAL_COPY_VALUE(&generator->value, value);
  39356. if (IS_CV == IS_CONST) {
  39357. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  39358. Z_ADDREF(generator->value);
  39359. }
  39360. }
  39361. } else {
  39362. zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  39363. /* If a function call result is yielded and the function did
  39364. * not return by reference we throw a notice. */
  39365. if (IS_CV == IS_VAR &&
  39366. (value_ptr == &EG(uninitialized_zval) ||
  39367. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  39368. !Z_ISREF_P(value_ptr)))) {
  39369. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  39370. ZVAL_COPY(&generator->value, value_ptr);
  39371. } else {
  39372. if (Z_ISREF_P(value_ptr)) {
  39373. Z_ADDREF_P(value_ptr);
  39374. } else {
  39375. ZVAL_MAKE_REF_EX(value_ptr, 2);
  39376. }
  39377. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  39378. }
  39379. }
  39380. } else {
  39381. zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  39382. /* Consts, temporary variables and references need copying */
  39383. if (IS_CV == IS_CONST) {
  39384. ZVAL_COPY_VALUE(&generator->value, value);
  39385. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  39386. Z_ADDREF(generator->value);
  39387. }
  39388. } else if (IS_CV == IS_TMP_VAR) {
  39389. ZVAL_COPY_VALUE(&generator->value, value);
  39390. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  39391. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  39392. } else {
  39393. ZVAL_COPY_VALUE(&generator->value, value);
  39394. if (IS_CV == IS_CV) {
  39395. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  39396. }
  39397. }
  39398. }
  39399. } else {
  39400. /* If no value was specified yield null */
  39401. ZVAL_NULL(&generator->value);
  39402. }
  39403. /* Set the new yielded key */
  39404. if (IS_TMP_VAR != IS_UNUSED) {
  39405. zend_free_op free_op2;
  39406. zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  39407. /* Consts, temporary variables and references need copying */
  39408. if (IS_TMP_VAR == IS_CONST) {
  39409. ZVAL_COPY_VALUE(&generator->key, key);
  39410. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  39411. Z_ADDREF(generator->key);
  39412. }
  39413. } else if (IS_TMP_VAR == IS_TMP_VAR) {
  39414. ZVAL_COPY_VALUE(&generator->key, key);
  39415. } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  39416. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  39417. } else {
  39418. ZVAL_COPY_VALUE(&generator->key, key);
  39419. if (IS_TMP_VAR == IS_CV) {
  39420. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  39421. }
  39422. }
  39423. if (Z_TYPE(generator->key) == IS_LONG
  39424. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  39425. ) {
  39426. generator->largest_used_integer_key = Z_LVAL(generator->key);
  39427. }
  39428. } else {
  39429. /* If no key was specified we use auto-increment keys */
  39430. generator->largest_used_integer_key++;
  39431. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  39432. }
  39433. if (RETURN_VALUE_USED(opline)) {
  39434. /* If the return value of yield is used set the send
  39435. * target and initialize it to NULL */
  39436. generator->send_target = EX_VAR(opline->result.var);
  39437. ZVAL_NULL(generator->send_target);
  39438. } else {
  39439. generator->send_target = NULL;
  39440. }
  39441. /* We increment to the next op, so we are at the correct position when the
  39442. * generator is resumed. */
  39443. ZEND_VM_INC_OPCODE();
  39444. /* The GOTO VM uses a local opline variable. We need to set the opline
  39445. * variable in execute_data so we don't resume at an old position. */
  39446. SAVE_OPLINE();
  39447. ZEND_VM_RETURN();
  39448. }
  39449. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39450. {
  39451. USE_OPLINE
  39452. zend_free_op free_op2;
  39453. zval *op1, *op2;
  39454. int result;
  39455. SAVE_OPLINE();
  39456. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  39457. op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  39458. result = fast_is_identical_function(op1, op2);
  39459. zval_ptr_dtor_nogc(free_op2);
  39460. ZEND_VM_SMART_BRANCH(result, 1);
  39461. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  39462. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39463. }
  39464. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39465. {
  39466. USE_OPLINE
  39467. zend_free_op free_op2;
  39468. zval *op1, *op2;
  39469. int result;
  39470. SAVE_OPLINE();
  39471. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  39472. op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  39473. result = fast_is_not_identical_function(op1, op2);
  39474. zval_ptr_dtor_nogc(free_op2);
  39475. ZEND_VM_SMART_BRANCH(result, 1);
  39476. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  39477. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39478. }
  39479. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CV_VAR(int type ZEND_OPCODE_HANDLER_ARGS_DC)
  39480. {
  39481. USE_OPLINE
  39482. zval *varname;
  39483. zval *retval;
  39484. zend_string *name, *tmp_name;
  39485. zend_class_entry *ce;
  39486. SAVE_OPLINE();
  39487. do {
  39488. if (IS_VAR == IS_CONST) {
  39489. if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) {
  39490. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  39491. break;
  39492. } else {
  39493. zval *class_name = RT_CONSTANT(opline, opline->op2);
  39494. if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) {
  39495. ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  39496. if (UNEXPECTED(ce == NULL)) {
  39497. retval = NULL;
  39498. break;
  39499. }
  39500. if (IS_CV != IS_CONST) {
  39501. CACHE_PTR(opline->extended_value, ce);
  39502. }
  39503. }
  39504. }
  39505. } else {
  39506. if (IS_VAR == IS_UNUSED) {
  39507. ce = zend_fetch_class(NULL, opline->op2.num);
  39508. if (UNEXPECTED(ce == NULL)) {
  39509. retval = NULL;
  39510. break;
  39511. }
  39512. } else {
  39513. ce = Z_CE_P(EX_VAR(opline->op2.var));
  39514. }
  39515. if (IS_CV == IS_CONST &&
  39516. EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  39517. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  39518. break;
  39519. }
  39520. }
  39521. varname = EX_VAR(opline->op1.var);
  39522. if (IS_CV == IS_CONST) {
  39523. name = Z_STR_P(varname);
  39524. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  39525. name = Z_STR_P(varname);
  39526. tmp_name = NULL;
  39527. } else {
  39528. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  39529. zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC);
  39530. }
  39531. name = zval_get_tmp_string(varname, &tmp_name);
  39532. }
  39533. retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
  39534. if (IS_CV != IS_CONST) {
  39535. zend_tmp_string_release(tmp_name);
  39536. }
  39537. if (IS_CV == IS_CONST && EXPECTED(retval)) {
  39538. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval);
  39539. }
  39540. } while (0);
  39541. if (UNEXPECTED(retval == NULL)) {
  39542. if (EG(exception)) {
  39543. ZVAL_UNDEF(EX_VAR(opline->result.var));
  39544. HANDLE_EXCEPTION();
  39545. } else {
  39546. ZEND_ASSERT(type == BP_VAR_IS);
  39547. retval = &EG(uninitialized_zval);
  39548. }
  39549. }
  39550. if (type == BP_VAR_R || type == BP_VAR_IS) {
  39551. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  39552. } else {
  39553. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  39554. }
  39555. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39556. }
  39557. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39558. {
  39559. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  39560. }
  39561. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39562. {
  39563. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  39564. }
  39565. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39566. {
  39567. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  39568. }
  39569. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39570. {
  39571. int fetch_type =
  39572. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  39573. BP_VAR_W : BP_VAR_R;
  39574. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  39575. }
  39576. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39577. {
  39578. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  39579. }
  39580. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39581. {
  39582. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  39583. }
  39584. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39585. {
  39586. USE_OPLINE
  39587. zend_free_op free_op2;
  39588. zval *value;
  39589. zval *variable_ptr;
  39590. SAVE_OPLINE();
  39591. value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  39592. variable_ptr = EX_VAR(opline->op1.var);
  39593. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  39594. zval_ptr_dtor_nogc(free_op2);
  39595. if (UNEXPECTED(0)) {
  39596. ZVAL_NULL(EX_VAR(opline->result.var));
  39597. }
  39598. } else {
  39599. value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
  39600. if (UNEXPECTED(0)) {
  39601. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39602. }
  39603. /* zend_assign_to_variable() always takes care of op2, never free it! */
  39604. }
  39605. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39606. }
  39607. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39608. {
  39609. USE_OPLINE
  39610. zend_free_op free_op2;
  39611. zval *value;
  39612. zval *variable_ptr;
  39613. SAVE_OPLINE();
  39614. value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  39615. variable_ptr = EX_VAR(opline->op1.var);
  39616. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  39617. zval_ptr_dtor_nogc(free_op2);
  39618. if (UNEXPECTED(1)) {
  39619. ZVAL_NULL(EX_VAR(opline->result.var));
  39620. }
  39621. } else {
  39622. value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
  39623. if (UNEXPECTED(1)) {
  39624. ZVAL_COPY(EX_VAR(opline->result.var), value);
  39625. }
  39626. /* zend_assign_to_variable() always takes care of op2, never free it! */
  39627. }
  39628. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39629. }
  39630. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39631. {
  39632. USE_OPLINE
  39633. zend_free_op free_op2;
  39634. zval *variable_ptr;
  39635. zval *value_ptr;
  39636. SAVE_OPLINE();
  39637. value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  39638. variable_ptr = EX_VAR(opline->op1.var);
  39639. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  39640. variable_ptr = &EG(uninitialized_zval);
  39641. } else if (IS_CV == IS_VAR &&
  39642. UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
  39643. zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
  39644. if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
  39645. UNDEF_RESULT();
  39646. HANDLE_EXCEPTION();
  39647. } else if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
  39648. variable_ptr = &EG(uninitialized_zval);
  39649. } else if (IS_VAR == IS_VAR &&
  39650. opline->extended_value == ZEND_RETURNS_FUNCTION &&
  39651. UNEXPECTED(!Z_ISREF_P(value_ptr))) {
  39652. if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(variable_ptr, value_ptr, IS_VAR OPLINE_CC EXECUTE_DATA_CC))) {
  39653. if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
  39654. UNDEF_RESULT();
  39655. HANDLE_EXCEPTION();
  39656. }
  39657. /* op2 freed by assign_to_variable */
  39658. ZEND_VM_NEXT_OPCODE();
  39659. } else {
  39660. zend_assign_to_variable_reference(variable_ptr, value_ptr);
  39661. }
  39662. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39663. ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
  39664. }
  39665. if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
  39666. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39667. }
  39668. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39669. {
  39670. USE_OPLINE
  39671. zval *varname;
  39672. zend_string *name, *tmp_name;
  39673. zend_class_entry *ce;
  39674. SAVE_OPLINE();
  39675. if (IS_VAR == IS_CONST) {
  39676. ce = CACHED_PTR(opline->extended_value);
  39677. if (UNEXPECTED(ce == NULL)) {
  39678. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  39679. if (UNEXPECTED(ce == NULL)) {
  39680. ZEND_ASSERT(EG(exception));
  39681. HANDLE_EXCEPTION();
  39682. }
  39683. /*CACHE_PTR(opline->extended_value, ce);*/
  39684. }
  39685. } else if (IS_VAR == IS_UNUSED) {
  39686. ce = zend_fetch_class(NULL, opline->op2.num);
  39687. if (UNEXPECTED(ce == NULL)) {
  39688. ZEND_ASSERT(EG(exception));
  39689. HANDLE_EXCEPTION();
  39690. }
  39691. } else {
  39692. ce = Z_CE_P(EX_VAR(opline->op2.var));
  39693. }
  39694. varname = EX_VAR(opline->op1.var);
  39695. if (IS_CV == IS_CONST) {
  39696. name = Z_STR_P(varname);
  39697. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  39698. name = Z_STR_P(varname);
  39699. tmp_name = NULL;
  39700. } else {
  39701. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  39702. varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
  39703. }
  39704. name = zval_get_tmp_string(varname, &tmp_name);
  39705. }
  39706. zend_std_unset_static_property(ce, name);
  39707. if (IS_CV != IS_CONST) {
  39708. zend_tmp_string_release(tmp_name);
  39709. }
  39710. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39711. }
  39712. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39713. {
  39714. USE_OPLINE
  39715. zval *value;
  39716. int result;
  39717. zval *varname;
  39718. zend_string *name, *tmp_name;
  39719. zend_class_entry *ce;
  39720. SAVE_OPLINE();
  39721. if (IS_VAR == IS_CONST) {
  39722. if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) {
  39723. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  39724. goto is_static_prop_return;
  39725. } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) {
  39726. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  39727. if (UNEXPECTED(ce == NULL)) {
  39728. ZEND_ASSERT(EG(exception));
  39729. ZVAL_UNDEF(EX_VAR(opline->result.var));
  39730. HANDLE_EXCEPTION();
  39731. }
  39732. if (IS_CV != IS_CONST) {
  39733. CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce);
  39734. }
  39735. }
  39736. } else {
  39737. if (IS_VAR == IS_UNUSED) {
  39738. ce = zend_fetch_class(NULL, opline->op2.num);
  39739. if (UNEXPECTED(ce == NULL)) {
  39740. ZEND_ASSERT(EG(exception));
  39741. ZVAL_UNDEF(EX_VAR(opline->result.var));
  39742. HANDLE_EXCEPTION();
  39743. }
  39744. } else {
  39745. ce = Z_CE_P(EX_VAR(opline->op2.var));
  39746. }
  39747. if (IS_CV == IS_CONST &&
  39748. EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) {
  39749. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  39750. goto is_static_prop_return;
  39751. }
  39752. }
  39753. varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  39754. if (IS_CV == IS_CONST) {
  39755. name = Z_STR_P(varname);
  39756. } else {
  39757. name = zval_get_tmp_string(varname, &tmp_name);
  39758. }
  39759. value = zend_std_get_static_property(ce, name, 1);
  39760. if (IS_CV == IS_CONST && value) {
  39761. CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value);
  39762. }
  39763. if (IS_CV != IS_CONST) {
  39764. zend_tmp_string_release(tmp_name);
  39765. }
  39766. is_static_prop_return:
  39767. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  39768. result = value && Z_TYPE_P(value) > IS_NULL &&
  39769. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  39770. } else {
  39771. result = !value || !i_zend_is_true(value);
  39772. }
  39773. ZEND_VM_SMART_BRANCH(result, 1);
  39774. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  39775. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39776. }
  39777. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39778. {
  39779. USE_OPLINE
  39780. zval *expr;
  39781. zend_bool result;
  39782. SAVE_OPLINE();
  39783. expr = EX_VAR(opline->op1.var);
  39784. try_instanceof:
  39785. if (Z_TYPE_P(expr) == IS_OBJECT) {
  39786. zend_class_entry *ce;
  39787. if (IS_VAR == IS_CONST) {
  39788. ce = CACHED_PTR(opline->extended_value);
  39789. if (UNEXPECTED(ce == NULL)) {
  39790. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
  39791. if (EXPECTED(ce)) {
  39792. CACHE_PTR(opline->extended_value, ce);
  39793. }
  39794. }
  39795. } else if (IS_VAR == IS_UNUSED) {
  39796. ce = zend_fetch_class(NULL, opline->op2.num);
  39797. if (UNEXPECTED(ce == NULL)) {
  39798. ZEND_ASSERT(EG(exception));
  39799. ZVAL_UNDEF(EX_VAR(opline->result.var));
  39800. HANDLE_EXCEPTION();
  39801. }
  39802. } else {
  39803. ce = Z_CE_P(EX_VAR(opline->op2.var));
  39804. }
  39805. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  39806. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  39807. expr = Z_REFVAL_P(expr);
  39808. goto try_instanceof;
  39809. } else {
  39810. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  39811. GET_OP1_UNDEF_CV(expr, BP_VAR_R);
  39812. }
  39813. result = 0;
  39814. }
  39815. ZEND_VM_SMART_BRANCH(result, 1);
  39816. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  39817. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  39818. }
  39819. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  39820. {
  39821. USE_OPLINE
  39822. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  39823. SAVE_OPLINE();
  39824. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  39825. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  39826. }
  39827. /* Destroy the previously yielded value */
  39828. zval_ptr_dtor(&generator->value);
  39829. /* Destroy the previously yielded key */
  39830. zval_ptr_dtor(&generator->key);
  39831. /* Set the new yielded value */
  39832. if (IS_CV != IS_UNUSED) {
  39833. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  39834. /* Constants and temporary variables aren't yieldable by reference,
  39835. * but we still allow them with a notice. */
  39836. if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
  39837. zval *value;
  39838. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  39839. value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  39840. ZVAL_COPY_VALUE(&generator->value, value);
  39841. if (IS_CV == IS_CONST) {
  39842. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  39843. Z_ADDREF(generator->value);
  39844. }
  39845. }
  39846. } else {
  39847. zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  39848. /* If a function call result is yielded and the function did
  39849. * not return by reference we throw a notice. */
  39850. if (IS_CV == IS_VAR &&
  39851. (value_ptr == &EG(uninitialized_zval) ||
  39852. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  39853. !Z_ISREF_P(value_ptr)))) {
  39854. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  39855. ZVAL_COPY(&generator->value, value_ptr);
  39856. } else {
  39857. if (Z_ISREF_P(value_ptr)) {
  39858. Z_ADDREF_P(value_ptr);
  39859. } else {
  39860. ZVAL_MAKE_REF_EX(value_ptr, 2);
  39861. }
  39862. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  39863. }
  39864. }
  39865. } else {
  39866. zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  39867. /* Consts, temporary variables and references need copying */
  39868. if (IS_CV == IS_CONST) {
  39869. ZVAL_COPY_VALUE(&generator->value, value);
  39870. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  39871. Z_ADDREF(generator->value);
  39872. }
  39873. } else if (IS_CV == IS_TMP_VAR) {
  39874. ZVAL_COPY_VALUE(&generator->value, value);
  39875. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  39876. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  39877. } else {
  39878. ZVAL_COPY_VALUE(&generator->value, value);
  39879. if (IS_CV == IS_CV) {
  39880. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  39881. }
  39882. }
  39883. }
  39884. } else {
  39885. /* If no value was specified yield null */
  39886. ZVAL_NULL(&generator->value);
  39887. }
  39888. /* Set the new yielded key */
  39889. if (IS_VAR != IS_UNUSED) {
  39890. zend_free_op free_op2;
  39891. zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
  39892. /* Consts, temporary variables and references need copying */
  39893. if (IS_VAR == IS_CONST) {
  39894. ZVAL_COPY_VALUE(&generator->key, key);
  39895. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  39896. Z_ADDREF(generator->key);
  39897. }
  39898. } else if (IS_VAR == IS_TMP_VAR) {
  39899. ZVAL_COPY_VALUE(&generator->key, key);
  39900. } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  39901. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  39902. zval_ptr_dtor_nogc(free_op2);
  39903. } else {
  39904. ZVAL_COPY_VALUE(&generator->key, key);
  39905. if (IS_VAR == IS_CV) {
  39906. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  39907. }
  39908. }
  39909. if (Z_TYPE(generator->key) == IS_LONG
  39910. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  39911. ) {
  39912. generator->largest_used_integer_key = Z_LVAL(generator->key);
  39913. }
  39914. } else {
  39915. /* If no key was specified we use auto-increment keys */
  39916. generator->largest_used_integer_key++;
  39917. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  39918. }
  39919. if (RETURN_VALUE_USED(opline)) {
  39920. /* If the return value of yield is used set the send
  39921. * target and initialize it to NULL */
  39922. generator->send_target = EX_VAR(opline->result.var);
  39923. ZVAL_NULL(generator->send_target);
  39924. } else {
  39925. generator->send_target = NULL;
  39926. }
  39927. /* We increment to the next op, so we are at the correct position when the
  39928. * generator is resumed. */
  39929. ZEND_VM_INC_OPCODE();
  39930. /* The GOTO VM uses a local opline variable. We need to set the opline
  39931. * variable in execute_data so we don't resume at an old position. */
  39932. SAVE_OPLINE();
  39933. ZEND_VM_RETURN();
  39934. }
  39935. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  39936. {
  39937. USE_OPLINE
  39938. zend_free_op free_op_data1;
  39939. zval *var_ptr;
  39940. zval *value, *container, *dim;
  39941. SAVE_OPLINE();
  39942. container = EX_VAR(opline->op1.var);
  39943. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  39944. assign_dim_op_array:
  39945. SEPARATE_ARRAY(container);
  39946. assign_dim_op_new_array:
  39947. dim = NULL;
  39948. if (IS_UNUSED == IS_UNUSED) {
  39949. var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
  39950. if (UNEXPECTED(!var_ptr)) {
  39951. zend_cannot_add_element();
  39952. goto assign_dim_op_ret_null;
  39953. }
  39954. } else {
  39955. if (IS_UNUSED == IS_CONST) {
  39956. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
  39957. } else {
  39958. var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
  39959. }
  39960. if (UNEXPECTED(!var_ptr)) {
  39961. goto assign_dim_op_ret_null;
  39962. }
  39963. ZVAL_DEREF(var_ptr);
  39964. }
  39965. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  39966. binary_op(var_ptr, var_ptr, value);
  39967. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  39968. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  39969. }
  39970. } else {
  39971. if (EXPECTED(Z_ISREF_P(container))) {
  39972. container = Z_REFVAL_P(container);
  39973. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  39974. goto assign_dim_op_array;
  39975. }
  39976. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  39977. container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
  39978. assign_dim_op_convert_to_array:
  39979. ZVAL_ARR(container, zend_new_array(8));
  39980. goto assign_dim_op_new_array;
  39981. }
  39982. dim = NULL;
  39983. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  39984. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  39985. if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  39986. dim++;
  39987. }
  39988. zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC);
  39989. } else {
  39990. if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  39991. if (IS_UNUSED == IS_UNUSED) {
  39992. zend_use_new_element_for_string();
  39993. } else {
  39994. zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC);
  39995. zend_wrong_string_offset(EXECUTE_DATA_C);
  39996. }
  39997. UNDEF_RESULT();
  39998. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  39999. goto assign_dim_op_convert_to_array;
  40000. } else {
  40001. if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
  40002. zend_use_scalar_as_array();
  40003. }
  40004. assign_dim_op_ret_null:
  40005. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40006. ZVAL_NULL(EX_VAR(opline->result.var));
  40007. }
  40008. }
  40009. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  40010. }
  40011. }
  40012. FREE_OP(free_op_data1);
  40013. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  40014. }
  40015. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  40016. {
  40017. #if 1 && IS_UNUSED == IS_UNUSED
  40018. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40019. #else
  40020. # if 0 || IS_CV != IS_UNUSED
  40021. # if 0
  40022. /* opline->extended_value checks are specialized, don't need opline */
  40023. USE_OPLINE
  40024. # endif
  40025. if (EXPECTED(0)) {
  40026. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40027. }
  40028. if (EXPECTED(1)) {
  40029. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40030. }
  40031. # endif
  40032. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40033. #endif
  40034. }
  40035. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40036. {
  40037. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40038. }
  40039. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40040. {
  40041. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40042. }
  40043. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40044. {
  40045. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40046. }
  40047. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40048. {
  40049. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40050. }
  40051. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40052. {
  40053. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40054. }
  40055. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40056. {
  40057. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40058. }
  40059. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40060. {
  40061. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40062. }
  40063. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40064. {
  40065. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40066. }
  40067. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40068. {
  40069. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40070. }
  40071. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40072. {
  40073. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40074. }
  40075. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40076. {
  40077. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40078. }
  40079. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40080. {
  40081. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40082. }
  40083. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
  40084. {
  40085. USE_OPLINE
  40086. zval *varname;
  40087. zval *retval;
  40088. zend_string *name, *tmp_name;
  40089. HashTable *target_symbol_table;
  40090. SAVE_OPLINE();
  40091. varname = EX_VAR(opline->op1.var);
  40092. if (IS_CV == IS_CONST) {
  40093. name = Z_STR_P(varname);
  40094. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  40095. name = Z_STR_P(varname);
  40096. tmp_name = NULL;
  40097. } else {
  40098. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  40099. GET_OP1_UNDEF_CV(varname, BP_VAR_R);
  40100. }
  40101. name = zval_get_tmp_string(varname, &tmp_name);
  40102. }
  40103. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  40104. retval = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
  40105. if (retval == NULL) {
  40106. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  40107. fetch_this:
  40108. zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
  40109. if (IS_CV != IS_CONST) {
  40110. zend_tmp_string_release(tmp_name);
  40111. }
  40112. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  40113. }
  40114. if (type == BP_VAR_W) {
  40115. retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
  40116. } else if (type == BP_VAR_IS) {
  40117. retval = &EG(uninitialized_zval);
  40118. } else {
  40119. zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
  40120. if (type == BP_VAR_RW) {
  40121. retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
  40122. } else {
  40123. retval = &EG(uninitialized_zval);
  40124. }
  40125. }
  40126. /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
  40127. } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
  40128. retval = Z_INDIRECT_P(retval);
  40129. if (Z_TYPE_P(retval) == IS_UNDEF) {
  40130. if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
  40131. goto fetch_this;
  40132. }
  40133. if (type == BP_VAR_W) {
  40134. ZVAL_NULL(retval);
  40135. } else if (type == BP_VAR_IS) {
  40136. retval = &EG(uninitialized_zval);
  40137. } else {
  40138. zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
  40139. if (type == BP_VAR_RW) {
  40140. ZVAL_NULL(retval);
  40141. } else {
  40142. retval = &EG(uninitialized_zval);
  40143. }
  40144. }
  40145. }
  40146. }
  40147. if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
  40148. }
  40149. if (IS_CV != IS_CONST) {
  40150. zend_tmp_string_release(tmp_name);
  40151. }
  40152. ZEND_ASSERT(retval != NULL);
  40153. if (type == BP_VAR_R || type == BP_VAR_IS) {
  40154. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  40155. } else {
  40156. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  40157. }
  40158. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  40159. }
  40160. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40161. {
  40162. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40163. }
  40164. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40165. {
  40166. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40167. }
  40168. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40169. {
  40170. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40171. }
  40172. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40173. {
  40174. int fetch_type =
  40175. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  40176. BP_VAR_W : BP_VAR_R;
  40177. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40178. }
  40179. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40180. {
  40181. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40182. }
  40183. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40184. {
  40185. ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40186. }
  40187. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CV_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
  40188. {
  40189. USE_OPLINE
  40190. zval *varname;
  40191. zval *retval;
  40192. zend_string *name, *tmp_name;
  40193. zend_class_entry *ce;
  40194. SAVE_OPLINE();
  40195. do {
  40196. if (IS_UNUSED == IS_CONST) {
  40197. if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) {
  40198. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  40199. break;
  40200. } else {
  40201. zval *class_name = RT_CONSTANT(opline, opline->op2);
  40202. if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) {
  40203. ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  40204. if (UNEXPECTED(ce == NULL)) {
  40205. retval = NULL;
  40206. break;
  40207. }
  40208. if (IS_CV != IS_CONST) {
  40209. CACHE_PTR(opline->extended_value, ce);
  40210. }
  40211. }
  40212. }
  40213. } else {
  40214. if (IS_UNUSED == IS_UNUSED) {
  40215. ce = zend_fetch_class(NULL, opline->op2.num);
  40216. if (UNEXPECTED(ce == NULL)) {
  40217. retval = NULL;
  40218. break;
  40219. }
  40220. } else {
  40221. ce = Z_CE_P(EX_VAR(opline->op2.var));
  40222. }
  40223. if (IS_CV == IS_CONST &&
  40224. EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
  40225. retval = CACHED_PTR(opline->extended_value + sizeof(void*));
  40226. break;
  40227. }
  40228. }
  40229. varname = EX_VAR(opline->op1.var);
  40230. if (IS_CV == IS_CONST) {
  40231. name = Z_STR_P(varname);
  40232. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  40233. name = Z_STR_P(varname);
  40234. tmp_name = NULL;
  40235. } else {
  40236. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  40237. zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC);
  40238. }
  40239. name = zval_get_tmp_string(varname, &tmp_name);
  40240. }
  40241. retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
  40242. if (IS_CV != IS_CONST) {
  40243. zend_tmp_string_release(tmp_name);
  40244. }
  40245. if (IS_CV == IS_CONST && EXPECTED(retval)) {
  40246. CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval);
  40247. }
  40248. } while (0);
  40249. if (UNEXPECTED(retval == NULL)) {
  40250. if (EG(exception)) {
  40251. ZVAL_UNDEF(EX_VAR(opline->result.var));
  40252. HANDLE_EXCEPTION();
  40253. } else {
  40254. ZEND_ASSERT(type == BP_VAR_IS);
  40255. retval = &EG(uninitialized_zval);
  40256. }
  40257. }
  40258. if (type == BP_VAR_R || type == BP_VAR_IS) {
  40259. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  40260. } else {
  40261. ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
  40262. }
  40263. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  40264. }
  40265. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40266. {
  40267. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40268. }
  40269. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40270. {
  40271. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40272. }
  40273. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40274. {
  40275. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40276. }
  40277. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40278. {
  40279. int fetch_type =
  40280. (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
  40281. BP_VAR_W : BP_VAR_R;
  40282. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40283. }
  40284. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40285. {
  40286. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40287. }
  40288. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40289. {
  40290. ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  40291. }
  40292. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40293. {
  40294. USE_OPLINE
  40295. zend_free_op free_op1;
  40296. zval *container;
  40297. SAVE_OPLINE();
  40298. container = EX_VAR(opline->op1.var);
  40299. zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
  40300. if (IS_CV == IS_VAR) {
  40301. zval *result = EX_VAR(opline->result.var);
  40302. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  40303. }
  40304. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  40305. }
  40306. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40307. {
  40308. USE_OPLINE
  40309. zend_free_op free_op1;
  40310. zval *container;
  40311. SAVE_OPLINE();
  40312. container = EX_VAR(opline->op1.var);
  40313. zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
  40314. if (IS_CV == IS_VAR) {
  40315. zval *result = EX_VAR(opline->result.var);
  40316. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  40317. }
  40318. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  40319. }
  40320. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40321. {
  40322. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  40323. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  40324. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  40325. }
  40326. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  40327. } else {
  40328. if (IS_UNUSED == IS_UNUSED) {
  40329. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  40330. }
  40331. ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  40332. }
  40333. }
  40334. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40335. {
  40336. USE_OPLINE
  40337. zval *object_ptr;
  40338. zend_free_op free_op_data;
  40339. zval *value;
  40340. zval *variable_ptr;
  40341. zval *dim;
  40342. SAVE_OPLINE();
  40343. object_ptr = EX_VAR(opline->op1.var);
  40344. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40345. try_assign_dim_array:
  40346. SEPARATE_ARRAY(object_ptr);
  40347. if (IS_UNUSED == IS_UNUSED) {
  40348. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  40349. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  40350. ZVAL_DEREF(value);
  40351. }
  40352. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  40353. if (UNEXPECTED(variable_ptr == NULL)) {
  40354. zend_cannot_add_element();
  40355. goto assign_dim_error;
  40356. } else if (IS_CONST == IS_CV) {
  40357. if (Z_REFCOUNTED_P(value)) {
  40358. Z_ADDREF_P(value);
  40359. }
  40360. } else if (IS_CONST == IS_VAR) {
  40361. if (value != free_op_data) {
  40362. if (Z_REFCOUNTED_P(value)) {
  40363. Z_ADDREF_P(value);
  40364. }
  40365. }
  40366. } else if (IS_CONST == IS_CONST) {
  40367. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  40368. Z_ADDREF_P(value);
  40369. }
  40370. }
  40371. } else {
  40372. dim = NULL;
  40373. if (IS_UNUSED == IS_CONST) {
  40374. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40375. } else {
  40376. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40377. }
  40378. if (UNEXPECTED(variable_ptr == NULL)) {
  40379. goto assign_dim_error;
  40380. }
  40381. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  40382. value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
  40383. }
  40384. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40385. ZVAL_COPY(EX_VAR(opline->result.var), value);
  40386. }
  40387. } else {
  40388. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  40389. object_ptr = Z_REFVAL_P(object_ptr);
  40390. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40391. goto try_assign_dim_array;
  40392. }
  40393. }
  40394. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  40395. dim = NULL;
  40396. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  40397. if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  40398. dim++;
  40399. }
  40400. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40401. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  40402. if (IS_UNUSED == IS_UNUSED) {
  40403. zend_use_new_element_for_string();
  40404. UNDEF_RESULT();
  40405. HANDLE_EXCEPTION();
  40406. } else {
  40407. dim = NULL;
  40408. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  40409. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40410. }
  40411. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  40412. ZVAL_ARR(object_ptr, zend_new_array(8));
  40413. goto try_assign_dim_array;
  40414. } else {
  40415. if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  40416. zend_use_scalar_as_array();
  40417. }
  40418. dim = NULL;
  40419. assign_dim_error:
  40420. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40421. ZVAL_NULL(EX_VAR(opline->result.var));
  40422. }
  40423. }
  40424. }
  40425. if (IS_UNUSED != IS_UNUSED) {
  40426. }
  40427. /* assign_dim has two opcodes! */
  40428. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  40429. }
  40430. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40431. {
  40432. USE_OPLINE
  40433. zval *object_ptr;
  40434. zend_free_op free_op_data;
  40435. zval *value;
  40436. zval *variable_ptr;
  40437. zval *dim;
  40438. SAVE_OPLINE();
  40439. object_ptr = EX_VAR(opline->op1.var);
  40440. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40441. try_assign_dim_array:
  40442. SEPARATE_ARRAY(object_ptr);
  40443. if (IS_UNUSED == IS_UNUSED) {
  40444. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  40445. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  40446. ZVAL_DEREF(value);
  40447. }
  40448. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  40449. if (UNEXPECTED(variable_ptr == NULL)) {
  40450. zval_ptr_dtor_nogc(free_op_data);
  40451. zend_cannot_add_element();
  40452. goto assign_dim_error;
  40453. } else if (IS_TMP_VAR == IS_CV) {
  40454. if (Z_REFCOUNTED_P(value)) {
  40455. Z_ADDREF_P(value);
  40456. }
  40457. } else if (IS_TMP_VAR == IS_VAR) {
  40458. if (value != free_op_data) {
  40459. if (Z_REFCOUNTED_P(value)) {
  40460. Z_ADDREF_P(value);
  40461. }
  40462. zval_ptr_dtor_nogc(free_op_data);
  40463. }
  40464. } else if (IS_TMP_VAR == IS_CONST) {
  40465. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  40466. Z_ADDREF_P(value);
  40467. }
  40468. }
  40469. } else {
  40470. dim = NULL;
  40471. if (IS_UNUSED == IS_CONST) {
  40472. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40473. } else {
  40474. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40475. }
  40476. if (UNEXPECTED(variable_ptr == NULL)) {
  40477. goto assign_dim_error;
  40478. }
  40479. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  40480. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
  40481. }
  40482. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40483. ZVAL_COPY(EX_VAR(opline->result.var), value);
  40484. }
  40485. } else {
  40486. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  40487. object_ptr = Z_REFVAL_P(object_ptr);
  40488. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40489. goto try_assign_dim_array;
  40490. }
  40491. }
  40492. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  40493. dim = NULL;
  40494. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  40495. if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  40496. dim++;
  40497. }
  40498. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40499. zval_ptr_dtor_nogc(free_op_data);
  40500. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  40501. if (IS_UNUSED == IS_UNUSED) {
  40502. zend_use_new_element_for_string();
  40503. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40504. UNDEF_RESULT();
  40505. HANDLE_EXCEPTION();
  40506. } else {
  40507. dim = NULL;
  40508. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  40509. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40510. zval_ptr_dtor_nogc(free_op_data);
  40511. }
  40512. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  40513. ZVAL_ARR(object_ptr, zend_new_array(8));
  40514. goto try_assign_dim_array;
  40515. } else {
  40516. if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  40517. zend_use_scalar_as_array();
  40518. }
  40519. dim = NULL;
  40520. assign_dim_error:
  40521. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40522. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40523. ZVAL_NULL(EX_VAR(opline->result.var));
  40524. }
  40525. }
  40526. }
  40527. if (IS_UNUSED != IS_UNUSED) {
  40528. }
  40529. /* assign_dim has two opcodes! */
  40530. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  40531. }
  40532. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40533. {
  40534. USE_OPLINE
  40535. zval *object_ptr;
  40536. zend_free_op free_op_data;
  40537. zval *value;
  40538. zval *variable_ptr;
  40539. zval *dim;
  40540. SAVE_OPLINE();
  40541. object_ptr = EX_VAR(opline->op1.var);
  40542. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40543. try_assign_dim_array:
  40544. SEPARATE_ARRAY(object_ptr);
  40545. if (IS_UNUSED == IS_UNUSED) {
  40546. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  40547. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  40548. ZVAL_DEREF(value);
  40549. }
  40550. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  40551. if (UNEXPECTED(variable_ptr == NULL)) {
  40552. zval_ptr_dtor_nogc(free_op_data);
  40553. zend_cannot_add_element();
  40554. goto assign_dim_error;
  40555. } else if (IS_VAR == IS_CV) {
  40556. if (Z_REFCOUNTED_P(value)) {
  40557. Z_ADDREF_P(value);
  40558. }
  40559. } else if (IS_VAR == IS_VAR) {
  40560. if (value != free_op_data) {
  40561. if (Z_REFCOUNTED_P(value)) {
  40562. Z_ADDREF_P(value);
  40563. }
  40564. zval_ptr_dtor_nogc(free_op_data);
  40565. }
  40566. } else if (IS_VAR == IS_CONST) {
  40567. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  40568. Z_ADDREF_P(value);
  40569. }
  40570. }
  40571. } else {
  40572. dim = NULL;
  40573. if (IS_UNUSED == IS_CONST) {
  40574. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40575. } else {
  40576. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40577. }
  40578. if (UNEXPECTED(variable_ptr == NULL)) {
  40579. goto assign_dim_error;
  40580. }
  40581. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  40582. value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
  40583. }
  40584. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40585. ZVAL_COPY(EX_VAR(opline->result.var), value);
  40586. }
  40587. } else {
  40588. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  40589. object_ptr = Z_REFVAL_P(object_ptr);
  40590. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40591. goto try_assign_dim_array;
  40592. }
  40593. }
  40594. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  40595. dim = NULL;
  40596. value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  40597. if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  40598. dim++;
  40599. }
  40600. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40601. zval_ptr_dtor_nogc(free_op_data);
  40602. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  40603. if (IS_UNUSED == IS_UNUSED) {
  40604. zend_use_new_element_for_string();
  40605. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40606. UNDEF_RESULT();
  40607. HANDLE_EXCEPTION();
  40608. } else {
  40609. dim = NULL;
  40610. value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  40611. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40612. zval_ptr_dtor_nogc(free_op_data);
  40613. }
  40614. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  40615. ZVAL_ARR(object_ptr, zend_new_array(8));
  40616. goto try_assign_dim_array;
  40617. } else {
  40618. if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  40619. zend_use_scalar_as_array();
  40620. }
  40621. dim = NULL;
  40622. assign_dim_error:
  40623. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  40624. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40625. ZVAL_NULL(EX_VAR(opline->result.var));
  40626. }
  40627. }
  40628. }
  40629. if (IS_UNUSED != IS_UNUSED) {
  40630. }
  40631. /* assign_dim has two opcodes! */
  40632. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  40633. }
  40634. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40635. {
  40636. USE_OPLINE
  40637. zval *object_ptr;
  40638. zend_free_op free_op_data;
  40639. zval *value;
  40640. zval *variable_ptr;
  40641. zval *dim;
  40642. SAVE_OPLINE();
  40643. object_ptr = EX_VAR(opline->op1.var);
  40644. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40645. try_assign_dim_array:
  40646. SEPARATE_ARRAY(object_ptr);
  40647. if (IS_UNUSED == IS_UNUSED) {
  40648. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  40649. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  40650. ZVAL_DEREF(value);
  40651. }
  40652. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  40653. if (UNEXPECTED(variable_ptr == NULL)) {
  40654. zend_cannot_add_element();
  40655. goto assign_dim_error;
  40656. } else if (IS_CV == IS_CV) {
  40657. if (Z_REFCOUNTED_P(value)) {
  40658. Z_ADDREF_P(value);
  40659. }
  40660. } else if (IS_CV == IS_VAR) {
  40661. if (value != free_op_data) {
  40662. if (Z_REFCOUNTED_P(value)) {
  40663. Z_ADDREF_P(value);
  40664. }
  40665. }
  40666. } else if (IS_CV == IS_CONST) {
  40667. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  40668. Z_ADDREF_P(value);
  40669. }
  40670. }
  40671. } else {
  40672. dim = NULL;
  40673. if (IS_UNUSED == IS_CONST) {
  40674. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40675. } else {
  40676. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  40677. }
  40678. if (UNEXPECTED(variable_ptr == NULL)) {
  40679. goto assign_dim_error;
  40680. }
  40681. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  40682. value = zend_assign_to_variable(variable_ptr, value, IS_CV);
  40683. }
  40684. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40685. ZVAL_COPY(EX_VAR(opline->result.var), value);
  40686. }
  40687. } else {
  40688. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  40689. object_ptr = Z_REFVAL_P(object_ptr);
  40690. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  40691. goto try_assign_dim_array;
  40692. }
  40693. }
  40694. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  40695. dim = NULL;
  40696. value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  40697. if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  40698. dim++;
  40699. }
  40700. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40701. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  40702. if (IS_UNUSED == IS_UNUSED) {
  40703. zend_use_new_element_for_string();
  40704. UNDEF_RESULT();
  40705. HANDLE_EXCEPTION();
  40706. } else {
  40707. dim = NULL;
  40708. value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  40709. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  40710. }
  40711. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  40712. ZVAL_ARR(object_ptr, zend_new_array(8));
  40713. goto try_assign_dim_array;
  40714. } else {
  40715. if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  40716. zend_use_scalar_as_array();
  40717. }
  40718. dim = NULL;
  40719. assign_dim_error:
  40720. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  40721. ZVAL_NULL(EX_VAR(opline->result.var));
  40722. }
  40723. }
  40724. }
  40725. if (IS_UNUSED != IS_UNUSED) {
  40726. }
  40727. /* assign_dim has two opcodes! */
  40728. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  40729. }
  40730. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40731. {
  40732. USE_OPLINE
  40733. SAVE_OPLINE();
  40734. if (IS_CV == IS_UNUSED) {
  40735. zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
  40736. } else {
  40737. /* prevents "undefined variable opline" errors */
  40738. #if 0 || (IS_CV != IS_UNUSED)
  40739. zval *retval_ref, *retval_ptr;
  40740. zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
  40741. retval_ref = retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  40742. if (IS_CV == IS_CONST) {
  40743. ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
  40744. retval_ref = retval_ptr = EX_VAR(opline->result.var);
  40745. } else if (IS_CV == IS_VAR) {
  40746. if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
  40747. retval_ptr = Z_INDIRECT_P(retval_ptr);
  40748. }
  40749. ZVAL_DEREF(retval_ptr);
  40750. } else if (IS_CV == IS_CV) {
  40751. ZVAL_DEREF(retval_ptr);
  40752. }
  40753. if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type)
  40754. && ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE
  40755. && ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE
  40756. && !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr))
  40757. && !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
  40758. && retval_ref != retval_ptr)
  40759. ) {
  40760. /* A cast might happen - unwrap the reference if this is a by-value return */
  40761. if (Z_REFCOUNT_P(retval_ref) == 1) {
  40762. ZVAL_UNREF(retval_ref);
  40763. } else {
  40764. Z_DELREF_P(retval_ref);
  40765. ZVAL_COPY(retval_ref, retval_ptr);
  40766. }
  40767. retval_ptr = retval_ref;
  40768. }
  40769. zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
  40770. #endif
  40771. }
  40772. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  40773. }
  40774. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40775. {
  40776. USE_OPLINE
  40777. zval *expr_ptr, new_expr;
  40778. SAVE_OPLINE();
  40779. if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
  40780. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  40781. expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  40782. if (Z_ISREF_P(expr_ptr)) {
  40783. Z_ADDREF_P(expr_ptr);
  40784. } else {
  40785. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  40786. }
  40787. } else {
  40788. expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  40789. if (IS_CV == IS_TMP_VAR) {
  40790. /* pass */
  40791. } else if (IS_CV == IS_CONST) {
  40792. Z_TRY_ADDREF_P(expr_ptr);
  40793. } else if (IS_CV == IS_CV) {
  40794. ZVAL_DEREF(expr_ptr);
  40795. Z_TRY_ADDREF_P(expr_ptr);
  40796. } else /* if (IS_CV == IS_VAR) */ {
  40797. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  40798. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  40799. expr_ptr = Z_REFVAL_P(expr_ptr);
  40800. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  40801. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  40802. expr_ptr = &new_expr;
  40803. efree_size(ref, sizeof(zend_reference));
  40804. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  40805. Z_ADDREF_P(expr_ptr);
  40806. }
  40807. }
  40808. }
  40809. }
  40810. if (IS_UNUSED != IS_UNUSED) {
  40811. zval *offset = NULL;
  40812. zend_string *str;
  40813. zend_ulong hval;
  40814. add_again:
  40815. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  40816. str = Z_STR_P(offset);
  40817. if (IS_UNUSED != IS_CONST) {
  40818. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  40819. goto num_index;
  40820. }
  40821. }
  40822. str_index:
  40823. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  40824. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  40825. hval = Z_LVAL_P(offset);
  40826. num_index:
  40827. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  40828. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  40829. offset = Z_REFVAL_P(offset);
  40830. goto add_again;
  40831. } else if (Z_TYPE_P(offset) == IS_NULL) {
  40832. str = ZSTR_EMPTY_ALLOC();
  40833. goto str_index;
  40834. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  40835. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  40836. goto num_index;
  40837. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  40838. hval = 0;
  40839. goto num_index;
  40840. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  40841. hval = 1;
  40842. goto num_index;
  40843. } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  40844. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  40845. str = ZSTR_EMPTY_ALLOC();
  40846. goto str_index;
  40847. } else {
  40848. zend_illegal_offset();
  40849. zval_ptr_dtor_nogc(expr_ptr);
  40850. }
  40851. } else {
  40852. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  40853. zend_cannot_add_element();
  40854. zval_ptr_dtor_nogc(expr_ptr);
  40855. }
  40856. }
  40857. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  40858. }
  40859. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40860. {
  40861. zval *array;
  40862. uint32_t size;
  40863. USE_OPLINE
  40864. array = EX_VAR(opline->result.var);
  40865. if (IS_CV != IS_UNUSED) {
  40866. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  40867. ZVAL_ARR(array, zend_new_array(size));
  40868. /* Explicitly initialize array as not-packed if flag is set */
  40869. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  40870. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  40871. }
  40872. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  40873. } else {
  40874. ZVAL_EMPTY_ARRAY(array);
  40875. ZEND_VM_NEXT_OPCODE();
  40876. }
  40877. }
  40878. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40879. {
  40880. USE_OPLINE
  40881. zval *var = EX_VAR(opline->op1.var);
  40882. if (Z_REFCOUNTED_P(var)) {
  40883. zend_refcounted *garbage = Z_COUNTED_P(var);
  40884. ZVAL_UNDEF(var);
  40885. SAVE_OPLINE();
  40886. if (!GC_DELREF(garbage)) {
  40887. rc_dtor_func(garbage);
  40888. } else {
  40889. gc_check_possible_root(garbage);
  40890. }
  40891. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  40892. } else {
  40893. ZVAL_UNDEF(var);
  40894. }
  40895. ZEND_VM_NEXT_OPCODE();
  40896. }
  40897. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40898. {
  40899. USE_OPLINE
  40900. zval *varname;
  40901. zend_string *name, *tmp_name;
  40902. HashTable *target_symbol_table;
  40903. SAVE_OPLINE();
  40904. varname = EX_VAR(opline->op1.var);
  40905. if (IS_CV == IS_CONST) {
  40906. name = Z_STR_P(varname);
  40907. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  40908. name = Z_STR_P(varname);
  40909. tmp_name = NULL;
  40910. } else {
  40911. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  40912. varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
  40913. }
  40914. name = zval_get_tmp_string(varname, &tmp_name);
  40915. }
  40916. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  40917. zend_hash_del_ind(target_symbol_table, name);
  40918. if (IS_CV != IS_CONST) {
  40919. zend_tmp_string_release(tmp_name);
  40920. }
  40921. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  40922. }
  40923. static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40924. {
  40925. USE_OPLINE
  40926. zval *varname;
  40927. zend_string *name, *tmp_name;
  40928. zend_class_entry *ce;
  40929. SAVE_OPLINE();
  40930. if (IS_UNUSED == IS_CONST) {
  40931. ce = CACHED_PTR(opline->extended_value);
  40932. if (UNEXPECTED(ce == NULL)) {
  40933. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  40934. if (UNEXPECTED(ce == NULL)) {
  40935. ZEND_ASSERT(EG(exception));
  40936. HANDLE_EXCEPTION();
  40937. }
  40938. /*CACHE_PTR(opline->extended_value, ce);*/
  40939. }
  40940. } else if (IS_UNUSED == IS_UNUSED) {
  40941. ce = zend_fetch_class(NULL, opline->op2.num);
  40942. if (UNEXPECTED(ce == NULL)) {
  40943. ZEND_ASSERT(EG(exception));
  40944. HANDLE_EXCEPTION();
  40945. }
  40946. } else {
  40947. ce = Z_CE_P(EX_VAR(opline->op2.var));
  40948. }
  40949. varname = EX_VAR(opline->op1.var);
  40950. if (IS_CV == IS_CONST) {
  40951. name = Z_STR_P(varname);
  40952. } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
  40953. name = Z_STR_P(varname);
  40954. tmp_name = NULL;
  40955. } else {
  40956. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
  40957. varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
  40958. }
  40959. name = zval_get_tmp_string(varname, &tmp_name);
  40960. }
  40961. zend_std_unset_static_property(ce, name);
  40962. if (IS_CV != IS_CONST) {
  40963. zend_tmp_string_release(tmp_name);
  40964. }
  40965. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  40966. }
  40967. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40968. {
  40969. USE_OPLINE
  40970. zval *value;
  40971. int result;
  40972. value = EX_VAR(opline->op1.var);
  40973. if (!(0)) {
  40974. result =
  40975. Z_TYPE_P(value) > IS_NULL &&
  40976. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  40977. } else {
  40978. SAVE_OPLINE();
  40979. result = !i_zend_is_true(value);
  40980. if (UNEXPECTED(EG(exception))) {
  40981. ZVAL_UNDEF(EX_VAR(opline->result.var));
  40982. HANDLE_EXCEPTION();
  40983. }
  40984. }
  40985. ZEND_VM_SMART_BRANCH(result, 0);
  40986. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  40987. ZEND_VM_NEXT_OPCODE();
  40988. }
  40989. static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  40990. {
  40991. USE_OPLINE
  40992. zval *value;
  40993. int result;
  40994. value = EX_VAR(opline->op1.var);
  40995. if (!(1)) {
  40996. result =
  40997. Z_TYPE_P(value) > IS_NULL &&
  40998. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  40999. } else {
  41000. SAVE_OPLINE();
  41001. result = !i_zend_is_true(value);
  41002. if (UNEXPECTED(EG(exception))) {
  41003. ZVAL_UNDEF(EX_VAR(opline->result.var));
  41004. HANDLE_EXCEPTION();
  41005. }
  41006. }
  41007. ZEND_VM_SMART_BRANCH(result, 0);
  41008. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  41009. ZEND_VM_NEXT_OPCODE();
  41010. }
  41011. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41012. {
  41013. USE_OPLINE
  41014. zval *value;
  41015. int result;
  41016. zval *varname;
  41017. zend_string *name, *tmp_name;
  41018. HashTable *target_symbol_table;
  41019. SAVE_OPLINE();
  41020. varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  41021. if (IS_CV == IS_CONST) {
  41022. name = Z_STR_P(varname);
  41023. } else {
  41024. name = zval_get_tmp_string(varname, &tmp_name);
  41025. }
  41026. target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
  41027. value = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
  41028. if (IS_CV != IS_CONST) {
  41029. zend_tmp_string_release(tmp_name);
  41030. }
  41031. if (!value) {
  41032. result = (opline->extended_value & ZEND_ISEMPTY);
  41033. } else {
  41034. if (Z_TYPE_P(value) == IS_INDIRECT) {
  41035. value = Z_INDIRECT_P(value);
  41036. }
  41037. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  41038. if (Z_ISREF_P(value)) {
  41039. value = Z_REFVAL_P(value);
  41040. }
  41041. result = Z_TYPE_P(value) > IS_NULL;
  41042. } else {
  41043. result = !i_zend_is_true(value);
  41044. }
  41045. }
  41046. ZEND_VM_SMART_BRANCH(result, 1);
  41047. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  41048. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41049. }
  41050. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41051. {
  41052. USE_OPLINE
  41053. zval *value;
  41054. int result;
  41055. zval *varname;
  41056. zend_string *name, *tmp_name;
  41057. zend_class_entry *ce;
  41058. SAVE_OPLINE();
  41059. if (IS_UNUSED == IS_CONST) {
  41060. if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) {
  41061. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  41062. goto is_static_prop_return;
  41063. } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) {
  41064. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
  41065. if (UNEXPECTED(ce == NULL)) {
  41066. ZEND_ASSERT(EG(exception));
  41067. ZVAL_UNDEF(EX_VAR(opline->result.var));
  41068. HANDLE_EXCEPTION();
  41069. }
  41070. if (IS_CV != IS_CONST) {
  41071. CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce);
  41072. }
  41073. }
  41074. } else {
  41075. if (IS_UNUSED == IS_UNUSED) {
  41076. ce = zend_fetch_class(NULL, opline->op2.num);
  41077. if (UNEXPECTED(ce == NULL)) {
  41078. ZEND_ASSERT(EG(exception));
  41079. ZVAL_UNDEF(EX_VAR(opline->result.var));
  41080. HANDLE_EXCEPTION();
  41081. }
  41082. } else {
  41083. ce = Z_CE_P(EX_VAR(opline->op2.var));
  41084. }
  41085. if (IS_CV == IS_CONST &&
  41086. EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) {
  41087. value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*));
  41088. goto is_static_prop_return;
  41089. }
  41090. }
  41091. varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  41092. if (IS_CV == IS_CONST) {
  41093. name = Z_STR_P(varname);
  41094. } else {
  41095. name = zval_get_tmp_string(varname, &tmp_name);
  41096. }
  41097. value = zend_std_get_static_property(ce, name, 1);
  41098. if (IS_CV == IS_CONST && value) {
  41099. CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value);
  41100. }
  41101. if (IS_CV != IS_CONST) {
  41102. zend_tmp_string_release(tmp_name);
  41103. }
  41104. is_static_prop_return:
  41105. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  41106. result = value && Z_TYPE_P(value) > IS_NULL &&
  41107. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  41108. } else {
  41109. result = !value || !i_zend_is_true(value);
  41110. }
  41111. ZEND_VM_SMART_BRANCH(result, 1);
  41112. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  41113. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41114. }
  41115. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41116. {
  41117. USE_OPLINE
  41118. zval *expr;
  41119. zend_bool result;
  41120. SAVE_OPLINE();
  41121. expr = EX_VAR(opline->op1.var);
  41122. try_instanceof:
  41123. if (Z_TYPE_P(expr) == IS_OBJECT) {
  41124. zend_class_entry *ce;
  41125. if (IS_UNUSED == IS_CONST) {
  41126. ce = CACHED_PTR(opline->extended_value);
  41127. if (UNEXPECTED(ce == NULL)) {
  41128. ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
  41129. if (EXPECTED(ce)) {
  41130. CACHE_PTR(opline->extended_value, ce);
  41131. }
  41132. }
  41133. } else if (IS_UNUSED == IS_UNUSED) {
  41134. ce = zend_fetch_class(NULL, opline->op2.num);
  41135. if (UNEXPECTED(ce == NULL)) {
  41136. ZEND_ASSERT(EG(exception));
  41137. ZVAL_UNDEF(EX_VAR(opline->result.var));
  41138. HANDLE_EXCEPTION();
  41139. }
  41140. } else {
  41141. ce = Z_CE_P(EX_VAR(opline->op2.var));
  41142. }
  41143. result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
  41144. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
  41145. expr = Z_REFVAL_P(expr);
  41146. goto try_instanceof;
  41147. } else {
  41148. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
  41149. GET_OP1_UNDEF_CV(expr, BP_VAR_R);
  41150. }
  41151. result = 0;
  41152. }
  41153. ZEND_VM_SMART_BRANCH(result, 1);
  41154. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  41155. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41156. }
  41157. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41158. {
  41159. USE_OPLINE
  41160. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  41161. SAVE_OPLINE();
  41162. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  41163. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  41164. }
  41165. /* Destroy the previously yielded value */
  41166. zval_ptr_dtor(&generator->value);
  41167. /* Destroy the previously yielded key */
  41168. zval_ptr_dtor(&generator->key);
  41169. /* Set the new yielded value */
  41170. if (IS_CV != IS_UNUSED) {
  41171. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  41172. /* Constants and temporary variables aren't yieldable by reference,
  41173. * but we still allow them with a notice. */
  41174. if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
  41175. zval *value;
  41176. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  41177. value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41178. ZVAL_COPY_VALUE(&generator->value, value);
  41179. if (IS_CV == IS_CONST) {
  41180. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  41181. Z_ADDREF(generator->value);
  41182. }
  41183. }
  41184. } else {
  41185. zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  41186. /* If a function call result is yielded and the function did
  41187. * not return by reference we throw a notice. */
  41188. if (IS_CV == IS_VAR &&
  41189. (value_ptr == &EG(uninitialized_zval) ||
  41190. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  41191. !Z_ISREF_P(value_ptr)))) {
  41192. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  41193. ZVAL_COPY(&generator->value, value_ptr);
  41194. } else {
  41195. if (Z_ISREF_P(value_ptr)) {
  41196. Z_ADDREF_P(value_ptr);
  41197. } else {
  41198. ZVAL_MAKE_REF_EX(value_ptr, 2);
  41199. }
  41200. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  41201. }
  41202. }
  41203. } else {
  41204. zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41205. /* Consts, temporary variables and references need copying */
  41206. if (IS_CV == IS_CONST) {
  41207. ZVAL_COPY_VALUE(&generator->value, value);
  41208. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  41209. Z_ADDREF(generator->value);
  41210. }
  41211. } else if (IS_CV == IS_TMP_VAR) {
  41212. ZVAL_COPY_VALUE(&generator->value, value);
  41213. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  41214. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  41215. } else {
  41216. ZVAL_COPY_VALUE(&generator->value, value);
  41217. if (IS_CV == IS_CV) {
  41218. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  41219. }
  41220. }
  41221. }
  41222. } else {
  41223. /* If no value was specified yield null */
  41224. ZVAL_NULL(&generator->value);
  41225. }
  41226. /* Set the new yielded key */
  41227. if (IS_UNUSED != IS_UNUSED) {
  41228. zval *key = NULL;
  41229. /* Consts, temporary variables and references need copying */
  41230. if (IS_UNUSED == IS_CONST) {
  41231. ZVAL_COPY_VALUE(&generator->key, key);
  41232. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  41233. Z_ADDREF(generator->key);
  41234. }
  41235. } else if (IS_UNUSED == IS_TMP_VAR) {
  41236. ZVAL_COPY_VALUE(&generator->key, key);
  41237. } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  41238. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  41239. } else {
  41240. ZVAL_COPY_VALUE(&generator->key, key);
  41241. if (IS_UNUSED == IS_CV) {
  41242. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  41243. }
  41244. }
  41245. if (Z_TYPE(generator->key) == IS_LONG
  41246. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  41247. ) {
  41248. generator->largest_used_integer_key = Z_LVAL(generator->key);
  41249. }
  41250. } else {
  41251. /* If no key was specified we use auto-increment keys */
  41252. generator->largest_used_integer_key++;
  41253. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  41254. }
  41255. if (RETURN_VALUE_USED(opline)) {
  41256. /* If the return value of yield is used set the send
  41257. * target and initialize it to NULL */
  41258. generator->send_target = EX_VAR(opline->result.var);
  41259. ZVAL_NULL(generator->send_target);
  41260. } else {
  41261. generator->send_target = NULL;
  41262. }
  41263. /* We increment to the next op, so we are at the correct position when the
  41264. * generator is resumed. */
  41265. ZEND_VM_INC_OPCODE();
  41266. /* The GOTO VM uses a local opline variable. We need to set the opline
  41267. * variable in execute_data so we don't resume at an old position. */
  41268. SAVE_OPLINE();
  41269. ZEND_VM_RETURN();
  41270. }
  41271. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41272. {
  41273. USE_OPLINE
  41274. zval *op1 = EX_VAR(opline->op1.var);
  41275. if (UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  41276. SAVE_OPLINE();
  41277. GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  41278. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41279. }
  41280. ZEND_VM_NEXT_OPCODE();
  41281. }
  41282. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41283. {
  41284. USE_OPLINE
  41285. zval *op1 = EX_VAR(opline->op1.var);
  41286. if (IS_CV == IS_CV) {
  41287. if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  41288. ZVAL_NEW_EMPTY_REF(op1);
  41289. Z_SET_REFCOUNT_P(op1, 2);
  41290. ZVAL_NULL(Z_REFVAL_P(op1));
  41291. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  41292. } else {
  41293. if (Z_ISREF_P(op1)) {
  41294. Z_ADDREF_P(op1);
  41295. } else {
  41296. ZVAL_MAKE_REF_EX(op1, 2);
  41297. }
  41298. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  41299. }
  41300. } else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
  41301. op1 = Z_INDIRECT_P(op1);
  41302. if (EXPECTED(!Z_ISREF_P(op1))) {
  41303. ZVAL_MAKE_REF_EX(op1, 2);
  41304. } else {
  41305. GC_ADDREF(Z_REF_P(op1));
  41306. }
  41307. ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
  41308. } else {
  41309. ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
  41310. }
  41311. ZEND_VM_NEXT_OPCODE();
  41312. }
  41313. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41314. {
  41315. USE_OPLINE
  41316. zval *op1;
  41317. zend_long count;
  41318. SAVE_OPLINE();
  41319. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41320. do {
  41321. if (Z_TYPE_P(op1) == IS_ARRAY) {
  41322. count = zend_array_count(Z_ARRVAL_P(op1));
  41323. break;
  41324. } else if (Z_TYPE_P(op1) == IS_OBJECT) {
  41325. /* first, we check if the handler is defined */
  41326. if (Z_OBJ_HT_P(op1)->count_elements) {
  41327. if (SUCCESS == Z_OBJ_HT_P(op1)->count_elements(op1, &count)) {
  41328. break;
  41329. }
  41330. }
  41331. /* if not and the object implements Countable we call its count() method */
  41332. if (instanceof_function(Z_OBJCE_P(op1), zend_ce_countable)) {
  41333. zval retval;
  41334. zend_call_method_with_0_params(op1, NULL, NULL, "count", &retval);
  41335. count = zval_get_long(&retval);
  41336. zval_ptr_dtor(&retval);
  41337. break;
  41338. }
  41339. /* If There's no handler and it doesn't implement Countable then add a warning */
  41340. count = 1;
  41341. } else if (Z_TYPE_P(op1) == IS_NULL) {
  41342. count = 0;
  41343. } else {
  41344. count = 1;
  41345. }
  41346. zend_error(E_WARNING, "count(): Parameter must be an array or an object that implements Countable");
  41347. } while (0);
  41348. ZVAL_LONG(EX_VAR(opline->result.var), count);
  41349. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41350. }
  41351. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41352. {
  41353. USE_OPLINE
  41354. if (IS_CV == IS_UNUSED) {
  41355. if (UNEXPECTED(!EX(func)->common.scope)) {
  41356. SAVE_OPLINE();
  41357. zend_error(E_WARNING, "get_class() called without object from outside a class");
  41358. ZVAL_FALSE(EX_VAR(opline->result.var));
  41359. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41360. } else {
  41361. ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
  41362. ZEND_VM_NEXT_OPCODE();
  41363. }
  41364. } else {
  41365. zval *op1;
  41366. SAVE_OPLINE();
  41367. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41368. if (Z_TYPE_P(op1) == IS_OBJECT) {
  41369. ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
  41370. } else {
  41371. zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1)));
  41372. ZVAL_FALSE(EX_VAR(opline->result.var));
  41373. }
  41374. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41375. }
  41376. }
  41377. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41378. {
  41379. USE_OPLINE
  41380. zval *op1;
  41381. zend_string *type;
  41382. SAVE_OPLINE();
  41383. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41384. type = zend_zval_get_type(op1);
  41385. if (EXPECTED(type)) {
  41386. ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
  41387. } else {
  41388. ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
  41389. }
  41390. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41391. }
  41392. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41393. {
  41394. USE_OPLINE
  41395. zval *op1, *op2, *result;
  41396. op1 = EX_VAR(opline->op1.var);
  41397. op2 = EX_VAR(opline->op2.var);
  41398. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  41399. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  41400. result = EX_VAR(opline->result.var);
  41401. fast_long_add_function(result, op1, op2);
  41402. ZEND_VM_NEXT_OPCODE();
  41403. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  41404. result = EX_VAR(opline->result.var);
  41405. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
  41406. ZEND_VM_NEXT_OPCODE();
  41407. }
  41408. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  41409. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  41410. result = EX_VAR(opline->result.var);
  41411. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
  41412. ZEND_VM_NEXT_OPCODE();
  41413. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  41414. result = EX_VAR(opline->result.var);
  41415. ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
  41416. ZEND_VM_NEXT_OPCODE();
  41417. }
  41418. }
  41419. SAVE_OPLINE();
  41420. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  41421. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  41422. }
  41423. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  41424. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  41425. }
  41426. add_function(EX_VAR(opline->result.var), op1, op2);
  41427. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41428. }
  41429. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41430. {
  41431. USE_OPLINE
  41432. zval *op1, *op2, *result;
  41433. op1 = EX_VAR(opline->op1.var);
  41434. op2 = EX_VAR(opline->op2.var);
  41435. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  41436. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  41437. result = EX_VAR(opline->result.var);
  41438. fast_long_sub_function(result, op1, op2);
  41439. ZEND_VM_NEXT_OPCODE();
  41440. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  41441. result = EX_VAR(opline->result.var);
  41442. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
  41443. ZEND_VM_NEXT_OPCODE();
  41444. }
  41445. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  41446. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  41447. result = EX_VAR(opline->result.var);
  41448. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
  41449. ZEND_VM_NEXT_OPCODE();
  41450. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  41451. result = EX_VAR(opline->result.var);
  41452. ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
  41453. ZEND_VM_NEXT_OPCODE();
  41454. }
  41455. }
  41456. SAVE_OPLINE();
  41457. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  41458. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  41459. }
  41460. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  41461. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  41462. }
  41463. sub_function(EX_VAR(opline->result.var), op1, op2);
  41464. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41465. }
  41466. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41467. {
  41468. USE_OPLINE
  41469. zval *op1, *op2, *result;
  41470. op1 = EX_VAR(opline->op1.var);
  41471. op2 = EX_VAR(opline->op2.var);
  41472. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  41473. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  41474. zend_long overflow;
  41475. result = EX_VAR(opline->result.var);
  41476. ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
  41477. Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
  41478. ZEND_VM_NEXT_OPCODE();
  41479. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  41480. result = EX_VAR(opline->result.var);
  41481. ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
  41482. ZEND_VM_NEXT_OPCODE();
  41483. }
  41484. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  41485. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  41486. result = EX_VAR(opline->result.var);
  41487. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
  41488. ZEND_VM_NEXT_OPCODE();
  41489. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  41490. result = EX_VAR(opline->result.var);
  41491. ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
  41492. ZEND_VM_NEXT_OPCODE();
  41493. }
  41494. }
  41495. SAVE_OPLINE();
  41496. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  41497. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  41498. }
  41499. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  41500. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  41501. }
  41502. mul_function(EX_VAR(opline->result.var), op1, op2);
  41503. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41504. }
  41505. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41506. {
  41507. USE_OPLINE
  41508. zval *op1, *op2;
  41509. SAVE_OPLINE();
  41510. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41511. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  41512. fast_div_function(EX_VAR(opline->result.var), op1, op2);
  41513. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41514. }
  41515. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41516. {
  41517. USE_OPLINE
  41518. zval *op1, *op2, *result;
  41519. op1 = EX_VAR(opline->op1.var);
  41520. op2 = EX_VAR(opline->op2.var);
  41521. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  41522. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  41523. result = EX_VAR(opline->result.var);
  41524. if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
  41525. ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  41526. } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
  41527. /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
  41528. ZVAL_LONG(result, 0);
  41529. } else {
  41530. ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
  41531. }
  41532. ZEND_VM_NEXT_OPCODE();
  41533. }
  41534. }
  41535. SAVE_OPLINE();
  41536. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  41537. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  41538. }
  41539. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  41540. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  41541. }
  41542. mod_function(EX_VAR(opline->result.var), op1, op2);
  41543. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41544. }
  41545. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41546. {
  41547. USE_OPLINE
  41548. zval *op1, *op2;
  41549. op1 = EX_VAR(opline->op1.var);
  41550. op2 = EX_VAR(opline->op2.var);
  41551. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  41552. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  41553. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  41554. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
  41555. ZEND_VM_NEXT_OPCODE();
  41556. }
  41557. SAVE_OPLINE();
  41558. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  41559. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  41560. }
  41561. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  41562. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  41563. }
  41564. shift_left_function(EX_VAR(opline->result.var), op1, op2);
  41565. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41566. }
  41567. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41568. {
  41569. USE_OPLINE
  41570. zval *op1, *op2;
  41571. op1 = EX_VAR(opline->op1.var);
  41572. op2 = EX_VAR(opline->op2.var);
  41573. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  41574. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
  41575. && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
  41576. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
  41577. ZEND_VM_NEXT_OPCODE();
  41578. }
  41579. SAVE_OPLINE();
  41580. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  41581. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  41582. }
  41583. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  41584. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  41585. }
  41586. shift_right_function(EX_VAR(opline->result.var), op1, op2);
  41587. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41588. }
  41589. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41590. {
  41591. USE_OPLINE
  41592. zval *op1, *op2;
  41593. SAVE_OPLINE();
  41594. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41595. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  41596. pow_function(EX_VAR(opline->result.var), op1, op2);
  41597. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41598. }
  41599. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41600. {
  41601. USE_OPLINE
  41602. zval *op1, *op2;
  41603. op1 = EX_VAR(opline->op1.var);
  41604. op2 = EX_VAR(opline->op2.var);
  41605. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  41606. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  41607. zend_string *op1_str = Z_STR_P(op1);
  41608. zend_string *op2_str = Z_STR_P(op2);
  41609. zend_string *str;
  41610. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  41611. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  41612. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  41613. } else {
  41614. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  41615. }
  41616. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  41617. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  41618. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  41619. } else {
  41620. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  41621. }
  41622. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  41623. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  41624. size_t len = ZSTR_LEN(op1_str);
  41625. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  41626. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  41627. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  41628. } else {
  41629. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  41630. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  41631. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  41632. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  41633. }
  41634. ZEND_VM_NEXT_OPCODE();
  41635. } else {
  41636. SAVE_OPLINE();
  41637. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  41638. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  41639. }
  41640. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  41641. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  41642. }
  41643. concat_function(EX_VAR(opline->result.var), op1, op2);
  41644. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41645. }
  41646. }
  41647. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41648. {
  41649. USE_OPLINE
  41650. zval *op1, *op2;
  41651. int result;
  41652. SAVE_OPLINE();
  41653. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41654. op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  41655. result = fast_is_identical_function(op1, op2);
  41656. ZEND_VM_SMART_BRANCH(result, 1);
  41657. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  41658. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41659. }
  41660. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41661. {
  41662. USE_OPLINE
  41663. zval *op1, *op2;
  41664. int result;
  41665. SAVE_OPLINE();
  41666. op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41667. op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  41668. result = fast_is_not_identical_function(op1, op2);
  41669. ZEND_VM_SMART_BRANCH(result, 1);
  41670. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  41671. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41672. }
  41673. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41674. {
  41675. USE_OPLINE
  41676. zval *op1, *op2, *result;
  41677. op1 = EX_VAR(opline->op1.var);
  41678. op2 = EX_VAR(opline->op2.var);
  41679. do {
  41680. int result;
  41681. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  41682. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  41683. result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
  41684. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  41685. result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
  41686. } else {
  41687. break;
  41688. }
  41689. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  41690. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  41691. result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
  41692. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  41693. result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
  41694. } else {
  41695. break;
  41696. }
  41697. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  41698. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  41699. result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  41700. } else {
  41701. break;
  41702. }
  41703. } else {
  41704. break;
  41705. }
  41706. ZEND_VM_SMART_BRANCH(result, 0);
  41707. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  41708. ZEND_VM_NEXT_OPCODE();
  41709. } while (0);
  41710. SAVE_OPLINE();
  41711. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  41712. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  41713. }
  41714. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  41715. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  41716. }
  41717. result = EX_VAR(opline->result.var);
  41718. compare_function(result, op1, op2);
  41719. ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
  41720. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41721. }
  41722. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41723. {
  41724. USE_OPLINE
  41725. zval *op1, *op2, *result;
  41726. op1 = EX_VAR(opline->op1.var);
  41727. op2 = EX_VAR(opline->op2.var);
  41728. do {
  41729. int result;
  41730. if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
  41731. if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  41732. result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
  41733. } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  41734. result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
  41735. } else {
  41736. break;
  41737. }
  41738. } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
  41739. if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
  41740. result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
  41741. } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
  41742. result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
  41743. } else {
  41744. break;
  41745. }
  41746. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  41747. if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  41748. result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
  41749. } else {
  41750. break;
  41751. }
  41752. } else {
  41753. break;
  41754. }
  41755. ZEND_VM_SMART_BRANCH(result, 0);
  41756. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  41757. ZEND_VM_NEXT_OPCODE();
  41758. } while (0);
  41759. SAVE_OPLINE();
  41760. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  41761. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  41762. }
  41763. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  41764. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  41765. }
  41766. result = EX_VAR(opline->result.var);
  41767. compare_function(result, op1, op2);
  41768. ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
  41769. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41770. }
  41771. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41772. {
  41773. USE_OPLINE
  41774. zval *op1, *op2, *result;
  41775. op1 = EX_VAR(opline->op1.var);
  41776. op2 = EX_VAR(opline->op2.var);
  41777. do {
  41778. int result;
  41779. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  41780. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  41781. result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
  41782. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  41783. result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
  41784. } else {
  41785. break;
  41786. }
  41787. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  41788. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  41789. result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
  41790. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  41791. result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
  41792. } else {
  41793. break;
  41794. }
  41795. } else {
  41796. break;
  41797. }
  41798. ZEND_VM_SMART_BRANCH(result, 0);
  41799. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  41800. ZEND_VM_NEXT_OPCODE();
  41801. } while (0);
  41802. SAVE_OPLINE();
  41803. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  41804. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  41805. }
  41806. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  41807. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  41808. }
  41809. result = EX_VAR(opline->result.var);
  41810. compare_function(result, op1, op2);
  41811. ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
  41812. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41813. }
  41814. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41815. {
  41816. USE_OPLINE
  41817. zval *op1, *op2, *result;
  41818. op1 = EX_VAR(opline->op1.var);
  41819. op2 = EX_VAR(opline->op2.var);
  41820. do {
  41821. int result;
  41822. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
  41823. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  41824. result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
  41825. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  41826. result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
  41827. } else {
  41828. break;
  41829. }
  41830. } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
  41831. if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
  41832. result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
  41833. } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  41834. result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
  41835. } else {
  41836. break;
  41837. }
  41838. } else {
  41839. break;
  41840. }
  41841. ZEND_VM_SMART_BRANCH(result, 0);
  41842. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  41843. ZEND_VM_NEXT_OPCODE();
  41844. } while (0);
  41845. SAVE_OPLINE();
  41846. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  41847. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  41848. }
  41849. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  41850. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  41851. }
  41852. result = EX_VAR(opline->result.var);
  41853. compare_function(result, op1, op2);
  41854. ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
  41855. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41856. }
  41857. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41858. {
  41859. USE_OPLINE
  41860. zval *op1, *op2;
  41861. SAVE_OPLINE();
  41862. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41863. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  41864. compare_function(EX_VAR(opline->result.var), op1, op2);
  41865. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41866. }
  41867. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41868. {
  41869. USE_OPLINE
  41870. zval *op1, *op2;
  41871. op1 = EX_VAR(opline->op1.var);
  41872. op2 = EX_VAR(opline->op2.var);
  41873. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  41874. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  41875. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
  41876. ZEND_VM_NEXT_OPCODE();
  41877. }
  41878. SAVE_OPLINE();
  41879. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  41880. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  41881. }
  41882. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  41883. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  41884. }
  41885. bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
  41886. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41887. }
  41888. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41889. {
  41890. USE_OPLINE
  41891. zval *op1, *op2;
  41892. op1 = EX_VAR(opline->op1.var);
  41893. op2 = EX_VAR(opline->op2.var);
  41894. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  41895. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  41896. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
  41897. ZEND_VM_NEXT_OPCODE();
  41898. }
  41899. SAVE_OPLINE();
  41900. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  41901. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  41902. }
  41903. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  41904. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  41905. }
  41906. bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
  41907. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41908. }
  41909. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41910. {
  41911. USE_OPLINE
  41912. zval *op1, *op2;
  41913. op1 = EX_VAR(opline->op1.var);
  41914. op2 = EX_VAR(opline->op2.var);
  41915. if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
  41916. && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
  41917. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
  41918. ZEND_VM_NEXT_OPCODE();
  41919. }
  41920. SAVE_OPLINE();
  41921. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
  41922. op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  41923. }
  41924. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
  41925. op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  41926. }
  41927. bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
  41928. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41929. }
  41930. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  41931. {
  41932. USE_OPLINE
  41933. zval *op1, *op2;
  41934. SAVE_OPLINE();
  41935. op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  41936. op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  41937. boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
  41938. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  41939. }
  41940. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  41941. {
  41942. USE_OPLINE
  41943. zend_free_op free_op_data1;
  41944. zval *object;
  41945. zval *property;
  41946. zval *value;
  41947. zval *zptr;
  41948. SAVE_OPLINE();
  41949. object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  41950. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  41951. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  41952. }
  41953. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  41954. do {
  41955. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  41956. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  41957. if (Z_ISREF_P(object)) {
  41958. object = Z_REFVAL_P(object);
  41959. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  41960. goto assign_op_object;
  41961. }
  41962. }
  41963. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  41964. break;
  41965. }
  41966. }
  41967. /* here we are sure we are dealing with an object */
  41968. assign_op_object:
  41969. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  41970. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
  41971. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  41972. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  41973. ZVAL_NULL(EX_VAR(opline->result.var));
  41974. }
  41975. } else {
  41976. ZVAL_DEREF(zptr);
  41977. binary_op(zptr, zptr, value);
  41978. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  41979. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  41980. }
  41981. }
  41982. } else {
  41983. zend_assign_op_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC);
  41984. }
  41985. } while (0);
  41986. FREE_OP(free_op_data1);
  41987. /* assign_obj has two opcodes! */
  41988. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  41989. }
  41990. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  41991. {
  41992. USE_OPLINE
  41993. zend_free_op free_op_data1;
  41994. zval *var_ptr;
  41995. zval *value, *container, *dim;
  41996. SAVE_OPLINE();
  41997. container = EX_VAR(opline->op1.var);
  41998. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  41999. assign_dim_op_array:
  42000. SEPARATE_ARRAY(container);
  42001. assign_dim_op_new_array:
  42002. dim = EX_VAR(opline->op2.var);
  42003. if (IS_CV == IS_UNUSED) {
  42004. var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
  42005. if (UNEXPECTED(!var_ptr)) {
  42006. zend_cannot_add_element();
  42007. goto assign_dim_op_ret_null;
  42008. }
  42009. } else {
  42010. if (IS_CV == IS_CONST) {
  42011. var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
  42012. } else {
  42013. var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
  42014. }
  42015. if (UNEXPECTED(!var_ptr)) {
  42016. goto assign_dim_op_ret_null;
  42017. }
  42018. ZVAL_DEREF(var_ptr);
  42019. }
  42020. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  42021. binary_op(var_ptr, var_ptr, value);
  42022. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42023. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  42024. }
  42025. } else {
  42026. if (EXPECTED(Z_ISREF_P(container))) {
  42027. container = Z_REFVAL_P(container);
  42028. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  42029. goto assign_dim_op_array;
  42030. }
  42031. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
  42032. container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
  42033. assign_dim_op_convert_to_array:
  42034. ZVAL_ARR(container, zend_new_array(8));
  42035. goto assign_dim_op_new_array;
  42036. }
  42037. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  42038. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  42039. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  42040. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  42041. dim++;
  42042. }
  42043. zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC);
  42044. } else {
  42045. if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  42046. if (IS_CV == IS_UNUSED) {
  42047. zend_use_new_element_for_string();
  42048. } else {
  42049. zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC);
  42050. zend_wrong_string_offset(EXECUTE_DATA_C);
  42051. }
  42052. UNDEF_RESULT();
  42053. } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
  42054. goto assign_dim_op_convert_to_array;
  42055. } else {
  42056. if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
  42057. zend_use_scalar_as_array();
  42058. }
  42059. assign_dim_op_ret_null:
  42060. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42061. ZVAL_NULL(EX_VAR(opline->result.var));
  42062. }
  42063. }
  42064. value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
  42065. }
  42066. }
  42067. FREE_OP(free_op_data1);
  42068. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  42069. }
  42070. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_CV_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  42071. {
  42072. USE_OPLINE
  42073. zval *var_ptr;
  42074. zval *value;
  42075. SAVE_OPLINE();
  42076. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  42077. var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  42078. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
  42079. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42080. ZVAL_NULL(EX_VAR(opline->result.var));
  42081. }
  42082. } else {
  42083. ZVAL_DEREF(var_ptr);
  42084. binary_op(var_ptr, var_ptr, value);
  42085. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42086. ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
  42087. }
  42088. }
  42089. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42090. }
  42091. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  42092. {
  42093. #if 1 && IS_CV == IS_UNUSED
  42094. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42095. #else
  42096. # if 0 || IS_CV != IS_UNUSED
  42097. # if 0
  42098. /* opline->extended_value checks are specialized, don't need opline */
  42099. USE_OPLINE
  42100. # endif
  42101. if (EXPECTED(1)) {
  42102. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42103. }
  42104. if (EXPECTED(0)) {
  42105. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42106. }
  42107. # endif
  42108. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42109. #endif
  42110. }
  42111. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CV_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  42112. {
  42113. #if 1 && IS_CV == IS_UNUSED
  42114. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42115. #else
  42116. # if 0 || IS_CV != IS_UNUSED
  42117. # if 0
  42118. /* opline->extended_value checks are specialized, don't need opline */
  42119. USE_OPLINE
  42120. # endif
  42121. if (EXPECTED(0)) {
  42122. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42123. }
  42124. if (EXPECTED(1)) {
  42125. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42126. }
  42127. # endif
  42128. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42129. #endif
  42130. }
  42131. static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
  42132. {
  42133. #if 1 && IS_CV == IS_UNUSED
  42134. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42135. #else
  42136. # if 0 || IS_CV != IS_UNUSED
  42137. # if 0
  42138. /* opline->extended_value checks are specialized, don't need opline */
  42139. USE_OPLINE
  42140. # endif
  42141. if (EXPECTED(0)) {
  42142. ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42143. }
  42144. if (EXPECTED(0)) {
  42145. ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42146. }
  42147. # endif
  42148. ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42149. #endif
  42150. }
  42151. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42152. {
  42153. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42154. }
  42155. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42156. {
  42157. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42158. }
  42159. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42160. {
  42161. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42162. }
  42163. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42164. {
  42165. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42166. }
  42167. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42168. {
  42169. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42170. }
  42171. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42172. {
  42173. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42174. }
  42175. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42176. {
  42177. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42178. }
  42179. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42180. {
  42181. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42182. }
  42183. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42184. {
  42185. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42186. }
  42187. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42188. {
  42189. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42190. }
  42191. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42192. {
  42193. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42194. }
  42195. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42196. {
  42197. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42198. }
  42199. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42200. {
  42201. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42202. }
  42203. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42204. {
  42205. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42206. }
  42207. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42208. {
  42209. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42210. }
  42211. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42212. {
  42213. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42214. }
  42215. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42216. {
  42217. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42218. }
  42219. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42220. {
  42221. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42222. }
  42223. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42224. {
  42225. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42226. }
  42227. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42228. {
  42229. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42230. }
  42231. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42232. {
  42233. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42234. }
  42235. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42236. {
  42237. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42238. }
  42239. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42240. {
  42241. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42242. }
  42243. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42244. {
  42245. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42246. }
  42247. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42248. {
  42249. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42250. }
  42251. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42252. {
  42253. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42254. }
  42255. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42256. {
  42257. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42258. }
  42259. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42260. {
  42261. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42262. }
  42263. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42264. {
  42265. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42266. }
  42267. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42268. {
  42269. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42270. }
  42271. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42272. {
  42273. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42274. }
  42275. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42276. {
  42277. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42278. }
  42279. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42280. {
  42281. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42282. }
  42283. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42284. {
  42285. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42286. }
  42287. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42288. {
  42289. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42290. }
  42291. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42292. {
  42293. ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42294. }
  42295. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  42296. {
  42297. USE_OPLINE
  42298. zval *object;
  42299. zval *property;
  42300. zval *zptr;
  42301. SAVE_OPLINE();
  42302. object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  42303. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  42304. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42305. }
  42306. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  42307. do {
  42308. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  42309. if (Z_ISREF_P(object)) {
  42310. object = Z_REFVAL_P(object);
  42311. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  42312. goto pre_incdec_object;
  42313. }
  42314. }
  42315. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  42316. break;
  42317. }
  42318. }
  42319. /* here we are sure we are dealing with an object */
  42320. pre_incdec_object:
  42321. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  42322. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  42323. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  42324. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42325. ZVAL_NULL(EX_VAR(opline->result.var));
  42326. }
  42327. } else {
  42328. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  42329. if (inc) {
  42330. fast_long_increment_function(zptr);
  42331. } else {
  42332. fast_long_decrement_function(zptr);
  42333. }
  42334. } else {
  42335. ZVAL_DEREF(zptr);
  42336. if (inc) {
  42337. increment_function(zptr);
  42338. } else {
  42339. decrement_function(zptr);
  42340. }
  42341. }
  42342. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42343. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  42344. }
  42345. }
  42346. } else {
  42347. zend_pre_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  42348. }
  42349. } while (0);
  42350. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42351. }
  42352. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42353. {
  42354. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42355. }
  42356. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42357. {
  42358. ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42359. }
  42360. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
  42361. {
  42362. USE_OPLINE
  42363. zval *object;
  42364. zval *property;
  42365. zval *zptr;
  42366. SAVE_OPLINE();
  42367. object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  42368. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  42369. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42370. }
  42371. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  42372. do {
  42373. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  42374. if (Z_ISREF_P(object)) {
  42375. object = Z_REFVAL_P(object);
  42376. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  42377. goto post_incdec_object;
  42378. }
  42379. }
  42380. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  42381. break;
  42382. }
  42383. }
  42384. /* here we are sure we are dealing with an object */
  42385. post_incdec_object:
  42386. if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
  42387. && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
  42388. if (UNEXPECTED(Z_ISERROR_P(zptr))) {
  42389. ZVAL_NULL(EX_VAR(opline->result.var));
  42390. } else {
  42391. if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
  42392. ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr));
  42393. if (inc) {
  42394. fast_long_increment_function(zptr);
  42395. } else {
  42396. fast_long_decrement_function(zptr);
  42397. }
  42398. } else {
  42399. ZVAL_DEREF(zptr);
  42400. ZVAL_COPY(EX_VAR(opline->result.var), zptr);
  42401. if (inc) {
  42402. increment_function(zptr);
  42403. } else {
  42404. decrement_function(zptr);
  42405. }
  42406. }
  42407. }
  42408. } else {
  42409. zend_post_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC);
  42410. }
  42411. } while (0);
  42412. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42413. }
  42414. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42415. {
  42416. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42417. }
  42418. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42419. {
  42420. ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
  42421. }
  42422. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42423. {
  42424. USE_OPLINE
  42425. zval *container, *dim, *value, *result;
  42426. SAVE_OPLINE();
  42427. container = EX_VAR(opline->op1.var);
  42428. dim = EX_VAR(opline->op2.var);
  42429. if (IS_CV != IS_CONST) {
  42430. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  42431. fetch_dim_r_array:
  42432. value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
  42433. result = EX_VAR(opline->result.var);
  42434. ZVAL_COPY_DEREF(result, value);
  42435. } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
  42436. container = Z_REFVAL_P(container);
  42437. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  42438. goto fetch_dim_r_array;
  42439. } else {
  42440. goto fetch_dim_r_slow;
  42441. }
  42442. } else {
  42443. fetch_dim_r_slow:
  42444. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  42445. dim++;
  42446. }
  42447. zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
  42448. }
  42449. } else {
  42450. zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
  42451. }
  42452. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42453. }
  42454. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42455. {
  42456. USE_OPLINE
  42457. zend_free_op free_op1;
  42458. zval *container;
  42459. SAVE_OPLINE();
  42460. container = EX_VAR(opline->op1.var);
  42461. zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  42462. if (IS_CV == IS_VAR) {
  42463. zval *result = EX_VAR(opline->result.var);
  42464. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  42465. }
  42466. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42467. }
  42468. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42469. {
  42470. USE_OPLINE
  42471. zend_free_op free_op1;
  42472. zval *container;
  42473. SAVE_OPLINE();
  42474. container = EX_VAR(opline->op1.var);
  42475. zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  42476. if (IS_CV == IS_VAR) {
  42477. zval *result = EX_VAR(opline->result.var);
  42478. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  42479. }
  42480. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42481. }
  42482. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42483. {
  42484. USE_OPLINE
  42485. zval *container;
  42486. SAVE_OPLINE();
  42487. container = EX_VAR(opline->op1.var);
  42488. zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  42489. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42490. }
  42491. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42492. {
  42493. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  42494. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  42495. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42496. }
  42497. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42498. } else {
  42499. if (IS_CV == IS_UNUSED) {
  42500. ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42501. }
  42502. ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42503. }
  42504. }
  42505. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42506. {
  42507. USE_OPLINE
  42508. zend_free_op free_op1;
  42509. zval *container;
  42510. SAVE_OPLINE();
  42511. container = EX_VAR(opline->op1.var);
  42512. zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
  42513. if (IS_CV == IS_VAR) {
  42514. zval *result = EX_VAR(opline->result.var);
  42515. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  42516. }
  42517. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42518. }
  42519. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42520. {
  42521. USE_OPLINE
  42522. zval *container;
  42523. zval *offset;
  42524. void **cache_slot = NULL;
  42525. SAVE_OPLINE();
  42526. container = EX_VAR(opline->op1.var);
  42527. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  42528. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42529. }
  42530. offset = EX_VAR(opline->op2.var);
  42531. if (IS_CV == IS_CONST ||
  42532. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  42533. do {
  42534. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  42535. container = Z_REFVAL_P(container);
  42536. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  42537. break;
  42538. }
  42539. }
  42540. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  42541. GET_OP1_UNDEF_CV(container, BP_VAR_R);
  42542. }
  42543. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  42544. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  42545. }
  42546. goto fetch_obj_r_no_object;
  42547. } while (0);
  42548. }
  42549. /* here we are sure we are dealing with an object */
  42550. do {
  42551. zend_object *zobj = Z_OBJ_P(container);
  42552. zval *retval;
  42553. if (IS_CV == IS_CONST) {
  42554. cache_slot = CACHE_ADDR(opline->extended_value);
  42555. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  42556. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  42557. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  42558. retval = OBJ_PROP(zobj, prop_offset);
  42559. if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
  42560. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  42561. break;
  42562. }
  42563. } else if (EXPECTED(zobj->properties != NULL)) {
  42564. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  42565. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  42566. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  42567. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  42568. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  42569. (EXPECTED(p->key == Z_STR_P(offset)) ||
  42570. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  42571. EXPECTED(p->key != NULL) &&
  42572. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  42573. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
  42574. break;
  42575. }
  42576. }
  42577. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  42578. }
  42579. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  42580. if (EXPECTED(retval)) {
  42581. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  42582. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  42583. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  42584. break;
  42585. }
  42586. }
  42587. }
  42588. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
  42589. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  42590. }
  42591. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  42592. fetch_obj_r_no_object:
  42593. zend_wrong_property_read(offset);
  42594. ZVAL_NULL(EX_VAR(opline->result.var));
  42595. } else {
  42596. retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
  42597. if (retval != EX_VAR(opline->result.var)) {
  42598. ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
  42599. } else if (UNEXPECTED(Z_ISREF_P(retval))) {
  42600. zend_unwrap_reference(retval);
  42601. }
  42602. }
  42603. } while (0);
  42604. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42605. }
  42606. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42607. {
  42608. USE_OPLINE
  42609. zend_free_op free_op1;
  42610. zval *property, *container, *result;
  42611. SAVE_OPLINE();
  42612. container = EX_VAR(opline->op1.var);
  42613. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  42614. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42615. }
  42616. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  42617. result = EX_VAR(opline->result.var);
  42618. zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC);
  42619. if (IS_CV == IS_VAR) {
  42620. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  42621. }
  42622. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42623. }
  42624. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42625. {
  42626. USE_OPLINE
  42627. zend_free_op free_op1;
  42628. zval *property, *container, *result;
  42629. SAVE_OPLINE();
  42630. container = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
  42631. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  42632. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42633. }
  42634. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  42635. result = EX_VAR(opline->result.var);
  42636. zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC);
  42637. if (IS_CV == IS_VAR) {
  42638. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  42639. }
  42640. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42641. }
  42642. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42643. {
  42644. USE_OPLINE
  42645. zval *container;
  42646. zval *offset;
  42647. void **cache_slot = NULL;
  42648. SAVE_OPLINE();
  42649. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  42650. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  42651. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42652. }
  42653. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  42654. if (IS_CV == IS_CONST ||
  42655. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  42656. do {
  42657. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  42658. container = Z_REFVAL_P(container);
  42659. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  42660. break;
  42661. }
  42662. }
  42663. goto fetch_obj_is_no_object;
  42664. } while (0);
  42665. }
  42666. /* here we are sure we are dealing with an object */
  42667. do {
  42668. zend_object *zobj = Z_OBJ_P(container);
  42669. zval *retval;
  42670. if (IS_CV == IS_CONST) {
  42671. cache_slot = CACHE_ADDR(opline->extended_value);
  42672. if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
  42673. uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
  42674. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  42675. retval = OBJ_PROP(zobj, prop_offset);
  42676. if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
  42677. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  42678. break;
  42679. }
  42680. } else if (EXPECTED(zobj->properties != NULL)) {
  42681. if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
  42682. uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
  42683. if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
  42684. Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
  42685. if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
  42686. (EXPECTED(p->key == Z_STR_P(offset)) ||
  42687. (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
  42688. EXPECTED(p->key != NULL) &&
  42689. EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
  42690. ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
  42691. break;
  42692. }
  42693. }
  42694. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
  42695. }
  42696. retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
  42697. if (EXPECTED(retval)) {
  42698. uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
  42699. CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
  42700. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  42701. break;
  42702. }
  42703. }
  42704. }
  42705. }
  42706. if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
  42707. fetch_obj_is_no_object:
  42708. ZVAL_NULL(EX_VAR(opline->result.var));
  42709. } else {
  42710. retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
  42711. if (retval != EX_VAR(opline->result.var)) {
  42712. ZVAL_COPY(EX_VAR(opline->result.var), retval);
  42713. }
  42714. }
  42715. } while (0);
  42716. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42717. }
  42718. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42719. {
  42720. if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
  42721. /* Behave like FETCH_OBJ_W */
  42722. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  42723. ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42724. }
  42725. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42726. } else {
  42727. ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42728. }
  42729. }
  42730. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42731. {
  42732. USE_OPLINE
  42733. zend_free_op free_op1;
  42734. zval *container, *property, *result;
  42735. SAVE_OPLINE();
  42736. container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
  42737. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  42738. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42739. }
  42740. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  42741. result = EX_VAR(opline->result.var);
  42742. zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC);
  42743. if (IS_CV == IS_VAR) {
  42744. FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
  42745. }
  42746. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  42747. }
  42748. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42749. {
  42750. USE_OPLINE
  42751. zval *object, *property, *value, tmp;
  42752. SAVE_OPLINE();
  42753. object = EX_VAR(opline->op1.var);
  42754. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  42755. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42756. }
  42757. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  42758. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  42759. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  42760. if (Z_ISREF_P(object)) {
  42761. object = Z_REFVAL_P(object);
  42762. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  42763. goto assign_object;
  42764. }
  42765. }
  42766. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  42767. goto exit_assign_obj;
  42768. }
  42769. }
  42770. assign_object:
  42771. if (IS_CV == IS_CONST &&
  42772. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  42773. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  42774. zend_object *zobj = Z_OBJ_P(object);
  42775. zval *property_val;
  42776. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  42777. property_val = OBJ_PROP(zobj, prop_offset);
  42778. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  42779. fast_assign_obj:
  42780. value = zend_assign_to_variable(property_val, value, IS_CONST);
  42781. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42782. ZVAL_COPY(EX_VAR(opline->result.var), value);
  42783. }
  42784. goto exit_assign_obj;
  42785. }
  42786. } else {
  42787. if (EXPECTED(zobj->properties != NULL)) {
  42788. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  42789. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  42790. GC_DELREF(zobj->properties);
  42791. }
  42792. zobj->properties = zend_array_dup(zobj->properties);
  42793. }
  42794. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  42795. if (property_val) {
  42796. goto fast_assign_obj;
  42797. }
  42798. }
  42799. if (!zobj->ce->__set) {
  42800. if (EXPECTED(zobj->properties == NULL)) {
  42801. rebuild_object_properties(zobj);
  42802. }
  42803. if (IS_CONST == IS_CONST) {
  42804. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  42805. Z_ADDREF_P(value);
  42806. }
  42807. } else if (IS_CONST != IS_TMP_VAR) {
  42808. if (Z_ISREF_P(value)) {
  42809. if (IS_CONST == IS_VAR) {
  42810. zend_reference *ref = Z_REF_P(value);
  42811. if (GC_DELREF(ref) == 0) {
  42812. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  42813. efree_size(ref, sizeof(zend_reference));
  42814. value = &tmp;
  42815. } else {
  42816. value = Z_REFVAL_P(value);
  42817. Z_TRY_ADDREF_P(value);
  42818. }
  42819. } else {
  42820. value = Z_REFVAL_P(value);
  42821. Z_TRY_ADDREF_P(value);
  42822. }
  42823. } else if (IS_CONST == IS_CV) {
  42824. Z_TRY_ADDREF_P(value);
  42825. }
  42826. }
  42827. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  42828. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42829. ZVAL_COPY(EX_VAR(opline->result.var), value);
  42830. }
  42831. goto exit_assign_obj;
  42832. }
  42833. }
  42834. }
  42835. if (!Z_OBJ_HT_P(object)->write_property) {
  42836. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  42837. goto exit_assign_obj;
  42838. }
  42839. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  42840. ZVAL_DEREF(value);
  42841. }
  42842. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  42843. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42844. ZVAL_COPY(EX_VAR(opline->result.var), value);
  42845. }
  42846. exit_assign_obj:
  42847. /* assign_obj has two opcodes! */
  42848. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  42849. }
  42850. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42851. {
  42852. USE_OPLINE
  42853. zend_free_op free_op_data;
  42854. zval *object, *property, *value, tmp;
  42855. SAVE_OPLINE();
  42856. object = EX_VAR(opline->op1.var);
  42857. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  42858. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42859. }
  42860. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  42861. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  42862. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  42863. if (Z_ISREF_P(object)) {
  42864. object = Z_REFVAL_P(object);
  42865. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  42866. goto assign_object;
  42867. }
  42868. }
  42869. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  42870. zval_ptr_dtor_nogc(free_op_data);
  42871. goto exit_assign_obj;
  42872. }
  42873. }
  42874. assign_object:
  42875. if (IS_CV == IS_CONST &&
  42876. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  42877. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  42878. zend_object *zobj = Z_OBJ_P(object);
  42879. zval *property_val;
  42880. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  42881. property_val = OBJ_PROP(zobj, prop_offset);
  42882. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  42883. fast_assign_obj:
  42884. value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
  42885. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42886. ZVAL_COPY(EX_VAR(opline->result.var), value);
  42887. }
  42888. goto exit_assign_obj;
  42889. }
  42890. } else {
  42891. if (EXPECTED(zobj->properties != NULL)) {
  42892. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  42893. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  42894. GC_DELREF(zobj->properties);
  42895. }
  42896. zobj->properties = zend_array_dup(zobj->properties);
  42897. }
  42898. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  42899. if (property_val) {
  42900. goto fast_assign_obj;
  42901. }
  42902. }
  42903. if (!zobj->ce->__set) {
  42904. if (EXPECTED(zobj->properties == NULL)) {
  42905. rebuild_object_properties(zobj);
  42906. }
  42907. if (IS_TMP_VAR == IS_CONST) {
  42908. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  42909. Z_ADDREF_P(value);
  42910. }
  42911. } else if (IS_TMP_VAR != IS_TMP_VAR) {
  42912. if (Z_ISREF_P(value)) {
  42913. if (IS_TMP_VAR == IS_VAR) {
  42914. zend_reference *ref = Z_REF_P(value);
  42915. if (GC_DELREF(ref) == 0) {
  42916. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  42917. efree_size(ref, sizeof(zend_reference));
  42918. value = &tmp;
  42919. } else {
  42920. value = Z_REFVAL_P(value);
  42921. Z_TRY_ADDREF_P(value);
  42922. }
  42923. } else {
  42924. value = Z_REFVAL_P(value);
  42925. Z_TRY_ADDREF_P(value);
  42926. }
  42927. } else if (IS_TMP_VAR == IS_CV) {
  42928. Z_TRY_ADDREF_P(value);
  42929. }
  42930. }
  42931. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  42932. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42933. ZVAL_COPY(EX_VAR(opline->result.var), value);
  42934. }
  42935. goto exit_assign_obj;
  42936. }
  42937. }
  42938. }
  42939. if (!Z_OBJ_HT_P(object)->write_property) {
  42940. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  42941. zval_ptr_dtor_nogc(free_op_data);
  42942. goto exit_assign_obj;
  42943. }
  42944. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  42945. ZVAL_DEREF(value);
  42946. }
  42947. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  42948. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42949. ZVAL_COPY(EX_VAR(opline->result.var), value);
  42950. }
  42951. zval_ptr_dtor_nogc(free_op_data);
  42952. exit_assign_obj:
  42953. /* assign_obj has two opcodes! */
  42954. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  42955. }
  42956. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  42957. {
  42958. USE_OPLINE
  42959. zend_free_op free_op_data;
  42960. zval *object, *property, *value, tmp;
  42961. SAVE_OPLINE();
  42962. object = EX_VAR(opline->op1.var);
  42963. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  42964. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  42965. }
  42966. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  42967. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  42968. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  42969. if (Z_ISREF_P(object)) {
  42970. object = Z_REFVAL_P(object);
  42971. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  42972. goto assign_object;
  42973. }
  42974. }
  42975. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  42976. zval_ptr_dtor_nogc(free_op_data);
  42977. goto exit_assign_obj;
  42978. }
  42979. }
  42980. assign_object:
  42981. if (IS_CV == IS_CONST &&
  42982. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  42983. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  42984. zend_object *zobj = Z_OBJ_P(object);
  42985. zval *property_val;
  42986. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  42987. property_val = OBJ_PROP(zobj, prop_offset);
  42988. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  42989. fast_assign_obj:
  42990. value = zend_assign_to_variable(property_val, value, IS_VAR);
  42991. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  42992. ZVAL_COPY(EX_VAR(opline->result.var), value);
  42993. }
  42994. goto exit_assign_obj;
  42995. }
  42996. } else {
  42997. if (EXPECTED(zobj->properties != NULL)) {
  42998. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  42999. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  43000. GC_DELREF(zobj->properties);
  43001. }
  43002. zobj->properties = zend_array_dup(zobj->properties);
  43003. }
  43004. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  43005. if (property_val) {
  43006. goto fast_assign_obj;
  43007. }
  43008. }
  43009. if (!zobj->ce->__set) {
  43010. if (EXPECTED(zobj->properties == NULL)) {
  43011. rebuild_object_properties(zobj);
  43012. }
  43013. if (IS_VAR == IS_CONST) {
  43014. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  43015. Z_ADDREF_P(value);
  43016. }
  43017. } else if (IS_VAR != IS_TMP_VAR) {
  43018. if (Z_ISREF_P(value)) {
  43019. if (IS_VAR == IS_VAR) {
  43020. zend_reference *ref = Z_REF_P(value);
  43021. if (GC_DELREF(ref) == 0) {
  43022. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  43023. efree_size(ref, sizeof(zend_reference));
  43024. value = &tmp;
  43025. } else {
  43026. value = Z_REFVAL_P(value);
  43027. Z_TRY_ADDREF_P(value);
  43028. }
  43029. } else {
  43030. value = Z_REFVAL_P(value);
  43031. Z_TRY_ADDREF_P(value);
  43032. }
  43033. } else if (IS_VAR == IS_CV) {
  43034. Z_TRY_ADDREF_P(value);
  43035. }
  43036. }
  43037. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  43038. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43039. ZVAL_COPY(EX_VAR(opline->result.var), value);
  43040. }
  43041. goto exit_assign_obj;
  43042. }
  43043. }
  43044. }
  43045. if (!Z_OBJ_HT_P(object)->write_property) {
  43046. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  43047. zval_ptr_dtor_nogc(free_op_data);
  43048. goto exit_assign_obj;
  43049. }
  43050. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  43051. ZVAL_DEREF(value);
  43052. }
  43053. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  43054. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43055. ZVAL_COPY(EX_VAR(opline->result.var), value);
  43056. }
  43057. zval_ptr_dtor_nogc(free_op_data);
  43058. exit_assign_obj:
  43059. /* assign_obj has two opcodes! */
  43060. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  43061. }
  43062. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43063. {
  43064. USE_OPLINE
  43065. zval *object, *property, *value, tmp;
  43066. SAVE_OPLINE();
  43067. object = EX_VAR(opline->op1.var);
  43068. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  43069. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  43070. }
  43071. property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43072. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  43073. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  43074. if (Z_ISREF_P(object)) {
  43075. object = Z_REFVAL_P(object);
  43076. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  43077. goto assign_object;
  43078. }
  43079. }
  43080. if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) {
  43081. goto exit_assign_obj;
  43082. }
  43083. }
  43084. assign_object:
  43085. if (IS_CV == IS_CONST &&
  43086. EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
  43087. uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
  43088. zend_object *zobj = Z_OBJ_P(object);
  43089. zval *property_val;
  43090. if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
  43091. property_val = OBJ_PROP(zobj, prop_offset);
  43092. if (Z_TYPE_P(property_val) != IS_UNDEF) {
  43093. fast_assign_obj:
  43094. value = zend_assign_to_variable(property_val, value, IS_CV);
  43095. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43096. ZVAL_COPY(EX_VAR(opline->result.var), value);
  43097. }
  43098. goto exit_assign_obj;
  43099. }
  43100. } else {
  43101. if (EXPECTED(zobj->properties != NULL)) {
  43102. if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
  43103. if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
  43104. GC_DELREF(zobj->properties);
  43105. }
  43106. zobj->properties = zend_array_dup(zobj->properties);
  43107. }
  43108. property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
  43109. if (property_val) {
  43110. goto fast_assign_obj;
  43111. }
  43112. }
  43113. if (!zobj->ce->__set) {
  43114. if (EXPECTED(zobj->properties == NULL)) {
  43115. rebuild_object_properties(zobj);
  43116. }
  43117. if (IS_CV == IS_CONST) {
  43118. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
  43119. Z_ADDREF_P(value);
  43120. }
  43121. } else if (IS_CV != IS_TMP_VAR) {
  43122. if (Z_ISREF_P(value)) {
  43123. if (IS_CV == IS_VAR) {
  43124. zend_reference *ref = Z_REF_P(value);
  43125. if (GC_DELREF(ref) == 0) {
  43126. ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
  43127. efree_size(ref, sizeof(zend_reference));
  43128. value = &tmp;
  43129. } else {
  43130. value = Z_REFVAL_P(value);
  43131. Z_TRY_ADDREF_P(value);
  43132. }
  43133. } else {
  43134. value = Z_REFVAL_P(value);
  43135. Z_TRY_ADDREF_P(value);
  43136. }
  43137. } else if (IS_CV == IS_CV) {
  43138. Z_TRY_ADDREF_P(value);
  43139. }
  43140. }
  43141. zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
  43142. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43143. ZVAL_COPY(EX_VAR(opline->result.var), value);
  43144. }
  43145. goto exit_assign_obj;
  43146. }
  43147. }
  43148. }
  43149. if (!Z_OBJ_HT_P(object)->write_property) {
  43150. zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC);
  43151. goto exit_assign_obj;
  43152. }
  43153. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  43154. ZVAL_DEREF(value);
  43155. }
  43156. Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
  43157. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43158. ZVAL_COPY(EX_VAR(opline->result.var), value);
  43159. }
  43160. exit_assign_obj:
  43161. /* assign_obj has two opcodes! */
  43162. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  43163. }
  43164. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43165. {
  43166. USE_OPLINE
  43167. zval *object_ptr;
  43168. zend_free_op free_op_data;
  43169. zval *value;
  43170. zval *variable_ptr;
  43171. zval *dim;
  43172. SAVE_OPLINE();
  43173. object_ptr = EX_VAR(opline->op1.var);
  43174. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  43175. try_assign_dim_array:
  43176. SEPARATE_ARRAY(object_ptr);
  43177. if (IS_CV == IS_UNUSED) {
  43178. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  43179. if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
  43180. ZVAL_DEREF(value);
  43181. }
  43182. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  43183. if (UNEXPECTED(variable_ptr == NULL)) {
  43184. zend_cannot_add_element();
  43185. goto assign_dim_error;
  43186. } else if (IS_CONST == IS_CV) {
  43187. if (Z_REFCOUNTED_P(value)) {
  43188. Z_ADDREF_P(value);
  43189. }
  43190. } else if (IS_CONST == IS_VAR) {
  43191. if (value != free_op_data) {
  43192. if (Z_REFCOUNTED_P(value)) {
  43193. Z_ADDREF_P(value);
  43194. }
  43195. }
  43196. } else if (IS_CONST == IS_CONST) {
  43197. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  43198. Z_ADDREF_P(value);
  43199. }
  43200. }
  43201. } else {
  43202. dim = EX_VAR(opline->op2.var);
  43203. if (IS_CV == IS_CONST) {
  43204. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  43205. } else {
  43206. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  43207. }
  43208. if (UNEXPECTED(variable_ptr == NULL)) {
  43209. goto assign_dim_error;
  43210. }
  43211. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  43212. value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
  43213. }
  43214. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43215. ZVAL_COPY(EX_VAR(opline->result.var), value);
  43216. }
  43217. } else {
  43218. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  43219. object_ptr = Z_REFVAL_P(object_ptr);
  43220. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  43221. goto try_assign_dim_array;
  43222. }
  43223. }
  43224. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  43225. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43226. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  43227. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  43228. dim++;
  43229. }
  43230. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  43231. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  43232. if (IS_CV == IS_UNUSED) {
  43233. zend_use_new_element_for_string();
  43234. UNDEF_RESULT();
  43235. HANDLE_EXCEPTION();
  43236. } else {
  43237. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43238. value = RT_CONSTANT((opline+1), (opline+1)->op1);
  43239. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  43240. }
  43241. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  43242. ZVAL_ARR(object_ptr, zend_new_array(8));
  43243. goto try_assign_dim_array;
  43244. } else {
  43245. if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  43246. zend_use_scalar_as_array();
  43247. }
  43248. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43249. assign_dim_error:
  43250. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43251. ZVAL_NULL(EX_VAR(opline->result.var));
  43252. }
  43253. }
  43254. }
  43255. if (IS_CV != IS_UNUSED) {
  43256. }
  43257. /* assign_dim has two opcodes! */
  43258. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  43259. }
  43260. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43261. {
  43262. USE_OPLINE
  43263. zval *object_ptr;
  43264. zend_free_op free_op_data;
  43265. zval *value;
  43266. zval *variable_ptr;
  43267. zval *dim;
  43268. SAVE_OPLINE();
  43269. object_ptr = EX_VAR(opline->op1.var);
  43270. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  43271. try_assign_dim_array:
  43272. SEPARATE_ARRAY(object_ptr);
  43273. if (IS_CV == IS_UNUSED) {
  43274. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  43275. if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
  43276. ZVAL_DEREF(value);
  43277. }
  43278. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  43279. if (UNEXPECTED(variable_ptr == NULL)) {
  43280. zval_ptr_dtor_nogc(free_op_data);
  43281. zend_cannot_add_element();
  43282. goto assign_dim_error;
  43283. } else if (IS_TMP_VAR == IS_CV) {
  43284. if (Z_REFCOUNTED_P(value)) {
  43285. Z_ADDREF_P(value);
  43286. }
  43287. } else if (IS_TMP_VAR == IS_VAR) {
  43288. if (value != free_op_data) {
  43289. if (Z_REFCOUNTED_P(value)) {
  43290. Z_ADDREF_P(value);
  43291. }
  43292. zval_ptr_dtor_nogc(free_op_data);
  43293. }
  43294. } else if (IS_TMP_VAR == IS_CONST) {
  43295. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  43296. Z_ADDREF_P(value);
  43297. }
  43298. }
  43299. } else {
  43300. dim = EX_VAR(opline->op2.var);
  43301. if (IS_CV == IS_CONST) {
  43302. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  43303. } else {
  43304. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  43305. }
  43306. if (UNEXPECTED(variable_ptr == NULL)) {
  43307. goto assign_dim_error;
  43308. }
  43309. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  43310. value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
  43311. }
  43312. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43313. ZVAL_COPY(EX_VAR(opline->result.var), value);
  43314. }
  43315. } else {
  43316. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  43317. object_ptr = Z_REFVAL_P(object_ptr);
  43318. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  43319. goto try_assign_dim_array;
  43320. }
  43321. }
  43322. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  43323. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43324. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  43325. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  43326. dim++;
  43327. }
  43328. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  43329. zval_ptr_dtor_nogc(free_op_data);
  43330. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  43331. if (IS_CV == IS_UNUSED) {
  43332. zend_use_new_element_for_string();
  43333. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  43334. UNDEF_RESULT();
  43335. HANDLE_EXCEPTION();
  43336. } else {
  43337. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43338. value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  43339. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  43340. zval_ptr_dtor_nogc(free_op_data);
  43341. }
  43342. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  43343. ZVAL_ARR(object_ptr, zend_new_array(8));
  43344. goto try_assign_dim_array;
  43345. } else {
  43346. if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  43347. zend_use_scalar_as_array();
  43348. }
  43349. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43350. assign_dim_error:
  43351. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  43352. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43353. ZVAL_NULL(EX_VAR(opline->result.var));
  43354. }
  43355. }
  43356. }
  43357. if (IS_CV != IS_UNUSED) {
  43358. }
  43359. /* assign_dim has two opcodes! */
  43360. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  43361. }
  43362. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43363. {
  43364. USE_OPLINE
  43365. zval *object_ptr;
  43366. zend_free_op free_op_data;
  43367. zval *value;
  43368. zval *variable_ptr;
  43369. zval *dim;
  43370. SAVE_OPLINE();
  43371. object_ptr = EX_VAR(opline->op1.var);
  43372. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  43373. try_assign_dim_array:
  43374. SEPARATE_ARRAY(object_ptr);
  43375. if (IS_CV == IS_UNUSED) {
  43376. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  43377. if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
  43378. ZVAL_DEREF(value);
  43379. }
  43380. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  43381. if (UNEXPECTED(variable_ptr == NULL)) {
  43382. zval_ptr_dtor_nogc(free_op_data);
  43383. zend_cannot_add_element();
  43384. goto assign_dim_error;
  43385. } else if (IS_VAR == IS_CV) {
  43386. if (Z_REFCOUNTED_P(value)) {
  43387. Z_ADDREF_P(value);
  43388. }
  43389. } else if (IS_VAR == IS_VAR) {
  43390. if (value != free_op_data) {
  43391. if (Z_REFCOUNTED_P(value)) {
  43392. Z_ADDREF_P(value);
  43393. }
  43394. zval_ptr_dtor_nogc(free_op_data);
  43395. }
  43396. } else if (IS_VAR == IS_CONST) {
  43397. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  43398. Z_ADDREF_P(value);
  43399. }
  43400. }
  43401. } else {
  43402. dim = EX_VAR(opline->op2.var);
  43403. if (IS_CV == IS_CONST) {
  43404. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  43405. } else {
  43406. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  43407. }
  43408. if (UNEXPECTED(variable_ptr == NULL)) {
  43409. goto assign_dim_error;
  43410. }
  43411. value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  43412. value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
  43413. }
  43414. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43415. ZVAL_COPY(EX_VAR(opline->result.var), value);
  43416. }
  43417. } else {
  43418. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  43419. object_ptr = Z_REFVAL_P(object_ptr);
  43420. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  43421. goto try_assign_dim_array;
  43422. }
  43423. }
  43424. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  43425. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43426. value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  43427. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  43428. dim++;
  43429. }
  43430. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  43431. zval_ptr_dtor_nogc(free_op_data);
  43432. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  43433. if (IS_CV == IS_UNUSED) {
  43434. zend_use_new_element_for_string();
  43435. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  43436. UNDEF_RESULT();
  43437. HANDLE_EXCEPTION();
  43438. } else {
  43439. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43440. value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
  43441. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  43442. zval_ptr_dtor_nogc(free_op_data);
  43443. }
  43444. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  43445. ZVAL_ARR(object_ptr, zend_new_array(8));
  43446. goto try_assign_dim_array;
  43447. } else {
  43448. if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  43449. zend_use_scalar_as_array();
  43450. }
  43451. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43452. assign_dim_error:
  43453. zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
  43454. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43455. ZVAL_NULL(EX_VAR(opline->result.var));
  43456. }
  43457. }
  43458. }
  43459. if (IS_CV != IS_UNUSED) {
  43460. }
  43461. /* assign_dim has two opcodes! */
  43462. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  43463. }
  43464. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43465. {
  43466. USE_OPLINE
  43467. zval *object_ptr;
  43468. zend_free_op free_op_data;
  43469. zval *value;
  43470. zval *variable_ptr;
  43471. zval *dim;
  43472. SAVE_OPLINE();
  43473. object_ptr = EX_VAR(opline->op1.var);
  43474. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  43475. try_assign_dim_array:
  43476. SEPARATE_ARRAY(object_ptr);
  43477. if (IS_CV == IS_UNUSED) {
  43478. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  43479. if (IS_CV == IS_CV || IS_CV == IS_VAR) {
  43480. ZVAL_DEREF(value);
  43481. }
  43482. variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
  43483. if (UNEXPECTED(variable_ptr == NULL)) {
  43484. zend_cannot_add_element();
  43485. goto assign_dim_error;
  43486. } else if (IS_CV == IS_CV) {
  43487. if (Z_REFCOUNTED_P(value)) {
  43488. Z_ADDREF_P(value);
  43489. }
  43490. } else if (IS_CV == IS_VAR) {
  43491. if (value != free_op_data) {
  43492. if (Z_REFCOUNTED_P(value)) {
  43493. Z_ADDREF_P(value);
  43494. }
  43495. }
  43496. } else if (IS_CV == IS_CONST) {
  43497. if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
  43498. Z_ADDREF_P(value);
  43499. }
  43500. }
  43501. } else {
  43502. dim = EX_VAR(opline->op2.var);
  43503. if (IS_CV == IS_CONST) {
  43504. variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  43505. } else {
  43506. variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
  43507. }
  43508. if (UNEXPECTED(variable_ptr == NULL)) {
  43509. goto assign_dim_error;
  43510. }
  43511. value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  43512. value = zend_assign_to_variable(variable_ptr, value, IS_CV);
  43513. }
  43514. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43515. ZVAL_COPY(EX_VAR(opline->result.var), value);
  43516. }
  43517. } else {
  43518. if (EXPECTED(Z_ISREF_P(object_ptr))) {
  43519. object_ptr = Z_REFVAL_P(object_ptr);
  43520. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
  43521. goto try_assign_dim_array;
  43522. }
  43523. }
  43524. if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
  43525. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43526. value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  43527. if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
  43528. dim++;
  43529. }
  43530. zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  43531. } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
  43532. if (IS_CV == IS_UNUSED) {
  43533. zend_use_new_element_for_string();
  43534. UNDEF_RESULT();
  43535. HANDLE_EXCEPTION();
  43536. } else {
  43537. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43538. value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
  43539. zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
  43540. }
  43541. } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
  43542. ZVAL_ARR(object_ptr, zend_new_array(8));
  43543. goto try_assign_dim_array;
  43544. } else {
  43545. if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
  43546. zend_use_scalar_as_array();
  43547. }
  43548. dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43549. assign_dim_error:
  43550. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43551. ZVAL_NULL(EX_VAR(opline->result.var));
  43552. }
  43553. }
  43554. }
  43555. if (IS_CV != IS_UNUSED) {
  43556. }
  43557. /* assign_dim has two opcodes! */
  43558. ZEND_VM_NEXT_OPCODE_EX(1, 2);
  43559. }
  43560. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43561. {
  43562. USE_OPLINE
  43563. zval *value;
  43564. zval *variable_ptr;
  43565. SAVE_OPLINE();
  43566. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43567. variable_ptr = EX_VAR(opline->op1.var);
  43568. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  43569. if (UNEXPECTED(0)) {
  43570. ZVAL_NULL(EX_VAR(opline->result.var));
  43571. }
  43572. } else {
  43573. value = zend_assign_to_variable(variable_ptr, value, IS_CV);
  43574. if (UNEXPECTED(0)) {
  43575. ZVAL_COPY(EX_VAR(opline->result.var), value);
  43576. }
  43577. /* zend_assign_to_variable() always takes care of op2, never free it! */
  43578. }
  43579. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43580. }
  43581. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43582. {
  43583. USE_OPLINE
  43584. zval *value;
  43585. zval *variable_ptr;
  43586. SAVE_OPLINE();
  43587. value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  43588. variable_ptr = EX_VAR(opline->op1.var);
  43589. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  43590. if (UNEXPECTED(1)) {
  43591. ZVAL_NULL(EX_VAR(opline->result.var));
  43592. }
  43593. } else {
  43594. value = zend_assign_to_variable(variable_ptr, value, IS_CV);
  43595. if (UNEXPECTED(1)) {
  43596. ZVAL_COPY(EX_VAR(opline->result.var), value);
  43597. }
  43598. /* zend_assign_to_variable() always takes care of op2, never free it! */
  43599. }
  43600. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43601. }
  43602. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43603. {
  43604. USE_OPLINE
  43605. zval *variable_ptr;
  43606. zval *value_ptr;
  43607. SAVE_OPLINE();
  43608. value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
  43609. variable_ptr = EX_VAR(opline->op1.var);
  43610. if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
  43611. variable_ptr = &EG(uninitialized_zval);
  43612. } else if (IS_CV == IS_VAR &&
  43613. UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
  43614. zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
  43615. UNDEF_RESULT();
  43616. HANDLE_EXCEPTION();
  43617. } else if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
  43618. variable_ptr = &EG(uninitialized_zval);
  43619. } else if (IS_CV == IS_VAR &&
  43620. opline->extended_value == ZEND_RETURNS_FUNCTION &&
  43621. UNEXPECTED(!Z_ISREF_P(value_ptr))) {
  43622. if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(variable_ptr, value_ptr, IS_CV OPLINE_CC EXECUTE_DATA_CC))) {
  43623. UNDEF_RESULT();
  43624. HANDLE_EXCEPTION();
  43625. }
  43626. /* op2 freed by assign_to_variable */
  43627. ZEND_VM_NEXT_OPCODE();
  43628. } else {
  43629. zend_assign_to_variable_reference(variable_ptr, value_ptr);
  43630. }
  43631. if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
  43632. ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
  43633. }
  43634. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43635. }
  43636. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43637. {
  43638. USE_OPLINE
  43639. zval *op1, *op2;
  43640. zend_string *op1_str, *op2_str, *str;
  43641. op1 = EX_VAR(opline->op1.var);
  43642. op2 = EX_VAR(opline->op2.var);
  43643. if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
  43644. (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
  43645. zend_string *op1_str = Z_STR_P(op1);
  43646. zend_string *op2_str = Z_STR_P(op2);
  43647. zend_string *str;
  43648. if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  43649. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  43650. ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
  43651. } else {
  43652. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  43653. }
  43654. } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  43655. if (IS_CV == IS_CONST || IS_CV == IS_CV) {
  43656. ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
  43657. } else {
  43658. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  43659. }
  43660. } else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
  43661. !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
  43662. size_t len = ZSTR_LEN(op1_str);
  43663. str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
  43664. memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  43665. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  43666. } else {
  43667. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  43668. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  43669. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  43670. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  43671. }
  43672. ZEND_VM_NEXT_OPCODE();
  43673. }
  43674. SAVE_OPLINE();
  43675. if (IS_CV == IS_CONST) {
  43676. op1_str = Z_STR_P(op1);
  43677. } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
  43678. op1_str = zend_string_copy(Z_STR_P(op1));
  43679. } else {
  43680. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
  43681. GET_OP1_UNDEF_CV(op1, BP_VAR_R);
  43682. }
  43683. op1_str = zval_get_string_func(op1);
  43684. }
  43685. if (IS_CV == IS_CONST) {
  43686. op2_str = Z_STR_P(op2);
  43687. } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
  43688. op2_str = zend_string_copy(Z_STR_P(op2));
  43689. } else {
  43690. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
  43691. GET_OP2_UNDEF_CV(op2, BP_VAR_R);
  43692. }
  43693. op2_str = zval_get_string_func(op2);
  43694. }
  43695. do {
  43696. if (IS_CV != IS_CONST) {
  43697. if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
  43698. if (IS_CV == IS_CONST) {
  43699. if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
  43700. GC_ADDREF(op2_str);
  43701. }
  43702. }
  43703. ZVAL_STR(EX_VAR(opline->result.var), op2_str);
  43704. zend_string_release_ex(op1_str, 0);
  43705. break;
  43706. }
  43707. }
  43708. if (IS_CV != IS_CONST) {
  43709. if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
  43710. if (IS_CV == IS_CONST) {
  43711. if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
  43712. GC_ADDREF(op1_str);
  43713. }
  43714. }
  43715. ZVAL_STR(EX_VAR(opline->result.var), op1_str);
  43716. zend_string_release_ex(op2_str, 0);
  43717. break;
  43718. }
  43719. }
  43720. str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
  43721. memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
  43722. memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
  43723. ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
  43724. if (IS_CV != IS_CONST) {
  43725. zend_string_release_ex(op1_str, 0);
  43726. }
  43727. if (IS_CV != IS_CONST) {
  43728. zend_string_release_ex(op2_str, 0);
  43729. }
  43730. } while (0);
  43731. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43732. }
  43733. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43734. {
  43735. USE_OPLINE
  43736. zval *function_name;
  43737. zend_free_op free_op1;
  43738. zval *object;
  43739. zend_function *fbc;
  43740. zend_class_entry *called_scope;
  43741. zend_object *obj;
  43742. zend_execute_data *call;
  43743. uint32_t call_info;
  43744. SAVE_OPLINE();
  43745. object = EX_VAR(opline->op1.var);
  43746. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  43747. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  43748. }
  43749. if (IS_CV != IS_CONST) {
  43750. function_name = EX_VAR(opline->op2.var);
  43751. }
  43752. if (IS_CV != IS_CONST &&
  43753. UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
  43754. do {
  43755. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
  43756. function_name = Z_REFVAL_P(function_name);
  43757. if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
  43758. break;
  43759. }
  43760. } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
  43761. GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
  43762. if (UNEXPECTED(EG(exception) != NULL)) {
  43763. HANDLE_EXCEPTION();
  43764. }
  43765. }
  43766. zend_throw_error(NULL, "Method name must be a string");
  43767. HANDLE_EXCEPTION();
  43768. } while (0);
  43769. }
  43770. if (IS_CV != IS_UNUSED) {
  43771. do {
  43772. if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
  43773. if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
  43774. object = Z_REFVAL_P(object);
  43775. if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
  43776. break;
  43777. }
  43778. }
  43779. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
  43780. object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
  43781. if (UNEXPECTED(EG(exception) != NULL)) {
  43782. if (IS_CV != IS_CONST) {
  43783. }
  43784. HANDLE_EXCEPTION();
  43785. }
  43786. }
  43787. if (IS_CV == IS_CONST) {
  43788. function_name = EX_VAR(opline->op2.var);
  43789. }
  43790. zend_invalid_method_call(object, function_name);
  43791. HANDLE_EXCEPTION();
  43792. }
  43793. } while (0);
  43794. }
  43795. obj = Z_OBJ_P(object);
  43796. called_scope = obj->ce;
  43797. if (IS_CV == IS_CONST &&
  43798. EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
  43799. fbc = CACHED_PTR(opline->result.num + sizeof(void*));
  43800. } else {
  43801. zend_object *orig_obj = obj;
  43802. if (UNEXPECTED(obj->handlers->get_method == NULL)) {
  43803. zend_throw_error(NULL, "Object does not support method calls");
  43804. HANDLE_EXCEPTION();
  43805. }
  43806. if (IS_CV == IS_CONST) {
  43807. function_name = EX_VAR(opline->op2.var);
  43808. }
  43809. /* First, locate the function. */
  43810. fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
  43811. if (UNEXPECTED(fbc == NULL)) {
  43812. if (EXPECTED(!EG(exception))) {
  43813. zend_undefined_method(obj->ce, Z_STR_P(function_name));
  43814. }
  43815. HANDLE_EXCEPTION();
  43816. }
  43817. if (IS_CV == IS_CONST &&
  43818. EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
  43819. EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
  43820. EXPECTED(obj == orig_obj)) {
  43821. CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
  43822. }
  43823. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
  43824. /* Reset "object" to trigger reference counting */
  43825. object = NULL;
  43826. }
  43827. if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
  43828. init_func_run_time_cache(&fbc->op_array);
  43829. }
  43830. }
  43831. if (IS_CV != IS_CONST) {
  43832. }
  43833. call_info = ZEND_CALL_NESTED_FUNCTION;
  43834. if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
  43835. obj = NULL;
  43836. if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
  43837. HANDLE_EXCEPTION();
  43838. }
  43839. } else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
  43840. /* CV may be changed indirectly (e.g. when it's a reference) */
  43841. call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
  43842. if (IS_CV == IS_CV) {
  43843. GC_ADDREF(obj); /* For $this pointer */
  43844. } else if (free_op1 != object) {
  43845. GC_ADDREF(obj); /* For $this pointer */
  43846. }
  43847. }
  43848. call = zend_vm_stack_push_call_frame(call_info,
  43849. fbc, opline->extended_value, called_scope, obj);
  43850. call->prev_execute_data = EX(call);
  43851. EX(call) = call;
  43852. ZEND_VM_NEXT_OPCODE();
  43853. }
  43854. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43855. {
  43856. USE_OPLINE
  43857. zval *expr_ptr, new_expr;
  43858. SAVE_OPLINE();
  43859. if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
  43860. UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
  43861. expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  43862. if (Z_ISREF_P(expr_ptr)) {
  43863. Z_ADDREF_P(expr_ptr);
  43864. } else {
  43865. ZVAL_MAKE_REF_EX(expr_ptr, 2);
  43866. }
  43867. } else {
  43868. expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  43869. if (IS_CV == IS_TMP_VAR) {
  43870. /* pass */
  43871. } else if (IS_CV == IS_CONST) {
  43872. Z_TRY_ADDREF_P(expr_ptr);
  43873. } else if (IS_CV == IS_CV) {
  43874. ZVAL_DEREF(expr_ptr);
  43875. Z_TRY_ADDREF_P(expr_ptr);
  43876. } else /* if (IS_CV == IS_VAR) */ {
  43877. if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
  43878. zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
  43879. expr_ptr = Z_REFVAL_P(expr_ptr);
  43880. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  43881. ZVAL_COPY_VALUE(&new_expr, expr_ptr);
  43882. expr_ptr = &new_expr;
  43883. efree_size(ref, sizeof(zend_reference));
  43884. } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
  43885. Z_ADDREF_P(expr_ptr);
  43886. }
  43887. }
  43888. }
  43889. }
  43890. if (IS_CV != IS_UNUSED) {
  43891. zval *offset = EX_VAR(opline->op2.var);
  43892. zend_string *str;
  43893. zend_ulong hval;
  43894. add_again:
  43895. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  43896. str = Z_STR_P(offset);
  43897. if (IS_CV != IS_CONST) {
  43898. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  43899. goto num_index;
  43900. }
  43901. }
  43902. str_index:
  43903. zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
  43904. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  43905. hval = Z_LVAL_P(offset);
  43906. num_index:
  43907. zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
  43908. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  43909. offset = Z_REFVAL_P(offset);
  43910. goto add_again;
  43911. } else if (Z_TYPE_P(offset) == IS_NULL) {
  43912. str = ZSTR_EMPTY_ALLOC();
  43913. goto str_index;
  43914. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  43915. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  43916. goto num_index;
  43917. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  43918. hval = 0;
  43919. goto num_index;
  43920. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  43921. hval = 1;
  43922. goto num_index;
  43923. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  43924. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  43925. str = ZSTR_EMPTY_ALLOC();
  43926. goto str_index;
  43927. } else {
  43928. zend_illegal_offset();
  43929. zval_ptr_dtor_nogc(expr_ptr);
  43930. }
  43931. } else {
  43932. if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
  43933. zend_cannot_add_element();
  43934. zval_ptr_dtor_nogc(expr_ptr);
  43935. }
  43936. }
  43937. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  43938. }
  43939. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43940. {
  43941. zval *array;
  43942. uint32_t size;
  43943. USE_OPLINE
  43944. array = EX_VAR(opline->result.var);
  43945. if (IS_CV != IS_UNUSED) {
  43946. size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
  43947. ZVAL_ARR(array, zend_new_array(size));
  43948. /* Explicitly initialize array as not-packed if flag is set */
  43949. if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
  43950. zend_hash_real_init_mixed(Z_ARRVAL_P(array));
  43951. }
  43952. ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  43953. } else {
  43954. ZVAL_EMPTY_ARRAY(array);
  43955. ZEND_VM_NEXT_OPCODE();
  43956. }
  43957. }
  43958. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  43959. {
  43960. USE_OPLINE
  43961. zval *container;
  43962. zval *offset;
  43963. zend_ulong hval;
  43964. zend_string *key;
  43965. SAVE_OPLINE();
  43966. container = EX_VAR(opline->op1.var);
  43967. offset = EX_VAR(opline->op2.var);
  43968. do {
  43969. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  43970. HashTable *ht;
  43971. unset_dim_array:
  43972. SEPARATE_ARRAY(container);
  43973. ht = Z_ARRVAL_P(container);
  43974. offset_again:
  43975. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  43976. key = Z_STR_P(offset);
  43977. if (IS_CV != IS_CONST) {
  43978. if (ZEND_HANDLE_NUMERIC(key, hval)) {
  43979. goto num_index_dim;
  43980. }
  43981. }
  43982. str_index_dim:
  43983. if (ht == &EG(symbol_table)) {
  43984. zend_delete_global_variable(key);
  43985. } else {
  43986. zend_hash_del(ht, key);
  43987. }
  43988. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  43989. hval = Z_LVAL_P(offset);
  43990. num_index_dim:
  43991. zend_hash_index_del(ht, hval);
  43992. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
  43993. offset = Z_REFVAL_P(offset);
  43994. goto offset_again;
  43995. } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
  43996. hval = zend_dval_to_lval(Z_DVAL_P(offset));
  43997. goto num_index_dim;
  43998. } else if (Z_TYPE_P(offset) == IS_NULL) {
  43999. key = ZSTR_EMPTY_ALLOC();
  44000. goto str_index_dim;
  44001. } else if (Z_TYPE_P(offset) == IS_FALSE) {
  44002. hval = 0;
  44003. goto num_index_dim;
  44004. } else if (Z_TYPE_P(offset) == IS_TRUE) {
  44005. hval = 1;
  44006. goto num_index_dim;
  44007. } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
  44008. hval = Z_RES_HANDLE_P(offset);
  44009. goto num_index_dim;
  44010. } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
  44011. GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  44012. key = ZSTR_EMPTY_ALLOC();
  44013. goto str_index_dim;
  44014. } else {
  44015. zend_error(E_WARNING, "Illegal offset type in unset");
  44016. }
  44017. break;
  44018. } else if (Z_ISREF_P(container)) {
  44019. container = Z_REFVAL_P(container);
  44020. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  44021. goto unset_dim_array;
  44022. }
  44023. }
  44024. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  44025. container = GET_OP1_UNDEF_CV(container, BP_VAR_R);
  44026. }
  44027. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
  44028. offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
  44029. }
  44030. if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
  44031. if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
  44032. zend_use_object_as_array();
  44033. } else {
  44034. if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  44035. offset++;
  44036. }
  44037. Z_OBJ_HT_P(container)->unset_dimension(container, offset);
  44038. }
  44039. } else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
  44040. zend_throw_error(NULL, "Cannot unset string offsets");
  44041. }
  44042. } while (0);
  44043. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  44044. }
  44045. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44046. {
  44047. USE_OPLINE
  44048. zval *container;
  44049. zval *offset;
  44050. SAVE_OPLINE();
  44051. container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
  44052. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  44053. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  44054. }
  44055. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  44056. do {
  44057. if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  44058. if (Z_ISREF_P(container)) {
  44059. container = Z_REFVAL_P(container);
  44060. if (Z_TYPE_P(container) != IS_OBJECT) {
  44061. break;
  44062. }
  44063. } else {
  44064. break;
  44065. }
  44066. }
  44067. if (Z_OBJ_HT_P(container)->unset_property) {
  44068. Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
  44069. } else {
  44070. zend_wrong_property_unset(offset);
  44071. }
  44072. } while (0);
  44073. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  44074. }
  44075. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44076. {
  44077. USE_OPLINE
  44078. zval *container;
  44079. int result;
  44080. zend_ulong hval;
  44081. zval *offset;
  44082. SAVE_OPLINE();
  44083. container = EX_VAR(opline->op1.var);
  44084. offset = EX_VAR(opline->op2.var);
  44085. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  44086. HashTable *ht;
  44087. zval *value;
  44088. zend_string *str;
  44089. isset_dim_obj_array:
  44090. ht = Z_ARRVAL_P(container);
  44091. isset_again:
  44092. if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
  44093. str = Z_STR_P(offset);
  44094. if (IS_CV != IS_CONST) {
  44095. if (ZEND_HANDLE_NUMERIC(str, hval)) {
  44096. goto num_index_prop;
  44097. }
  44098. }
  44099. value = zend_hash_find_ex_ind(ht, str, IS_CV == IS_CONST);
  44100. } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
  44101. hval = Z_LVAL_P(offset);
  44102. num_index_prop:
  44103. value = zend_hash_index_find(ht, hval);
  44104. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
  44105. offset = Z_REFVAL_P(offset);
  44106. goto isset_again;
  44107. } else {
  44108. value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
  44109. }
  44110. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  44111. /* > IS_NULL means not IS_UNDEF and not IS_NULL */
  44112. result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
  44113. (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
  44114. } else {
  44115. result = (value == NULL || !i_zend_is_true(value));
  44116. }
  44117. goto isset_dim_obj_exit;
  44118. } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
  44119. container = Z_REFVAL_P(container);
  44120. if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
  44121. goto isset_dim_obj_array;
  44122. }
  44123. }
  44124. if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
  44125. offset++;
  44126. }
  44127. if (!(opline->extended_value & ZEND_ISEMPTY)) {
  44128. result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
  44129. } else {
  44130. result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
  44131. }
  44132. isset_dim_obj_exit:
  44133. ZEND_VM_SMART_BRANCH(result, 1);
  44134. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  44135. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  44136. }
  44137. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44138. {
  44139. USE_OPLINE
  44140. zval *container;
  44141. int result;
  44142. zval *offset;
  44143. SAVE_OPLINE();
  44144. container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
  44145. if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
  44146. ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  44147. }
  44148. offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  44149. if (IS_CV == IS_CONST ||
  44150. (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
  44151. if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
  44152. container = Z_REFVAL_P(container);
  44153. if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
  44154. goto isset_no_object;
  44155. }
  44156. } else {
  44157. goto isset_no_object;
  44158. }
  44159. }
  44160. if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
  44161. zend_wrong_property_check(offset);
  44162. isset_no_object:
  44163. result = (opline->extended_value & ZEND_ISEMPTY);
  44164. } else {
  44165. result =
  44166. (opline->extended_value & ZEND_ISEMPTY) ^
  44167. Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
  44168. }
  44169. ZEND_VM_SMART_BRANCH(result, 1);
  44170. ZVAL_BOOL(EX_VAR(opline->result.var), result);
  44171. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
  44172. }
  44173. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44174. {
  44175. USE_OPLINE
  44176. zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
  44177. SAVE_OPLINE();
  44178. if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
  44179. ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
  44180. }
  44181. /* Destroy the previously yielded value */
  44182. zval_ptr_dtor(&generator->value);
  44183. /* Destroy the previously yielded key */
  44184. zval_ptr_dtor(&generator->key);
  44185. /* Set the new yielded value */
  44186. if (IS_CV != IS_UNUSED) {
  44187. if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
  44188. /* Constants and temporary variables aren't yieldable by reference,
  44189. * but we still allow them with a notice. */
  44190. if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
  44191. zval *value;
  44192. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  44193. value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  44194. ZVAL_COPY_VALUE(&generator->value, value);
  44195. if (IS_CV == IS_CONST) {
  44196. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  44197. Z_ADDREF(generator->value);
  44198. }
  44199. }
  44200. } else {
  44201. zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
  44202. /* If a function call result is yielded and the function did
  44203. * not return by reference we throw a notice. */
  44204. if (IS_CV == IS_VAR &&
  44205. (value_ptr == &EG(uninitialized_zval) ||
  44206. (opline->extended_value == ZEND_RETURNS_FUNCTION &&
  44207. !Z_ISREF_P(value_ptr)))) {
  44208. zend_error(E_NOTICE, "Only variable references should be yielded by reference");
  44209. ZVAL_COPY(&generator->value, value_ptr);
  44210. } else {
  44211. if (Z_ISREF_P(value_ptr)) {
  44212. Z_ADDREF_P(value_ptr);
  44213. } else {
  44214. ZVAL_MAKE_REF_EX(value_ptr, 2);
  44215. }
  44216. ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
  44217. }
  44218. }
  44219. } else {
  44220. zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
  44221. /* Consts, temporary variables and references need copying */
  44222. if (IS_CV == IS_CONST) {
  44223. ZVAL_COPY_VALUE(&generator->value, value);
  44224. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
  44225. Z_ADDREF(generator->value);
  44226. }
  44227. } else if (IS_CV == IS_TMP_VAR) {
  44228. ZVAL_COPY_VALUE(&generator->value, value);
  44229. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
  44230. ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
  44231. } else {
  44232. ZVAL_COPY_VALUE(&generator->value, value);
  44233. if (IS_CV == IS_CV) {
  44234. if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
  44235. }
  44236. }
  44237. }
  44238. } else {
  44239. /* If no value was specified yield null */
  44240. ZVAL_NULL(&generator->value);
  44241. }
  44242. /* Set the new yielded key */
  44243. if (IS_CV != IS_UNUSED) {
  44244. zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
  44245. /* Consts, temporary variables and references need copying */
  44246. if (IS_CV == IS_CONST) {
  44247. ZVAL_COPY_VALUE(&generator->key, key);
  44248. if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
  44249. Z_ADDREF(generator->key);
  44250. }
  44251. } else if (IS_CV == IS_TMP_VAR) {
  44252. ZVAL_COPY_VALUE(&generator->key, key);
  44253. } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
  44254. ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
  44255. } else {
  44256. ZVAL_COPY_VALUE(&generator->key, key);
  44257. if (IS_CV == IS_CV) {
  44258. if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
  44259. }
  44260. }
  44261. if (Z_TYPE(generator->key) == IS_LONG
  44262. && Z_LVAL(generator->key) > generator->largest_used_integer_key
  44263. ) {
  44264. generator->largest_used_integer_key = Z_LVAL(generator->key);
  44265. }
  44266. } else {
  44267. /* If no key was specified we use auto-increment keys */
  44268. generator->largest_used_integer_key++;
  44269. ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
  44270. }
  44271. if (RETURN_VALUE_USED(opline)) {
  44272. /* If the return value of yield is used set the send
  44273. * target and initialize it to NULL */
  44274. generator->send_target = EX_VAR(opline->result.var);
  44275. ZVAL_NULL(generator->send_target);
  44276. } else {
  44277. generator->send_target = NULL;
  44278. }
  44279. /* We increment to the next op, so we are at the correct position when the
  44280. * generator is resumed. */
  44281. ZEND_VM_INC_OPCODE();
  44282. /* The GOTO VM uses a local opline variable. We need to set the opline
  44283. * variable in execute_data so we don't resume at an old position. */
  44284. SAVE_OPLINE();
  44285. ZEND_VM_RETURN();
  44286. }
  44287. static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  44288. {
  44289. USE_OPLINE
  44290. zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);
  44291. ZEND_VM_NEXT_OPCODE(); /* Never reached */
  44292. }
  44293. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  44294. # undef ZEND_VM_TAIL_CALL
  44295. # undef ZEND_VM_CONTINUE
  44296. # undef ZEND_VM_RETURN
  44297. # define ZEND_VM_TAIL_CALL(call) call; ZEND_VM_CONTINUE()
  44298. # define ZEND_VM_CONTINUE() HYBRID_NEXT()
  44299. # define ZEND_VM_RETURN() goto HYBRID_HALT_LABEL
  44300. #endif
  44301. ZEND_API void execute_ex(zend_execute_data *ex)
  44302. {
  44303. DCL_OPLINE
  44304. #ifdef ZEND_VM_IP_GLOBAL_REG
  44305. const zend_op *orig_opline = opline;
  44306. #endif
  44307. #ifdef ZEND_VM_FP_GLOBAL_REG
  44308. zend_execute_data *orig_execute_data = execute_data;
  44309. execute_data = ex;
  44310. #else
  44311. zend_execute_data *execute_data = ex;
  44312. #endif
  44313. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  44314. if (UNEXPECTED(execute_data == NULL)) {
  44315. static const void * const labels[] = {
  44316. (void*)&&ZEND_NOP_SPEC_LABEL,
  44317. (void*)&&ZEND_ADD_SPEC_CONST_CONST_LABEL,
  44318. (void*)&&ZEND_ADD_SPEC_CONST_TMPVAR_LABEL,
  44319. (void*)&&ZEND_ADD_SPEC_CONST_TMPVAR_LABEL,
  44320. (void*)&&ZEND_NULL_LABEL,
  44321. (void*)&&ZEND_ADD_SPEC_CONST_CV_LABEL,
  44322. (void*)&&ZEND_ADD_SPEC_TMPVAR_CONST_LABEL,
  44323. (void*)&&ZEND_ADD_SPEC_TMPVAR_TMPVAR_LABEL,
  44324. (void*)&&ZEND_ADD_SPEC_TMPVAR_TMPVAR_LABEL,
  44325. (void*)&&ZEND_NULL_LABEL,
  44326. (void*)&&ZEND_ADD_SPEC_TMPVAR_CV_LABEL,
  44327. (void*)&&ZEND_ADD_SPEC_TMPVAR_CONST_LABEL,
  44328. (void*)&&ZEND_ADD_SPEC_TMPVAR_TMPVAR_LABEL,
  44329. (void*)&&ZEND_ADD_SPEC_TMPVAR_TMPVAR_LABEL,
  44330. (void*)&&ZEND_NULL_LABEL,
  44331. (void*)&&ZEND_ADD_SPEC_TMPVAR_CV_LABEL,
  44332. (void*)&&ZEND_NULL_LABEL,
  44333. (void*)&&ZEND_NULL_LABEL,
  44334. (void*)&&ZEND_NULL_LABEL,
  44335. (void*)&&ZEND_NULL_LABEL,
  44336. (void*)&&ZEND_NULL_LABEL,
  44337. (void*)&&ZEND_ADD_SPEC_CV_CONST_LABEL,
  44338. (void*)&&ZEND_ADD_SPEC_CV_TMPVAR_LABEL,
  44339. (void*)&&ZEND_ADD_SPEC_CV_TMPVAR_LABEL,
  44340. (void*)&&ZEND_NULL_LABEL,
  44341. (void*)&&ZEND_ADD_SPEC_CV_CV_LABEL,
  44342. (void*)&&ZEND_SUB_SPEC_CONST_CONST_LABEL,
  44343. (void*)&&ZEND_SUB_SPEC_CONST_TMPVAR_LABEL,
  44344. (void*)&&ZEND_SUB_SPEC_CONST_TMPVAR_LABEL,
  44345. (void*)&&ZEND_NULL_LABEL,
  44346. (void*)&&ZEND_SUB_SPEC_CONST_CV_LABEL,
  44347. (void*)&&ZEND_SUB_SPEC_TMPVAR_CONST_LABEL,
  44348. (void*)&&ZEND_SUB_SPEC_TMPVAR_TMPVAR_LABEL,
  44349. (void*)&&ZEND_SUB_SPEC_TMPVAR_TMPVAR_LABEL,
  44350. (void*)&&ZEND_NULL_LABEL,
  44351. (void*)&&ZEND_SUB_SPEC_TMPVAR_CV_LABEL,
  44352. (void*)&&ZEND_SUB_SPEC_TMPVAR_CONST_LABEL,
  44353. (void*)&&ZEND_SUB_SPEC_TMPVAR_TMPVAR_LABEL,
  44354. (void*)&&ZEND_SUB_SPEC_TMPVAR_TMPVAR_LABEL,
  44355. (void*)&&ZEND_NULL_LABEL,
  44356. (void*)&&ZEND_SUB_SPEC_TMPVAR_CV_LABEL,
  44357. (void*)&&ZEND_NULL_LABEL,
  44358. (void*)&&ZEND_NULL_LABEL,
  44359. (void*)&&ZEND_NULL_LABEL,
  44360. (void*)&&ZEND_NULL_LABEL,
  44361. (void*)&&ZEND_NULL_LABEL,
  44362. (void*)&&ZEND_SUB_SPEC_CV_CONST_LABEL,
  44363. (void*)&&ZEND_SUB_SPEC_CV_TMPVAR_LABEL,
  44364. (void*)&&ZEND_SUB_SPEC_CV_TMPVAR_LABEL,
  44365. (void*)&&ZEND_NULL_LABEL,
  44366. (void*)&&ZEND_SUB_SPEC_CV_CV_LABEL,
  44367. (void*)&&ZEND_MUL_SPEC_CONST_CONST_LABEL,
  44368. (void*)&&ZEND_NULL_LABEL,
  44369. (void*)&&ZEND_NULL_LABEL,
  44370. (void*)&&ZEND_NULL_LABEL,
  44371. (void*)&&ZEND_NULL_LABEL,
  44372. (void*)&&ZEND_MUL_SPEC_TMPVAR_CONST_LABEL,
  44373. (void*)&&ZEND_MUL_SPEC_TMPVAR_TMPVAR_LABEL,
  44374. (void*)&&ZEND_MUL_SPEC_TMPVAR_TMPVAR_LABEL,
  44375. (void*)&&ZEND_NULL_LABEL,
  44376. (void*)&&ZEND_NULL_LABEL,
  44377. (void*)&&ZEND_MUL_SPEC_TMPVAR_CONST_LABEL,
  44378. (void*)&&ZEND_MUL_SPEC_TMPVAR_TMPVAR_LABEL,
  44379. (void*)&&ZEND_MUL_SPEC_TMPVAR_TMPVAR_LABEL,
  44380. (void*)&&ZEND_NULL_LABEL,
  44381. (void*)&&ZEND_NULL_LABEL,
  44382. (void*)&&ZEND_NULL_LABEL,
  44383. (void*)&&ZEND_NULL_LABEL,
  44384. (void*)&&ZEND_NULL_LABEL,
  44385. (void*)&&ZEND_NULL_LABEL,
  44386. (void*)&&ZEND_NULL_LABEL,
  44387. (void*)&&ZEND_MUL_SPEC_CV_CONST_LABEL,
  44388. (void*)&&ZEND_MUL_SPEC_CV_TMPVAR_LABEL,
  44389. (void*)&&ZEND_MUL_SPEC_CV_TMPVAR_LABEL,
  44390. (void*)&&ZEND_NULL_LABEL,
  44391. (void*)&&ZEND_MUL_SPEC_CV_CV_LABEL,
  44392. (void*)&&ZEND_DIV_SPEC_CONST_CONST_LABEL,
  44393. (void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
  44394. (void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
  44395. (void*)&&ZEND_NULL_LABEL,
  44396. (void*)&&ZEND_DIV_SPEC_CONST_CV_LABEL,
  44397. (void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
  44398. (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
  44399. (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
  44400. (void*)&&ZEND_NULL_LABEL,
  44401. (void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
  44402. (void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
  44403. (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
  44404. (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
  44405. (void*)&&ZEND_NULL_LABEL,
  44406. (void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
  44407. (void*)&&ZEND_NULL_LABEL,
  44408. (void*)&&ZEND_NULL_LABEL,
  44409. (void*)&&ZEND_NULL_LABEL,
  44410. (void*)&&ZEND_NULL_LABEL,
  44411. (void*)&&ZEND_NULL_LABEL,
  44412. (void*)&&ZEND_DIV_SPEC_CV_CONST_LABEL,
  44413. (void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
  44414. (void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
  44415. (void*)&&ZEND_NULL_LABEL,
  44416. (void*)&&ZEND_DIV_SPEC_CV_CV_LABEL,
  44417. (void*)&&ZEND_MOD_SPEC_CONST_CONST_LABEL,
  44418. (void*)&&ZEND_MOD_SPEC_CONST_TMPVAR_LABEL,
  44419. (void*)&&ZEND_MOD_SPEC_CONST_TMPVAR_LABEL,
  44420. (void*)&&ZEND_NULL_LABEL,
  44421. (void*)&&ZEND_MOD_SPEC_CONST_CV_LABEL,
  44422. (void*)&&ZEND_MOD_SPEC_TMPVAR_CONST_LABEL,
  44423. (void*)&&ZEND_MOD_SPEC_TMPVAR_TMPVAR_LABEL,
  44424. (void*)&&ZEND_MOD_SPEC_TMPVAR_TMPVAR_LABEL,
  44425. (void*)&&ZEND_NULL_LABEL,
  44426. (void*)&&ZEND_MOD_SPEC_TMPVAR_CV_LABEL,
  44427. (void*)&&ZEND_MOD_SPEC_TMPVAR_CONST_LABEL,
  44428. (void*)&&ZEND_MOD_SPEC_TMPVAR_TMPVAR_LABEL,
  44429. (void*)&&ZEND_MOD_SPEC_TMPVAR_TMPVAR_LABEL,
  44430. (void*)&&ZEND_NULL_LABEL,
  44431. (void*)&&ZEND_MOD_SPEC_TMPVAR_CV_LABEL,
  44432. (void*)&&ZEND_NULL_LABEL,
  44433. (void*)&&ZEND_NULL_LABEL,
  44434. (void*)&&ZEND_NULL_LABEL,
  44435. (void*)&&ZEND_NULL_LABEL,
  44436. (void*)&&ZEND_NULL_LABEL,
  44437. (void*)&&ZEND_MOD_SPEC_CV_CONST_LABEL,
  44438. (void*)&&ZEND_MOD_SPEC_CV_TMPVAR_LABEL,
  44439. (void*)&&ZEND_MOD_SPEC_CV_TMPVAR_LABEL,
  44440. (void*)&&ZEND_NULL_LABEL,
  44441. (void*)&&ZEND_MOD_SPEC_CV_CV_LABEL,
  44442. (void*)&&ZEND_SL_SPEC_CONST_CONST_LABEL,
  44443. (void*)&&ZEND_SL_SPEC_CONST_TMPVAR_LABEL,
  44444. (void*)&&ZEND_SL_SPEC_CONST_TMPVAR_LABEL,
  44445. (void*)&&ZEND_NULL_LABEL,
  44446. (void*)&&ZEND_SL_SPEC_CONST_CV_LABEL,
  44447. (void*)&&ZEND_SL_SPEC_TMPVAR_CONST_LABEL,
  44448. (void*)&&ZEND_SL_SPEC_TMPVAR_TMPVAR_LABEL,
  44449. (void*)&&ZEND_SL_SPEC_TMPVAR_TMPVAR_LABEL,
  44450. (void*)&&ZEND_NULL_LABEL,
  44451. (void*)&&ZEND_SL_SPEC_TMPVAR_CV_LABEL,
  44452. (void*)&&ZEND_SL_SPEC_TMPVAR_CONST_LABEL,
  44453. (void*)&&ZEND_SL_SPEC_TMPVAR_TMPVAR_LABEL,
  44454. (void*)&&ZEND_SL_SPEC_TMPVAR_TMPVAR_LABEL,
  44455. (void*)&&ZEND_NULL_LABEL,
  44456. (void*)&&ZEND_SL_SPEC_TMPVAR_CV_LABEL,
  44457. (void*)&&ZEND_NULL_LABEL,
  44458. (void*)&&ZEND_NULL_LABEL,
  44459. (void*)&&ZEND_NULL_LABEL,
  44460. (void*)&&ZEND_NULL_LABEL,
  44461. (void*)&&ZEND_NULL_LABEL,
  44462. (void*)&&ZEND_SL_SPEC_CV_CONST_LABEL,
  44463. (void*)&&ZEND_SL_SPEC_CV_TMPVAR_LABEL,
  44464. (void*)&&ZEND_SL_SPEC_CV_TMPVAR_LABEL,
  44465. (void*)&&ZEND_NULL_LABEL,
  44466. (void*)&&ZEND_SL_SPEC_CV_CV_LABEL,
  44467. (void*)&&ZEND_SR_SPEC_CONST_CONST_LABEL,
  44468. (void*)&&ZEND_SR_SPEC_CONST_TMPVAR_LABEL,
  44469. (void*)&&ZEND_SR_SPEC_CONST_TMPVAR_LABEL,
  44470. (void*)&&ZEND_NULL_LABEL,
  44471. (void*)&&ZEND_SR_SPEC_CONST_CV_LABEL,
  44472. (void*)&&ZEND_SR_SPEC_TMPVAR_CONST_LABEL,
  44473. (void*)&&ZEND_SR_SPEC_TMPVAR_TMPVAR_LABEL,
  44474. (void*)&&ZEND_SR_SPEC_TMPVAR_TMPVAR_LABEL,
  44475. (void*)&&ZEND_NULL_LABEL,
  44476. (void*)&&ZEND_SR_SPEC_TMPVAR_CV_LABEL,
  44477. (void*)&&ZEND_SR_SPEC_TMPVAR_CONST_LABEL,
  44478. (void*)&&ZEND_SR_SPEC_TMPVAR_TMPVAR_LABEL,
  44479. (void*)&&ZEND_SR_SPEC_TMPVAR_TMPVAR_LABEL,
  44480. (void*)&&ZEND_NULL_LABEL,
  44481. (void*)&&ZEND_SR_SPEC_TMPVAR_CV_LABEL,
  44482. (void*)&&ZEND_NULL_LABEL,
  44483. (void*)&&ZEND_NULL_LABEL,
  44484. (void*)&&ZEND_NULL_LABEL,
  44485. (void*)&&ZEND_NULL_LABEL,
  44486. (void*)&&ZEND_NULL_LABEL,
  44487. (void*)&&ZEND_SR_SPEC_CV_CONST_LABEL,
  44488. (void*)&&ZEND_SR_SPEC_CV_TMPVAR_LABEL,
  44489. (void*)&&ZEND_SR_SPEC_CV_TMPVAR_LABEL,
  44490. (void*)&&ZEND_NULL_LABEL,
  44491. (void*)&&ZEND_SR_SPEC_CV_CV_LABEL,
  44492. (void*)&&ZEND_NULL_LABEL,
  44493. (void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
  44494. (void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
  44495. (void*)&&ZEND_NULL_LABEL,
  44496. (void*)&&ZEND_CONCAT_SPEC_CONST_CV_LABEL,
  44497. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
  44498. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  44499. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  44500. (void*)&&ZEND_NULL_LABEL,
  44501. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
  44502. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
  44503. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  44504. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  44505. (void*)&&ZEND_NULL_LABEL,
  44506. (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
  44507. (void*)&&ZEND_NULL_LABEL,
  44508. (void*)&&ZEND_NULL_LABEL,
  44509. (void*)&&ZEND_NULL_LABEL,
  44510. (void*)&&ZEND_NULL_LABEL,
  44511. (void*)&&ZEND_NULL_LABEL,
  44512. (void*)&&ZEND_CONCAT_SPEC_CV_CONST_LABEL,
  44513. (void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
  44514. (void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
  44515. (void*)&&ZEND_NULL_LABEL,
  44516. (void*)&&ZEND_CONCAT_SPEC_CV_CV_LABEL,
  44517. (void*)&&ZEND_BW_OR_SPEC_CONST_CONST_LABEL,
  44518. (void*)&&ZEND_NULL_LABEL,
  44519. (void*)&&ZEND_NULL_LABEL,
  44520. (void*)&&ZEND_NULL_LABEL,
  44521. (void*)&&ZEND_NULL_LABEL,
  44522. (void*)&&ZEND_BW_OR_SPEC_TMPVAR_CONST_LABEL,
  44523. (void*)&&ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_LABEL,
  44524. (void*)&&ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_LABEL,
  44525. (void*)&&ZEND_NULL_LABEL,
  44526. (void*)&&ZEND_NULL_LABEL,
  44527. (void*)&&ZEND_BW_OR_SPEC_TMPVAR_CONST_LABEL,
  44528. (void*)&&ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_LABEL,
  44529. (void*)&&ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_LABEL,
  44530. (void*)&&ZEND_NULL_LABEL,
  44531. (void*)&&ZEND_NULL_LABEL,
  44532. (void*)&&ZEND_NULL_LABEL,
  44533. (void*)&&ZEND_NULL_LABEL,
  44534. (void*)&&ZEND_NULL_LABEL,
  44535. (void*)&&ZEND_NULL_LABEL,
  44536. (void*)&&ZEND_NULL_LABEL,
  44537. (void*)&&ZEND_BW_OR_SPEC_CV_CONST_LABEL,
  44538. (void*)&&ZEND_BW_OR_SPEC_CV_TMPVAR_LABEL,
  44539. (void*)&&ZEND_BW_OR_SPEC_CV_TMPVAR_LABEL,
  44540. (void*)&&ZEND_NULL_LABEL,
  44541. (void*)&&ZEND_BW_OR_SPEC_CV_CV_LABEL,
  44542. (void*)&&ZEND_BW_AND_SPEC_CONST_CONST_LABEL,
  44543. (void*)&&ZEND_NULL_LABEL,
  44544. (void*)&&ZEND_NULL_LABEL,
  44545. (void*)&&ZEND_NULL_LABEL,
  44546. (void*)&&ZEND_NULL_LABEL,
  44547. (void*)&&ZEND_BW_AND_SPEC_TMPVAR_CONST_LABEL,
  44548. (void*)&&ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_LABEL,
  44549. (void*)&&ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_LABEL,
  44550. (void*)&&ZEND_NULL_LABEL,
  44551. (void*)&&ZEND_NULL_LABEL,
  44552. (void*)&&ZEND_BW_AND_SPEC_TMPVAR_CONST_LABEL,
  44553. (void*)&&ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_LABEL,
  44554. (void*)&&ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_LABEL,
  44555. (void*)&&ZEND_NULL_LABEL,
  44556. (void*)&&ZEND_NULL_LABEL,
  44557. (void*)&&ZEND_NULL_LABEL,
  44558. (void*)&&ZEND_NULL_LABEL,
  44559. (void*)&&ZEND_NULL_LABEL,
  44560. (void*)&&ZEND_NULL_LABEL,
  44561. (void*)&&ZEND_NULL_LABEL,
  44562. (void*)&&ZEND_BW_AND_SPEC_CV_CONST_LABEL,
  44563. (void*)&&ZEND_BW_AND_SPEC_CV_TMPVAR_LABEL,
  44564. (void*)&&ZEND_BW_AND_SPEC_CV_TMPVAR_LABEL,
  44565. (void*)&&ZEND_NULL_LABEL,
  44566. (void*)&&ZEND_BW_AND_SPEC_CV_CV_LABEL,
  44567. (void*)&&ZEND_BW_XOR_SPEC_CONST_CONST_LABEL,
  44568. (void*)&&ZEND_NULL_LABEL,
  44569. (void*)&&ZEND_NULL_LABEL,
  44570. (void*)&&ZEND_NULL_LABEL,
  44571. (void*)&&ZEND_NULL_LABEL,
  44572. (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_CONST_LABEL,
  44573. (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
  44574. (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
  44575. (void*)&&ZEND_NULL_LABEL,
  44576. (void*)&&ZEND_NULL_LABEL,
  44577. (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_CONST_LABEL,
  44578. (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
  44579. (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
  44580. (void*)&&ZEND_NULL_LABEL,
  44581. (void*)&&ZEND_NULL_LABEL,
  44582. (void*)&&ZEND_NULL_LABEL,
  44583. (void*)&&ZEND_NULL_LABEL,
  44584. (void*)&&ZEND_NULL_LABEL,
  44585. (void*)&&ZEND_NULL_LABEL,
  44586. (void*)&&ZEND_NULL_LABEL,
  44587. (void*)&&ZEND_BW_XOR_SPEC_CV_CONST_LABEL,
  44588. (void*)&&ZEND_BW_XOR_SPEC_CV_TMPVAR_LABEL,
  44589. (void*)&&ZEND_BW_XOR_SPEC_CV_TMPVAR_LABEL,
  44590. (void*)&&ZEND_NULL_LABEL,
  44591. (void*)&&ZEND_BW_XOR_SPEC_CV_CV_LABEL,
  44592. (void*)&&ZEND_BW_NOT_SPEC_CONST_LABEL,
  44593. (void*)&&ZEND_BW_NOT_SPEC_TMPVAR_LABEL,
  44594. (void*)&&ZEND_BW_NOT_SPEC_TMPVAR_LABEL,
  44595. (void*)&&ZEND_NULL_LABEL,
  44596. (void*)&&ZEND_BW_NOT_SPEC_CV_LABEL,
  44597. (void*)&&ZEND_BOOL_NOT_SPEC_CONST_LABEL,
  44598. (void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
  44599. (void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
  44600. (void*)&&ZEND_NULL_LABEL,
  44601. (void*)&&ZEND_BOOL_NOT_SPEC_CV_LABEL,
  44602. (void*)&&ZEND_BOOL_XOR_SPEC_CONST_CONST_LABEL,
  44603. (void*)&&ZEND_NULL_LABEL,
  44604. (void*)&&ZEND_NULL_LABEL,
  44605. (void*)&&ZEND_NULL_LABEL,
  44606. (void*)&&ZEND_NULL_LABEL,
  44607. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
  44608. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
  44609. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
  44610. (void*)&&ZEND_NULL_LABEL,
  44611. (void*)&&ZEND_NULL_LABEL,
  44612. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
  44613. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
  44614. (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
  44615. (void*)&&ZEND_NULL_LABEL,
  44616. (void*)&&ZEND_NULL_LABEL,
  44617. (void*)&&ZEND_NULL_LABEL,
  44618. (void*)&&ZEND_NULL_LABEL,
  44619. (void*)&&ZEND_NULL_LABEL,
  44620. (void*)&&ZEND_NULL_LABEL,
  44621. (void*)&&ZEND_NULL_LABEL,
  44622. (void*)&&ZEND_BOOL_XOR_SPEC_CV_CONST_LABEL,
  44623. (void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
  44624. (void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
  44625. (void*)&&ZEND_NULL_LABEL,
  44626. (void*)&&ZEND_BOOL_XOR_SPEC_CV_CV_LABEL,
  44627. (void*)&&ZEND_IS_IDENTICAL_SPEC_CONST_CONST_LABEL,
  44628. (void*)&&ZEND_NULL_LABEL,
  44629. (void*)&&ZEND_NULL_LABEL,
  44630. (void*)&&ZEND_NULL_LABEL,
  44631. (void*)&&ZEND_NULL_LABEL,
  44632. (void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_CONST_LABEL,
  44633. (void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_TMP_LABEL,
  44634. (void*)&&ZEND_NULL_LABEL,
  44635. (void*)&&ZEND_NULL_LABEL,
  44636. (void*)&&ZEND_NULL_LABEL,
  44637. (void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_CONST_LABEL,
  44638. (void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_TMP_LABEL,
  44639. (void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_VAR_LABEL,
  44640. (void*)&&ZEND_NULL_LABEL,
  44641. (void*)&&ZEND_NULL_LABEL,
  44642. (void*)&&ZEND_NULL_LABEL,
  44643. (void*)&&ZEND_NULL_LABEL,
  44644. (void*)&&ZEND_NULL_LABEL,
  44645. (void*)&&ZEND_NULL_LABEL,
  44646. (void*)&&ZEND_NULL_LABEL,
  44647. (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CONST_LABEL,
  44648. (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_TMP_LABEL,
  44649. (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_VAR_LABEL,
  44650. (void*)&&ZEND_NULL_LABEL,
  44651. (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CV_LABEL,
  44652. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_LABEL,
  44653. (void*)&&ZEND_NULL_LABEL,
  44654. (void*)&&ZEND_NULL_LABEL,
  44655. (void*)&&ZEND_NULL_LABEL,
  44656. (void*)&&ZEND_NULL_LABEL,
  44657. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_LABEL,
  44658. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_LABEL,
  44659. (void*)&&ZEND_NULL_LABEL,
  44660. (void*)&&ZEND_NULL_LABEL,
  44661. (void*)&&ZEND_NULL_LABEL,
  44662. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_LABEL,
  44663. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_LABEL,
  44664. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_LABEL,
  44665. (void*)&&ZEND_NULL_LABEL,
  44666. (void*)&&ZEND_NULL_LABEL,
  44667. (void*)&&ZEND_NULL_LABEL,
  44668. (void*)&&ZEND_NULL_LABEL,
  44669. (void*)&&ZEND_NULL_LABEL,
  44670. (void*)&&ZEND_NULL_LABEL,
  44671. (void*)&&ZEND_NULL_LABEL,
  44672. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_LABEL,
  44673. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_LABEL,
  44674. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_LABEL,
  44675. (void*)&&ZEND_NULL_LABEL,
  44676. (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_LABEL,
  44677. (void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
  44678. (void*)&&ZEND_NULL_LABEL,
  44679. (void*)&&ZEND_NULL_LABEL,
  44680. (void*)&&ZEND_NULL_LABEL,
  44681. (void*)&&ZEND_NULL_LABEL,
  44682. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
  44683. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  44684. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  44685. (void*)&&ZEND_NULL_LABEL,
  44686. (void*)&&ZEND_NULL_LABEL,
  44687. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
  44688. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  44689. (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  44690. (void*)&&ZEND_NULL_LABEL,
  44691. (void*)&&ZEND_NULL_LABEL,
  44692. (void*)&&ZEND_NULL_LABEL,
  44693. (void*)&&ZEND_NULL_LABEL,
  44694. (void*)&&ZEND_NULL_LABEL,
  44695. (void*)&&ZEND_NULL_LABEL,
  44696. (void*)&&ZEND_NULL_LABEL,
  44697. (void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_LABEL,
  44698. (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
  44699. (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
  44700. (void*)&&ZEND_NULL_LABEL,
  44701. (void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_LABEL,
  44702. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
  44703. (void*)&&ZEND_NULL_LABEL,
  44704. (void*)&&ZEND_NULL_LABEL,
  44705. (void*)&&ZEND_NULL_LABEL,
  44706. (void*)&&ZEND_NULL_LABEL,
  44707. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
  44708. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  44709. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  44710. (void*)&&ZEND_NULL_LABEL,
  44711. (void*)&&ZEND_NULL_LABEL,
  44712. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
  44713. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  44714. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  44715. (void*)&&ZEND_NULL_LABEL,
  44716. (void*)&&ZEND_NULL_LABEL,
  44717. (void*)&&ZEND_NULL_LABEL,
  44718. (void*)&&ZEND_NULL_LABEL,
  44719. (void*)&&ZEND_NULL_LABEL,
  44720. (void*)&&ZEND_NULL_LABEL,
  44721. (void*)&&ZEND_NULL_LABEL,
  44722. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_LABEL,
  44723. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
  44724. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
  44725. (void*)&&ZEND_NULL_LABEL,
  44726. (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_LABEL,
  44727. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
  44728. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_LABEL,
  44729. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_LABEL,
  44730. (void*)&&ZEND_NULL_LABEL,
  44731. (void*)&&ZEND_IS_SMALLER_SPEC_CONST_CV_LABEL,
  44732. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_LABEL,
  44733. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_LABEL,
  44734. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_LABEL,
  44735. (void*)&&ZEND_NULL_LABEL,
  44736. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_CV_LABEL,
  44737. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_LABEL,
  44738. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_LABEL,
  44739. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_LABEL,
  44740. (void*)&&ZEND_NULL_LABEL,
  44741. (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_CV_LABEL,
  44742. (void*)&&ZEND_NULL_LABEL,
  44743. (void*)&&ZEND_NULL_LABEL,
  44744. (void*)&&ZEND_NULL_LABEL,
  44745. (void*)&&ZEND_NULL_LABEL,
  44746. (void*)&&ZEND_NULL_LABEL,
  44747. (void*)&&ZEND_IS_SMALLER_SPEC_CV_CONST_LABEL,
  44748. (void*)&&ZEND_IS_SMALLER_SPEC_CV_TMPVAR_LABEL,
  44749. (void*)&&ZEND_IS_SMALLER_SPEC_CV_TMPVAR_LABEL,
  44750. (void*)&&ZEND_NULL_LABEL,
  44751. (void*)&&ZEND_IS_SMALLER_SPEC_CV_CV_LABEL,
  44752. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
  44753. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_LABEL,
  44754. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_LABEL,
  44755. (void*)&&ZEND_NULL_LABEL,
  44756. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_LABEL,
  44757. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_LABEL,
  44758. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  44759. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  44760. (void*)&&ZEND_NULL_LABEL,
  44761. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_LABEL,
  44762. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_LABEL,
  44763. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  44764. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
  44765. (void*)&&ZEND_NULL_LABEL,
  44766. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_LABEL,
  44767. (void*)&&ZEND_NULL_LABEL,
  44768. (void*)&&ZEND_NULL_LABEL,
  44769. (void*)&&ZEND_NULL_LABEL,
  44770. (void*)&&ZEND_NULL_LABEL,
  44771. (void*)&&ZEND_NULL_LABEL,
  44772. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_LABEL,
  44773. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_LABEL,
  44774. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_LABEL,
  44775. (void*)&&ZEND_NULL_LABEL,
  44776. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_LABEL,
  44777. (void*)&&ZEND_CAST_SPEC_CONST_LABEL,
  44778. (void*)&&ZEND_CAST_SPEC_TMP_LABEL,
  44779. (void*)&&ZEND_CAST_SPEC_VAR_LABEL,
  44780. (void*)&&ZEND_NULL_LABEL,
  44781. (void*)&&ZEND_CAST_SPEC_CV_LABEL,
  44782. (void*)&&ZEND_QM_ASSIGN_SPEC_CONST_LABEL,
  44783. (void*)&&ZEND_QM_ASSIGN_SPEC_TMP_LABEL,
  44784. (void*)&&ZEND_QM_ASSIGN_SPEC_VAR_LABEL,
  44785. (void*)&&ZEND_NULL_LABEL,
  44786. (void*)&&ZEND_QM_ASSIGN_SPEC_CV_LABEL,
  44787. (void*)&&ZEND_NULL_LABEL,
  44788. (void*)&&ZEND_NULL_LABEL,
  44789. (void*)&&ZEND_NULL_LABEL,
  44790. (void*)&&ZEND_NULL_LABEL,
  44791. (void*)&&ZEND_NULL_LABEL,
  44792. (void*)&&ZEND_NULL_LABEL,
  44793. (void*)&&ZEND_NULL_LABEL,
  44794. (void*)&&ZEND_NULL_LABEL,
  44795. (void*)&&ZEND_NULL_LABEL,
  44796. (void*)&&ZEND_NULL_LABEL,
  44797. (void*)&&ZEND_NULL_LABEL,
  44798. (void*)&&ZEND_NULL_LABEL,
  44799. (void*)&&ZEND_NULL_LABEL,
  44800. (void*)&&ZEND_NULL_LABEL,
  44801. (void*)&&ZEND_NULL_LABEL,
  44802. (void*)&&ZEND_NULL_LABEL,
  44803. (void*)&&ZEND_NULL_LABEL,
  44804. (void*)&&ZEND_NULL_LABEL,
  44805. (void*)&&ZEND_NULL_LABEL,
  44806. (void*)&&ZEND_NULL_LABEL,
  44807. (void*)&&ZEND_NULL_LABEL,
  44808. (void*)&&ZEND_NULL_LABEL,
  44809. (void*)&&ZEND_NULL_LABEL,
  44810. (void*)&&ZEND_NULL_LABEL,
  44811. (void*)&&ZEND_NULL_LABEL,
  44812. (void*)&&ZEND_NULL_LABEL,
  44813. (void*)&&ZEND_NULL_LABEL,
  44814. (void*)&&ZEND_NULL_LABEL,
  44815. (void*)&&ZEND_NULL_LABEL,
  44816. (void*)&&ZEND_NULL_LABEL,
  44817. (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CONST_LABEL,
  44818. (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM_LABEL,
  44819. (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ_LABEL,
  44820. (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_LABEL,
  44821. (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_LABEL,
  44822. (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_LABEL,
  44823. (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_LABEL,
  44824. (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_LABEL,
  44825. (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_LABEL,
  44826. (void*)&&ZEND_NULL_LABEL,
  44827. (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM_LABEL,
  44828. (void*)&&ZEND_NULL_LABEL,
  44829. (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CV_LABEL,
  44830. (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM_LABEL,
  44831. (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ_LABEL,
  44832. (void*)&&ZEND_NULL_LABEL,
  44833. (void*)&&ZEND_NULL_LABEL,
  44834. (void*)&&ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ_LABEL,
  44835. (void*)&&ZEND_NULL_LABEL,
  44836. (void*)&&ZEND_NULL_LABEL,
  44837. (void*)&&ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  44838. (void*)&&ZEND_NULL_LABEL,
  44839. (void*)&&ZEND_NULL_LABEL,
  44840. (void*)&&ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  44841. (void*)&&ZEND_NULL_LABEL,
  44842. (void*)&&ZEND_NULL_LABEL,
  44843. (void*)&&ZEND_NULL_LABEL,
  44844. (void*)&&ZEND_NULL_LABEL,
  44845. (void*)&&ZEND_NULL_LABEL,
  44846. (void*)&&ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ_LABEL,
  44847. (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CONST_LABEL,
  44848. (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM_LABEL,
  44849. (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ_LABEL,
  44850. (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_LABEL,
  44851. (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_LABEL,
  44852. (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_LABEL,
  44853. (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_LABEL,
  44854. (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_LABEL,
  44855. (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_LABEL,
  44856. (void*)&&ZEND_NULL_LABEL,
  44857. (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM_LABEL,
  44858. (void*)&&ZEND_NULL_LABEL,
  44859. (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CV_LABEL,
  44860. (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM_LABEL,
  44861. (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ_LABEL,
  44862. (void*)&&ZEND_NULL_LABEL,
  44863. (void*)&&ZEND_NULL_LABEL,
  44864. (void*)&&ZEND_NULL_LABEL,
  44865. (void*)&&ZEND_NULL_LABEL,
  44866. (void*)&&ZEND_NULL_LABEL,
  44867. (void*)&&ZEND_NULL_LABEL,
  44868. (void*)&&ZEND_NULL_LABEL,
  44869. (void*)&&ZEND_NULL_LABEL,
  44870. (void*)&&ZEND_NULL_LABEL,
  44871. (void*)&&ZEND_NULL_LABEL,
  44872. (void*)&&ZEND_NULL_LABEL,
  44873. (void*)&&ZEND_NULL_LABEL,
  44874. (void*)&&ZEND_NULL_LABEL,
  44875. (void*)&&ZEND_NULL_LABEL,
  44876. (void*)&&ZEND_NULL_LABEL,
  44877. (void*)&&ZEND_NULL_LABEL,
  44878. (void*)&&ZEND_NULL_LABEL,
  44879. (void*)&&ZEND_NULL_LABEL,
  44880. (void*)&&ZEND_NULL_LABEL,
  44881. (void*)&&ZEND_NULL_LABEL,
  44882. (void*)&&ZEND_NULL_LABEL,
  44883. (void*)&&ZEND_NULL_LABEL,
  44884. (void*)&&ZEND_NULL_LABEL,
  44885. (void*)&&ZEND_NULL_LABEL,
  44886. (void*)&&ZEND_NULL_LABEL,
  44887. (void*)&&ZEND_NULL_LABEL,
  44888. (void*)&&ZEND_NULL_LABEL,
  44889. (void*)&&ZEND_NULL_LABEL,
  44890. (void*)&&ZEND_NULL_LABEL,
  44891. (void*)&&ZEND_NULL_LABEL,
  44892. (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CONST_LABEL,
  44893. (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM_LABEL,
  44894. (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ_LABEL,
  44895. (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_LABEL,
  44896. (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_LABEL,
  44897. (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_LABEL,
  44898. (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_LABEL,
  44899. (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_LABEL,
  44900. (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_LABEL,
  44901. (void*)&&ZEND_NULL_LABEL,
  44902. (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM_LABEL,
  44903. (void*)&&ZEND_NULL_LABEL,
  44904. (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CV_LABEL,
  44905. (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM_LABEL,
  44906. (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ_LABEL,
  44907. (void*)&&ZEND_NULL_LABEL,
  44908. (void*)&&ZEND_NULL_LABEL,
  44909. (void*)&&ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ_LABEL,
  44910. (void*)&&ZEND_NULL_LABEL,
  44911. (void*)&&ZEND_NULL_LABEL,
  44912. (void*)&&ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  44913. (void*)&&ZEND_NULL_LABEL,
  44914. (void*)&&ZEND_NULL_LABEL,
  44915. (void*)&&ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  44916. (void*)&&ZEND_NULL_LABEL,
  44917. (void*)&&ZEND_NULL_LABEL,
  44918. (void*)&&ZEND_NULL_LABEL,
  44919. (void*)&&ZEND_NULL_LABEL,
  44920. (void*)&&ZEND_NULL_LABEL,
  44921. (void*)&&ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ_LABEL,
  44922. (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CONST_LABEL,
  44923. (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM_LABEL,
  44924. (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ_LABEL,
  44925. (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_LABEL,
  44926. (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_LABEL,
  44927. (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_LABEL,
  44928. (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_LABEL,
  44929. (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_LABEL,
  44930. (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_LABEL,
  44931. (void*)&&ZEND_NULL_LABEL,
  44932. (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM_LABEL,
  44933. (void*)&&ZEND_NULL_LABEL,
  44934. (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CV_LABEL,
  44935. (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM_LABEL,
  44936. (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ_LABEL,
  44937. (void*)&&ZEND_NULL_LABEL,
  44938. (void*)&&ZEND_NULL_LABEL,
  44939. (void*)&&ZEND_NULL_LABEL,
  44940. (void*)&&ZEND_NULL_LABEL,
  44941. (void*)&&ZEND_NULL_LABEL,
  44942. (void*)&&ZEND_NULL_LABEL,
  44943. (void*)&&ZEND_NULL_LABEL,
  44944. (void*)&&ZEND_NULL_LABEL,
  44945. (void*)&&ZEND_NULL_LABEL,
  44946. (void*)&&ZEND_NULL_LABEL,
  44947. (void*)&&ZEND_NULL_LABEL,
  44948. (void*)&&ZEND_NULL_LABEL,
  44949. (void*)&&ZEND_NULL_LABEL,
  44950. (void*)&&ZEND_NULL_LABEL,
  44951. (void*)&&ZEND_NULL_LABEL,
  44952. (void*)&&ZEND_NULL_LABEL,
  44953. (void*)&&ZEND_NULL_LABEL,
  44954. (void*)&&ZEND_NULL_LABEL,
  44955. (void*)&&ZEND_NULL_LABEL,
  44956. (void*)&&ZEND_NULL_LABEL,
  44957. (void*)&&ZEND_NULL_LABEL,
  44958. (void*)&&ZEND_NULL_LABEL,
  44959. (void*)&&ZEND_NULL_LABEL,
  44960. (void*)&&ZEND_NULL_LABEL,
  44961. (void*)&&ZEND_NULL_LABEL,
  44962. (void*)&&ZEND_NULL_LABEL,
  44963. (void*)&&ZEND_NULL_LABEL,
  44964. (void*)&&ZEND_NULL_LABEL,
  44965. (void*)&&ZEND_NULL_LABEL,
  44966. (void*)&&ZEND_NULL_LABEL,
  44967. (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CONST_LABEL,
  44968. (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM_LABEL,
  44969. (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ_LABEL,
  44970. (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_LABEL,
  44971. (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_LABEL,
  44972. (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_LABEL,
  44973. (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_LABEL,
  44974. (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_LABEL,
  44975. (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_LABEL,
  44976. (void*)&&ZEND_NULL_LABEL,
  44977. (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM_LABEL,
  44978. (void*)&&ZEND_NULL_LABEL,
  44979. (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CV_LABEL,
  44980. (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM_LABEL,
  44981. (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ_LABEL,
  44982. (void*)&&ZEND_NULL_LABEL,
  44983. (void*)&&ZEND_NULL_LABEL,
  44984. (void*)&&ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ_LABEL,
  44985. (void*)&&ZEND_NULL_LABEL,
  44986. (void*)&&ZEND_NULL_LABEL,
  44987. (void*)&&ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  44988. (void*)&&ZEND_NULL_LABEL,
  44989. (void*)&&ZEND_NULL_LABEL,
  44990. (void*)&&ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  44991. (void*)&&ZEND_NULL_LABEL,
  44992. (void*)&&ZEND_NULL_LABEL,
  44993. (void*)&&ZEND_NULL_LABEL,
  44994. (void*)&&ZEND_NULL_LABEL,
  44995. (void*)&&ZEND_NULL_LABEL,
  44996. (void*)&&ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ_LABEL,
  44997. (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CONST_LABEL,
  44998. (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM_LABEL,
  44999. (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ_LABEL,
  45000. (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_LABEL,
  45001. (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_LABEL,
  45002. (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_LABEL,
  45003. (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_LABEL,
  45004. (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_LABEL,
  45005. (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_LABEL,
  45006. (void*)&&ZEND_NULL_LABEL,
  45007. (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM_LABEL,
  45008. (void*)&&ZEND_NULL_LABEL,
  45009. (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CV_LABEL,
  45010. (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM_LABEL,
  45011. (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ_LABEL,
  45012. (void*)&&ZEND_NULL_LABEL,
  45013. (void*)&&ZEND_NULL_LABEL,
  45014. (void*)&&ZEND_NULL_LABEL,
  45015. (void*)&&ZEND_NULL_LABEL,
  45016. (void*)&&ZEND_NULL_LABEL,
  45017. (void*)&&ZEND_NULL_LABEL,
  45018. (void*)&&ZEND_NULL_LABEL,
  45019. (void*)&&ZEND_NULL_LABEL,
  45020. (void*)&&ZEND_NULL_LABEL,
  45021. (void*)&&ZEND_NULL_LABEL,
  45022. (void*)&&ZEND_NULL_LABEL,
  45023. (void*)&&ZEND_NULL_LABEL,
  45024. (void*)&&ZEND_NULL_LABEL,
  45025. (void*)&&ZEND_NULL_LABEL,
  45026. (void*)&&ZEND_NULL_LABEL,
  45027. (void*)&&ZEND_NULL_LABEL,
  45028. (void*)&&ZEND_NULL_LABEL,
  45029. (void*)&&ZEND_NULL_LABEL,
  45030. (void*)&&ZEND_NULL_LABEL,
  45031. (void*)&&ZEND_NULL_LABEL,
  45032. (void*)&&ZEND_NULL_LABEL,
  45033. (void*)&&ZEND_NULL_LABEL,
  45034. (void*)&&ZEND_NULL_LABEL,
  45035. (void*)&&ZEND_NULL_LABEL,
  45036. (void*)&&ZEND_NULL_LABEL,
  45037. (void*)&&ZEND_NULL_LABEL,
  45038. (void*)&&ZEND_NULL_LABEL,
  45039. (void*)&&ZEND_NULL_LABEL,
  45040. (void*)&&ZEND_NULL_LABEL,
  45041. (void*)&&ZEND_NULL_LABEL,
  45042. (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CONST_LABEL,
  45043. (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM_LABEL,
  45044. (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ_LABEL,
  45045. (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_LABEL,
  45046. (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_LABEL,
  45047. (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_LABEL,
  45048. (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_LABEL,
  45049. (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_LABEL,
  45050. (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_LABEL,
  45051. (void*)&&ZEND_NULL_LABEL,
  45052. (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM_LABEL,
  45053. (void*)&&ZEND_NULL_LABEL,
  45054. (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CV_LABEL,
  45055. (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM_LABEL,
  45056. (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ_LABEL,
  45057. (void*)&&ZEND_NULL_LABEL,
  45058. (void*)&&ZEND_NULL_LABEL,
  45059. (void*)&&ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ_LABEL,
  45060. (void*)&&ZEND_NULL_LABEL,
  45061. (void*)&&ZEND_NULL_LABEL,
  45062. (void*)&&ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  45063. (void*)&&ZEND_NULL_LABEL,
  45064. (void*)&&ZEND_NULL_LABEL,
  45065. (void*)&&ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  45066. (void*)&&ZEND_NULL_LABEL,
  45067. (void*)&&ZEND_NULL_LABEL,
  45068. (void*)&&ZEND_NULL_LABEL,
  45069. (void*)&&ZEND_NULL_LABEL,
  45070. (void*)&&ZEND_NULL_LABEL,
  45071. (void*)&&ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ_LABEL,
  45072. (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CONST_LABEL,
  45073. (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM_LABEL,
  45074. (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ_LABEL,
  45075. (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_LABEL,
  45076. (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_LABEL,
  45077. (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_LABEL,
  45078. (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_LABEL,
  45079. (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_LABEL,
  45080. (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_LABEL,
  45081. (void*)&&ZEND_NULL_LABEL,
  45082. (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM_LABEL,
  45083. (void*)&&ZEND_NULL_LABEL,
  45084. (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CV_LABEL,
  45085. (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM_LABEL,
  45086. (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ_LABEL,
  45087. (void*)&&ZEND_NULL_LABEL,
  45088. (void*)&&ZEND_NULL_LABEL,
  45089. (void*)&&ZEND_NULL_LABEL,
  45090. (void*)&&ZEND_NULL_LABEL,
  45091. (void*)&&ZEND_NULL_LABEL,
  45092. (void*)&&ZEND_NULL_LABEL,
  45093. (void*)&&ZEND_NULL_LABEL,
  45094. (void*)&&ZEND_NULL_LABEL,
  45095. (void*)&&ZEND_NULL_LABEL,
  45096. (void*)&&ZEND_NULL_LABEL,
  45097. (void*)&&ZEND_NULL_LABEL,
  45098. (void*)&&ZEND_NULL_LABEL,
  45099. (void*)&&ZEND_NULL_LABEL,
  45100. (void*)&&ZEND_NULL_LABEL,
  45101. (void*)&&ZEND_NULL_LABEL,
  45102. (void*)&&ZEND_NULL_LABEL,
  45103. (void*)&&ZEND_NULL_LABEL,
  45104. (void*)&&ZEND_NULL_LABEL,
  45105. (void*)&&ZEND_NULL_LABEL,
  45106. (void*)&&ZEND_NULL_LABEL,
  45107. (void*)&&ZEND_NULL_LABEL,
  45108. (void*)&&ZEND_NULL_LABEL,
  45109. (void*)&&ZEND_NULL_LABEL,
  45110. (void*)&&ZEND_NULL_LABEL,
  45111. (void*)&&ZEND_NULL_LABEL,
  45112. (void*)&&ZEND_NULL_LABEL,
  45113. (void*)&&ZEND_NULL_LABEL,
  45114. (void*)&&ZEND_NULL_LABEL,
  45115. (void*)&&ZEND_NULL_LABEL,
  45116. (void*)&&ZEND_NULL_LABEL,
  45117. (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CONST_LABEL,
  45118. (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM_LABEL,
  45119. (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ_LABEL,
  45120. (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_LABEL,
  45121. (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_LABEL,
  45122. (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_LABEL,
  45123. (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_LABEL,
  45124. (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_LABEL,
  45125. (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_LABEL,
  45126. (void*)&&ZEND_NULL_LABEL,
  45127. (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM_LABEL,
  45128. (void*)&&ZEND_NULL_LABEL,
  45129. (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CV_LABEL,
  45130. (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM_LABEL,
  45131. (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ_LABEL,
  45132. (void*)&&ZEND_NULL_LABEL,
  45133. (void*)&&ZEND_NULL_LABEL,
  45134. (void*)&&ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ_LABEL,
  45135. (void*)&&ZEND_NULL_LABEL,
  45136. (void*)&&ZEND_NULL_LABEL,
  45137. (void*)&&ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  45138. (void*)&&ZEND_NULL_LABEL,
  45139. (void*)&&ZEND_NULL_LABEL,
  45140. (void*)&&ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  45141. (void*)&&ZEND_NULL_LABEL,
  45142. (void*)&&ZEND_NULL_LABEL,
  45143. (void*)&&ZEND_NULL_LABEL,
  45144. (void*)&&ZEND_NULL_LABEL,
  45145. (void*)&&ZEND_NULL_LABEL,
  45146. (void*)&&ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ_LABEL,
  45147. (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CONST_LABEL,
  45148. (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM_LABEL,
  45149. (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ_LABEL,
  45150. (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_LABEL,
  45151. (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_LABEL,
  45152. (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_LABEL,
  45153. (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_LABEL,
  45154. (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_LABEL,
  45155. (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_LABEL,
  45156. (void*)&&ZEND_NULL_LABEL,
  45157. (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM_LABEL,
  45158. (void*)&&ZEND_NULL_LABEL,
  45159. (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CV_LABEL,
  45160. (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM_LABEL,
  45161. (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ_LABEL,
  45162. (void*)&&ZEND_NULL_LABEL,
  45163. (void*)&&ZEND_NULL_LABEL,
  45164. (void*)&&ZEND_NULL_LABEL,
  45165. (void*)&&ZEND_NULL_LABEL,
  45166. (void*)&&ZEND_NULL_LABEL,
  45167. (void*)&&ZEND_NULL_LABEL,
  45168. (void*)&&ZEND_NULL_LABEL,
  45169. (void*)&&ZEND_NULL_LABEL,
  45170. (void*)&&ZEND_NULL_LABEL,
  45171. (void*)&&ZEND_NULL_LABEL,
  45172. (void*)&&ZEND_NULL_LABEL,
  45173. (void*)&&ZEND_NULL_LABEL,
  45174. (void*)&&ZEND_NULL_LABEL,
  45175. (void*)&&ZEND_NULL_LABEL,
  45176. (void*)&&ZEND_NULL_LABEL,
  45177. (void*)&&ZEND_NULL_LABEL,
  45178. (void*)&&ZEND_NULL_LABEL,
  45179. (void*)&&ZEND_NULL_LABEL,
  45180. (void*)&&ZEND_NULL_LABEL,
  45181. (void*)&&ZEND_NULL_LABEL,
  45182. (void*)&&ZEND_NULL_LABEL,
  45183. (void*)&&ZEND_NULL_LABEL,
  45184. (void*)&&ZEND_NULL_LABEL,
  45185. (void*)&&ZEND_NULL_LABEL,
  45186. (void*)&&ZEND_NULL_LABEL,
  45187. (void*)&&ZEND_NULL_LABEL,
  45188. (void*)&&ZEND_NULL_LABEL,
  45189. (void*)&&ZEND_NULL_LABEL,
  45190. (void*)&&ZEND_NULL_LABEL,
  45191. (void*)&&ZEND_NULL_LABEL,
  45192. (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CONST_LABEL,
  45193. (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM_LABEL,
  45194. (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ_LABEL,
  45195. (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_LABEL,
  45196. (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_LABEL,
  45197. (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_LABEL,
  45198. (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_LABEL,
  45199. (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_LABEL,
  45200. (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_LABEL,
  45201. (void*)&&ZEND_NULL_LABEL,
  45202. (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM_LABEL,
  45203. (void*)&&ZEND_NULL_LABEL,
  45204. (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CV_LABEL,
  45205. (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM_LABEL,
  45206. (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ_LABEL,
  45207. (void*)&&ZEND_NULL_LABEL,
  45208. (void*)&&ZEND_NULL_LABEL,
  45209. (void*)&&ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ_LABEL,
  45210. (void*)&&ZEND_NULL_LABEL,
  45211. (void*)&&ZEND_NULL_LABEL,
  45212. (void*)&&ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  45213. (void*)&&ZEND_NULL_LABEL,
  45214. (void*)&&ZEND_NULL_LABEL,
  45215. (void*)&&ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  45216. (void*)&&ZEND_NULL_LABEL,
  45217. (void*)&&ZEND_NULL_LABEL,
  45218. (void*)&&ZEND_NULL_LABEL,
  45219. (void*)&&ZEND_NULL_LABEL,
  45220. (void*)&&ZEND_NULL_LABEL,
  45221. (void*)&&ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ_LABEL,
  45222. (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CONST_LABEL,
  45223. (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM_LABEL,
  45224. (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ_LABEL,
  45225. (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_LABEL,
  45226. (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_LABEL,
  45227. (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_LABEL,
  45228. (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_LABEL,
  45229. (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_LABEL,
  45230. (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_LABEL,
  45231. (void*)&&ZEND_NULL_LABEL,
  45232. (void*)&&ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM_LABEL,
  45233. (void*)&&ZEND_NULL_LABEL,
  45234. (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CV_LABEL,
  45235. (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CV_DIM_LABEL,
  45236. (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ_LABEL,
  45237. (void*)&&ZEND_NULL_LABEL,
  45238. (void*)&&ZEND_NULL_LABEL,
  45239. (void*)&&ZEND_NULL_LABEL,
  45240. (void*)&&ZEND_NULL_LABEL,
  45241. (void*)&&ZEND_NULL_LABEL,
  45242. (void*)&&ZEND_NULL_LABEL,
  45243. (void*)&&ZEND_NULL_LABEL,
  45244. (void*)&&ZEND_NULL_LABEL,
  45245. (void*)&&ZEND_NULL_LABEL,
  45246. (void*)&&ZEND_NULL_LABEL,
  45247. (void*)&&ZEND_NULL_LABEL,
  45248. (void*)&&ZEND_NULL_LABEL,
  45249. (void*)&&ZEND_NULL_LABEL,
  45250. (void*)&&ZEND_NULL_LABEL,
  45251. (void*)&&ZEND_NULL_LABEL,
  45252. (void*)&&ZEND_NULL_LABEL,
  45253. (void*)&&ZEND_NULL_LABEL,
  45254. (void*)&&ZEND_NULL_LABEL,
  45255. (void*)&&ZEND_NULL_LABEL,
  45256. (void*)&&ZEND_NULL_LABEL,
  45257. (void*)&&ZEND_NULL_LABEL,
  45258. (void*)&&ZEND_NULL_LABEL,
  45259. (void*)&&ZEND_NULL_LABEL,
  45260. (void*)&&ZEND_NULL_LABEL,
  45261. (void*)&&ZEND_NULL_LABEL,
  45262. (void*)&&ZEND_NULL_LABEL,
  45263. (void*)&&ZEND_NULL_LABEL,
  45264. (void*)&&ZEND_NULL_LABEL,
  45265. (void*)&&ZEND_NULL_LABEL,
  45266. (void*)&&ZEND_NULL_LABEL,
  45267. (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CONST_LABEL,
  45268. (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM_LABEL,
  45269. (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ_LABEL,
  45270. (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_LABEL,
  45271. (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_LABEL,
  45272. (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_LABEL,
  45273. (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_LABEL,
  45274. (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_LABEL,
  45275. (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_LABEL,
  45276. (void*)&&ZEND_NULL_LABEL,
  45277. (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM_LABEL,
  45278. (void*)&&ZEND_NULL_LABEL,
  45279. (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CV_LABEL,
  45280. (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM_LABEL,
  45281. (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ_LABEL,
  45282. (void*)&&ZEND_NULL_LABEL,
  45283. (void*)&&ZEND_NULL_LABEL,
  45284. (void*)&&ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ_LABEL,
  45285. (void*)&&ZEND_NULL_LABEL,
  45286. (void*)&&ZEND_NULL_LABEL,
  45287. (void*)&&ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  45288. (void*)&&ZEND_NULL_LABEL,
  45289. (void*)&&ZEND_NULL_LABEL,
  45290. (void*)&&ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  45291. (void*)&&ZEND_NULL_LABEL,
  45292. (void*)&&ZEND_NULL_LABEL,
  45293. (void*)&&ZEND_NULL_LABEL,
  45294. (void*)&&ZEND_NULL_LABEL,
  45295. (void*)&&ZEND_NULL_LABEL,
  45296. (void*)&&ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ_LABEL,
  45297. (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CONST_LABEL,
  45298. (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM_LABEL,
  45299. (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ_LABEL,
  45300. (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_LABEL,
  45301. (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_LABEL,
  45302. (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_LABEL,
  45303. (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_LABEL,
  45304. (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_LABEL,
  45305. (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_LABEL,
  45306. (void*)&&ZEND_NULL_LABEL,
  45307. (void*)&&ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM_LABEL,
  45308. (void*)&&ZEND_NULL_LABEL,
  45309. (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CV_LABEL,
  45310. (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CV_DIM_LABEL,
  45311. (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ_LABEL,
  45312. (void*)&&ZEND_NULL_LABEL,
  45313. (void*)&&ZEND_NULL_LABEL,
  45314. (void*)&&ZEND_NULL_LABEL,
  45315. (void*)&&ZEND_NULL_LABEL,
  45316. (void*)&&ZEND_NULL_LABEL,
  45317. (void*)&&ZEND_NULL_LABEL,
  45318. (void*)&&ZEND_NULL_LABEL,
  45319. (void*)&&ZEND_NULL_LABEL,
  45320. (void*)&&ZEND_NULL_LABEL,
  45321. (void*)&&ZEND_NULL_LABEL,
  45322. (void*)&&ZEND_NULL_LABEL,
  45323. (void*)&&ZEND_NULL_LABEL,
  45324. (void*)&&ZEND_NULL_LABEL,
  45325. (void*)&&ZEND_NULL_LABEL,
  45326. (void*)&&ZEND_NULL_LABEL,
  45327. (void*)&&ZEND_NULL_LABEL,
  45328. (void*)&&ZEND_NULL_LABEL,
  45329. (void*)&&ZEND_NULL_LABEL,
  45330. (void*)&&ZEND_NULL_LABEL,
  45331. (void*)&&ZEND_NULL_LABEL,
  45332. (void*)&&ZEND_NULL_LABEL,
  45333. (void*)&&ZEND_NULL_LABEL,
  45334. (void*)&&ZEND_NULL_LABEL,
  45335. (void*)&&ZEND_NULL_LABEL,
  45336. (void*)&&ZEND_NULL_LABEL,
  45337. (void*)&&ZEND_NULL_LABEL,
  45338. (void*)&&ZEND_NULL_LABEL,
  45339. (void*)&&ZEND_NULL_LABEL,
  45340. (void*)&&ZEND_NULL_LABEL,
  45341. (void*)&&ZEND_NULL_LABEL,
  45342. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_LABEL,
  45343. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM_LABEL,
  45344. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ_LABEL,
  45345. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_LABEL,
  45346. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_LABEL,
  45347. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_LABEL,
  45348. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_LABEL,
  45349. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_LABEL,
  45350. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_LABEL,
  45351. (void*)&&ZEND_NULL_LABEL,
  45352. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM_LABEL,
  45353. (void*)&&ZEND_NULL_LABEL,
  45354. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_LABEL,
  45355. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM_LABEL,
  45356. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ_LABEL,
  45357. (void*)&&ZEND_NULL_LABEL,
  45358. (void*)&&ZEND_NULL_LABEL,
  45359. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ_LABEL,
  45360. (void*)&&ZEND_NULL_LABEL,
  45361. (void*)&&ZEND_NULL_LABEL,
  45362. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  45363. (void*)&&ZEND_NULL_LABEL,
  45364. (void*)&&ZEND_NULL_LABEL,
  45365. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  45366. (void*)&&ZEND_NULL_LABEL,
  45367. (void*)&&ZEND_NULL_LABEL,
  45368. (void*)&&ZEND_NULL_LABEL,
  45369. (void*)&&ZEND_NULL_LABEL,
  45370. (void*)&&ZEND_NULL_LABEL,
  45371. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ_LABEL,
  45372. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_LABEL,
  45373. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM_LABEL,
  45374. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ_LABEL,
  45375. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_LABEL,
  45376. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_LABEL,
  45377. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_LABEL,
  45378. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_LABEL,
  45379. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_LABEL,
  45380. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_LABEL,
  45381. (void*)&&ZEND_NULL_LABEL,
  45382. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM_LABEL,
  45383. (void*)&&ZEND_NULL_LABEL,
  45384. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CV_LABEL,
  45385. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM_LABEL,
  45386. (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ_LABEL,
  45387. (void*)&&ZEND_NULL_LABEL,
  45388. (void*)&&ZEND_NULL_LABEL,
  45389. (void*)&&ZEND_NULL_LABEL,
  45390. (void*)&&ZEND_NULL_LABEL,
  45391. (void*)&&ZEND_NULL_LABEL,
  45392. (void*)&&ZEND_NULL_LABEL,
  45393. (void*)&&ZEND_NULL_LABEL,
  45394. (void*)&&ZEND_NULL_LABEL,
  45395. (void*)&&ZEND_NULL_LABEL,
  45396. (void*)&&ZEND_NULL_LABEL,
  45397. (void*)&&ZEND_NULL_LABEL,
  45398. (void*)&&ZEND_NULL_LABEL,
  45399. (void*)&&ZEND_NULL_LABEL,
  45400. (void*)&&ZEND_NULL_LABEL,
  45401. (void*)&&ZEND_NULL_LABEL,
  45402. (void*)&&ZEND_NULL_LABEL,
  45403. (void*)&&ZEND_NULL_LABEL,
  45404. (void*)&&ZEND_NULL_LABEL,
  45405. (void*)&&ZEND_NULL_LABEL,
  45406. (void*)&&ZEND_NULL_LABEL,
  45407. (void*)&&ZEND_NULL_LABEL,
  45408. (void*)&&ZEND_NULL_LABEL,
  45409. (void*)&&ZEND_NULL_LABEL,
  45410. (void*)&&ZEND_NULL_LABEL,
  45411. (void*)&&ZEND_NULL_LABEL,
  45412. (void*)&&ZEND_NULL_LABEL,
  45413. (void*)&&ZEND_NULL_LABEL,
  45414. (void*)&&ZEND_NULL_LABEL,
  45415. (void*)&&ZEND_NULL_LABEL,
  45416. (void*)&&ZEND_NULL_LABEL,
  45417. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_LABEL,
  45418. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM_LABEL,
  45419. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ_LABEL,
  45420. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_LABEL,
  45421. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_LABEL,
  45422. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_LABEL,
  45423. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_LABEL,
  45424. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_LABEL,
  45425. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_LABEL,
  45426. (void*)&&ZEND_NULL_LABEL,
  45427. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM_LABEL,
  45428. (void*)&&ZEND_NULL_LABEL,
  45429. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_LABEL,
  45430. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM_LABEL,
  45431. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ_LABEL,
  45432. (void*)&&ZEND_NULL_LABEL,
  45433. (void*)&&ZEND_NULL_LABEL,
  45434. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ_LABEL,
  45435. (void*)&&ZEND_NULL_LABEL,
  45436. (void*)&&ZEND_NULL_LABEL,
  45437. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  45438. (void*)&&ZEND_NULL_LABEL,
  45439. (void*)&&ZEND_NULL_LABEL,
  45440. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  45441. (void*)&&ZEND_NULL_LABEL,
  45442. (void*)&&ZEND_NULL_LABEL,
  45443. (void*)&&ZEND_NULL_LABEL,
  45444. (void*)&&ZEND_NULL_LABEL,
  45445. (void*)&&ZEND_NULL_LABEL,
  45446. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ_LABEL,
  45447. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_LABEL,
  45448. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM_LABEL,
  45449. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ_LABEL,
  45450. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_LABEL,
  45451. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_LABEL,
  45452. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_LABEL,
  45453. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_LABEL,
  45454. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_LABEL,
  45455. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_LABEL,
  45456. (void*)&&ZEND_NULL_LABEL,
  45457. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM_LABEL,
  45458. (void*)&&ZEND_NULL_LABEL,
  45459. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CV_LABEL,
  45460. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM_LABEL,
  45461. (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ_LABEL,
  45462. (void*)&&ZEND_NULL_LABEL,
  45463. (void*)&&ZEND_NULL_LABEL,
  45464. (void*)&&ZEND_NULL_LABEL,
  45465. (void*)&&ZEND_NULL_LABEL,
  45466. (void*)&&ZEND_NULL_LABEL,
  45467. (void*)&&ZEND_NULL_LABEL,
  45468. (void*)&&ZEND_NULL_LABEL,
  45469. (void*)&&ZEND_NULL_LABEL,
  45470. (void*)&&ZEND_NULL_LABEL,
  45471. (void*)&&ZEND_NULL_LABEL,
  45472. (void*)&&ZEND_NULL_LABEL,
  45473. (void*)&&ZEND_NULL_LABEL,
  45474. (void*)&&ZEND_NULL_LABEL,
  45475. (void*)&&ZEND_NULL_LABEL,
  45476. (void*)&&ZEND_NULL_LABEL,
  45477. (void*)&&ZEND_NULL_LABEL,
  45478. (void*)&&ZEND_NULL_LABEL,
  45479. (void*)&&ZEND_NULL_LABEL,
  45480. (void*)&&ZEND_NULL_LABEL,
  45481. (void*)&&ZEND_NULL_LABEL,
  45482. (void*)&&ZEND_NULL_LABEL,
  45483. (void*)&&ZEND_NULL_LABEL,
  45484. (void*)&&ZEND_NULL_LABEL,
  45485. (void*)&&ZEND_NULL_LABEL,
  45486. (void*)&&ZEND_NULL_LABEL,
  45487. (void*)&&ZEND_NULL_LABEL,
  45488. (void*)&&ZEND_NULL_LABEL,
  45489. (void*)&&ZEND_NULL_LABEL,
  45490. (void*)&&ZEND_NULL_LABEL,
  45491. (void*)&&ZEND_NULL_LABEL,
  45492. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_LABEL,
  45493. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM_LABEL,
  45494. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ_LABEL,
  45495. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_LABEL,
  45496. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_LABEL,
  45497. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_LABEL,
  45498. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_LABEL,
  45499. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_LABEL,
  45500. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_LABEL,
  45501. (void*)&&ZEND_NULL_LABEL,
  45502. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM_LABEL,
  45503. (void*)&&ZEND_NULL_LABEL,
  45504. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_LABEL,
  45505. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM_LABEL,
  45506. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ_LABEL,
  45507. (void*)&&ZEND_NULL_LABEL,
  45508. (void*)&&ZEND_NULL_LABEL,
  45509. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ_LABEL,
  45510. (void*)&&ZEND_NULL_LABEL,
  45511. (void*)&&ZEND_NULL_LABEL,
  45512. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  45513. (void*)&&ZEND_NULL_LABEL,
  45514. (void*)&&ZEND_NULL_LABEL,
  45515. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  45516. (void*)&&ZEND_NULL_LABEL,
  45517. (void*)&&ZEND_NULL_LABEL,
  45518. (void*)&&ZEND_NULL_LABEL,
  45519. (void*)&&ZEND_NULL_LABEL,
  45520. (void*)&&ZEND_NULL_LABEL,
  45521. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ_LABEL,
  45522. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_LABEL,
  45523. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM_LABEL,
  45524. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ_LABEL,
  45525. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_LABEL,
  45526. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_LABEL,
  45527. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_LABEL,
  45528. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_LABEL,
  45529. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_LABEL,
  45530. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_LABEL,
  45531. (void*)&&ZEND_NULL_LABEL,
  45532. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM_LABEL,
  45533. (void*)&&ZEND_NULL_LABEL,
  45534. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CV_LABEL,
  45535. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM_LABEL,
  45536. (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ_LABEL,
  45537. (void*)&&ZEND_NULL_LABEL,
  45538. (void*)&&ZEND_NULL_LABEL,
  45539. (void*)&&ZEND_NULL_LABEL,
  45540. (void*)&&ZEND_NULL_LABEL,
  45541. (void*)&&ZEND_NULL_LABEL,
  45542. (void*)&&ZEND_NULL_LABEL,
  45543. (void*)&&ZEND_NULL_LABEL,
  45544. (void*)&&ZEND_NULL_LABEL,
  45545. (void*)&&ZEND_NULL_LABEL,
  45546. (void*)&&ZEND_NULL_LABEL,
  45547. (void*)&&ZEND_NULL_LABEL,
  45548. (void*)&&ZEND_NULL_LABEL,
  45549. (void*)&&ZEND_NULL_LABEL,
  45550. (void*)&&ZEND_NULL_LABEL,
  45551. (void*)&&ZEND_NULL_LABEL,
  45552. (void*)&&ZEND_NULL_LABEL,
  45553. (void*)&&ZEND_NULL_LABEL,
  45554. (void*)&&ZEND_NULL_LABEL,
  45555. (void*)&&ZEND_NULL_LABEL,
  45556. (void*)&&ZEND_NULL_LABEL,
  45557. (void*)&&ZEND_NULL_LABEL,
  45558. (void*)&&ZEND_NULL_LABEL,
  45559. (void*)&&ZEND_NULL_LABEL,
  45560. (void*)&&ZEND_NULL_LABEL,
  45561. (void*)&&ZEND_NULL_LABEL,
  45562. (void*)&&ZEND_NULL_LABEL,
  45563. (void*)&&ZEND_NULL_LABEL,
  45564. (void*)&&ZEND_NULL_LABEL,
  45565. (void*)&&ZEND_NULL_LABEL,
  45566. (void*)&&ZEND_NULL_LABEL,
  45567. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_LABEL,
  45568. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM_LABEL,
  45569. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ_LABEL,
  45570. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_LABEL,
  45571. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_LABEL,
  45572. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_LABEL,
  45573. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_LABEL,
  45574. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_LABEL,
  45575. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_LABEL,
  45576. (void*)&&ZEND_NULL_LABEL,
  45577. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM_LABEL,
  45578. (void*)&&ZEND_NULL_LABEL,
  45579. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_LABEL,
  45580. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM_LABEL,
  45581. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ_LABEL,
  45582. (void*)&&ZEND_NULL_LABEL,
  45583. (void*)&&ZEND_NULL_LABEL,
  45584. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ_LABEL,
  45585. (void*)&&ZEND_NULL_LABEL,
  45586. (void*)&&ZEND_NULL_LABEL,
  45587. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  45588. (void*)&&ZEND_NULL_LABEL,
  45589. (void*)&&ZEND_NULL_LABEL,
  45590. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  45591. (void*)&&ZEND_NULL_LABEL,
  45592. (void*)&&ZEND_NULL_LABEL,
  45593. (void*)&&ZEND_NULL_LABEL,
  45594. (void*)&&ZEND_NULL_LABEL,
  45595. (void*)&&ZEND_NULL_LABEL,
  45596. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ_LABEL,
  45597. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_LABEL,
  45598. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM_LABEL,
  45599. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ_LABEL,
  45600. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_LABEL,
  45601. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_LABEL,
  45602. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_LABEL,
  45603. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_LABEL,
  45604. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_LABEL,
  45605. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_LABEL,
  45606. (void*)&&ZEND_NULL_LABEL,
  45607. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM_LABEL,
  45608. (void*)&&ZEND_NULL_LABEL,
  45609. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_LABEL,
  45610. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM_LABEL,
  45611. (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ_LABEL,
  45612. (void*)&&ZEND_NULL_LABEL,
  45613. (void*)&&ZEND_NULL_LABEL,
  45614. (void*)&&ZEND_NULL_LABEL,
  45615. (void*)&&ZEND_NULL_LABEL,
  45616. (void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_LABEL,
  45617. (void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_LABEL,
  45618. (void*)&&ZEND_NULL_LABEL,
  45619. (void*)&&ZEND_NULL_LABEL,
  45620. (void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_LABEL,
  45621. (void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_USED_LABEL,
  45622. (void*)&&ZEND_NULL_LABEL,
  45623. (void*)&&ZEND_NULL_LABEL,
  45624. (void*)&&ZEND_NULL_LABEL,
  45625. (void*)&&ZEND_NULL_LABEL,
  45626. (void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_LABEL,
  45627. (void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_LABEL,
  45628. (void*)&&ZEND_NULL_LABEL,
  45629. (void*)&&ZEND_NULL_LABEL,
  45630. (void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_LABEL,
  45631. (void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_LABEL,
  45632. (void*)&&ZEND_NULL_LABEL,
  45633. (void*)&&ZEND_NULL_LABEL,
  45634. (void*)&&ZEND_POST_INC_SPEC_VAR_LABEL,
  45635. (void*)&&ZEND_NULL_LABEL,
  45636. (void*)&&ZEND_POST_INC_SPEC_CV_LABEL,
  45637. (void*)&&ZEND_NULL_LABEL,
  45638. (void*)&&ZEND_NULL_LABEL,
  45639. (void*)&&ZEND_POST_DEC_SPEC_VAR_LABEL,
  45640. (void*)&&ZEND_NULL_LABEL,
  45641. (void*)&&ZEND_POST_DEC_SPEC_CV_LABEL,
  45642. (void*)&&ZEND_NULL_LABEL,
  45643. (void*)&&ZEND_NULL_LABEL,
  45644. (void*)&&ZEND_NULL_LABEL,
  45645. (void*)&&ZEND_NULL_LABEL,
  45646. (void*)&&ZEND_NULL_LABEL,
  45647. (void*)&&ZEND_NULL_LABEL,
  45648. (void*)&&ZEND_NULL_LABEL,
  45649. (void*)&&ZEND_NULL_LABEL,
  45650. (void*)&&ZEND_NULL_LABEL,
  45651. (void*)&&ZEND_NULL_LABEL,
  45652. (void*)&&ZEND_NULL_LABEL,
  45653. (void*)&&ZEND_NULL_LABEL,
  45654. (void*)&&ZEND_NULL_LABEL,
  45655. (void*)&&ZEND_NULL_LABEL,
  45656. (void*)&&ZEND_NULL_LABEL,
  45657. (void*)&&ZEND_NULL_LABEL,
  45658. (void*)&&ZEND_NULL_LABEL,
  45659. (void*)&&ZEND_NULL_LABEL,
  45660. (void*)&&ZEND_NULL_LABEL,
  45661. (void*)&&ZEND_NULL_LABEL,
  45662. (void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_LABEL,
  45663. (void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_LABEL,
  45664. (void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_LABEL,
  45665. (void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_LABEL,
  45666. (void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_LABEL,
  45667. (void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_LABEL,
  45668. (void*)&&ZEND_NULL_LABEL,
  45669. (void*)&&ZEND_NULL_LABEL,
  45670. (void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
  45671. (void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_LABEL,
  45672. (void*)&&ZEND_NULL_LABEL,
  45673. (void*)&&ZEND_NULL_LABEL,
  45674. (void*)&&ZEND_NULL_LABEL,
  45675. (void*)&&ZEND_NULL_LABEL,
  45676. (void*)&&ZEND_NULL_LABEL,
  45677. (void*)&&ZEND_NULL_LABEL,
  45678. (void*)&&ZEND_NULL_LABEL,
  45679. (void*)&&ZEND_NULL_LABEL,
  45680. (void*)&&ZEND_NULL_LABEL,
  45681. (void*)&&ZEND_NULL_LABEL,
  45682. (void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_LABEL,
  45683. (void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_LABEL,
  45684. (void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_LABEL,
  45685. (void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_LABEL,
  45686. (void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_LABEL,
  45687. (void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_LABEL,
  45688. (void*)&&ZEND_NULL_LABEL,
  45689. (void*)&&ZEND_NULL_LABEL,
  45690. (void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_LABEL,
  45691. (void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_LABEL,
  45692. (void*)&&ZEND_NULL_LABEL,
  45693. (void*)&&ZEND_NULL_LABEL,
  45694. (void*)&&ZEND_NULL_LABEL,
  45695. (void*)&&ZEND_NULL_LABEL,
  45696. (void*)&&ZEND_NULL_LABEL,
  45697. (void*)&&ZEND_NULL_LABEL,
  45698. (void*)&&ZEND_NULL_LABEL,
  45699. (void*)&&ZEND_NULL_LABEL,
  45700. (void*)&&ZEND_NULL_LABEL,
  45701. (void*)&&ZEND_NULL_LABEL,
  45702. (void*)&&ZEND_NULL_LABEL,
  45703. (void*)&&ZEND_NULL_LABEL,
  45704. (void*)&&ZEND_ASSIGN_REF_SPEC_VAR_VAR_LABEL,
  45705. (void*)&&ZEND_NULL_LABEL,
  45706. (void*)&&ZEND_ASSIGN_REF_SPEC_VAR_CV_LABEL,
  45707. (void*)&&ZEND_NULL_LABEL,
  45708. (void*)&&ZEND_NULL_LABEL,
  45709. (void*)&&ZEND_NULL_LABEL,
  45710. (void*)&&ZEND_NULL_LABEL,
  45711. (void*)&&ZEND_NULL_LABEL,
  45712. (void*)&&ZEND_NULL_LABEL,
  45713. (void*)&&ZEND_NULL_LABEL,
  45714. (void*)&&ZEND_ASSIGN_REF_SPEC_CV_VAR_LABEL,
  45715. (void*)&&ZEND_NULL_LABEL,
  45716. (void*)&&ZEND_ASSIGN_REF_SPEC_CV_CV_LABEL,
  45717. (void*)&&ZEND_ECHO_SPEC_CONST_LABEL,
  45718. (void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
  45719. (void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
  45720. (void*)&&ZEND_NULL_LABEL,
  45721. (void*)&&ZEND_ECHO_SPEC_CV_LABEL,
  45722. (void*)&&ZEND_GENERATOR_CREATE_SPEC_LABEL,
  45723. (void*)&&ZEND_JMP_SPEC_LABEL,
  45724. (void*)&&ZEND_JMPZ_SPEC_CONST_LABEL,
  45725. (void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
  45726. (void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
  45727. (void*)&&ZEND_NULL_LABEL,
  45728. (void*)&&ZEND_JMPZ_SPEC_CV_LABEL,
  45729. (void*)&&ZEND_JMPNZ_SPEC_CONST_LABEL,
  45730. (void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
  45731. (void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
  45732. (void*)&&ZEND_NULL_LABEL,
  45733. (void*)&&ZEND_JMPNZ_SPEC_CV_LABEL,
  45734. (void*)&&ZEND_JMPZNZ_SPEC_CONST_LABEL,
  45735. (void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL,
  45736. (void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL,
  45737. (void*)&&ZEND_NULL_LABEL,
  45738. (void*)&&ZEND_JMPZNZ_SPEC_CV_LABEL,
  45739. (void*)&&ZEND_JMPZ_EX_SPEC_CONST_LABEL,
  45740. (void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
  45741. (void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
  45742. (void*)&&ZEND_NULL_LABEL,
  45743. (void*)&&ZEND_JMPZ_EX_SPEC_CV_LABEL,
  45744. (void*)&&ZEND_JMPNZ_EX_SPEC_CONST_LABEL,
  45745. (void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
  45746. (void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
  45747. (void*)&&ZEND_NULL_LABEL,
  45748. (void*)&&ZEND_JMPNZ_EX_SPEC_CV_LABEL,
  45749. (void*)&&ZEND_CASE_SPEC_TMPVAR_CONST_LABEL,
  45750. (void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
  45751. (void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
  45752. (void*)&&ZEND_NULL_LABEL,
  45753. (void*)&&ZEND_CASE_SPEC_TMPVAR_CV_LABEL,
  45754. (void*)&&ZEND_CHECK_VAR_SPEC_CV_UNUSED_LABEL,
  45755. (void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_LABEL,
  45756. (void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK_LABEL,
  45757. (void*)&&ZEND_NULL_LABEL,
  45758. (void*)&&ZEND_NULL_LABEL,
  45759. (void*)&&ZEND_MAKE_REF_SPEC_VAR_UNUSED_LABEL,
  45760. (void*)&&ZEND_NULL_LABEL,
  45761. (void*)&&ZEND_MAKE_REF_SPEC_CV_UNUSED_LABEL,
  45762. (void*)&&ZEND_BOOL_SPEC_CONST_LABEL,
  45763. (void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
  45764. (void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
  45765. (void*)&&ZEND_NULL_LABEL,
  45766. (void*)&&ZEND_BOOL_SPEC_CV_LABEL,
  45767. (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CONST_LABEL,
  45768. (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
  45769. (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
  45770. (void*)&&ZEND_NULL_LABEL,
  45771. (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CV_LABEL,
  45772. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
  45773. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  45774. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  45775. (void*)&&ZEND_NULL_LABEL,
  45776. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
  45777. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
  45778. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  45779. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
  45780. (void*)&&ZEND_NULL_LABEL,
  45781. (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
  45782. (void*)&&ZEND_NULL_LABEL,
  45783. (void*)&&ZEND_NULL_LABEL,
  45784. (void*)&&ZEND_NULL_LABEL,
  45785. (void*)&&ZEND_NULL_LABEL,
  45786. (void*)&&ZEND_NULL_LABEL,
  45787. (void*)&&ZEND_FAST_CONCAT_SPEC_CV_CONST_LABEL,
  45788. (void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
  45789. (void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
  45790. (void*)&&ZEND_NULL_LABEL,
  45791. (void*)&&ZEND_FAST_CONCAT_SPEC_CV_CV_LABEL,
  45792. (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CONST_LABEL,
  45793. (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
  45794. (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
  45795. (void*)&&ZEND_NULL_LABEL,
  45796. (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CV_LABEL,
  45797. (void*)&&ZEND_ROPE_ADD_SPEC_TMP_CONST_LABEL,
  45798. (void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
  45799. (void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
  45800. (void*)&&ZEND_NULL_LABEL,
  45801. (void*)&&ZEND_ROPE_ADD_SPEC_TMP_CV_LABEL,
  45802. (void*)&&ZEND_ROPE_END_SPEC_TMP_CONST_LABEL,
  45803. (void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
  45804. (void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
  45805. (void*)&&ZEND_NULL_LABEL,
  45806. (void*)&&ZEND_ROPE_END_SPEC_TMP_CV_LABEL,
  45807. (void*)&&ZEND_BEGIN_SILENCE_SPEC_LABEL,
  45808. (void*)&&ZEND_END_SILENCE_SPEC_TMP_LABEL,
  45809. (void*)&&ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_LABEL,
  45810. (void*)&&ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_LABEL,
  45811. (void*)&&ZEND_DO_FCALL_SPEC_RETVAL_USED_LABEL,
  45812. (void*)&&ZEND_INIT_FCALL_SPEC_CONST_LABEL,
  45813. (void*)&&ZEND_RETURN_SPEC_CONST_LABEL,
  45814. (void*)&&ZEND_RETURN_SPEC_TMP_LABEL,
  45815. (void*)&&ZEND_RETURN_SPEC_VAR_LABEL,
  45816. (void*)&&ZEND_NULL_LABEL,
  45817. (void*)&&ZEND_RETURN_SPEC_CV_LABEL,
  45818. (void*)&&ZEND_RECV_SPEC_UNUSED_LABEL,
  45819. (void*)&&ZEND_RECV_INIT_SPEC_CONST_LABEL,
  45820. (void*)&&ZEND_SEND_VAL_SPEC_CONST_LABEL,
  45821. (void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_LABEL,
  45822. (void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_LABEL,
  45823. (void*)&&ZEND_NULL_LABEL,
  45824. (void*)&&ZEND_NULL_LABEL,
  45825. (void*)&&ZEND_NULL_LABEL,
  45826. (void*)&&ZEND_NULL_LABEL,
  45827. (void*)&&ZEND_NULL_LABEL,
  45828. (void*)&&ZEND_NULL_LABEL,
  45829. (void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_LABEL,
  45830. (void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_LABEL,
  45831. (void*)&&ZEND_NULL_LABEL,
  45832. (void*)&&ZEND_NULL_LABEL,
  45833. (void*)&&ZEND_SEND_VAR_EX_SPEC_CV_LABEL,
  45834. (void*)&&ZEND_SEND_VAR_EX_SPEC_CV_QUICK_LABEL,
  45835. (void*)&&ZEND_NULL_LABEL,
  45836. (void*)&&ZEND_NULL_LABEL,
  45837. (void*)&&ZEND_SEND_REF_SPEC_VAR_LABEL,
  45838. (void*)&&ZEND_NULL_LABEL,
  45839. (void*)&&ZEND_SEND_REF_SPEC_CV_LABEL,
  45840. (void*)&&ZEND_NEW_SPEC_CONST_UNUSED_LABEL,
  45841. (void*)&&ZEND_NULL_LABEL,
  45842. (void*)&&ZEND_NEW_SPEC_VAR_UNUSED_LABEL,
  45843. (void*)&&ZEND_NEW_SPEC_UNUSED_UNUSED_LABEL,
  45844. (void*)&&ZEND_NULL_LABEL,
  45845. (void*)&&ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_LABEL,
  45846. (void*)&&ZEND_FREE_SPEC_TMPVAR_LABEL,
  45847. (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CONST_LABEL,
  45848. (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
  45849. (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
  45850. (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_LABEL,
  45851. (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CV_LABEL,
  45852. (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CONST_LABEL,
  45853. (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
  45854. (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
  45855. (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_LABEL,
  45856. (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CV_LABEL,
  45857. (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CONST_LABEL,
  45858. (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
  45859. (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
  45860. (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_LABEL,
  45861. (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CV_LABEL,
  45862. (void*)&&ZEND_NULL_LABEL,
  45863. (void*)&&ZEND_NULL_LABEL,
  45864. (void*)&&ZEND_NULL_LABEL,
  45865. (void*)&&ZEND_NULL_LABEL,
  45866. (void*)&&ZEND_NULL_LABEL,
  45867. (void*)&&ZEND_INIT_ARRAY_SPEC_CV_CONST_LABEL,
  45868. (void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
  45869. (void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
  45870. (void*)&&ZEND_INIT_ARRAY_SPEC_CV_UNUSED_LABEL,
  45871. (void*)&&ZEND_INIT_ARRAY_SPEC_CV_CV_LABEL,
  45872. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_LABEL,
  45873. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
  45874. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
  45875. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_LABEL,
  45876. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_LABEL,
  45877. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_LABEL,
  45878. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
  45879. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
  45880. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_LABEL,
  45881. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_LABEL,
  45882. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_LABEL,
  45883. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
  45884. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
  45885. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_LABEL,
  45886. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_LABEL,
  45887. (void*)&&ZEND_NULL_LABEL,
  45888. (void*)&&ZEND_NULL_LABEL,
  45889. (void*)&&ZEND_NULL_LABEL,
  45890. (void*)&&ZEND_NULL_LABEL,
  45891. (void*)&&ZEND_NULL_LABEL,
  45892. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_LABEL,
  45893. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
  45894. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
  45895. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_LABEL,
  45896. (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_LABEL,
  45897. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CONST_LABEL,
  45898. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
  45899. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
  45900. (void*)&&ZEND_NULL_LABEL,
  45901. (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CV_LABEL,
  45902. (void*)&&ZEND_UNSET_VAR_SPEC_CONST_UNUSED_LABEL,
  45903. (void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
  45904. (void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
  45905. (void*)&&ZEND_NULL_LABEL,
  45906. (void*)&&ZEND_UNSET_VAR_SPEC_CV_UNUSED_LABEL,
  45907. (void*)&&ZEND_NULL_LABEL,
  45908. (void*)&&ZEND_NULL_LABEL,
  45909. (void*)&&ZEND_NULL_LABEL,
  45910. (void*)&&ZEND_NULL_LABEL,
  45911. (void*)&&ZEND_NULL_LABEL,
  45912. (void*)&&ZEND_NULL_LABEL,
  45913. (void*)&&ZEND_NULL_LABEL,
  45914. (void*)&&ZEND_NULL_LABEL,
  45915. (void*)&&ZEND_NULL_LABEL,
  45916. (void*)&&ZEND_NULL_LABEL,
  45917. (void*)&&ZEND_UNSET_DIM_SPEC_VAR_CONST_LABEL,
  45918. (void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
  45919. (void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
  45920. (void*)&&ZEND_NULL_LABEL,
  45921. (void*)&&ZEND_UNSET_DIM_SPEC_VAR_CV_LABEL,
  45922. (void*)&&ZEND_NULL_LABEL,
  45923. (void*)&&ZEND_NULL_LABEL,
  45924. (void*)&&ZEND_NULL_LABEL,
  45925. (void*)&&ZEND_NULL_LABEL,
  45926. (void*)&&ZEND_NULL_LABEL,
  45927. (void*)&&ZEND_UNSET_DIM_SPEC_CV_CONST_LABEL,
  45928. (void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
  45929. (void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
  45930. (void*)&&ZEND_NULL_LABEL,
  45931. (void*)&&ZEND_UNSET_DIM_SPEC_CV_CV_LABEL,
  45932. (void*)&&ZEND_NULL_LABEL,
  45933. (void*)&&ZEND_NULL_LABEL,
  45934. (void*)&&ZEND_NULL_LABEL,
  45935. (void*)&&ZEND_NULL_LABEL,
  45936. (void*)&&ZEND_NULL_LABEL,
  45937. (void*)&&ZEND_NULL_LABEL,
  45938. (void*)&&ZEND_NULL_LABEL,
  45939. (void*)&&ZEND_NULL_LABEL,
  45940. (void*)&&ZEND_NULL_LABEL,
  45941. (void*)&&ZEND_NULL_LABEL,
  45942. (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CONST_LABEL,
  45943. (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
  45944. (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
  45945. (void*)&&ZEND_NULL_LABEL,
  45946. (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CV_LABEL,
  45947. (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_LABEL,
  45948. (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  45949. (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  45950. (void*)&&ZEND_NULL_LABEL,
  45951. (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CV_LABEL,
  45952. (void*)&&ZEND_UNSET_OBJ_SPEC_CV_CONST_LABEL,
  45953. (void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
  45954. (void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
  45955. (void*)&&ZEND_NULL_LABEL,
  45956. (void*)&&ZEND_UNSET_OBJ_SPEC_CV_CV_LABEL,
  45957. (void*)&&ZEND_FE_RESET_R_SPEC_CONST_LABEL,
  45958. (void*)&&ZEND_FE_RESET_R_SPEC_TMP_LABEL,
  45959. (void*)&&ZEND_FE_RESET_R_SPEC_VAR_LABEL,
  45960. (void*)&&ZEND_NULL_LABEL,
  45961. (void*)&&ZEND_FE_RESET_R_SPEC_CV_LABEL,
  45962. (void*)&&ZEND_FE_FETCH_R_SPEC_VAR_LABEL,
  45963. (void*)&&ZEND_EXIT_SPEC_CONST_LABEL,
  45964. (void*)&&ZEND_EXIT_SPEC_TMPVAR_LABEL,
  45965. (void*)&&ZEND_EXIT_SPEC_TMPVAR_LABEL,
  45966. (void*)&&ZEND_EXIT_SPEC_UNUSED_LABEL,
  45967. (void*)&&ZEND_EXIT_SPEC_CV_LABEL,
  45968. (void*)&&ZEND_FETCH_R_SPEC_CONST_UNUSED_LABEL,
  45969. (void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
  45970. (void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
  45971. (void*)&&ZEND_NULL_LABEL,
  45972. (void*)&&ZEND_FETCH_R_SPEC_CV_UNUSED_LABEL,
  45973. (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CONST_LABEL,
  45974. (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
  45975. (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
  45976. (void*)&&ZEND_NULL_LABEL,
  45977. (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CV_LABEL,
  45978. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
  45979. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
  45980. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
  45981. (void*)&&ZEND_NULL_LABEL,
  45982. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
  45983. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
  45984. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
  45985. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
  45986. (void*)&&ZEND_NULL_LABEL,
  45987. (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
  45988. (void*)&&ZEND_NULL_LABEL,
  45989. (void*)&&ZEND_NULL_LABEL,
  45990. (void*)&&ZEND_NULL_LABEL,
  45991. (void*)&&ZEND_NULL_LABEL,
  45992. (void*)&&ZEND_NULL_LABEL,
  45993. (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CONST_LABEL,
  45994. (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
  45995. (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
  45996. (void*)&&ZEND_NULL_LABEL,
  45997. (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CV_LABEL,
  45998. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_LABEL,
  45999. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
  46000. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
  46001. (void*)&&ZEND_NULL_LABEL,
  46002. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CV_LABEL,
  46003. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
  46004. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
  46005. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
  46006. (void*)&&ZEND_NULL_LABEL,
  46007. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
  46008. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
  46009. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
  46010. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
  46011. (void*)&&ZEND_NULL_LABEL,
  46012. (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
  46013. (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_LABEL,
  46014. (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
  46015. (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
  46016. (void*)&&ZEND_NULL_LABEL,
  46017. (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_LABEL,
  46018. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CONST_LABEL,
  46019. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
  46020. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
  46021. (void*)&&ZEND_NULL_LABEL,
  46022. (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CV_LABEL,
  46023. (void*)&&ZEND_FETCH_W_SPEC_CONST_UNUSED_LABEL,
  46024. (void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
  46025. (void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
  46026. (void*)&&ZEND_NULL_LABEL,
  46027. (void*)&&ZEND_FETCH_W_SPEC_CV_UNUSED_LABEL,
  46028. (void*)&&ZEND_NULL_LABEL,
  46029. (void*)&&ZEND_NULL_LABEL,
  46030. (void*)&&ZEND_NULL_LABEL,
  46031. (void*)&&ZEND_NULL_LABEL,
  46032. (void*)&&ZEND_NULL_LABEL,
  46033. (void*)&&ZEND_NULL_LABEL,
  46034. (void*)&&ZEND_NULL_LABEL,
  46035. (void*)&&ZEND_NULL_LABEL,
  46036. (void*)&&ZEND_NULL_LABEL,
  46037. (void*)&&ZEND_NULL_LABEL,
  46038. (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CONST_LABEL,
  46039. (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
  46040. (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
  46041. (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_LABEL,
  46042. (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CV_LABEL,
  46043. (void*)&&ZEND_NULL_LABEL,
  46044. (void*)&&ZEND_NULL_LABEL,
  46045. (void*)&&ZEND_NULL_LABEL,
  46046. (void*)&&ZEND_NULL_LABEL,
  46047. (void*)&&ZEND_NULL_LABEL,
  46048. (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CONST_LABEL,
  46049. (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
  46050. (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
  46051. (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_LABEL,
  46052. (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CV_LABEL,
  46053. (void*)&&ZEND_NULL_LABEL,
  46054. (void*)&&ZEND_NULL_LABEL,
  46055. (void*)&&ZEND_NULL_LABEL,
  46056. (void*)&&ZEND_NULL_LABEL,
  46057. (void*)&&ZEND_NULL_LABEL,
  46058. (void*)&&ZEND_NULL_LABEL,
  46059. (void*)&&ZEND_NULL_LABEL,
  46060. (void*)&&ZEND_NULL_LABEL,
  46061. (void*)&&ZEND_NULL_LABEL,
  46062. (void*)&&ZEND_NULL_LABEL,
  46063. (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_LABEL,
  46064. (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
  46065. (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
  46066. (void*)&&ZEND_NULL_LABEL,
  46067. (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CV_LABEL,
  46068. (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_LABEL,
  46069. (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
  46070. (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
  46071. (void*)&&ZEND_NULL_LABEL,
  46072. (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_LABEL,
  46073. (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CONST_LABEL,
  46074. (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
  46075. (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
  46076. (void*)&&ZEND_NULL_LABEL,
  46077. (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CV_LABEL,
  46078. (void*)&&ZEND_FETCH_RW_SPEC_CONST_UNUSED_LABEL,
  46079. (void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
  46080. (void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
  46081. (void*)&&ZEND_NULL_LABEL,
  46082. (void*)&&ZEND_FETCH_RW_SPEC_CV_UNUSED_LABEL,
  46083. (void*)&&ZEND_NULL_LABEL,
  46084. (void*)&&ZEND_NULL_LABEL,
  46085. (void*)&&ZEND_NULL_LABEL,
  46086. (void*)&&ZEND_NULL_LABEL,
  46087. (void*)&&ZEND_NULL_LABEL,
  46088. (void*)&&ZEND_NULL_LABEL,
  46089. (void*)&&ZEND_NULL_LABEL,
  46090. (void*)&&ZEND_NULL_LABEL,
  46091. (void*)&&ZEND_NULL_LABEL,
  46092. (void*)&&ZEND_NULL_LABEL,
  46093. (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_LABEL,
  46094. (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
  46095. (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
  46096. (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_LABEL,
  46097. (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CV_LABEL,
  46098. (void*)&&ZEND_NULL_LABEL,
  46099. (void*)&&ZEND_NULL_LABEL,
  46100. (void*)&&ZEND_NULL_LABEL,
  46101. (void*)&&ZEND_NULL_LABEL,
  46102. (void*)&&ZEND_NULL_LABEL,
  46103. (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CONST_LABEL,
  46104. (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
  46105. (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
  46106. (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_LABEL,
  46107. (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CV_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_NULL_LABEL,
  46114. (void*)&&ZEND_NULL_LABEL,
  46115. (void*)&&ZEND_NULL_LABEL,
  46116. (void*)&&ZEND_NULL_LABEL,
  46117. (void*)&&ZEND_NULL_LABEL,
  46118. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_LABEL,
  46119. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
  46120. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
  46121. (void*)&&ZEND_NULL_LABEL,
  46122. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_LABEL,
  46123. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_LABEL,
  46124. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
  46125. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
  46126. (void*)&&ZEND_NULL_LABEL,
  46127. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_LABEL,
  46128. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_LABEL,
  46129. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
  46130. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
  46131. (void*)&&ZEND_NULL_LABEL,
  46132. (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CV_LABEL,
  46133. (void*)&&ZEND_FETCH_IS_SPEC_CONST_UNUSED_LABEL,
  46134. (void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
  46135. (void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
  46136. (void*)&&ZEND_NULL_LABEL,
  46137. (void*)&&ZEND_FETCH_IS_SPEC_CV_UNUSED_LABEL,
  46138. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_LABEL,
  46139. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
  46140. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
  46141. (void*)&&ZEND_NULL_LABEL,
  46142. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CV_LABEL,
  46143. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
  46144. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  46145. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  46146. (void*)&&ZEND_NULL_LABEL,
  46147. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
  46148. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
  46149. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  46150. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  46151. (void*)&&ZEND_NULL_LABEL,
  46152. (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
  46153. (void*)&&ZEND_NULL_LABEL,
  46154. (void*)&&ZEND_NULL_LABEL,
  46155. (void*)&&ZEND_NULL_LABEL,
  46156. (void*)&&ZEND_NULL_LABEL,
  46157. (void*)&&ZEND_NULL_LABEL,
  46158. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CONST_LABEL,
  46159. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
  46160. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
  46161. (void*)&&ZEND_NULL_LABEL,
  46162. (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CV_LABEL,
  46163. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_LABEL,
  46164. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
  46165. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
  46166. (void*)&&ZEND_NULL_LABEL,
  46167. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_LABEL,
  46168. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
  46169. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  46170. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  46171. (void*)&&ZEND_NULL_LABEL,
  46172. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
  46173. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
  46174. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  46175. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
  46176. (void*)&&ZEND_NULL_LABEL,
  46177. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
  46178. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_LABEL,
  46179. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
  46180. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
  46181. (void*)&&ZEND_NULL_LABEL,
  46182. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_LABEL,
  46183. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_LABEL,
  46184. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
  46185. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
  46186. (void*)&&ZEND_NULL_LABEL,
  46187. (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CV_LABEL,
  46188. (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
  46189. (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
  46190. (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
  46191. (void*)&&ZEND_NULL_LABEL,
  46192. (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
  46193. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_LABEL,
  46194. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
  46195. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
  46196. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
  46197. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_LABEL,
  46198. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_LABEL,
  46199. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
  46200. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
  46201. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_LABEL,
  46202. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_LABEL,
  46203. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_LABEL,
  46204. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
  46205. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
  46206. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_LABEL,
  46207. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_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_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_LABEL,
  46214. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
  46215. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
  46216. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
  46217. (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_LABEL,
  46218. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_LABEL,
  46219. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
  46220. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
  46221. (void*)&&ZEND_NULL_LABEL,
  46222. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_LABEL,
  46223. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_LABEL,
  46224. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
  46225. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
  46226. (void*)&&ZEND_NULL_LABEL,
  46227. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_LABEL,
  46228. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_LABEL,
  46229. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
  46230. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
  46231. (void*)&&ZEND_NULL_LABEL,
  46232. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_LABEL,
  46233. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
  46234. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
  46235. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
  46236. (void*)&&ZEND_NULL_LABEL,
  46237. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_LABEL,
  46238. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_LABEL,
  46239. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
  46240. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
  46241. (void*)&&ZEND_NULL_LABEL,
  46242. (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_LABEL,
  46243. (void*)&&ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_LABEL,
  46244. (void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
  46245. (void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
  46246. (void*)&&ZEND_NULL_LABEL,
  46247. (void*)&&ZEND_FETCH_UNSET_SPEC_CV_UNUSED_LABEL,
  46248. (void*)&&ZEND_NULL_LABEL,
  46249. (void*)&&ZEND_NULL_LABEL,
  46250. (void*)&&ZEND_NULL_LABEL,
  46251. (void*)&&ZEND_NULL_LABEL,
  46252. (void*)&&ZEND_NULL_LABEL,
  46253. (void*)&&ZEND_NULL_LABEL,
  46254. (void*)&&ZEND_NULL_LABEL,
  46255. (void*)&&ZEND_NULL_LABEL,
  46256. (void*)&&ZEND_NULL_LABEL,
  46257. (void*)&&ZEND_NULL_LABEL,
  46258. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_LABEL,
  46259. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
  46260. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
  46261. (void*)&&ZEND_NULL_LABEL,
  46262. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_LABEL,
  46263. (void*)&&ZEND_NULL_LABEL,
  46264. (void*)&&ZEND_NULL_LABEL,
  46265. (void*)&&ZEND_NULL_LABEL,
  46266. (void*)&&ZEND_NULL_LABEL,
  46267. (void*)&&ZEND_NULL_LABEL,
  46268. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_LABEL,
  46269. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
  46270. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
  46271. (void*)&&ZEND_NULL_LABEL,
  46272. (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_LABEL,
  46273. (void*)&&ZEND_NULL_LABEL,
  46274. (void*)&&ZEND_NULL_LABEL,
  46275. (void*)&&ZEND_NULL_LABEL,
  46276. (void*)&&ZEND_NULL_LABEL,
  46277. (void*)&&ZEND_NULL_LABEL,
  46278. (void*)&&ZEND_NULL_LABEL,
  46279. (void*)&&ZEND_NULL_LABEL,
  46280. (void*)&&ZEND_NULL_LABEL,
  46281. (void*)&&ZEND_NULL_LABEL,
  46282. (void*)&&ZEND_NULL_LABEL,
  46283. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_LABEL,
  46284. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
  46285. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
  46286. (void*)&&ZEND_NULL_LABEL,
  46287. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_LABEL,
  46288. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_LABEL,
  46289. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
  46290. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
  46291. (void*)&&ZEND_NULL_LABEL,
  46292. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_LABEL,
  46293. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_LABEL,
  46294. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
  46295. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
  46296. (void*)&&ZEND_NULL_LABEL,
  46297. (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_LABEL,
  46298. (void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CONST_LABEL,
  46299. (void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
  46300. (void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
  46301. (void*)&&ZEND_NULL_LABEL,
  46302. (void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CV_LABEL,
  46303. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
  46304. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  46305. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  46306. (void*)&&ZEND_NULL_LABEL,
  46307. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
  46308. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
  46309. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  46310. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  46311. (void*)&&ZEND_NULL_LABEL,
  46312. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
  46313. (void*)&&ZEND_NULL_LABEL,
  46314. (void*)&&ZEND_NULL_LABEL,
  46315. (void*)&&ZEND_NULL_LABEL,
  46316. (void*)&&ZEND_NULL_LABEL,
  46317. (void*)&&ZEND_NULL_LABEL,
  46318. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
  46319. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  46320. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
  46321. (void*)&&ZEND_NULL_LABEL,
  46322. (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
  46323. (void*)&&ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_LABEL,
  46324. (void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_LABEL,
  46325. (void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK_LABEL,
  46326. (void*)&&ZEND_EXT_STMT_SPEC_LABEL,
  46327. (void*)&&ZEND_EXT_FCALL_BEGIN_SPEC_LABEL,
  46328. (void*)&&ZEND_EXT_FCALL_END_SPEC_LABEL,
  46329. (void*)&&ZEND_EXT_NOP_SPEC_LABEL,
  46330. (void*)&&ZEND_TICKS_SPEC_LABEL,
  46331. (void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_LABEL,
  46332. (void*)&&ZEND_CATCH_SPEC_CONST_LABEL,
  46333. (void*)&&ZEND_THROW_SPEC_CONST_LABEL,
  46334. (void*)&&ZEND_THROW_SPEC_TMP_LABEL,
  46335. (void*)&&ZEND_THROW_SPEC_VAR_LABEL,
  46336. (void*)&&ZEND_NULL_LABEL,
  46337. (void*)&&ZEND_THROW_SPEC_CV_LABEL,
  46338. (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_LABEL,
  46339. (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
  46340. (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
  46341. (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_LABEL,
  46342. (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CV_LABEL,
  46343. (void*)&&ZEND_CLONE_SPEC_CONST_LABEL,
  46344. (void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
  46345. (void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
  46346. (void*)&&ZEND_CLONE_SPEC_UNUSED_LABEL,
  46347. (void*)&&ZEND_CLONE_SPEC_CV_LABEL,
  46348. (void*)&&ZEND_RETURN_BY_REF_SPEC_CONST_LABEL,
  46349. (void*)&&ZEND_RETURN_BY_REF_SPEC_TMP_LABEL,
  46350. (void*)&&ZEND_RETURN_BY_REF_SPEC_VAR_LABEL,
  46351. (void*)&&ZEND_NULL_LABEL,
  46352. (void*)&&ZEND_RETURN_BY_REF_SPEC_CV_LABEL,
  46353. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_LABEL,
  46354. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
  46355. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
  46356. (void*)&&ZEND_NULL_LABEL,
  46357. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_LABEL,
  46358. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
  46359. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
  46360. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
  46361. (void*)&&ZEND_NULL_LABEL,
  46362. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
  46363. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
  46364. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
  46365. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
  46366. (void*)&&ZEND_NULL_LABEL,
  46367. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
  46368. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
  46369. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
  46370. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
  46371. (void*)&&ZEND_NULL_LABEL,
  46372. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
  46373. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_LABEL,
  46374. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
  46375. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
  46376. (void*)&&ZEND_NULL_LABEL,
  46377. (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CV_LABEL,
  46378. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_LABEL,
  46379. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
  46380. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
  46381. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_LABEL,
  46382. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_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_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_LABEL,
  46389. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
  46390. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
  46391. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_LABEL,
  46392. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_LABEL,
  46393. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
  46394. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
  46395. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
  46396. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_LABEL,
  46397. (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
  46398. (void*)&&ZEND_NULL_LABEL,
  46399. (void*)&&ZEND_NULL_LABEL,
  46400. (void*)&&ZEND_NULL_LABEL,
  46401. (void*)&&ZEND_NULL_LABEL,
  46402. (void*)&&ZEND_NULL_LABEL,
  46403. (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_LABEL,
  46404. (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
  46405. (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
  46406. (void*)&&ZEND_NULL_LABEL,
  46407. (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_LABEL,
  46408. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_LABEL,
  46409. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
  46410. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
  46411. (void*)&&ZEND_NULL_LABEL,
  46412. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_LABEL,
  46413. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
  46414. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  46415. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  46416. (void*)&&ZEND_NULL_LABEL,
  46417. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
  46418. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
  46419. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  46420. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  46421. (void*)&&ZEND_NULL_LABEL,
  46422. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
  46423. (void*)&&ZEND_NULL_LABEL,
  46424. (void*)&&ZEND_NULL_LABEL,
  46425. (void*)&&ZEND_NULL_LABEL,
  46426. (void*)&&ZEND_NULL_LABEL,
  46427. (void*)&&ZEND_NULL_LABEL,
  46428. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_LABEL,
  46429. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
  46430. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
  46431. (void*)&&ZEND_NULL_LABEL,
  46432. (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_LABEL,
  46433. (void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_LABEL,
  46434. (void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_LABEL,
  46435. (void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_LABEL,
  46436. (void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_LABEL,
  46437. (void*)&&ZEND_NULL_LABEL,
  46438. (void*)&&ZEND_NULL_LABEL,
  46439. (void*)&&ZEND_NULL_LABEL,
  46440. (void*)&&ZEND_NULL_LABEL,
  46441. (void*)&&ZEND_NULL_LABEL,
  46442. (void*)&&ZEND_NULL_LABEL,
  46443. (void*)&&ZEND_NULL_LABEL,
  46444. (void*)&&ZEND_NULL_LABEL,
  46445. (void*)&&ZEND_SEND_VAR_SPEC_VAR_LABEL,
  46446. (void*)&&ZEND_NULL_LABEL,
  46447. (void*)&&ZEND_SEND_VAR_SPEC_CV_LABEL,
  46448. (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CONST_LABEL,
  46449. (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
  46450. (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
  46451. (void*)&&ZEND_NULL_LABEL,
  46452. (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CV_LABEL,
  46453. (void*)&&ZEND_SEND_ARRAY_SPEC_LABEL,
  46454. (void*)&&ZEND_SEND_USER_SPEC_CONST_LABEL,
  46455. (void*)&&ZEND_SEND_USER_SPEC_TMP_LABEL,
  46456. (void*)&&ZEND_SEND_USER_SPEC_VAR_LABEL,
  46457. (void*)&&ZEND_NULL_LABEL,
  46458. (void*)&&ZEND_SEND_USER_SPEC_CV_LABEL,
  46459. (void*)&&ZEND_STRLEN_SPEC_CONST_LABEL,
  46460. (void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
  46461. (void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
  46462. (void*)&&ZEND_NULL_LABEL,
  46463. (void*)&&ZEND_STRLEN_SPEC_CV_LABEL,
  46464. (void*)&&ZEND_DEFINED_SPEC_CONST_LABEL,
  46465. (void*)&&ZEND_TYPE_CHECK_SPEC_CONST_LABEL,
  46466. (void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
  46467. (void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
  46468. (void*)&&ZEND_NULL_LABEL,
  46469. (void*)&&ZEND_TYPE_CHECK_SPEC_CV_LABEL,
  46470. (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_LABEL,
  46471. (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_LABEL,
  46472. (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_LABEL,
  46473. (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_LABEL,
  46474. (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_LABEL,
  46475. (void*)&&ZEND_FE_RESET_RW_SPEC_CONST_LABEL,
  46476. (void*)&&ZEND_FE_RESET_RW_SPEC_TMP_LABEL,
  46477. (void*)&&ZEND_FE_RESET_RW_SPEC_VAR_LABEL,
  46478. (void*)&&ZEND_NULL_LABEL,
  46479. (void*)&&ZEND_FE_RESET_RW_SPEC_CV_LABEL,
  46480. (void*)&&ZEND_FE_FETCH_RW_SPEC_VAR_LABEL,
  46481. (void*)&&ZEND_FE_FREE_SPEC_TMPVAR_LABEL,
  46482. (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_LABEL,
  46483. (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
  46484. (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
  46485. (void*)&&ZEND_NULL_LABEL,
  46486. (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CV_LABEL,
  46487. (void*)&&ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_LABEL,
  46488. (void*)&&ZEND_DO_ICALL_SPEC_RETVAL_USED_LABEL,
  46489. (void*)&&ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_LABEL,
  46490. (void*)&&ZEND_DO_UCALL_SPEC_RETVAL_USED_LABEL,
  46491. (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_LABEL,
  46492. (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_LABEL,
  46493. (void*)&&ZEND_NULL_LABEL,
  46494. (void*)&&ZEND_NULL_LABEL,
  46495. (void*)&&ZEND_NULL_LABEL,
  46496. (void*)&&ZEND_NULL_LABEL,
  46497. (void*)&&ZEND_NULL_LABEL,
  46498. (void*)&&ZEND_NULL_LABEL,
  46499. (void*)&&ZEND_NULL_LABEL,
  46500. (void*)&&ZEND_NULL_LABEL,
  46501. (void*)&&ZEND_NULL_LABEL,
  46502. (void*)&&ZEND_NULL_LABEL,
  46503. (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_LABEL,
  46504. (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
  46505. (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
  46506. (void*)&&ZEND_NULL_LABEL,
  46507. (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CV_LABEL,
  46508. (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
  46509. (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  46510. (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  46511. (void*)&&ZEND_NULL_LABEL,
  46512. (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_LABEL,
  46513. (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CONST_LABEL,
  46514. (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
  46515. (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
  46516. (void*)&&ZEND_NULL_LABEL,
  46517. (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CV_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_PRE_DEC_OBJ_SPEC_VAR_CONST_LABEL,
  46529. (void*)&&ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_LABEL,
  46530. (void*)&&ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_LABEL,
  46531. (void*)&&ZEND_NULL_LABEL,
  46532. (void*)&&ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_LABEL,
  46533. (void*)&&ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_LABEL,
  46534. (void*)&&ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  46535. (void*)&&ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  46536. (void*)&&ZEND_NULL_LABEL,
  46537. (void*)&&ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_LABEL,
  46538. (void*)&&ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_LABEL,
  46539. (void*)&&ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_LABEL,
  46540. (void*)&&ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_LABEL,
  46541. (void*)&&ZEND_NULL_LABEL,
  46542. (void*)&&ZEND_PRE_DEC_OBJ_SPEC_CV_CV_LABEL,
  46543. (void*)&&ZEND_NULL_LABEL,
  46544. (void*)&&ZEND_NULL_LABEL,
  46545. (void*)&&ZEND_NULL_LABEL,
  46546. (void*)&&ZEND_NULL_LABEL,
  46547. (void*)&&ZEND_NULL_LABEL,
  46548. (void*)&&ZEND_NULL_LABEL,
  46549. (void*)&&ZEND_NULL_LABEL,
  46550. (void*)&&ZEND_NULL_LABEL,
  46551. (void*)&&ZEND_NULL_LABEL,
  46552. (void*)&&ZEND_NULL_LABEL,
  46553. (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CONST_LABEL,
  46554. (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
  46555. (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
  46556. (void*)&&ZEND_NULL_LABEL,
  46557. (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CV_LABEL,
  46558. (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
  46559. (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  46560. (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  46561. (void*)&&ZEND_NULL_LABEL,
  46562. (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_LABEL,
  46563. (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CONST_LABEL,
  46564. (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
  46565. (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
  46566. (void*)&&ZEND_NULL_LABEL,
  46567. (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CV_LABEL,
  46568. (void*)&&ZEND_NULL_LABEL,
  46569. (void*)&&ZEND_NULL_LABEL,
  46570. (void*)&&ZEND_NULL_LABEL,
  46571. (void*)&&ZEND_NULL_LABEL,
  46572. (void*)&&ZEND_NULL_LABEL,
  46573. (void*)&&ZEND_NULL_LABEL,
  46574. (void*)&&ZEND_NULL_LABEL,
  46575. (void*)&&ZEND_NULL_LABEL,
  46576. (void*)&&ZEND_NULL_LABEL,
  46577. (void*)&&ZEND_NULL_LABEL,
  46578. (void*)&&ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_LABEL,
  46579. (void*)&&ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_LABEL,
  46580. (void*)&&ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_LABEL,
  46581. (void*)&&ZEND_NULL_LABEL,
  46582. (void*)&&ZEND_POST_DEC_OBJ_SPEC_VAR_CV_LABEL,
  46583. (void*)&&ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_LABEL,
  46584. (void*)&&ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  46585. (void*)&&ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  46586. (void*)&&ZEND_NULL_LABEL,
  46587. (void*)&&ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_LABEL,
  46588. (void*)&&ZEND_POST_DEC_OBJ_SPEC_CV_CONST_LABEL,
  46589. (void*)&&ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_LABEL,
  46590. (void*)&&ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_LABEL,
  46591. (void*)&&ZEND_NULL_LABEL,
  46592. (void*)&&ZEND_POST_DEC_OBJ_SPEC_CV_CV_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_NULL_LABEL,
  46614. (void*)&&ZEND_NULL_LABEL,
  46615. (void*)&&ZEND_NULL_LABEL,
  46616. (void*)&&ZEND_NULL_LABEL,
  46617. (void*)&&ZEND_NULL_LABEL,
  46618. (void*)&&ZEND_NULL_LABEL,
  46619. (void*)&&ZEND_NULL_LABEL,
  46620. (void*)&&ZEND_NULL_LABEL,
  46621. (void*)&&ZEND_NULL_LABEL,
  46622. (void*)&&ZEND_NULL_LABEL,
  46623. (void*)&&ZEND_NULL_LABEL,
  46624. (void*)&&ZEND_NULL_LABEL,
  46625. (void*)&&ZEND_NULL_LABEL,
  46626. (void*)&&ZEND_NULL_LABEL,
  46627. (void*)&&ZEND_NULL_LABEL,
  46628. (void*)&&ZEND_NULL_LABEL,
  46629. (void*)&&ZEND_NULL_LABEL,
  46630. (void*)&&ZEND_NULL_LABEL,
  46631. (void*)&&ZEND_NULL_LABEL,
  46632. (void*)&&ZEND_NULL_LABEL,
  46633. (void*)&&ZEND_NULL_LABEL,
  46634. (void*)&&ZEND_NULL_LABEL,
  46635. (void*)&&ZEND_NULL_LABEL,
  46636. (void*)&&ZEND_NULL_LABEL,
  46637. (void*)&&ZEND_NULL_LABEL,
  46638. (void*)&&ZEND_NULL_LABEL,
  46639. (void*)&&ZEND_NULL_LABEL,
  46640. (void*)&&ZEND_NULL_LABEL,
  46641. (void*)&&ZEND_NULL_LABEL,
  46642. (void*)&&ZEND_NULL_LABEL,
  46643. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
  46644. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
  46645. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
  46646. (void*)&&ZEND_NULL_LABEL,
  46647. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
  46648. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
  46649. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
  46650. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
  46651. (void*)&&ZEND_NULL_LABEL,
  46652. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
  46653. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
  46654. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
  46655. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
  46656. (void*)&&ZEND_NULL_LABEL,
  46657. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
  46658. (void*)&&ZEND_NULL_LABEL,
  46659. (void*)&&ZEND_NULL_LABEL,
  46660. (void*)&&ZEND_NULL_LABEL,
  46661. (void*)&&ZEND_NULL_LABEL,
  46662. (void*)&&ZEND_NULL_LABEL,
  46663. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
  46664. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
  46665. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
  46666. (void*)&&ZEND_NULL_LABEL,
  46667. (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_LABEL,
  46668. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_LABEL,
  46669. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_LABEL,
  46670. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
  46671. (void*)&&ZEND_NULL_LABEL,
  46672. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
  46673. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
  46674. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
  46675. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
  46676. (void*)&&ZEND_NULL_LABEL,
  46677. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
  46678. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
  46679. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
  46680. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
  46681. (void*)&&ZEND_NULL_LABEL,
  46682. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_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_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_LABEL,
  46689. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_LABEL,
  46690. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
  46691. (void*)&&ZEND_NULL_LABEL,
  46692. (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
  46693. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
  46694. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
  46695. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
  46696. (void*)&&ZEND_NULL_LABEL,
  46697. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_LABEL,
  46698. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
  46699. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
  46700. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
  46701. (void*)&&ZEND_NULL_LABEL,
  46702. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
  46703. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
  46704. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
  46705. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
  46706. (void*)&&ZEND_NULL_LABEL,
  46707. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
  46708. (void*)&&ZEND_NULL_LABEL,
  46709. (void*)&&ZEND_NULL_LABEL,
  46710. (void*)&&ZEND_NULL_LABEL,
  46711. (void*)&&ZEND_NULL_LABEL,
  46712. (void*)&&ZEND_NULL_LABEL,
  46713. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_LABEL,
  46714. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_LABEL,
  46715. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_LABEL,
  46716. (void*)&&ZEND_NULL_LABEL,
  46717. (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_LABEL,
  46718. (void*)&&ZEND_NULL_LABEL,
  46719. (void*)&&ZEND_NULL_LABEL,
  46720. (void*)&&ZEND_NULL_LABEL,
  46721. (void*)&&ZEND_NULL_LABEL,
  46722. (void*)&&ZEND_NULL_LABEL,
  46723. (void*)&&ZEND_NULL_LABEL,
  46724. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
  46725. (void*)&&ZEND_NULL_LABEL,
  46726. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
  46727. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
  46728. (void*)&&ZEND_NULL_LABEL,
  46729. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
  46730. (void*)&&ZEND_NULL_LABEL,
  46731. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
  46732. (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
  46733. (void*)&&ZEND_NULL_LABEL,
  46734. (void*)&&ZEND_NULL_LABEL,
  46735. (void*)&&ZEND_NULL_LABEL,
  46736. (void*)&&ZEND_NULL_LABEL,
  46737. (void*)&&ZEND_NULL_LABEL,
  46738. (void*)&&ZEND_NULL_LABEL,
  46739. (void*)&&ZEND_INSTANCEOF_SPEC_CV_CONST_LABEL,
  46740. (void*)&&ZEND_NULL_LABEL,
  46741. (void*)&&ZEND_INSTANCEOF_SPEC_CV_VAR_LABEL,
  46742. (void*)&&ZEND_INSTANCEOF_SPEC_CV_UNUSED_LABEL,
  46743. (void*)&&ZEND_NULL_LABEL,
  46744. (void*)&&ZEND_DECLARE_CLASS_SPEC_CONST_LABEL,
  46745. (void*)&&ZEND_DECLARE_INHERITED_CLASS_SPEC_CONST_CONST_LABEL,
  46746. (void*)&&ZEND_DECLARE_FUNCTION_SPEC_LABEL,
  46747. (void*)&&ZEND_YIELD_FROM_SPEC_CONST_LABEL,
  46748. (void*)&&ZEND_YIELD_FROM_SPEC_TMP_LABEL,
  46749. (void*)&&ZEND_YIELD_FROM_SPEC_VAR_LABEL,
  46750. (void*)&&ZEND_NULL_LABEL,
  46751. (void*)&&ZEND_YIELD_FROM_SPEC_CV_LABEL,
  46752. (void*)&&ZEND_DECLARE_CONST_SPEC_CONST_CONST_LABEL,
  46753. (void*)&&ZEND_ADD_INTERFACE_SPEC_CONST_LABEL,
  46754. (void*)&&ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_CONST_CONST_LABEL,
  46755. (void*)&&ZEND_VERIFY_ABSTRACT_CLASS_SPEC_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_NULL_LABEL,
  46764. (void*)&&ZEND_NULL_LABEL,
  46765. (void*)&&ZEND_NULL_LABEL,
  46766. (void*)&&ZEND_NULL_LABEL,
  46767. (void*)&&ZEND_NULL_LABEL,
  46768. (void*)&&ZEND_NULL_LABEL,
  46769. (void*)&&ZEND_NULL_LABEL,
  46770. (void*)&&ZEND_NULL_LABEL,
  46771. (void*)&&ZEND_NULL_LABEL,
  46772. (void*)&&ZEND_NULL_LABEL,
  46773. (void*)&&ZEND_NULL_LABEL,
  46774. (void*)&&ZEND_NULL_LABEL,
  46775. (void*)&&ZEND_NULL_LABEL,
  46776. (void*)&&ZEND_NULL_LABEL,
  46777. (void*)&&ZEND_NULL_LABEL,
  46778. (void*)&&ZEND_NULL_LABEL,
  46779. (void*)&&ZEND_NULL_LABEL,
  46780. (void*)&&ZEND_NULL_LABEL,
  46781. (void*)&&ZEND_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_NULL_LABEL,
  46799. (void*)&&ZEND_NULL_LABEL,
  46800. (void*)&&ZEND_NULL_LABEL,
  46801. (void*)&&ZEND_NULL_LABEL,
  46802. (void*)&&ZEND_NULL_LABEL,
  46803. (void*)&&ZEND_NULL_LABEL,
  46804. (void*)&&ZEND_NULL_LABEL,
  46805. (void*)&&ZEND_NULL_LABEL,
  46806. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
  46807. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
  46808. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
  46809. (void*)&&ZEND_NULL_LABEL,
  46810. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
  46811. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
  46812. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
  46813. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
  46814. (void*)&&ZEND_NULL_LABEL,
  46815. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
  46816. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
  46817. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
  46818. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
  46819. (void*)&&ZEND_NULL_LABEL,
  46820. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
  46821. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_LABEL,
  46822. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_LABEL,
  46823. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_LABEL,
  46824. (void*)&&ZEND_NULL_LABEL,
  46825. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_LABEL,
  46826. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
  46827. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
  46828. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
  46829. (void*)&&ZEND_NULL_LABEL,
  46830. (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_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_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
  46857. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
  46858. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
  46859. (void*)&&ZEND_NULL_LABEL,
  46860. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_LABEL,
  46861. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
  46862. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
  46863. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
  46864. (void*)&&ZEND_NULL_LABEL,
  46865. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
  46866. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
  46867. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
  46868. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
  46869. (void*)&&ZEND_NULL_LABEL,
  46870. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
  46871. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_LABEL,
  46872. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_LABEL,
  46873. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_LABEL,
  46874. (void*)&&ZEND_NULL_LABEL,
  46875. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_LABEL,
  46876. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_LABEL,
  46877. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_LABEL,
  46878. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_LABEL,
  46879. (void*)&&ZEND_NULL_LABEL,
  46880. (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_LABEL,
  46881. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_LABEL,
  46882. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
  46883. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
  46884. (void*)&&ZEND_NULL_LABEL,
  46885. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_LABEL,
  46886. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
  46887. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  46888. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  46889. (void*)&&ZEND_NULL_LABEL,
  46890. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
  46891. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
  46892. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  46893. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
  46894. (void*)&&ZEND_NULL_LABEL,
  46895. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
  46896. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_LABEL,
  46897. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  46898. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
  46899. (void*)&&ZEND_NULL_LABEL,
  46900. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_LABEL,
  46901. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_LABEL,
  46902. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
  46903. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
  46904. (void*)&&ZEND_NULL_LABEL,
  46905. (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_LABEL,
  46906. (void*)&&ZEND_HANDLE_EXCEPTION_SPEC_LABEL,
  46907. (void*)&&ZEND_USER_OPCODE_SPEC_LABEL,
  46908. (void*)&&ZEND_ASSERT_CHECK_SPEC_LABEL,
  46909. (void*)&&ZEND_JMP_SET_SPEC_CONST_LABEL,
  46910. (void*)&&ZEND_JMP_SET_SPEC_TMP_LABEL,
  46911. (void*)&&ZEND_JMP_SET_SPEC_VAR_LABEL,
  46912. (void*)&&ZEND_NULL_LABEL,
  46913. (void*)&&ZEND_JMP_SET_SPEC_CV_LABEL,
  46914. (void*)&&ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_LABEL,
  46915. (void*)&&ZEND_ADD_TRAIT_SPEC_LABEL,
  46916. (void*)&&ZEND_BIND_TRAITS_SPEC_LABEL,
  46917. (void*)&&ZEND_SEPARATE_SPEC_VAR_UNUSED_LABEL,
  46918. (void*)&&ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_LABEL,
  46919. (void*)&&ZEND_CALL_TRAMPOLINE_SPEC_LABEL,
  46920. (void*)&&ZEND_DISCARD_EXCEPTION_SPEC_LABEL,
  46921. (void*)&&ZEND_YIELD_SPEC_CONST_CONST_LABEL,
  46922. (void*)&&ZEND_YIELD_SPEC_CONST_TMP_LABEL,
  46923. (void*)&&ZEND_YIELD_SPEC_CONST_VAR_LABEL,
  46924. (void*)&&ZEND_YIELD_SPEC_CONST_UNUSED_LABEL,
  46925. (void*)&&ZEND_YIELD_SPEC_CONST_CV_LABEL,
  46926. (void*)&&ZEND_YIELD_SPEC_TMP_CONST_LABEL,
  46927. (void*)&&ZEND_YIELD_SPEC_TMP_TMP_LABEL,
  46928. (void*)&&ZEND_YIELD_SPEC_TMP_VAR_LABEL,
  46929. (void*)&&ZEND_YIELD_SPEC_TMP_UNUSED_LABEL,
  46930. (void*)&&ZEND_YIELD_SPEC_TMP_CV_LABEL,
  46931. (void*)&&ZEND_YIELD_SPEC_VAR_CONST_LABEL,
  46932. (void*)&&ZEND_YIELD_SPEC_VAR_TMP_LABEL,
  46933. (void*)&&ZEND_YIELD_SPEC_VAR_VAR_LABEL,
  46934. (void*)&&ZEND_YIELD_SPEC_VAR_UNUSED_LABEL,
  46935. (void*)&&ZEND_YIELD_SPEC_VAR_CV_LABEL,
  46936. (void*)&&ZEND_YIELD_SPEC_UNUSED_CONST_LABEL,
  46937. (void*)&&ZEND_YIELD_SPEC_UNUSED_TMP_LABEL,
  46938. (void*)&&ZEND_YIELD_SPEC_UNUSED_VAR_LABEL,
  46939. (void*)&&ZEND_YIELD_SPEC_UNUSED_UNUSED_LABEL,
  46940. (void*)&&ZEND_YIELD_SPEC_UNUSED_CV_LABEL,
  46941. (void*)&&ZEND_YIELD_SPEC_CV_CONST_LABEL,
  46942. (void*)&&ZEND_YIELD_SPEC_CV_TMP_LABEL,
  46943. (void*)&&ZEND_YIELD_SPEC_CV_VAR_LABEL,
  46944. (void*)&&ZEND_YIELD_SPEC_CV_UNUSED_LABEL,
  46945. (void*)&&ZEND_YIELD_SPEC_CV_CV_LABEL,
  46946. (void*)&&ZEND_GENERATOR_RETURN_SPEC_CONST_LABEL,
  46947. (void*)&&ZEND_GENERATOR_RETURN_SPEC_TMP_LABEL,
  46948. (void*)&&ZEND_GENERATOR_RETURN_SPEC_VAR_LABEL,
  46949. (void*)&&ZEND_NULL_LABEL,
  46950. (void*)&&ZEND_GENERATOR_RETURN_SPEC_CV_LABEL,
  46951. (void*)&&ZEND_FAST_CALL_SPEC_LABEL,
  46952. (void*)&&ZEND_FAST_RET_SPEC_LABEL,
  46953. (void*)&&ZEND_RECV_VARIADIC_SPEC_UNUSED_LABEL,
  46954. (void*)&&ZEND_SEND_UNPACK_SPEC_LABEL,
  46955. (void*)&&ZEND_POW_SPEC_CONST_CONST_LABEL,
  46956. (void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
  46957. (void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
  46958. (void*)&&ZEND_NULL_LABEL,
  46959. (void*)&&ZEND_POW_SPEC_CONST_CV_LABEL,
  46960. (void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
  46961. (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
  46962. (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
  46963. (void*)&&ZEND_NULL_LABEL,
  46964. (void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
  46965. (void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
  46966. (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
  46967. (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
  46968. (void*)&&ZEND_NULL_LABEL,
  46969. (void*)&&ZEND_POW_SPEC_TMPVAR_CV_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_POW_SPEC_CV_CONST_LABEL,
  46976. (void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
  46977. (void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
  46978. (void*)&&ZEND_NULL_LABEL,
  46979. (void*)&&ZEND_POW_SPEC_CV_CV_LABEL,
  46980. (void*)&&ZEND_NULL_LABEL,
  46981. (void*)&&ZEND_NULL_LABEL,
  46982. (void*)&&ZEND_NULL_LABEL,
  46983. (void*)&&ZEND_NULL_LABEL,
  46984. (void*)&&ZEND_NULL_LABEL,
  46985. (void*)&&ZEND_NULL_LABEL,
  46986. (void*)&&ZEND_NULL_LABEL,
  46987. (void*)&&ZEND_NULL_LABEL,
  46988. (void*)&&ZEND_NULL_LABEL,
  46989. (void*)&&ZEND_NULL_LABEL,
  46990. (void*)&&ZEND_NULL_LABEL,
  46991. (void*)&&ZEND_NULL_LABEL,
  46992. (void*)&&ZEND_NULL_LABEL,
  46993. (void*)&&ZEND_NULL_LABEL,
  46994. (void*)&&ZEND_NULL_LABEL,
  46995. (void*)&&ZEND_NULL_LABEL,
  46996. (void*)&&ZEND_NULL_LABEL,
  46997. (void*)&&ZEND_NULL_LABEL,
  46998. (void*)&&ZEND_NULL_LABEL,
  46999. (void*)&&ZEND_NULL_LABEL,
  47000. (void*)&&ZEND_NULL_LABEL,
  47001. (void*)&&ZEND_NULL_LABEL,
  47002. (void*)&&ZEND_NULL_LABEL,
  47003. (void*)&&ZEND_NULL_LABEL,
  47004. (void*)&&ZEND_NULL_LABEL,
  47005. (void*)&&ZEND_NULL_LABEL,
  47006. (void*)&&ZEND_NULL_LABEL,
  47007. (void*)&&ZEND_NULL_LABEL,
  47008. (void*)&&ZEND_NULL_LABEL,
  47009. (void*)&&ZEND_NULL_LABEL,
  47010. (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CONST_LABEL,
  47011. (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM_LABEL,
  47012. (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ_LABEL,
  47013. (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_LABEL,
  47014. (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_LABEL,
  47015. (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_LABEL,
  47016. (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_LABEL,
  47017. (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_LABEL,
  47018. (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_LABEL,
  47019. (void*)&&ZEND_NULL_LABEL,
  47020. (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM_LABEL,
  47021. (void*)&&ZEND_NULL_LABEL,
  47022. (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CV_LABEL,
  47023. (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM_LABEL,
  47024. (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ_LABEL,
  47025. (void*)&&ZEND_NULL_LABEL,
  47026. (void*)&&ZEND_NULL_LABEL,
  47027. (void*)&&ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ_LABEL,
  47028. (void*)&&ZEND_NULL_LABEL,
  47029. (void*)&&ZEND_NULL_LABEL,
  47030. (void*)&&ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  47031. (void*)&&ZEND_NULL_LABEL,
  47032. (void*)&&ZEND_NULL_LABEL,
  47033. (void*)&&ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
  47034. (void*)&&ZEND_NULL_LABEL,
  47035. (void*)&&ZEND_NULL_LABEL,
  47036. (void*)&&ZEND_NULL_LABEL,
  47037. (void*)&&ZEND_NULL_LABEL,
  47038. (void*)&&ZEND_NULL_LABEL,
  47039. (void*)&&ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ_LABEL,
  47040. (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CONST_LABEL,
  47041. (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM_LABEL,
  47042. (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ_LABEL,
  47043. (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_LABEL,
  47044. (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_LABEL,
  47045. (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_LABEL,
  47046. (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_LABEL,
  47047. (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_LABEL,
  47048. (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_LABEL,
  47049. (void*)&&ZEND_NULL_LABEL,
  47050. (void*)&&ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM_LABEL,
  47051. (void*)&&ZEND_NULL_LABEL,
  47052. (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CV_LABEL,
  47053. (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CV_DIM_LABEL,
  47054. (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ_LABEL,
  47055. (void*)&&ZEND_BIND_GLOBAL_SPEC_CV_CONST_LABEL,
  47056. (void*)&&ZEND_COALESCE_SPEC_CONST_LABEL,
  47057. (void*)&&ZEND_COALESCE_SPEC_TMPVAR_LABEL,
  47058. (void*)&&ZEND_COALESCE_SPEC_TMPVAR_LABEL,
  47059. (void*)&&ZEND_NULL_LABEL,
  47060. (void*)&&ZEND_COALESCE_SPEC_CV_LABEL,
  47061. (void*)&&ZEND_SPACESHIP_SPEC_CONST_CONST_LABEL,
  47062. (void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
  47063. (void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
  47064. (void*)&&ZEND_NULL_LABEL,
  47065. (void*)&&ZEND_SPACESHIP_SPEC_CONST_CV_LABEL,
  47066. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
  47067. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
  47068. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
  47069. (void*)&&ZEND_NULL_LABEL,
  47070. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
  47071. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
  47072. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
  47073. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
  47074. (void*)&&ZEND_NULL_LABEL,
  47075. (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
  47076. (void*)&&ZEND_NULL_LABEL,
  47077. (void*)&&ZEND_NULL_LABEL,
  47078. (void*)&&ZEND_NULL_LABEL,
  47079. (void*)&&ZEND_NULL_LABEL,
  47080. (void*)&&ZEND_NULL_LABEL,
  47081. (void*)&&ZEND_SPACESHIP_SPEC_CV_CONST_LABEL,
  47082. (void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
  47083. (void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
  47084. (void*)&&ZEND_NULL_LABEL,
  47085. (void*)&&ZEND_SPACESHIP_SPEC_CV_CV_LABEL,
  47086. (void*)&&ZEND_DECLARE_ANON_CLASS_SPEC_LABEL,
  47087. (void*)&&ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_CONST_CONST_LABEL,
  47088. (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST_LABEL,
  47089. (void*)&&ZEND_NULL_LABEL,
  47090. (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR_LABEL,
  47091. (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED_LABEL,
  47092. (void*)&&ZEND_NULL_LABEL,
  47093. (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_LABEL,
  47094. (void*)&&ZEND_NULL_LABEL,
  47095. (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_LABEL,
  47096. (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_LABEL,
  47097. (void*)&&ZEND_NULL_LABEL,
  47098. (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_LABEL,
  47099. (void*)&&ZEND_NULL_LABEL,
  47100. (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_LABEL,
  47101. (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_LABEL,
  47102. (void*)&&ZEND_NULL_LABEL,
  47103. (void*)&&ZEND_NULL_LABEL,
  47104. (void*)&&ZEND_NULL_LABEL,
  47105. (void*)&&ZEND_NULL_LABEL,
  47106. (void*)&&ZEND_NULL_LABEL,
  47107. (void*)&&ZEND_NULL_LABEL,
  47108. (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST_LABEL,
  47109. (void*)&&ZEND_NULL_LABEL,
  47110. (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR_LABEL,
  47111. (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED_LABEL,
  47112. (void*)&&ZEND_NULL_LABEL,
  47113. (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST_LABEL,
  47114. (void*)&&ZEND_NULL_LABEL,
  47115. (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR_LABEL,
  47116. (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED_LABEL,
  47117. (void*)&&ZEND_NULL_LABEL,
  47118. (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_LABEL,
  47119. (void*)&&ZEND_NULL_LABEL,
  47120. (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_LABEL,
  47121. (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_LABEL,
  47122. (void*)&&ZEND_NULL_LABEL,
  47123. (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_LABEL,
  47124. (void*)&&ZEND_NULL_LABEL,
  47125. (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_LABEL,
  47126. (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_LABEL,
  47127. (void*)&&ZEND_NULL_LABEL,
  47128. (void*)&&ZEND_NULL_LABEL,
  47129. (void*)&&ZEND_NULL_LABEL,
  47130. (void*)&&ZEND_NULL_LABEL,
  47131. (void*)&&ZEND_NULL_LABEL,
  47132. (void*)&&ZEND_NULL_LABEL,
  47133. (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST_LABEL,
  47134. (void*)&&ZEND_NULL_LABEL,
  47135. (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR_LABEL,
  47136. (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED_LABEL,
  47137. (void*)&&ZEND_NULL_LABEL,
  47138. (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST_LABEL,
  47139. (void*)&&ZEND_NULL_LABEL,
  47140. (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR_LABEL,
  47141. (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED_LABEL,
  47142. (void*)&&ZEND_NULL_LABEL,
  47143. (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_LABEL,
  47144. (void*)&&ZEND_NULL_LABEL,
  47145. (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_LABEL,
  47146. (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_LABEL,
  47147. (void*)&&ZEND_NULL_LABEL,
  47148. (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_LABEL,
  47149. (void*)&&ZEND_NULL_LABEL,
  47150. (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_LABEL,
  47151. (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_LABEL,
  47152. (void*)&&ZEND_NULL_LABEL,
  47153. (void*)&&ZEND_NULL_LABEL,
  47154. (void*)&&ZEND_NULL_LABEL,
  47155. (void*)&&ZEND_NULL_LABEL,
  47156. (void*)&&ZEND_NULL_LABEL,
  47157. (void*)&&ZEND_NULL_LABEL,
  47158. (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST_LABEL,
  47159. (void*)&&ZEND_NULL_LABEL,
  47160. (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR_LABEL,
  47161. (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED_LABEL,
  47162. (void*)&&ZEND_NULL_LABEL,
  47163. (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST_LABEL,
  47164. (void*)&&ZEND_NULL_LABEL,
  47165. (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR_LABEL,
  47166. (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED_LABEL,
  47167. (void*)&&ZEND_NULL_LABEL,
  47168. (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_LABEL,
  47169. (void*)&&ZEND_NULL_LABEL,
  47170. (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_LABEL,
  47171. (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_LABEL,
  47172. (void*)&&ZEND_NULL_LABEL,
  47173. (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_LABEL,
  47174. (void*)&&ZEND_NULL_LABEL,
  47175. (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_LABEL,
  47176. (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_LABEL,
  47177. (void*)&&ZEND_NULL_LABEL,
  47178. (void*)&&ZEND_NULL_LABEL,
  47179. (void*)&&ZEND_NULL_LABEL,
  47180. (void*)&&ZEND_NULL_LABEL,
  47181. (void*)&&ZEND_NULL_LABEL,
  47182. (void*)&&ZEND_NULL_LABEL,
  47183. (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST_LABEL,
  47184. (void*)&&ZEND_NULL_LABEL,
  47185. (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR_LABEL,
  47186. (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED_LABEL,
  47187. (void*)&&ZEND_NULL_LABEL,
  47188. (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST_LABEL,
  47189. (void*)&&ZEND_NULL_LABEL,
  47190. (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR_LABEL,
  47191. (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
  47192. (void*)&&ZEND_NULL_LABEL,
  47193. (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_LABEL,
  47194. (void*)&&ZEND_NULL_LABEL,
  47195. (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_LABEL,
  47196. (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
  47197. (void*)&&ZEND_NULL_LABEL,
  47198. (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_LABEL,
  47199. (void*)&&ZEND_NULL_LABEL,
  47200. (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_LABEL,
  47201. (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_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_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST_LABEL,
  47209. (void*)&&ZEND_NULL_LABEL,
  47210. (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR_LABEL,
  47211. (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
  47212. (void*)&&ZEND_NULL_LABEL,
  47213. (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST_LABEL,
  47214. (void*)&&ZEND_NULL_LABEL,
  47215. (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR_LABEL,
  47216. (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED_LABEL,
  47217. (void*)&&ZEND_NULL_LABEL,
  47218. (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_LABEL,
  47219. (void*)&&ZEND_NULL_LABEL,
  47220. (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_LABEL,
  47221. (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
  47222. (void*)&&ZEND_NULL_LABEL,
  47223. (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_LABEL,
  47224. (void*)&&ZEND_NULL_LABEL,
  47225. (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_LABEL,
  47226. (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_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_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST_LABEL,
  47234. (void*)&&ZEND_NULL_LABEL,
  47235. (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR_LABEL,
  47236. (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED_LABEL,
  47237. (void*)&&ZEND_NULL_LABEL,
  47238. (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST_LABEL,
  47239. (void*)&&ZEND_NULL_LABEL,
  47240. (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR_LABEL,
  47241. (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED_LABEL,
  47242. (void*)&&ZEND_NULL_LABEL,
  47243. (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_LABEL,
  47244. (void*)&&ZEND_NULL_LABEL,
  47245. (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_LABEL,
  47246. (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_LABEL,
  47247. (void*)&&ZEND_NULL_LABEL,
  47248. (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_LABEL,
  47249. (void*)&&ZEND_NULL_LABEL,
  47250. (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_LABEL,
  47251. (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_LABEL,
  47252. (void*)&&ZEND_NULL_LABEL,
  47253. (void*)&&ZEND_NULL_LABEL,
  47254. (void*)&&ZEND_NULL_LABEL,
  47255. (void*)&&ZEND_NULL_LABEL,
  47256. (void*)&&ZEND_NULL_LABEL,
  47257. (void*)&&ZEND_NULL_LABEL,
  47258. (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST_LABEL,
  47259. (void*)&&ZEND_NULL_LABEL,
  47260. (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR_LABEL,
  47261. (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED_LABEL,
  47262. (void*)&&ZEND_NULL_LABEL,
  47263. (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST_LABEL,
  47264. (void*)&&ZEND_NULL_LABEL,
  47265. (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR_LABEL,
  47266. (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED_LABEL,
  47267. (void*)&&ZEND_NULL_LABEL,
  47268. (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_LABEL,
  47269. (void*)&&ZEND_NULL_LABEL,
  47270. (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_LABEL,
  47271. (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_LABEL,
  47272. (void*)&&ZEND_NULL_LABEL,
  47273. (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_LABEL,
  47274. (void*)&&ZEND_NULL_LABEL,
  47275. (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_LABEL,
  47276. (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_LABEL,
  47277. (void*)&&ZEND_NULL_LABEL,
  47278. (void*)&&ZEND_NULL_LABEL,
  47279. (void*)&&ZEND_NULL_LABEL,
  47280. (void*)&&ZEND_NULL_LABEL,
  47281. (void*)&&ZEND_NULL_LABEL,
  47282. (void*)&&ZEND_NULL_LABEL,
  47283. (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST_LABEL,
  47284. (void*)&&ZEND_NULL_LABEL,
  47285. (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR_LABEL,
  47286. (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED_LABEL,
  47287. (void*)&&ZEND_NULL_LABEL,
  47288. (void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_LABEL,
  47289. (void*)&&ZEND_NULL_LABEL,
  47290. (void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_LABEL,
  47291. (void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_LABEL,
  47292. (void*)&&ZEND_NULL_LABEL,
  47293. (void*)&&ZEND_BIND_LEXICAL_SPEC_TMP_CV_LABEL,
  47294. (void*)&&ZEND_BIND_STATIC_SPEC_CV_CONST_LABEL,
  47295. (void*)&&ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_LABEL,
  47296. (void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_LABEL,
  47297. (void*)&&ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_LABEL,
  47298. (void*)&&ZEND_SWITCH_LONG_SPEC_CONST_CONST_LABEL,
  47299. (void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47300. (void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47301. (void*)&&ZEND_NULL_LABEL,
  47302. (void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47303. (void*)&&ZEND_SWITCH_STRING_SPEC_CONST_CONST_LABEL,
  47304. (void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
  47305. (void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
  47306. (void*)&&ZEND_NULL_LABEL,
  47307. (void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
  47308. (void*)&&ZEND_IN_ARRAY_SPEC_CONST_CONST_LABEL,
  47309. (void*)&&ZEND_IN_ARRAY_SPEC_TMP_CONST_LABEL,
  47310. (void*)&&ZEND_IN_ARRAY_SPEC_VAR_CONST_LABEL,
  47311. (void*)&&ZEND_NULL_LABEL,
  47312. (void*)&&ZEND_IN_ARRAY_SPEC_CV_CONST_LABEL,
  47313. (void*)&&ZEND_COUNT_SPEC_CONST_UNUSED_LABEL,
  47314. (void*)&&ZEND_COUNT_SPEC_TMP_UNUSED_LABEL,
  47315. (void*)&&ZEND_COUNT_SPEC_VAR_UNUSED_LABEL,
  47316. (void*)&&ZEND_NULL_LABEL,
  47317. (void*)&&ZEND_COUNT_SPEC_CV_UNUSED_LABEL,
  47318. (void*)&&ZEND_GET_CLASS_SPEC_CONST_UNUSED_LABEL,
  47319. (void*)&&ZEND_GET_CLASS_SPEC_TMP_UNUSED_LABEL,
  47320. (void*)&&ZEND_GET_CLASS_SPEC_VAR_UNUSED_LABEL,
  47321. (void*)&&ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_LABEL,
  47322. (void*)&&ZEND_GET_CLASS_SPEC_CV_UNUSED_LABEL,
  47323. (void*)&&ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_LABEL,
  47324. (void*)&&ZEND_GET_TYPE_SPEC_CONST_UNUSED_LABEL,
  47325. (void*)&&ZEND_GET_TYPE_SPEC_TMP_UNUSED_LABEL,
  47326. (void*)&&ZEND_GET_TYPE_SPEC_VAR_UNUSED_LABEL,
  47327. (void*)&&ZEND_NULL_LABEL,
  47328. (void*)&&ZEND_GET_TYPE_SPEC_CV_UNUSED_LABEL,
  47329. (void*)&&ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_LABEL,
  47330. (void*)&&ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_LABEL,
  47331. (void*)&&ZEND_NULL_LABEL,
  47332. (void*)&&ZEND_NULL_LABEL,
  47333. (void*)&&ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_LABEL,
  47334. (void*)&&ZEND_NULL_LABEL,
  47335. (void*)&&ZEND_UNSET_CV_SPEC_CV_UNUSED_LABEL,
  47336. (void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_LABEL,
  47337. (void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_LABEL,
  47338. (void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CONST_LABEL,
  47339. (void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
  47340. (void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
  47341. (void*)&&ZEND_NULL_LABEL,
  47342. (void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CV_LABEL,
  47343. (void*)&&ZEND_JMP_FORWARD_SPEC_LABEL,
  47344. (void*)&&ZEND_NULL_LABEL,
  47345. (void*)&&ZEND_NULL_LABEL,
  47346. (void*)&&ZEND_NULL_LABEL,
  47347. (void*)&&ZEND_NULL_LABEL,
  47348. (void*)&&ZEND_NULL_LABEL,
  47349. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  47350. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47351. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47352. (void*)&&ZEND_NULL_LABEL,
  47353. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47354. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  47355. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47356. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47357. (void*)&&ZEND_NULL_LABEL,
  47358. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47359. (void*)&&ZEND_NULL_LABEL,
  47360. (void*)&&ZEND_NULL_LABEL,
  47361. (void*)&&ZEND_NULL_LABEL,
  47362. (void*)&&ZEND_NULL_LABEL,
  47363. (void*)&&ZEND_NULL_LABEL,
  47364. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  47365. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47366. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47367. (void*)&&ZEND_NULL_LABEL,
  47368. (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47369. (void*)&&ZEND_NULL_LABEL,
  47370. (void*)&&ZEND_NULL_LABEL,
  47371. (void*)&&ZEND_NULL_LABEL,
  47372. (void*)&&ZEND_NULL_LABEL,
  47373. (void*)&&ZEND_NULL_LABEL,
  47374. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47375. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47376. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47377. (void*)&&ZEND_NULL_LABEL,
  47378. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47379. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47380. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47381. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47382. (void*)&&ZEND_NULL_LABEL,
  47383. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47384. (void*)&&ZEND_NULL_LABEL,
  47385. (void*)&&ZEND_NULL_LABEL,
  47386. (void*)&&ZEND_NULL_LABEL,
  47387. (void*)&&ZEND_NULL_LABEL,
  47388. (void*)&&ZEND_NULL_LABEL,
  47389. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47390. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47391. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47392. (void*)&&ZEND_NULL_LABEL,
  47393. (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47394. (void*)&&ZEND_NULL_LABEL,
  47395. (void*)&&ZEND_NULL_LABEL,
  47396. (void*)&&ZEND_NULL_LABEL,
  47397. (void*)&&ZEND_NULL_LABEL,
  47398. (void*)&&ZEND_NULL_LABEL,
  47399. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  47400. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47401. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47402. (void*)&&ZEND_NULL_LABEL,
  47403. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47404. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  47405. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47406. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47407. (void*)&&ZEND_NULL_LABEL,
  47408. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47409. (void*)&&ZEND_NULL_LABEL,
  47410. (void*)&&ZEND_NULL_LABEL,
  47411. (void*)&&ZEND_NULL_LABEL,
  47412. (void*)&&ZEND_NULL_LABEL,
  47413. (void*)&&ZEND_NULL_LABEL,
  47414. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  47415. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47416. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47417. (void*)&&ZEND_NULL_LABEL,
  47418. (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47419. (void*)&&ZEND_NULL_LABEL,
  47420. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
  47421. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
  47422. (void*)&&ZEND_NULL_LABEL,
  47423. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
  47424. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  47425. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47426. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47427. (void*)&&ZEND_NULL_LABEL,
  47428. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47429. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  47430. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47431. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47432. (void*)&&ZEND_NULL_LABEL,
  47433. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47434. (void*)&&ZEND_NULL_LABEL,
  47435. (void*)&&ZEND_NULL_LABEL,
  47436. (void*)&&ZEND_NULL_LABEL,
  47437. (void*)&&ZEND_NULL_LABEL,
  47438. (void*)&&ZEND_NULL_LABEL,
  47439. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  47440. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47441. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47442. (void*)&&ZEND_NULL_LABEL,
  47443. (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47444. (void*)&&ZEND_NULL_LABEL,
  47445. (void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
  47446. (void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
  47447. (void*)&&ZEND_NULL_LABEL,
  47448. (void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
  47449. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47450. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47451. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47452. (void*)&&ZEND_NULL_LABEL,
  47453. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47454. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47455. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47456. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47457. (void*)&&ZEND_NULL_LABEL,
  47458. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47459. (void*)&&ZEND_NULL_LABEL,
  47460. (void*)&&ZEND_NULL_LABEL,
  47461. (void*)&&ZEND_NULL_LABEL,
  47462. (void*)&&ZEND_NULL_LABEL,
  47463. (void*)&&ZEND_NULL_LABEL,
  47464. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47465. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47466. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47467. (void*)&&ZEND_NULL_LABEL,
  47468. (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47469. (void*)&&ZEND_NULL_LABEL,
  47470. (void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  47471. (void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  47472. (void*)&&ZEND_NULL_LABEL,
  47473. (void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  47474. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  47475. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47476. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47477. (void*)&&ZEND_NULL_LABEL,
  47478. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47479. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  47480. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47481. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47482. (void*)&&ZEND_NULL_LABEL,
  47483. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_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_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  47490. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47491. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47492. (void*)&&ZEND_NULL_LABEL,
  47493. (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_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_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  47500. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47501. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47502. (void*)&&ZEND_NULL_LABEL,
  47503. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47504. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  47505. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47506. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47507. (void*)&&ZEND_NULL_LABEL,
  47508. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47509. (void*)&&ZEND_NULL_LABEL,
  47510. (void*)&&ZEND_NULL_LABEL,
  47511. (void*)&&ZEND_NULL_LABEL,
  47512. (void*)&&ZEND_NULL_LABEL,
  47513. (void*)&&ZEND_NULL_LABEL,
  47514. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
  47515. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47516. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47517. (void*)&&ZEND_NULL_LABEL,
  47518. (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_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_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47525. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47526. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47527. (void*)&&ZEND_NULL_LABEL,
  47528. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47529. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47530. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47531. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47532. (void*)&&ZEND_NULL_LABEL,
  47533. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_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_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47540. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47541. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47542. (void*)&&ZEND_NULL_LABEL,
  47543. (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47544. (void*)&&ZEND_NULL_LABEL,
  47545. (void*)&&ZEND_NULL_LABEL,
  47546. (void*)&&ZEND_NULL_LABEL,
  47547. (void*)&&ZEND_NULL_LABEL,
  47548. (void*)&&ZEND_NULL_LABEL,
  47549. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  47550. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47551. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47552. (void*)&&ZEND_NULL_LABEL,
  47553. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47554. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  47555. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47556. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47557. (void*)&&ZEND_NULL_LABEL,
  47558. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47559. (void*)&&ZEND_NULL_LABEL,
  47560. (void*)&&ZEND_NULL_LABEL,
  47561. (void*)&&ZEND_NULL_LABEL,
  47562. (void*)&&ZEND_NULL_LABEL,
  47563. (void*)&&ZEND_NULL_LABEL,
  47564. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  47565. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47566. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47567. (void*)&&ZEND_NULL_LABEL,
  47568. (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47569. (void*)&&ZEND_NULL_LABEL,
  47570. (void*)&&ZEND_NULL_LABEL,
  47571. (void*)&&ZEND_NULL_LABEL,
  47572. (void*)&&ZEND_NULL_LABEL,
  47573. (void*)&&ZEND_NULL_LABEL,
  47574. (void*)&&ZEND_NULL_LABEL,
  47575. (void*)&&ZEND_NULL_LABEL,
  47576. (void*)&&ZEND_NULL_LABEL,
  47577. (void*)&&ZEND_NULL_LABEL,
  47578. (void*)&&ZEND_NULL_LABEL,
  47579. (void*)&&ZEND_NULL_LABEL,
  47580. (void*)&&ZEND_NULL_LABEL,
  47581. (void*)&&ZEND_NULL_LABEL,
  47582. (void*)&&ZEND_NULL_LABEL,
  47583. (void*)&&ZEND_NULL_LABEL,
  47584. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47585. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  47586. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  47587. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47588. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47589. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47590. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47591. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47592. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47593. (void*)&&ZEND_NULL_LABEL,
  47594. (void*)&&ZEND_NULL_LABEL,
  47595. (void*)&&ZEND_NULL_LABEL,
  47596. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47597. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47598. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47599. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47600. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  47601. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  47602. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47603. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47604. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47605. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47606. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47607. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47608. (void*)&&ZEND_NULL_LABEL,
  47609. (void*)&&ZEND_NULL_LABEL,
  47610. (void*)&&ZEND_NULL_LABEL,
  47611. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47612. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47613. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47614. (void*)&&ZEND_NULL_LABEL,
  47615. (void*)&&ZEND_NULL_LABEL,
  47616. (void*)&&ZEND_NULL_LABEL,
  47617. (void*)&&ZEND_NULL_LABEL,
  47618. (void*)&&ZEND_NULL_LABEL,
  47619. (void*)&&ZEND_NULL_LABEL,
  47620. (void*)&&ZEND_NULL_LABEL,
  47621. (void*)&&ZEND_NULL_LABEL,
  47622. (void*)&&ZEND_NULL_LABEL,
  47623. (void*)&&ZEND_NULL_LABEL,
  47624. (void*)&&ZEND_NULL_LABEL,
  47625. (void*)&&ZEND_NULL_LABEL,
  47626. (void*)&&ZEND_NULL_LABEL,
  47627. (void*)&&ZEND_NULL_LABEL,
  47628. (void*)&&ZEND_NULL_LABEL,
  47629. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47630. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  47631. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  47632. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47633. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47634. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47635. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47636. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47637. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47638. (void*)&&ZEND_NULL_LABEL,
  47639. (void*)&&ZEND_NULL_LABEL,
  47640. (void*)&&ZEND_NULL_LABEL,
  47641. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47642. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47643. (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47644. (void*)&&ZEND_NULL_LABEL,
  47645. (void*)&&ZEND_NULL_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_NULL_LABEL,
  47652. (void*)&&ZEND_NULL_LABEL,
  47653. (void*)&&ZEND_NULL_LABEL,
  47654. (void*)&&ZEND_NULL_LABEL,
  47655. (void*)&&ZEND_NULL_LABEL,
  47656. (void*)&&ZEND_NULL_LABEL,
  47657. (void*)&&ZEND_NULL_LABEL,
  47658. (void*)&&ZEND_NULL_LABEL,
  47659. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  47660. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  47661. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  47662. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47663. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47664. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47665. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47666. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47667. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47668. (void*)&&ZEND_NULL_LABEL,
  47669. (void*)&&ZEND_NULL_LABEL,
  47670. (void*)&&ZEND_NULL_LABEL,
  47671. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47672. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47673. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47674. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  47675. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  47676. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  47677. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47678. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47679. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47680. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47681. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47682. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47683. (void*)&&ZEND_NULL_LABEL,
  47684. (void*)&&ZEND_NULL_LABEL,
  47685. (void*)&&ZEND_NULL_LABEL,
  47686. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47687. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47688. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47689. (void*)&&ZEND_NULL_LABEL,
  47690. (void*)&&ZEND_NULL_LABEL,
  47691. (void*)&&ZEND_NULL_LABEL,
  47692. (void*)&&ZEND_NULL_LABEL,
  47693. (void*)&&ZEND_NULL_LABEL,
  47694. (void*)&&ZEND_NULL_LABEL,
  47695. (void*)&&ZEND_NULL_LABEL,
  47696. (void*)&&ZEND_NULL_LABEL,
  47697. (void*)&&ZEND_NULL_LABEL,
  47698. (void*)&&ZEND_NULL_LABEL,
  47699. (void*)&&ZEND_NULL_LABEL,
  47700. (void*)&&ZEND_NULL_LABEL,
  47701. (void*)&&ZEND_NULL_LABEL,
  47702. (void*)&&ZEND_NULL_LABEL,
  47703. (void*)&&ZEND_NULL_LABEL,
  47704. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  47705. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  47706. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  47707. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47708. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47709. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47710. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47711. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47712. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47713. (void*)&&ZEND_NULL_LABEL,
  47714. (void*)&&ZEND_NULL_LABEL,
  47715. (void*)&&ZEND_NULL_LABEL,
  47716. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47717. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47718. (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47719. (void*)&&ZEND_NULL_LABEL,
  47720. (void*)&&ZEND_NULL_LABEL,
  47721. (void*)&&ZEND_NULL_LABEL,
  47722. (void*)&&ZEND_NULL_LABEL,
  47723. (void*)&&ZEND_NULL_LABEL,
  47724. (void*)&&ZEND_NULL_LABEL,
  47725. (void*)&&ZEND_NULL_LABEL,
  47726. (void*)&&ZEND_NULL_LABEL,
  47727. (void*)&&ZEND_NULL_LABEL,
  47728. (void*)&&ZEND_NULL_LABEL,
  47729. (void*)&&ZEND_NULL_LABEL,
  47730. (void*)&&ZEND_NULL_LABEL,
  47731. (void*)&&ZEND_NULL_LABEL,
  47732. (void*)&&ZEND_NULL_LABEL,
  47733. (void*)&&ZEND_NULL_LABEL,
  47734. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47735. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  47736. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  47737. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47738. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47739. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47740. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47741. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47742. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47743. (void*)&&ZEND_NULL_LABEL,
  47744. (void*)&&ZEND_NULL_LABEL,
  47745. (void*)&&ZEND_NULL_LABEL,
  47746. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47747. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47748. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47749. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47750. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  47751. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  47752. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47753. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47754. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47755. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47756. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47757. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47758. (void*)&&ZEND_NULL_LABEL,
  47759. (void*)&&ZEND_NULL_LABEL,
  47760. (void*)&&ZEND_NULL_LABEL,
  47761. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47762. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47763. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47764. (void*)&&ZEND_NULL_LABEL,
  47765. (void*)&&ZEND_NULL_LABEL,
  47766. (void*)&&ZEND_NULL_LABEL,
  47767. (void*)&&ZEND_NULL_LABEL,
  47768. (void*)&&ZEND_NULL_LABEL,
  47769. (void*)&&ZEND_NULL_LABEL,
  47770. (void*)&&ZEND_NULL_LABEL,
  47771. (void*)&&ZEND_NULL_LABEL,
  47772. (void*)&&ZEND_NULL_LABEL,
  47773. (void*)&&ZEND_NULL_LABEL,
  47774. (void*)&&ZEND_NULL_LABEL,
  47775. (void*)&&ZEND_NULL_LABEL,
  47776. (void*)&&ZEND_NULL_LABEL,
  47777. (void*)&&ZEND_NULL_LABEL,
  47778. (void*)&&ZEND_NULL_LABEL,
  47779. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47780. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  47781. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  47782. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47783. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47784. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47785. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47786. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47787. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47788. (void*)&&ZEND_NULL_LABEL,
  47789. (void*)&&ZEND_NULL_LABEL,
  47790. (void*)&&ZEND_NULL_LABEL,
  47791. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47792. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47793. (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47794. (void*)&&ZEND_NULL_LABEL,
  47795. (void*)&&ZEND_NULL_LABEL,
  47796. (void*)&&ZEND_NULL_LABEL,
  47797. (void*)&&ZEND_NULL_LABEL,
  47798. (void*)&&ZEND_NULL_LABEL,
  47799. (void*)&&ZEND_NULL_LABEL,
  47800. (void*)&&ZEND_NULL_LABEL,
  47801. (void*)&&ZEND_NULL_LABEL,
  47802. (void*)&&ZEND_NULL_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_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  47810. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  47811. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  47812. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47813. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47814. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47815. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47816. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47817. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47818. (void*)&&ZEND_NULL_LABEL,
  47819. (void*)&&ZEND_NULL_LABEL,
  47820. (void*)&&ZEND_NULL_LABEL,
  47821. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47822. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47823. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47824. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  47825. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  47826. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  47827. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47828. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47829. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47830. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47831. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47832. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47833. (void*)&&ZEND_NULL_LABEL,
  47834. (void*)&&ZEND_NULL_LABEL,
  47835. (void*)&&ZEND_NULL_LABEL,
  47836. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47837. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47838. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47839. (void*)&&ZEND_NULL_LABEL,
  47840. (void*)&&ZEND_NULL_LABEL,
  47841. (void*)&&ZEND_NULL_LABEL,
  47842. (void*)&&ZEND_NULL_LABEL,
  47843. (void*)&&ZEND_NULL_LABEL,
  47844. (void*)&&ZEND_NULL_LABEL,
  47845. (void*)&&ZEND_NULL_LABEL,
  47846. (void*)&&ZEND_NULL_LABEL,
  47847. (void*)&&ZEND_NULL_LABEL,
  47848. (void*)&&ZEND_NULL_LABEL,
  47849. (void*)&&ZEND_NULL_LABEL,
  47850. (void*)&&ZEND_NULL_LABEL,
  47851. (void*)&&ZEND_NULL_LABEL,
  47852. (void*)&&ZEND_NULL_LABEL,
  47853. (void*)&&ZEND_NULL_LABEL,
  47854. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  47855. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  47856. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  47857. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47858. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47859. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47860. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47861. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47862. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47863. (void*)&&ZEND_NULL_LABEL,
  47864. (void*)&&ZEND_NULL_LABEL,
  47865. (void*)&&ZEND_NULL_LABEL,
  47866. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47867. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47868. (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47869. (void*)&&ZEND_NULL_LABEL,
  47870. (void*)&&ZEND_NULL_LABEL,
  47871. (void*)&&ZEND_NULL_LABEL,
  47872. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
  47873. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  47874. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  47875. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
  47876. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  47877. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  47878. (void*)&&ZEND_NULL_LABEL,
  47879. (void*)&&ZEND_NULL_LABEL,
  47880. (void*)&&ZEND_NULL_LABEL,
  47881. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
  47882. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  47883. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  47884. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47885. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  47886. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  47887. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47888. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47889. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47890. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47891. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47892. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47893. (void*)&&ZEND_NULL_LABEL,
  47894. (void*)&&ZEND_NULL_LABEL,
  47895. (void*)&&ZEND_NULL_LABEL,
  47896. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47897. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47898. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47899. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47900. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  47901. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  47902. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47903. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47904. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47905. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47906. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47907. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47908. (void*)&&ZEND_NULL_LABEL,
  47909. (void*)&&ZEND_NULL_LABEL,
  47910. (void*)&&ZEND_NULL_LABEL,
  47911. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47912. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47913. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47914. (void*)&&ZEND_NULL_LABEL,
  47915. (void*)&&ZEND_NULL_LABEL,
  47916. (void*)&&ZEND_NULL_LABEL,
  47917. (void*)&&ZEND_NULL_LABEL,
  47918. (void*)&&ZEND_NULL_LABEL,
  47919. (void*)&&ZEND_NULL_LABEL,
  47920. (void*)&&ZEND_NULL_LABEL,
  47921. (void*)&&ZEND_NULL_LABEL,
  47922. (void*)&&ZEND_NULL_LABEL,
  47923. (void*)&&ZEND_NULL_LABEL,
  47924. (void*)&&ZEND_NULL_LABEL,
  47925. (void*)&&ZEND_NULL_LABEL,
  47926. (void*)&&ZEND_NULL_LABEL,
  47927. (void*)&&ZEND_NULL_LABEL,
  47928. (void*)&&ZEND_NULL_LABEL,
  47929. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
  47930. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  47931. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  47932. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47933. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47934. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47935. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47936. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47937. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47938. (void*)&&ZEND_NULL_LABEL,
  47939. (void*)&&ZEND_NULL_LABEL,
  47940. (void*)&&ZEND_NULL_LABEL,
  47941. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47942. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47943. (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47944. (void*)&&ZEND_NULL_LABEL,
  47945. (void*)&&ZEND_NULL_LABEL,
  47946. (void*)&&ZEND_NULL_LABEL,
  47947. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  47948. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  47949. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  47950. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  47951. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  47952. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  47953. (void*)&&ZEND_NULL_LABEL,
  47954. (void*)&&ZEND_NULL_LABEL,
  47955. (void*)&&ZEND_NULL_LABEL,
  47956. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  47957. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  47958. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  47959. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  47960. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  47961. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  47962. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47963. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47964. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47965. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47966. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47967. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47968. (void*)&&ZEND_NULL_LABEL,
  47969. (void*)&&ZEND_NULL_LABEL,
  47970. (void*)&&ZEND_NULL_LABEL,
  47971. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47972. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47973. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47974. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  47975. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  47976. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  47977. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47978. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47979. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47980. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47981. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47982. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47983. (void*)&&ZEND_NULL_LABEL,
  47984. (void*)&&ZEND_NULL_LABEL,
  47985. (void*)&&ZEND_NULL_LABEL,
  47986. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  47987. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  47988. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  47989. (void*)&&ZEND_NULL_LABEL,
  47990. (void*)&&ZEND_NULL_LABEL,
  47991. (void*)&&ZEND_NULL_LABEL,
  47992. (void*)&&ZEND_NULL_LABEL,
  47993. (void*)&&ZEND_NULL_LABEL,
  47994. (void*)&&ZEND_NULL_LABEL,
  47995. (void*)&&ZEND_NULL_LABEL,
  47996. (void*)&&ZEND_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_NULL_LABEL,
  48004. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48005. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  48006. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  48007. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48008. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48009. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48010. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48011. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48012. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48013. (void*)&&ZEND_NULL_LABEL,
  48014. (void*)&&ZEND_NULL_LABEL,
  48015. (void*)&&ZEND_NULL_LABEL,
  48016. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48017. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48018. (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48019. (void*)&&ZEND_NULL_LABEL,
  48020. (void*)&&ZEND_NULL_LABEL,
  48021. (void*)&&ZEND_NULL_LABEL,
  48022. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
  48023. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  48024. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  48025. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
  48026. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  48027. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  48028. (void*)&&ZEND_NULL_LABEL,
  48029. (void*)&&ZEND_NULL_LABEL,
  48030. (void*)&&ZEND_NULL_LABEL,
  48031. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
  48032. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  48033. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  48034. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48035. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  48036. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  48037. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48038. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48039. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48040. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48041. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48042. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48043. (void*)&&ZEND_NULL_LABEL,
  48044. (void*)&&ZEND_NULL_LABEL,
  48045. (void*)&&ZEND_NULL_LABEL,
  48046. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48047. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48048. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48049. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48050. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  48051. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  48052. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48053. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48054. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48055. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48056. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48057. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48058. (void*)&&ZEND_NULL_LABEL,
  48059. (void*)&&ZEND_NULL_LABEL,
  48060. (void*)&&ZEND_NULL_LABEL,
  48061. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48062. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48063. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48064. (void*)&&ZEND_NULL_LABEL,
  48065. (void*)&&ZEND_NULL_LABEL,
  48066. (void*)&&ZEND_NULL_LABEL,
  48067. (void*)&&ZEND_NULL_LABEL,
  48068. (void*)&&ZEND_NULL_LABEL,
  48069. (void*)&&ZEND_NULL_LABEL,
  48070. (void*)&&ZEND_NULL_LABEL,
  48071. (void*)&&ZEND_NULL_LABEL,
  48072. (void*)&&ZEND_NULL_LABEL,
  48073. (void*)&&ZEND_NULL_LABEL,
  48074. (void*)&&ZEND_NULL_LABEL,
  48075. (void*)&&ZEND_NULL_LABEL,
  48076. (void*)&&ZEND_NULL_LABEL,
  48077. (void*)&&ZEND_NULL_LABEL,
  48078. (void*)&&ZEND_NULL_LABEL,
  48079. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
  48080. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  48081. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  48082. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48083. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48084. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48085. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48086. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48087. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48088. (void*)&&ZEND_NULL_LABEL,
  48089. (void*)&&ZEND_NULL_LABEL,
  48090. (void*)&&ZEND_NULL_LABEL,
  48091. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48092. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48093. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48094. (void*)&&ZEND_NULL_LABEL,
  48095. (void*)&&ZEND_NULL_LABEL,
  48096. (void*)&&ZEND_NULL_LABEL,
  48097. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  48098. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  48099. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  48100. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  48101. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  48102. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  48103. (void*)&&ZEND_NULL_LABEL,
  48104. (void*)&&ZEND_NULL_LABEL,
  48105. (void*)&&ZEND_NULL_LABEL,
  48106. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
  48107. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
  48108. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
  48109. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48110. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  48111. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  48112. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48113. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48114. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48115. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48116. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48117. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48118. (void*)&&ZEND_NULL_LABEL,
  48119. (void*)&&ZEND_NULL_LABEL,
  48120. (void*)&&ZEND_NULL_LABEL,
  48121. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48122. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48123. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48124. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48125. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  48126. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  48127. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48128. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48129. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48130. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48131. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48132. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48133. (void*)&&ZEND_NULL_LABEL,
  48134. (void*)&&ZEND_NULL_LABEL,
  48135. (void*)&&ZEND_NULL_LABEL,
  48136. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48137. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48138. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48139. (void*)&&ZEND_NULL_LABEL,
  48140. (void*)&&ZEND_NULL_LABEL,
  48141. (void*)&&ZEND_NULL_LABEL,
  48142. (void*)&&ZEND_NULL_LABEL,
  48143. (void*)&&ZEND_NULL_LABEL,
  48144. (void*)&&ZEND_NULL_LABEL,
  48145. (void*)&&ZEND_NULL_LABEL,
  48146. (void*)&&ZEND_NULL_LABEL,
  48147. (void*)&&ZEND_NULL_LABEL,
  48148. (void*)&&ZEND_NULL_LABEL,
  48149. (void*)&&ZEND_NULL_LABEL,
  48150. (void*)&&ZEND_NULL_LABEL,
  48151. (void*)&&ZEND_NULL_LABEL,
  48152. (void*)&&ZEND_NULL_LABEL,
  48153. (void*)&&ZEND_NULL_LABEL,
  48154. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
  48155. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
  48156. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
  48157. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48158. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48159. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48160. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48161. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48162. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48163. (void*)&&ZEND_NULL_LABEL,
  48164. (void*)&&ZEND_NULL_LABEL,
  48165. (void*)&&ZEND_NULL_LABEL,
  48166. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
  48167. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
  48168. (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
  48169. (void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
  48170. (void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
  48171. (void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
  48172. (void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_LABEL,
  48173. (void*)&&ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED_LABEL,
  48174. (void*)&&ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED_LABEL,
  48175. (void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
  48176. (void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
  48177. (void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
  48178. (void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_LABEL,
  48179. (void*)&&ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED_LABEL,
  48180. (void*)&&ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED_LABEL,
  48181. (void*)&&ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
  48182. (void*)&&ZEND_POST_INC_LONG_SPEC_CV_LABEL,
  48183. (void*)&&ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_CV_LABEL,
  48184. (void*)&&ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
  48185. (void*)&&ZEND_POST_DEC_LONG_SPEC_CV_LABEL,
  48186. (void*)&&ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_CV_LABEL,
  48187. (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_LABEL,
  48188. (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
  48189. (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
  48190. (void*)&&ZEND_NULL_LABEL,
  48191. (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
  48192. (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_CONST_LABEL,
  48193. (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
  48194. (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
  48195. (void*)&&ZEND_NULL_LABEL,
  48196. (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
  48197. (void*)&&ZEND_NULL_LABEL,
  48198. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
  48199. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
  48200. (void*)&&ZEND_NULL_LABEL,
  48201. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
  48202. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
  48203. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
  48204. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
  48205. (void*)&&ZEND_NULL_LABEL,
  48206. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
  48207. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
  48208. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
  48209. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
  48210. (void*)&&ZEND_NULL_LABEL,
  48211. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_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_FETCH_DIM_R_INDEX_SPEC_CV_CONST_LABEL,
  48218. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
  48219. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
  48220. (void*)&&ZEND_NULL_LABEL,
  48221. (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
  48222. (void*)&&ZEND_NULL_LABEL,
  48223. (void*)&&ZEND_NULL_LABEL,
  48224. (void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_VAR_LABEL,
  48225. (void*)&&ZEND_NULL_LABEL,
  48226. (void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_CV_LABEL,
  48227. (void*)&&ZEND_NULL_LABEL,
  48228. (void*)&&ZEND_NULL_LABEL,
  48229. (void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_LABEL,
  48230. (void*)&&ZEND_NULL_LABEL,
  48231. (void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_LABEL,
  48232. (void*)&&ZEND_SEND_VAL_SIMPLE_SPEC_CONST_LABEL,
  48233. (void*)&&ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_LABEL,
  48234. (void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
  48235. (void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_LABEL,
  48236. (void*)&&ZEND_NULL_LABEL
  48237. };
  48238. zend_opcode_handlers = (const void **) labels;
  48239. zend_handlers_count = sizeof(labels) / sizeof(void*);
  48240. memset(&hybrid_halt_op, 0, sizeof(hybrid_halt_op));
  48241. hybrid_halt_op.handler = (void*)&&HYBRID_HALT_LABEL;
  48242. goto HYBRID_HALT_LABEL;
  48243. }
  48244. #endif
  48245. LOAD_OPLINE();
  48246. ZEND_VM_LOOP_INTERRUPT_CHECK();
  48247. while (1) {
  48248. #if !defined(ZEND_VM_FP_GLOBAL_REG) || !defined(ZEND_VM_IP_GLOBAL_REG)
  48249. int ret;
  48250. #endif
  48251. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  48252. HYBRID_SWITCH() {
  48253. #else
  48254. #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
  48255. ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48256. if (UNEXPECTED(!OPLINE)) {
  48257. #else
  48258. if (UNEXPECTED((ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)) != 0)) {
  48259. #endif
  48260. #endif
  48261. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  48262. zend_leave_helper_SPEC_LABEL:
  48263. {
  48264. zend_execute_data *old_execute_data;
  48265. uint32_t call_info = EX_CALL_INFO();
  48266. if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED)) == 0)) {
  48267. EG(current_execute_data) = EX(prev_execute_data);
  48268. i_free_compiled_variables(execute_data);
  48269. if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
  48270. zend_object *object = Z_OBJ(execute_data->This);
  48271. #if 0
  48272. if (UNEXPECTED(EG(exception) != NULL) && (EX(opline)->op1.num & ZEND_CALL_CTOR)) {
  48273. #else
  48274. if (UNEXPECTED(EG(exception) != NULL) && (call_info & ZEND_CALL_CTOR)) {
  48275. #endif
  48276. GC_DELREF(object);
  48277. zend_object_store_ctor_failed(object);
  48278. }
  48279. OBJ_RELEASE(object);
  48280. } else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
  48281. OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
  48282. }
  48283. EG(vm_stack_top) = (zval*)execute_data;
  48284. execute_data = EX(prev_execute_data);
  48285. if (UNEXPECTED(EG(exception) != NULL)) {
  48286. zend_rethrow_exception(execute_data);
  48287. HANDLE_EXCEPTION_LEAVE();
  48288. }
  48289. LOAD_NEXT_OPLINE();
  48290. ZEND_VM_LEAVE();
  48291. } else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
  48292. EG(current_execute_data) = EX(prev_execute_data);
  48293. i_free_compiled_variables(execute_data);
  48294. if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
  48295. zend_clean_and_cache_symbol_table(EX(symbol_table));
  48296. }
  48297. /* Free extra args before releasing the closure,
  48298. * as that may free the op_array. */
  48299. zend_vm_stack_free_extra_args_ex(call_info, execute_data);
  48300. if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
  48301. zend_object *object = Z_OBJ(execute_data->This);
  48302. #if 0
  48303. if (UNEXPECTED(EG(exception) != NULL) && (EX(opline)->op1.num & ZEND_CALL_CTOR)) {
  48304. #else
  48305. if (UNEXPECTED(EG(exception) != NULL) && (call_info & ZEND_CALL_CTOR)) {
  48306. #endif
  48307. GC_DELREF(object);
  48308. zend_object_store_ctor_failed(object);
  48309. }
  48310. OBJ_RELEASE(object);
  48311. } else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
  48312. OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
  48313. }
  48314. old_execute_data = execute_data;
  48315. execute_data = EX(prev_execute_data);
  48316. zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
  48317. if (UNEXPECTED(EG(exception) != NULL)) {
  48318. zend_rethrow_exception(execute_data);
  48319. HANDLE_EXCEPTION_LEAVE();
  48320. }
  48321. LOAD_NEXT_OPLINE();
  48322. ZEND_VM_LEAVE();
  48323. } else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
  48324. zend_detach_symbol_table(execute_data);
  48325. destroy_op_array(&EX(func)->op_array);
  48326. efree_size(EX(func), sizeof(zend_op_array));
  48327. old_execute_data = execute_data;
  48328. execute_data = EG(current_execute_data) = EX(prev_execute_data);
  48329. zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
  48330. zend_attach_symbol_table(execute_data);
  48331. if (UNEXPECTED(EG(exception) != NULL)) {
  48332. zend_rethrow_exception(execute_data);
  48333. HANDLE_EXCEPTION_LEAVE();
  48334. }
  48335. LOAD_NEXT_OPLINE();
  48336. ZEND_VM_LEAVE();
  48337. } else {
  48338. if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
  48339. EG(current_execute_data) = EX(prev_execute_data);
  48340. i_free_compiled_variables(execute_data);
  48341. if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS))) {
  48342. if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
  48343. zend_clean_and_cache_symbol_table(EX(symbol_table));
  48344. }
  48345. zend_vm_stack_free_extra_args_ex(call_info, execute_data);
  48346. }
  48347. if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
  48348. OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
  48349. }
  48350. ZEND_VM_RETURN();
  48351. } else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
  48352. zend_array *symbol_table = EX(symbol_table);
  48353. zend_detach_symbol_table(execute_data);
  48354. old_execute_data = EX(prev_execute_data);
  48355. while (old_execute_data) {
  48356. if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
  48357. if (old_execute_data->symbol_table == symbol_table) {
  48358. zend_attach_symbol_table(old_execute_data);
  48359. }
  48360. break;
  48361. }
  48362. old_execute_data = old_execute_data->prev_execute_data;
  48363. }
  48364. EG(current_execute_data) = EX(prev_execute_data);
  48365. ZEND_VM_RETURN();
  48366. }
  48367. }
  48368. }
  48369. HYBRID_CASE(ZEND_JMP_SPEC):
  48370. VM_TRACE(ZEND_JMP_SPEC)
  48371. ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48372. HYBRID_BREAK();
  48373. HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED):
  48374. VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED)
  48375. ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48376. HYBRID_BREAK();
  48377. HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_USED):
  48378. VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_USED)
  48379. ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48380. HYBRID_BREAK();
  48381. HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED):
  48382. VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED)
  48383. ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48384. HYBRID_BREAK();
  48385. HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_USED):
  48386. VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_USED)
  48387. ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48388. HYBRID_BREAK();
  48389. HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED):
  48390. VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED)
  48391. ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48392. HYBRID_BREAK();
  48393. HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED):
  48394. VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED)
  48395. ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48396. HYBRID_BREAK();
  48397. HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED):
  48398. VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED)
  48399. ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48400. HYBRID_BREAK();
  48401. HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_USED):
  48402. VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_USED)
  48403. ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48404. HYBRID_BREAK();
  48405. HYBRID_CASE(ZEND_GENERATOR_CREATE_SPEC):
  48406. VM_TRACE(ZEND_GENERATOR_CREATE_SPEC)
  48407. ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48408. HYBRID_BREAK();
  48409. HYBRID_CASE(ZEND_SEND_UNPACK_SPEC):
  48410. VM_TRACE(ZEND_SEND_UNPACK_SPEC)
  48411. ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48412. HYBRID_BREAK();
  48413. HYBRID_CASE(ZEND_SEND_ARRAY_SPEC):
  48414. VM_TRACE(ZEND_SEND_ARRAY_SPEC)
  48415. ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48416. HYBRID_BREAK();
  48417. HYBRID_CASE(ZEND_BEGIN_SILENCE_SPEC):
  48418. VM_TRACE(ZEND_BEGIN_SILENCE_SPEC)
  48419. ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48420. HYBRID_BREAK();
  48421. HYBRID_CASE(ZEND_EXT_STMT_SPEC):
  48422. VM_TRACE(ZEND_EXT_STMT_SPEC)
  48423. ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48424. HYBRID_BREAK();
  48425. HYBRID_CASE(ZEND_EXT_FCALL_BEGIN_SPEC):
  48426. VM_TRACE(ZEND_EXT_FCALL_BEGIN_SPEC)
  48427. ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48428. HYBRID_BREAK();
  48429. HYBRID_CASE(ZEND_EXT_FCALL_END_SPEC):
  48430. VM_TRACE(ZEND_EXT_FCALL_END_SPEC)
  48431. ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48432. HYBRID_BREAK();
  48433. HYBRID_CASE(ZEND_DECLARE_ANON_CLASS_SPEC):
  48434. VM_TRACE(ZEND_DECLARE_ANON_CLASS_SPEC)
  48435. ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48436. HYBRID_BREAK();
  48437. HYBRID_CASE(ZEND_DECLARE_FUNCTION_SPEC):
  48438. VM_TRACE(ZEND_DECLARE_FUNCTION_SPEC)
  48439. ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48440. HYBRID_BREAK();
  48441. HYBRID_CASE(ZEND_TICKS_SPEC):
  48442. VM_TRACE(ZEND_TICKS_SPEC)
  48443. ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48444. HYBRID_BREAK();
  48445. HYBRID_CASE(ZEND_EXT_NOP_SPEC):
  48446. VM_TRACE(ZEND_EXT_NOP_SPEC)
  48447. ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48448. HYBRID_BREAK();
  48449. HYBRID_CASE(ZEND_NOP_SPEC):
  48450. VM_TRACE(ZEND_NOP_SPEC)
  48451. ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48452. HYBRID_BREAK();
  48453. HYBRID_CASE(ZEND_ADD_TRAIT_SPEC):
  48454. VM_TRACE(ZEND_ADD_TRAIT_SPEC)
  48455. ZEND_ADD_TRAIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48456. HYBRID_BREAK();
  48457. HYBRID_CASE(ZEND_BIND_TRAITS_SPEC):
  48458. VM_TRACE(ZEND_BIND_TRAITS_SPEC)
  48459. ZEND_BIND_TRAITS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48460. HYBRID_BREAK();
  48461. HYBRID_CASE(ZEND_HANDLE_EXCEPTION_SPEC):
  48462. VM_TRACE(ZEND_HANDLE_EXCEPTION_SPEC)
  48463. ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48464. HYBRID_BREAK();
  48465. HYBRID_CASE(ZEND_VERIFY_ABSTRACT_CLASS_SPEC):
  48466. VM_TRACE(ZEND_VERIFY_ABSTRACT_CLASS_SPEC)
  48467. ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48468. HYBRID_BREAK();
  48469. HYBRID_CASE(ZEND_USER_OPCODE_SPEC):
  48470. VM_TRACE(ZEND_USER_OPCODE_SPEC)
  48471. ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48472. HYBRID_BREAK();
  48473. HYBRID_CASE(ZEND_DISCARD_EXCEPTION_SPEC):
  48474. VM_TRACE(ZEND_DISCARD_EXCEPTION_SPEC)
  48475. ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48476. HYBRID_BREAK();
  48477. HYBRID_CASE(ZEND_FAST_CALL_SPEC):
  48478. VM_TRACE(ZEND_FAST_CALL_SPEC)
  48479. ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48480. HYBRID_BREAK();
  48481. HYBRID_CASE(ZEND_FAST_RET_SPEC):
  48482. VM_TRACE(ZEND_FAST_RET_SPEC)
  48483. ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48484. HYBRID_BREAK();
  48485. HYBRID_CASE(ZEND_ASSERT_CHECK_SPEC):
  48486. VM_TRACE(ZEND_ASSERT_CHECK_SPEC)
  48487. ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48488. HYBRID_BREAK();
  48489. HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC):
  48490. VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC)
  48491. ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48492. HYBRID_BREAK();
  48493. HYBRID_CASE(ZEND_JMP_FORWARD_SPEC):
  48494. VM_TRACE(ZEND_JMP_FORWARD_SPEC)
  48495. ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48496. HYBRID_BREAK();
  48497. HYBRID_CASE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST):
  48498. VM_TRACE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST)
  48499. ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48500. HYBRID_BREAK();
  48501. HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST):
  48502. VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST)
  48503. ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48504. HYBRID_BREAK();
  48505. HYBRID_CASE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST):
  48506. VM_TRACE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST)
  48507. ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48508. HYBRID_BREAK();
  48509. HYBRID_CASE(ZEND_INIT_FCALL_SPEC_CONST):
  48510. VM_TRACE(ZEND_INIT_FCALL_SPEC_CONST)
  48511. ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48512. HYBRID_BREAK();
  48513. HYBRID_CASE(ZEND_RECV_INIT_SPEC_CONST):
  48514. VM_TRACE(ZEND_RECV_INIT_SPEC_CONST)
  48515. ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48516. HYBRID_BREAK();
  48517. HYBRID_CASE(ZEND_ADD_INTERFACE_SPEC_CONST):
  48518. VM_TRACE(ZEND_ADD_INTERFACE_SPEC_CONST)
  48519. ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48520. HYBRID_BREAK();
  48521. HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR):
  48522. VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR)
  48523. ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48524. HYBRID_BREAK();
  48525. HYBRID_CASE(ZEND_RECV_SPEC_UNUSED):
  48526. VM_TRACE(ZEND_RECV_SPEC_UNUSED)
  48527. ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48528. HYBRID_BREAK();
  48529. HYBRID_CASE(ZEND_RECV_VARIADIC_SPEC_UNUSED):
  48530. VM_TRACE(ZEND_RECV_VARIADIC_SPEC_UNUSED)
  48531. ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48532. HYBRID_BREAK();
  48533. HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV):
  48534. VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV)
  48535. ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48536. HYBRID_BREAK();
  48537. HYBRID_CASE(ZEND_BW_NOT_SPEC_CONST):
  48538. VM_TRACE(ZEND_BW_NOT_SPEC_CONST)
  48539. ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48540. HYBRID_BREAK();
  48541. HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CONST):
  48542. VM_TRACE(ZEND_BOOL_NOT_SPEC_CONST)
  48543. ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48544. HYBRID_BREAK();
  48545. HYBRID_CASE(ZEND_ECHO_SPEC_CONST):
  48546. VM_TRACE(ZEND_ECHO_SPEC_CONST)
  48547. ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48548. HYBRID_BREAK();
  48549. HYBRID_CASE(ZEND_JMPZ_SPEC_CONST):
  48550. VM_TRACE(ZEND_JMPZ_SPEC_CONST)
  48551. ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48552. HYBRID_BREAK();
  48553. HYBRID_CASE(ZEND_JMPNZ_SPEC_CONST):
  48554. VM_TRACE(ZEND_JMPNZ_SPEC_CONST)
  48555. ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48556. HYBRID_BREAK();
  48557. HYBRID_CASE(ZEND_JMPZNZ_SPEC_CONST):
  48558. VM_TRACE(ZEND_JMPZNZ_SPEC_CONST)
  48559. ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48560. HYBRID_BREAK();
  48561. HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CONST):
  48562. VM_TRACE(ZEND_JMPZ_EX_SPEC_CONST)
  48563. ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48564. HYBRID_BREAK();
  48565. HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CONST):
  48566. VM_TRACE(ZEND_JMPNZ_EX_SPEC_CONST)
  48567. ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48568. HYBRID_BREAK();
  48569. HYBRID_CASE(ZEND_RETURN_SPEC_CONST):
  48570. VM_TRACE(ZEND_RETURN_SPEC_CONST)
  48571. {
  48572. USE_OPLINE
  48573. zval *retval_ptr;
  48574. zval *return_value;
  48575. zend_free_op free_op1;
  48576. retval_ptr = RT_CONSTANT(opline, opline->op1);
  48577. return_value = EX(return_value);
  48578. if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  48579. SAVE_OPLINE();
  48580. retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R);
  48581. if (return_value) {
  48582. ZVAL_NULL(return_value);
  48583. }
  48584. } else if (!return_value) {
  48585. if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
  48586. if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
  48587. SAVE_OPLINE();
  48588. rc_dtor_func(Z_COUNTED_P(free_op1));
  48589. }
  48590. }
  48591. } else {
  48592. if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
  48593. ZVAL_COPY_VALUE(return_value, retval_ptr);
  48594. if (IS_CONST == IS_CONST) {
  48595. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  48596. Z_ADDREF_P(return_value);
  48597. }
  48598. }
  48599. } else if (IS_CONST == IS_CV) {
  48600. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  48601. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  48602. ZVAL_COPY_VALUE(return_value, retval_ptr);
  48603. if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
  48604. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  48605. if (GC_MAY_LEAK(ref)) {
  48606. gc_possible_root(ref);
  48607. }
  48608. ZVAL_NULL(retval_ptr);
  48609. } else {
  48610. Z_ADDREF_P(return_value);
  48611. }
  48612. } else {
  48613. retval_ptr = Z_REFVAL_P(retval_ptr);
  48614. ZVAL_COPY(return_value, retval_ptr);
  48615. }
  48616. } else {
  48617. ZVAL_COPY_VALUE(return_value, retval_ptr);
  48618. }
  48619. } else /* if (IS_CONST == IS_VAR) */ {
  48620. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  48621. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  48622. retval_ptr = Z_REFVAL_P(retval_ptr);
  48623. ZVAL_COPY_VALUE(return_value, retval_ptr);
  48624. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  48625. efree_size(ref, sizeof(zend_reference));
  48626. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  48627. Z_ADDREF_P(retval_ptr);
  48628. }
  48629. } else {
  48630. ZVAL_COPY_VALUE(return_value, retval_ptr);
  48631. }
  48632. }
  48633. }
  48634. goto zend_leave_helper_SPEC_LABEL;
  48635. }
  48636. HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CONST):
  48637. VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CONST)
  48638. ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48639. HYBRID_BREAK();
  48640. HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CONST):
  48641. VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CONST)
  48642. ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48643. HYBRID_BREAK();
  48644. HYBRID_CASE(ZEND_THROW_SPEC_CONST):
  48645. VM_TRACE(ZEND_THROW_SPEC_CONST)
  48646. ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48647. HYBRID_BREAK();
  48648. HYBRID_CASE(ZEND_CATCH_SPEC_CONST):
  48649. VM_TRACE(ZEND_CATCH_SPEC_CONST)
  48650. ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48651. HYBRID_BREAK();
  48652. HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST):
  48653. VM_TRACE(ZEND_SEND_VAL_SPEC_CONST)
  48654. ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48655. HYBRID_BREAK();
  48656. HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST):
  48657. VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST)
  48658. ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48659. HYBRID_BREAK();
  48660. HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_QUICK):
  48661. VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_QUICK)
  48662. ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48663. HYBRID_BREAK();
  48664. HYBRID_CASE(ZEND_SEND_USER_SPEC_CONST):
  48665. VM_TRACE(ZEND_SEND_USER_SPEC_CONST)
  48666. ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48667. HYBRID_BREAK();
  48668. HYBRID_CASE(ZEND_BOOL_SPEC_CONST):
  48669. VM_TRACE(ZEND_BOOL_SPEC_CONST)
  48670. ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48671. HYBRID_BREAK();
  48672. HYBRID_CASE(ZEND_CLONE_SPEC_CONST):
  48673. VM_TRACE(ZEND_CLONE_SPEC_CONST)
  48674. ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48675. HYBRID_BREAK();
  48676. HYBRID_CASE(ZEND_CAST_SPEC_CONST):
  48677. VM_TRACE(ZEND_CAST_SPEC_CONST)
  48678. ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48679. HYBRID_BREAK();
  48680. HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST):
  48681. VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST)
  48682. ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48683. HYBRID_BREAK();
  48684. HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CONST):
  48685. VM_TRACE(ZEND_FE_RESET_R_SPEC_CONST)
  48686. ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48687. HYBRID_BREAK();
  48688. HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CONST):
  48689. VM_TRACE(ZEND_FE_RESET_RW_SPEC_CONST)
  48690. ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48691. HYBRID_BREAK();
  48692. HYBRID_CASE(ZEND_EXIT_SPEC_CONST):
  48693. VM_TRACE(ZEND_EXIT_SPEC_CONST)
  48694. ZEND_EXIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48695. HYBRID_BREAK();
  48696. HYBRID_CASE(ZEND_JMP_SET_SPEC_CONST):
  48697. VM_TRACE(ZEND_JMP_SET_SPEC_CONST)
  48698. ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48699. HYBRID_BREAK();
  48700. HYBRID_CASE(ZEND_COALESCE_SPEC_CONST):
  48701. VM_TRACE(ZEND_COALESCE_SPEC_CONST)
  48702. ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48703. HYBRID_BREAK();
  48704. HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CONST):
  48705. VM_TRACE(ZEND_QM_ASSIGN_SPEC_CONST)
  48706. ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48707. HYBRID_BREAK();
  48708. HYBRID_CASE(ZEND_DECLARE_CLASS_SPEC_CONST):
  48709. VM_TRACE(ZEND_DECLARE_CLASS_SPEC_CONST)
  48710. ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48711. HYBRID_BREAK();
  48712. HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CONST):
  48713. VM_TRACE(ZEND_YIELD_FROM_SPEC_CONST)
  48714. ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48715. HYBRID_BREAK();
  48716. HYBRID_CASE(ZEND_STRLEN_SPEC_CONST):
  48717. VM_TRACE(ZEND_STRLEN_SPEC_CONST)
  48718. ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48719. HYBRID_BREAK();
  48720. HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CONST):
  48721. VM_TRACE(ZEND_TYPE_CHECK_SPEC_CONST)
  48722. ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48723. HYBRID_BREAK();
  48724. HYBRID_CASE(ZEND_DEFINED_SPEC_CONST):
  48725. VM_TRACE(ZEND_DEFINED_SPEC_CONST)
  48726. ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48727. HYBRID_BREAK();
  48728. HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST):
  48729. VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST)
  48730. ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48731. HYBRID_BREAK();
  48732. HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST):
  48733. VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST)
  48734. ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48735. HYBRID_BREAK();
  48736. HYBRID_CASE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST):
  48737. VM_TRACE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST)
  48738. ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48739. HYBRID_BREAK();
  48740. HYBRID_CASE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST):
  48741. VM_TRACE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST)
  48742. ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48743. HYBRID_BREAK();
  48744. HYBRID_CASE(ZEND_ADD_SPEC_CONST_CONST):
  48745. VM_TRACE(ZEND_ADD_SPEC_CONST_CONST)
  48746. ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48747. HYBRID_BREAK();
  48748. HYBRID_CASE(ZEND_SUB_SPEC_CONST_CONST):
  48749. VM_TRACE(ZEND_SUB_SPEC_CONST_CONST)
  48750. ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48751. HYBRID_BREAK();
  48752. HYBRID_CASE(ZEND_MUL_SPEC_CONST_CONST):
  48753. VM_TRACE(ZEND_MUL_SPEC_CONST_CONST)
  48754. ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48755. HYBRID_BREAK();
  48756. HYBRID_CASE(ZEND_DIV_SPEC_CONST_CONST):
  48757. VM_TRACE(ZEND_DIV_SPEC_CONST_CONST)
  48758. ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48759. HYBRID_BREAK();
  48760. HYBRID_CASE(ZEND_MOD_SPEC_CONST_CONST):
  48761. VM_TRACE(ZEND_MOD_SPEC_CONST_CONST)
  48762. ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48763. HYBRID_BREAK();
  48764. HYBRID_CASE(ZEND_SL_SPEC_CONST_CONST):
  48765. VM_TRACE(ZEND_SL_SPEC_CONST_CONST)
  48766. ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48767. HYBRID_BREAK();
  48768. HYBRID_CASE(ZEND_SR_SPEC_CONST_CONST):
  48769. VM_TRACE(ZEND_SR_SPEC_CONST_CONST)
  48770. ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48771. HYBRID_BREAK();
  48772. HYBRID_CASE(ZEND_POW_SPEC_CONST_CONST):
  48773. VM_TRACE(ZEND_POW_SPEC_CONST_CONST)
  48774. ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48775. HYBRID_BREAK();
  48776. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST):
  48777. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST)
  48778. ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48779. HYBRID_BREAK();
  48780. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST):
  48781. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST)
  48782. ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48783. HYBRID_BREAK();
  48784. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CONST_CONST):
  48785. VM_TRACE(ZEND_IS_EQUAL_SPEC_CONST_CONST)
  48786. ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48787. HYBRID_BREAK();
  48788. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST):
  48789. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST)
  48790. ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48791. HYBRID_BREAK();
  48792. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_CONST):
  48793. VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_CONST)
  48794. ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48795. HYBRID_BREAK();
  48796. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST):
  48797. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST)
  48798. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48799. HYBRID_BREAK();
  48800. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CONST):
  48801. VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CONST)
  48802. ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48803. HYBRID_BREAK();
  48804. HYBRID_CASE(ZEND_BW_OR_SPEC_CONST_CONST):
  48805. VM_TRACE(ZEND_BW_OR_SPEC_CONST_CONST)
  48806. ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48807. HYBRID_BREAK();
  48808. HYBRID_CASE(ZEND_BW_AND_SPEC_CONST_CONST):
  48809. VM_TRACE(ZEND_BW_AND_SPEC_CONST_CONST)
  48810. ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48811. HYBRID_BREAK();
  48812. HYBRID_CASE(ZEND_BW_XOR_SPEC_CONST_CONST):
  48813. VM_TRACE(ZEND_BW_XOR_SPEC_CONST_CONST)
  48814. ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48815. HYBRID_BREAK();
  48816. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CONST_CONST):
  48817. VM_TRACE(ZEND_BOOL_XOR_SPEC_CONST_CONST)
  48818. ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48819. HYBRID_BREAK();
  48820. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST):
  48821. VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST)
  48822. ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48823. HYBRID_BREAK();
  48824. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST):
  48825. VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST)
  48826. ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48827. HYBRID_BREAK();
  48828. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST):
  48829. VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST)
  48830. ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48831. HYBRID_BREAK();
  48832. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST):
  48833. VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST)
  48834. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48835. HYBRID_BREAK();
  48836. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST):
  48837. VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST)
  48838. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48839. HYBRID_BREAK();
  48840. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST):
  48841. VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST)
  48842. ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48843. HYBRID_BREAK();
  48844. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST):
  48845. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST)
  48846. ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48847. HYBRID_BREAK();
  48848. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST):
  48849. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST)
  48850. ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48851. HYBRID_BREAK();
  48852. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST):
  48853. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST)
  48854. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48855. HYBRID_BREAK();
  48856. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST):
  48857. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST)
  48858. ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48859. HYBRID_BREAK();
  48860. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST):
  48861. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST)
  48862. ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48863. HYBRID_BREAK();
  48864. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST):
  48865. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST)
  48866. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48867. HYBRID_BREAK();
  48868. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST):
  48869. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST)
  48870. ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48871. HYBRID_BREAK();
  48872. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CONST):
  48873. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CONST)
  48874. ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48875. HYBRID_BREAK();
  48876. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST):
  48877. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST)
  48878. ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48879. HYBRID_BREAK();
  48880. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST):
  48881. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST)
  48882. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48883. HYBRID_BREAK();
  48884. HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST):
  48885. VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST)
  48886. ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48887. HYBRID_BREAK();
  48888. HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST):
  48889. VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST)
  48890. ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48891. HYBRID_BREAK();
  48892. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST):
  48893. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST)
  48894. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48895. HYBRID_BREAK();
  48896. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CONST):
  48897. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CONST)
  48898. ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48899. HYBRID_BREAK();
  48900. HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST):
  48901. VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST)
  48902. ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48903. HYBRID_BREAK();
  48904. HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST):
  48905. VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST)
  48906. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48907. HYBRID_BREAK();
  48908. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST):
  48909. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST)
  48910. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48911. HYBRID_BREAK();
  48912. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST):
  48913. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST)
  48914. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48915. HYBRID_BREAK();
  48916. HYBRID_CASE(ZEND_DECLARE_INHERITED_CLASS_SPEC_CONST_CONST):
  48917. VM_TRACE(ZEND_DECLARE_INHERITED_CLASS_SPEC_CONST_CONST)
  48918. ZEND_DECLARE_INHERITED_CLASS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48919. HYBRID_BREAK();
  48920. HYBRID_CASE(ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_CONST_CONST):
  48921. VM_TRACE(ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_CONST_CONST)
  48922. ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48923. HYBRID_BREAK();
  48924. HYBRID_CASE(ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_CONST_CONST):
  48925. VM_TRACE(ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_CONST_CONST)
  48926. ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48927. HYBRID_BREAK();
  48928. HYBRID_CASE(ZEND_DECLARE_CONST_SPEC_CONST_CONST):
  48929. VM_TRACE(ZEND_DECLARE_CONST_SPEC_CONST_CONST)
  48930. ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48931. HYBRID_BREAK();
  48932. HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CONST):
  48933. VM_TRACE(ZEND_YIELD_SPEC_CONST_CONST)
  48934. ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48935. HYBRID_BREAK();
  48936. HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_CONST_CONST):
  48937. VM_TRACE(ZEND_SWITCH_LONG_SPEC_CONST_CONST)
  48938. ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48939. HYBRID_BREAK();
  48940. HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_CONST_CONST):
  48941. VM_TRACE(ZEND_SWITCH_STRING_SPEC_CONST_CONST)
  48942. ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48943. HYBRID_BREAK();
  48944. HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CONST_CONST):
  48945. VM_TRACE(ZEND_IN_ARRAY_SPEC_CONST_CONST)
  48946. ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48947. HYBRID_BREAK();
  48948. HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV):
  48949. VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV)
  48950. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48951. HYBRID_BREAK();
  48952. HYBRID_CASE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV):
  48953. VM_TRACE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV)
  48954. ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48955. HYBRID_BREAK();
  48956. HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV):
  48957. VM_TRACE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV)
  48958. ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48959. HYBRID_BREAK();
  48960. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV):
  48961. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV)
  48962. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48963. HYBRID_BREAK();
  48964. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ):
  48965. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ)
  48966. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48967. HYBRID_BREAK();
  48968. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
  48969. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
  48970. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48971. HYBRID_BREAK();
  48972. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV):
  48973. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV)
  48974. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48975. HYBRID_BREAK();
  48976. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
  48977. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
  48978. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48979. HYBRID_BREAK();
  48980. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
  48981. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
  48982. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48983. HYBRID_BREAK();
  48984. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV):
  48985. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV)
  48986. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48987. HYBRID_BREAK();
  48988. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ):
  48989. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ)
  48990. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48991. HYBRID_BREAK();
  48992. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
  48993. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
  48994. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48995. HYBRID_BREAK();
  48996. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV):
  48997. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV)
  48998. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  48999. HYBRID_BREAK();
  49000. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
  49001. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
  49002. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49003. HYBRID_BREAK();
  49004. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
  49005. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
  49006. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49007. HYBRID_BREAK();
  49008. HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV):
  49009. VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV)
  49010. ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49011. HYBRID_BREAK();
  49012. HYBRID_CASE(ZEND_ADD_SPEC_CONST_TMPVAR):
  49013. VM_TRACE(ZEND_ADD_SPEC_CONST_TMPVAR)
  49014. ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49015. HYBRID_BREAK();
  49016. HYBRID_CASE(ZEND_SUB_SPEC_CONST_TMPVAR):
  49017. VM_TRACE(ZEND_SUB_SPEC_CONST_TMPVAR)
  49018. ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49019. HYBRID_BREAK();
  49020. HYBRID_CASE(ZEND_DIV_SPEC_CONST_TMPVAR):
  49021. VM_TRACE(ZEND_DIV_SPEC_CONST_TMPVAR)
  49022. ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49023. HYBRID_BREAK();
  49024. HYBRID_CASE(ZEND_MOD_SPEC_CONST_TMPVAR):
  49025. VM_TRACE(ZEND_MOD_SPEC_CONST_TMPVAR)
  49026. ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49027. HYBRID_BREAK();
  49028. HYBRID_CASE(ZEND_SL_SPEC_CONST_TMPVAR):
  49029. VM_TRACE(ZEND_SL_SPEC_CONST_TMPVAR)
  49030. ZEND_SL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49031. HYBRID_BREAK();
  49032. HYBRID_CASE(ZEND_SR_SPEC_CONST_TMPVAR):
  49033. VM_TRACE(ZEND_SR_SPEC_CONST_TMPVAR)
  49034. ZEND_SR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49035. HYBRID_BREAK();
  49036. HYBRID_CASE(ZEND_POW_SPEC_CONST_TMPVAR):
  49037. VM_TRACE(ZEND_POW_SPEC_CONST_TMPVAR)
  49038. ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49039. HYBRID_BREAK();
  49040. HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_TMPVAR):
  49041. VM_TRACE(ZEND_CONCAT_SPEC_CONST_TMPVAR)
  49042. ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49043. HYBRID_BREAK();
  49044. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVAR):
  49045. VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVAR)
  49046. ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49047. HYBRID_BREAK();
  49048. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR):
  49049. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR)
  49050. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49051. HYBRID_BREAK();
  49052. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR):
  49053. VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR)
  49054. ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49055. HYBRID_BREAK();
  49056. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR):
  49057. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR)
  49058. ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49059. HYBRID_BREAK();
  49060. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR):
  49061. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR)
  49062. ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49063. HYBRID_BREAK();
  49064. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR):
  49065. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR)
  49066. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49067. HYBRID_BREAK();
  49068. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR):
  49069. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR)
  49070. ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49071. HYBRID_BREAK();
  49072. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR):
  49073. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR)
  49074. ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49075. HYBRID_BREAK();
  49076. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR):
  49077. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR)
  49078. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49079. HYBRID_BREAK();
  49080. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR):
  49081. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR)
  49082. ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49083. HYBRID_BREAK();
  49084. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR):
  49085. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR)
  49086. ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49087. HYBRID_BREAK();
  49088. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR):
  49089. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR)
  49090. ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49091. HYBRID_BREAK();
  49092. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR):
  49093. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR)
  49094. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49095. HYBRID_BREAK();
  49096. HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR):
  49097. VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR)
  49098. ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49099. HYBRID_BREAK();
  49100. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR):
  49101. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR)
  49102. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49103. HYBRID_BREAK();
  49104. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR):
  49105. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR)
  49106. ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49107. HYBRID_BREAK();
  49108. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR):
  49109. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR)
  49110. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49111. HYBRID_BREAK();
  49112. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR):
  49113. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR)
  49114. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49115. HYBRID_BREAK();
  49116. HYBRID_CASE(ZEND_YIELD_SPEC_CONST_TMP):
  49117. VM_TRACE(ZEND_YIELD_SPEC_CONST_TMP)
  49118. ZEND_YIELD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49119. HYBRID_BREAK();
  49120. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR):
  49121. VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR)
  49122. ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49123. HYBRID_BREAK();
  49124. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR):
  49125. VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR)
  49126. ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49127. HYBRID_BREAK();
  49128. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR):
  49129. VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR)
  49130. ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49131. HYBRID_BREAK();
  49132. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR):
  49133. VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR)
  49134. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49135. HYBRID_BREAK();
  49136. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR):
  49137. VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR)
  49138. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49139. HYBRID_BREAK();
  49140. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR):
  49141. VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR)
  49142. ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49143. HYBRID_BREAK();
  49144. HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR):
  49145. VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR)
  49146. ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49147. HYBRID_BREAK();
  49148. HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR):
  49149. VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR)
  49150. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49151. HYBRID_BREAK();
  49152. HYBRID_CASE(ZEND_YIELD_SPEC_CONST_VAR):
  49153. VM_TRACE(ZEND_YIELD_SPEC_CONST_VAR)
  49154. ZEND_YIELD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49155. HYBRID_BREAK();
  49156. HYBRID_CASE(ZEND_FETCH_R_SPEC_CONST_UNUSED):
  49157. VM_TRACE(ZEND_FETCH_R_SPEC_CONST_UNUSED)
  49158. ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49159. HYBRID_BREAK();
  49160. HYBRID_CASE(ZEND_FETCH_W_SPEC_CONST_UNUSED):
  49161. VM_TRACE(ZEND_FETCH_W_SPEC_CONST_UNUSED)
  49162. ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49163. HYBRID_BREAK();
  49164. HYBRID_CASE(ZEND_FETCH_RW_SPEC_CONST_UNUSED):
  49165. VM_TRACE(ZEND_FETCH_RW_SPEC_CONST_UNUSED)
  49166. ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49167. HYBRID_BREAK();
  49168. HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED):
  49169. VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED)
  49170. ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49171. HYBRID_BREAK();
  49172. HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED):
  49173. VM_TRACE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED)
  49174. ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49175. HYBRID_BREAK();
  49176. HYBRID_CASE(ZEND_FETCH_IS_SPEC_CONST_UNUSED):
  49177. VM_TRACE(ZEND_FETCH_IS_SPEC_CONST_UNUSED)
  49178. ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49179. HYBRID_BREAK();
  49180. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED):
  49181. VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED)
  49182. ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49183. HYBRID_BREAK();
  49184. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED):
  49185. VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED)
  49186. ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49187. HYBRID_BREAK();
  49188. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED):
  49189. VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED)
  49190. ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49191. HYBRID_BREAK();
  49192. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED):
  49193. VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED)
  49194. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49195. HYBRID_BREAK();
  49196. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED):
  49197. VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED)
  49198. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49199. HYBRID_BREAK();
  49200. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED):
  49201. VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED)
  49202. ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49203. HYBRID_BREAK();
  49204. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED):
  49205. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED)
  49206. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49207. HYBRID_BREAK();
  49208. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED):
  49209. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED)
  49210. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49211. HYBRID_BREAK();
  49212. HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED):
  49213. VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED)
  49214. ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49215. HYBRID_BREAK();
  49216. HYBRID_CASE(ZEND_NEW_SPEC_CONST_UNUSED):
  49217. VM_TRACE(ZEND_NEW_SPEC_CONST_UNUSED)
  49218. ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49219. HYBRID_BREAK();
  49220. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED):
  49221. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED)
  49222. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49223. HYBRID_BREAK();
  49224. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED):
  49225. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED)
  49226. ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49227. HYBRID_BREAK();
  49228. HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED):
  49229. VM_TRACE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED)
  49230. ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49231. HYBRID_BREAK();
  49232. HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED):
  49233. VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED)
  49234. ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49235. HYBRID_BREAK();
  49236. HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED):
  49237. VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED)
  49238. ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49239. HYBRID_BREAK();
  49240. HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED):
  49241. VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED)
  49242. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49243. HYBRID_BREAK();
  49244. HYBRID_CASE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED):
  49245. VM_TRACE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED)
  49246. ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49247. HYBRID_BREAK();
  49248. HYBRID_CASE(ZEND_YIELD_SPEC_CONST_UNUSED):
  49249. VM_TRACE(ZEND_YIELD_SPEC_CONST_UNUSED)
  49250. ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49251. HYBRID_BREAK();
  49252. HYBRID_CASE(ZEND_COUNT_SPEC_CONST_UNUSED):
  49253. VM_TRACE(ZEND_COUNT_SPEC_CONST_UNUSED)
  49254. ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49255. HYBRID_BREAK();
  49256. HYBRID_CASE(ZEND_GET_CLASS_SPEC_CONST_UNUSED):
  49257. VM_TRACE(ZEND_GET_CLASS_SPEC_CONST_UNUSED)
  49258. ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49259. HYBRID_BREAK();
  49260. HYBRID_CASE(ZEND_GET_TYPE_SPEC_CONST_UNUSED):
  49261. VM_TRACE(ZEND_GET_TYPE_SPEC_CONST_UNUSED)
  49262. ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49263. HYBRID_BREAK();
  49264. HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED):
  49265. VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED)
  49266. ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49267. HYBRID_BREAK();
  49268. HYBRID_CASE(ZEND_ADD_SPEC_CONST_CV):
  49269. VM_TRACE(ZEND_ADD_SPEC_CONST_CV)
  49270. ZEND_ADD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49271. HYBRID_BREAK();
  49272. HYBRID_CASE(ZEND_SUB_SPEC_CONST_CV):
  49273. VM_TRACE(ZEND_SUB_SPEC_CONST_CV)
  49274. ZEND_SUB_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49275. HYBRID_BREAK();
  49276. HYBRID_CASE(ZEND_DIV_SPEC_CONST_CV):
  49277. VM_TRACE(ZEND_DIV_SPEC_CONST_CV)
  49278. ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49279. HYBRID_BREAK();
  49280. HYBRID_CASE(ZEND_MOD_SPEC_CONST_CV):
  49281. VM_TRACE(ZEND_MOD_SPEC_CONST_CV)
  49282. ZEND_MOD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49283. HYBRID_BREAK();
  49284. HYBRID_CASE(ZEND_SL_SPEC_CONST_CV):
  49285. VM_TRACE(ZEND_SL_SPEC_CONST_CV)
  49286. ZEND_SL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49287. HYBRID_BREAK();
  49288. HYBRID_CASE(ZEND_SR_SPEC_CONST_CV):
  49289. VM_TRACE(ZEND_SR_SPEC_CONST_CV)
  49290. ZEND_SR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49291. HYBRID_BREAK();
  49292. HYBRID_CASE(ZEND_POW_SPEC_CONST_CV):
  49293. VM_TRACE(ZEND_POW_SPEC_CONST_CV)
  49294. ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49295. HYBRID_BREAK();
  49296. HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_CV):
  49297. VM_TRACE(ZEND_CONCAT_SPEC_CONST_CV)
  49298. ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49299. HYBRID_BREAK();
  49300. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_CV):
  49301. VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_CV)
  49302. ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49303. HYBRID_BREAK();
  49304. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV):
  49305. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV)
  49306. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49307. HYBRID_BREAK();
  49308. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CV):
  49309. VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CV)
  49310. ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49311. HYBRID_BREAK();
  49312. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CV):
  49313. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CV)
  49314. ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49315. HYBRID_BREAK();
  49316. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV):
  49317. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV)
  49318. ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49319. HYBRID_BREAK();
  49320. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV):
  49321. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV)
  49322. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49323. HYBRID_BREAK();
  49324. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV):
  49325. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV)
  49326. ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49327. HYBRID_BREAK();
  49328. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV):
  49329. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV)
  49330. ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49331. HYBRID_BREAK();
  49332. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV):
  49333. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV)
  49334. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49335. HYBRID_BREAK();
  49336. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CV):
  49337. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CV)
  49338. ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49339. HYBRID_BREAK();
  49340. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CV):
  49341. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CV)
  49342. ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49343. HYBRID_BREAK();
  49344. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV):
  49345. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV)
  49346. ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49347. HYBRID_BREAK();
  49348. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV):
  49349. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV)
  49350. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49351. HYBRID_BREAK();
  49352. HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CV):
  49353. VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CV)
  49354. ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49355. HYBRID_BREAK();
  49356. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV):
  49357. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV)
  49358. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49359. HYBRID_BREAK();
  49360. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CV):
  49361. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CV)
  49362. ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49363. HYBRID_BREAK();
  49364. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV):
  49365. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV)
  49366. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49367. HYBRID_BREAK();
  49368. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV):
  49369. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV)
  49370. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49371. HYBRID_BREAK();
  49372. HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CV):
  49373. VM_TRACE(ZEND_YIELD_SPEC_CONST_CV)
  49374. ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49375. HYBRID_BREAK();
  49376. HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV):
  49377. VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV)
  49378. ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49379. HYBRID_BREAK();
  49380. HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV):
  49381. VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV)
  49382. ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49383. HYBRID_BREAK();
  49384. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST):
  49385. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST)
  49386. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49387. HYBRID_BREAK();
  49388. HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST):
  49389. VM_TRACE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST)
  49390. ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49391. HYBRID_BREAK();
  49392. HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST):
  49393. VM_TRACE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST)
  49394. ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49395. HYBRID_BREAK();
  49396. HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
  49397. VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
  49398. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49399. HYBRID_BREAK();
  49400. HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST):
  49401. VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST)
  49402. ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49403. HYBRID_BREAK();
  49404. HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST):
  49405. VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST)
  49406. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49407. HYBRID_BREAK();
  49408. HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
  49409. VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
  49410. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49411. HYBRID_BREAK();
  49412. HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST):
  49413. VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST)
  49414. ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49415. HYBRID_BREAK();
  49416. HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST):
  49417. VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST)
  49418. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49419. HYBRID_BREAK();
  49420. HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
  49421. VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
  49422. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49423. HYBRID_BREAK();
  49424. HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST):
  49425. VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST)
  49426. ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49427. HYBRID_BREAK();
  49428. HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST):
  49429. VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST)
  49430. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49431. HYBRID_BREAK();
  49432. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST):
  49433. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST)
  49434. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49435. HYBRID_BREAK();
  49436. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
  49437. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
  49438. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49439. HYBRID_BREAK();
  49440. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
  49441. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
  49442. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49443. HYBRID_BREAK();
  49444. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
  49445. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
  49446. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49447. HYBRID_BREAK();
  49448. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
  49449. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
  49450. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49451. HYBRID_BREAK();
  49452. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
  49453. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
  49454. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49455. HYBRID_BREAK();
  49456. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST):
  49457. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST)
  49458. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49459. HYBRID_BREAK();
  49460. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
  49461. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
  49462. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49463. HYBRID_BREAK();
  49464. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
  49465. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
  49466. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49467. HYBRID_BREAK();
  49468. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
  49469. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
  49470. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49471. HYBRID_BREAK();
  49472. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
  49473. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
  49474. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49475. HYBRID_BREAK();
  49476. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
  49477. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
  49478. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49479. HYBRID_BREAK();
  49480. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST):
  49481. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST)
  49482. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49483. HYBRID_BREAK();
  49484. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ):
  49485. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ)
  49486. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49487. HYBRID_BREAK();
  49488. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
  49489. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
  49490. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49491. HYBRID_BREAK();
  49492. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST):
  49493. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST)
  49494. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49495. HYBRID_BREAK();
  49496. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
  49497. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
  49498. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49499. HYBRID_BREAK();
  49500. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
  49501. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
  49502. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49503. HYBRID_BREAK();
  49504. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST):
  49505. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST)
  49506. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49507. HYBRID_BREAK();
  49508. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
  49509. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
  49510. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49511. HYBRID_BREAK();
  49512. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
  49513. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
  49514. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49515. HYBRID_BREAK();
  49516. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
  49517. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
  49518. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49519. HYBRID_BREAK();
  49520. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
  49521. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
  49522. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49523. HYBRID_BREAK();
  49524. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
  49525. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
  49526. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49527. HYBRID_BREAK();
  49528. HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
  49529. VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
  49530. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49531. HYBRID_BREAK();
  49532. HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV):
  49533. VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV)
  49534. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49535. HYBRID_BREAK();
  49536. HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  49537. VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  49538. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49539. HYBRID_BREAK();
  49540. HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
  49541. VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
  49542. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49543. HYBRID_BREAK();
  49544. HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV):
  49545. VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV)
  49546. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49547. HYBRID_BREAK();
  49548. HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  49549. VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  49550. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49551. HYBRID_BREAK();
  49552. HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
  49553. VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
  49554. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49555. HYBRID_BREAK();
  49556. HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV):
  49557. VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV)
  49558. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49559. HYBRID_BREAK();
  49560. HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  49561. VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  49562. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49563. HYBRID_BREAK();
  49564. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
  49565. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
  49566. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49567. HYBRID_BREAK();
  49568. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  49569. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  49570. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49571. HYBRID_BREAK();
  49572. HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  49573. VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  49574. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49575. HYBRID_BREAK();
  49576. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  49577. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  49578. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49579. HYBRID_BREAK();
  49580. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  49581. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  49582. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49583. HYBRID_BREAK();
  49584. HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  49585. VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  49586. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49587. HYBRID_BREAK();
  49588. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
  49589. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
  49590. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49591. HYBRID_BREAK();
  49592. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  49593. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  49594. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49595. HYBRID_BREAK();
  49596. HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  49597. VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  49598. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49599. HYBRID_BREAK();
  49600. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  49601. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  49602. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49603. HYBRID_BREAK();
  49604. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  49605. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  49606. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49607. HYBRID_BREAK();
  49608. HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  49609. VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  49610. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49611. HYBRID_BREAK();
  49612. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV):
  49613. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV)
  49614. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49615. HYBRID_BREAK();
  49616. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  49617. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  49618. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49619. HYBRID_BREAK();
  49620. HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  49621. VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  49622. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49623. HYBRID_BREAK();
  49624. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  49625. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  49626. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49627. HYBRID_BREAK();
  49628. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  49629. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  49630. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49631. HYBRID_BREAK();
  49632. HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  49633. VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  49634. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49635. HYBRID_BREAK();
  49636. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
  49637. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
  49638. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49639. HYBRID_BREAK();
  49640. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  49641. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  49642. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49643. HYBRID_BREAK();
  49644. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  49645. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  49646. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49647. HYBRID_BREAK();
  49648. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
  49649. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
  49650. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49651. HYBRID_BREAK();
  49652. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
  49653. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
  49654. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49655. HYBRID_BREAK();
  49656. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
  49657. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
  49658. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49659. HYBRID_BREAK();
  49660. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR):
  49661. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR)
  49662. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49663. HYBRID_BREAK();
  49664. HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV):
  49665. VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV)
  49666. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49667. HYBRID_BREAK();
  49668. HYBRID_CASE(ZEND_BW_NOT_SPEC_TMPVAR):
  49669. VM_TRACE(ZEND_BW_NOT_SPEC_TMPVAR)
  49670. ZEND_BW_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49671. HYBRID_BREAK();
  49672. HYBRID_CASE(ZEND_BOOL_NOT_SPEC_TMPVAR):
  49673. VM_TRACE(ZEND_BOOL_NOT_SPEC_TMPVAR)
  49674. ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49675. HYBRID_BREAK();
  49676. HYBRID_CASE(ZEND_ECHO_SPEC_TMPVAR):
  49677. VM_TRACE(ZEND_ECHO_SPEC_TMPVAR)
  49678. ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49679. HYBRID_BREAK();
  49680. HYBRID_CASE(ZEND_JMPZ_SPEC_TMPVAR):
  49681. VM_TRACE(ZEND_JMPZ_SPEC_TMPVAR)
  49682. ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49683. HYBRID_BREAK();
  49684. HYBRID_CASE(ZEND_JMPNZ_SPEC_TMPVAR):
  49685. VM_TRACE(ZEND_JMPNZ_SPEC_TMPVAR)
  49686. ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49687. HYBRID_BREAK();
  49688. HYBRID_CASE(ZEND_JMPZNZ_SPEC_TMPVAR):
  49689. VM_TRACE(ZEND_JMPZNZ_SPEC_TMPVAR)
  49690. ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49691. HYBRID_BREAK();
  49692. HYBRID_CASE(ZEND_JMPZ_EX_SPEC_TMPVAR):
  49693. VM_TRACE(ZEND_JMPZ_EX_SPEC_TMPVAR)
  49694. ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49695. HYBRID_BREAK();
  49696. HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_TMPVAR):
  49697. VM_TRACE(ZEND_JMPNZ_EX_SPEC_TMPVAR)
  49698. ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49699. HYBRID_BREAK();
  49700. HYBRID_CASE(ZEND_FREE_SPEC_TMPVAR):
  49701. VM_TRACE(ZEND_FREE_SPEC_TMPVAR)
  49702. ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49703. HYBRID_BREAK();
  49704. HYBRID_CASE(ZEND_FE_FREE_SPEC_TMPVAR):
  49705. VM_TRACE(ZEND_FE_FREE_SPEC_TMPVAR)
  49706. ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49707. HYBRID_BREAK();
  49708. HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR):
  49709. VM_TRACE(ZEND_SEND_VAL_SPEC_TMPVAR)
  49710. ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49711. HYBRID_BREAK();
  49712. HYBRID_CASE(ZEND_BOOL_SPEC_TMPVAR):
  49713. VM_TRACE(ZEND_BOOL_SPEC_TMPVAR)
  49714. ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49715. HYBRID_BREAK();
  49716. HYBRID_CASE(ZEND_CLONE_SPEC_TMPVAR):
  49717. VM_TRACE(ZEND_CLONE_SPEC_TMPVAR)
  49718. ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49719. HYBRID_BREAK();
  49720. HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR):
  49721. VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR)
  49722. ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49723. HYBRID_BREAK();
  49724. HYBRID_CASE(ZEND_EXIT_SPEC_TMPVAR):
  49725. VM_TRACE(ZEND_EXIT_SPEC_TMPVAR)
  49726. ZEND_EXIT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49727. HYBRID_BREAK();
  49728. HYBRID_CASE(ZEND_COALESCE_SPEC_TMPVAR):
  49729. VM_TRACE(ZEND_COALESCE_SPEC_TMPVAR)
  49730. ZEND_COALESCE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49731. HYBRID_BREAK();
  49732. HYBRID_CASE(ZEND_STRLEN_SPEC_TMPVAR):
  49733. VM_TRACE(ZEND_STRLEN_SPEC_TMPVAR)
  49734. ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49735. HYBRID_BREAK();
  49736. HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_TMPVAR):
  49737. VM_TRACE(ZEND_TYPE_CHECK_SPEC_TMPVAR)
  49738. ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49739. HYBRID_BREAK();
  49740. HYBRID_CASE(ZEND_ADD_SPEC_TMPVAR_CONST):
  49741. VM_TRACE(ZEND_ADD_SPEC_TMPVAR_CONST)
  49742. ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49743. HYBRID_BREAK();
  49744. HYBRID_CASE(ZEND_SUB_SPEC_TMPVAR_CONST):
  49745. VM_TRACE(ZEND_SUB_SPEC_TMPVAR_CONST)
  49746. ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49747. HYBRID_BREAK();
  49748. HYBRID_CASE(ZEND_MUL_SPEC_TMPVAR_CONST):
  49749. VM_TRACE(ZEND_MUL_SPEC_TMPVAR_CONST)
  49750. ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49751. HYBRID_BREAK();
  49752. HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CONST):
  49753. VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CONST)
  49754. ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49755. HYBRID_BREAK();
  49756. HYBRID_CASE(ZEND_MOD_SPEC_TMPVAR_CONST):
  49757. VM_TRACE(ZEND_MOD_SPEC_TMPVAR_CONST)
  49758. ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49759. HYBRID_BREAK();
  49760. HYBRID_CASE(ZEND_SL_SPEC_TMPVAR_CONST):
  49761. VM_TRACE(ZEND_SL_SPEC_TMPVAR_CONST)
  49762. ZEND_SL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49763. HYBRID_BREAK();
  49764. HYBRID_CASE(ZEND_SR_SPEC_TMPVAR_CONST):
  49765. VM_TRACE(ZEND_SR_SPEC_TMPVAR_CONST)
  49766. ZEND_SR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49767. HYBRID_BREAK();
  49768. HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CONST):
  49769. VM_TRACE(ZEND_POW_SPEC_TMPVAR_CONST)
  49770. ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49771. HYBRID_BREAK();
  49772. HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CONST):
  49773. VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CONST)
  49774. ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49775. HYBRID_BREAK();
  49776. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST):
  49777. VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST)
  49778. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49779. HYBRID_BREAK();
  49780. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST):
  49781. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST)
  49782. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49783. HYBRID_BREAK();
  49784. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVAR_CONST):
  49785. VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVAR_CONST)
  49786. ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49787. HYBRID_BREAK();
  49788. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST):
  49789. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST)
  49790. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49791. HYBRID_BREAK();
  49792. HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST):
  49793. VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST)
  49794. ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49795. HYBRID_BREAK();
  49796. HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVAR_CONST):
  49797. VM_TRACE(ZEND_BW_OR_SPEC_TMPVAR_CONST)
  49798. ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49799. HYBRID_BREAK();
  49800. HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVAR_CONST):
  49801. VM_TRACE(ZEND_BW_AND_SPEC_TMPVAR_CONST)
  49802. ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49803. HYBRID_BREAK();
  49804. HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVAR_CONST):
  49805. VM_TRACE(ZEND_BW_XOR_SPEC_TMPVAR_CONST)
  49806. ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49807. HYBRID_BREAK();
  49808. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST):
  49809. VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST)
  49810. ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49811. HYBRID_BREAK();
  49812. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST):
  49813. VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST)
  49814. ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49815. HYBRID_BREAK();
  49816. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST):
  49817. VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST)
  49818. ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49819. HYBRID_BREAK();
  49820. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST):
  49821. VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST)
  49822. ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49823. HYBRID_BREAK();
  49824. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST):
  49825. VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST)
  49826. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49827. HYBRID_BREAK();
  49828. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST):
  49829. VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST)
  49830. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49831. HYBRID_BREAK();
  49832. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST):
  49833. VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST)
  49834. ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49835. HYBRID_BREAK();
  49836. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST):
  49837. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST)
  49838. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49839. HYBRID_BREAK();
  49840. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST):
  49841. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST)
  49842. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49843. HYBRID_BREAK();
  49844. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST):
  49845. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST)
  49846. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49847. HYBRID_BREAK();
  49848. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST):
  49849. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST)
  49850. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49851. HYBRID_BREAK();
  49852. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST):
  49853. VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST)
  49854. ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49855. HYBRID_BREAK();
  49856. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST):
  49857. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST)
  49858. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49859. HYBRID_BREAK();
  49860. HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CONST):
  49861. VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CONST)
  49862. ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49863. HYBRID_BREAK();
  49864. HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST):
  49865. VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST)
  49866. ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49867. HYBRID_BREAK();
  49868. HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST):
  49869. VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST)
  49870. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49871. HYBRID_BREAK();
  49872. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST):
  49873. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST)
  49874. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49875. HYBRID_BREAK();
  49876. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST):
  49877. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST)
  49878. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49879. HYBRID_BREAK();
  49880. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST):
  49881. VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST)
  49882. ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49883. HYBRID_BREAK();
  49884. HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST):
  49885. VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST)
  49886. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49887. HYBRID_BREAK();
  49888. HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV):
  49889. VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV)
  49890. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49891. HYBRID_BREAK();
  49892. HYBRID_CASE(ZEND_ADD_SPEC_TMPVAR_TMPVAR):
  49893. VM_TRACE(ZEND_ADD_SPEC_TMPVAR_TMPVAR)
  49894. ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49895. HYBRID_BREAK();
  49896. HYBRID_CASE(ZEND_SUB_SPEC_TMPVAR_TMPVAR):
  49897. VM_TRACE(ZEND_SUB_SPEC_TMPVAR_TMPVAR)
  49898. ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49899. HYBRID_BREAK();
  49900. HYBRID_CASE(ZEND_MUL_SPEC_TMPVAR_TMPVAR):
  49901. VM_TRACE(ZEND_MUL_SPEC_TMPVAR_TMPVAR)
  49902. ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49903. HYBRID_BREAK();
  49904. HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_TMPVAR):
  49905. VM_TRACE(ZEND_DIV_SPEC_TMPVAR_TMPVAR)
  49906. ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49907. HYBRID_BREAK();
  49908. HYBRID_CASE(ZEND_MOD_SPEC_TMPVAR_TMPVAR):
  49909. VM_TRACE(ZEND_MOD_SPEC_TMPVAR_TMPVAR)
  49910. ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49911. HYBRID_BREAK();
  49912. HYBRID_CASE(ZEND_SL_SPEC_TMPVAR_TMPVAR):
  49913. VM_TRACE(ZEND_SL_SPEC_TMPVAR_TMPVAR)
  49914. ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49915. HYBRID_BREAK();
  49916. HYBRID_CASE(ZEND_SR_SPEC_TMPVAR_TMPVAR):
  49917. VM_TRACE(ZEND_SR_SPEC_TMPVAR_TMPVAR)
  49918. ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49919. HYBRID_BREAK();
  49920. HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_TMPVAR):
  49921. VM_TRACE(ZEND_POW_SPEC_TMPVAR_TMPVAR)
  49922. ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49923. HYBRID_BREAK();
  49924. HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR):
  49925. VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR)
  49926. ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49927. HYBRID_BREAK();
  49928. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR):
  49929. VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR)
  49930. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49931. HYBRID_BREAK();
  49932. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR):
  49933. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR)
  49934. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49935. HYBRID_BREAK();
  49936. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR):
  49937. VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR)
  49938. ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49939. HYBRID_BREAK();
  49940. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR):
  49941. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR)
  49942. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49943. HYBRID_BREAK();
  49944. HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR):
  49945. VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR)
  49946. ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49947. HYBRID_BREAK();
  49948. HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVAR_TMPVAR):
  49949. VM_TRACE(ZEND_BW_OR_SPEC_TMPVAR_TMPVAR)
  49950. ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49951. HYBRID_BREAK();
  49952. HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVAR_TMPVAR):
  49953. VM_TRACE(ZEND_BW_AND_SPEC_TMPVAR_TMPVAR)
  49954. ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49955. HYBRID_BREAK();
  49956. HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR):
  49957. VM_TRACE(ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR)
  49958. ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49959. HYBRID_BREAK();
  49960. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR):
  49961. VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR)
  49962. ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49963. HYBRID_BREAK();
  49964. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR):
  49965. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR)
  49966. ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49967. HYBRID_BREAK();
  49968. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR):
  49969. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR)
  49970. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49971. HYBRID_BREAK();
  49972. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR):
  49973. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR)
  49974. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49975. HYBRID_BREAK();
  49976. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR):
  49977. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR)
  49978. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49979. HYBRID_BREAK();
  49980. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR):
  49981. VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR)
  49982. ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49983. HYBRID_BREAK();
  49984. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR):
  49985. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR)
  49986. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49987. HYBRID_BREAK();
  49988. HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_TMPVAR):
  49989. VM_TRACE(ZEND_CASE_SPEC_TMPVAR_TMPVAR)
  49990. ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49991. HYBRID_BREAK();
  49992. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR):
  49993. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR)
  49994. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49995. HYBRID_BREAK();
  49996. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR):
  49997. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR)
  49998. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  49999. HYBRID_BREAK();
  50000. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR):
  50001. VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR)
  50002. ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50003. HYBRID_BREAK();
  50004. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR):
  50005. VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR)
  50006. ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50007. HYBRID_BREAK();
  50008. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR):
  50009. VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR)
  50010. ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50011. HYBRID_BREAK();
  50012. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR):
  50013. VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR)
  50014. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50015. HYBRID_BREAK();
  50016. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR):
  50017. VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR)
  50018. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50019. HYBRID_BREAK();
  50020. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR):
  50021. VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR)
  50022. ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50023. HYBRID_BREAK();
  50024. HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR):
  50025. VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR)
  50026. ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50027. HYBRID_BREAK();
  50028. HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR):
  50029. VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR)
  50030. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50031. HYBRID_BREAK();
  50032. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR):
  50033. VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR)
  50034. ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50035. HYBRID_BREAK();
  50036. HYBRID_CASE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED):
  50037. VM_TRACE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED)
  50038. ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50039. HYBRID_BREAK();
  50040. HYBRID_CASE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED):
  50041. VM_TRACE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED)
  50042. ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50043. HYBRID_BREAK();
  50044. HYBRID_CASE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED):
  50045. VM_TRACE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED)
  50046. ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50047. HYBRID_BREAK();
  50048. HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED):
  50049. VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED)
  50050. ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50051. HYBRID_BREAK();
  50052. HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED):
  50053. VM_TRACE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED)
  50054. ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50055. HYBRID_BREAK();
  50056. HYBRID_CASE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED):
  50057. VM_TRACE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED)
  50058. ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50059. HYBRID_BREAK();
  50060. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED):
  50061. VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED)
  50062. ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50063. HYBRID_BREAK();
  50064. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED):
  50065. VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED)
  50066. ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50067. HYBRID_BREAK();
  50068. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED):
  50069. VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED)
  50070. ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50071. HYBRID_BREAK();
  50072. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED):
  50073. VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED)
  50074. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50075. HYBRID_BREAK();
  50076. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED):
  50077. VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED)
  50078. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50079. HYBRID_BREAK();
  50080. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED):
  50081. VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED)
  50082. ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50083. HYBRID_BREAK();
  50084. HYBRID_CASE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED):
  50085. VM_TRACE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED)
  50086. ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50087. HYBRID_BREAK();
  50088. HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED):
  50089. VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED)
  50090. ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50091. HYBRID_BREAK();
  50092. HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED):
  50093. VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED)
  50094. ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50095. HYBRID_BREAK();
  50096. HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED):
  50097. VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED)
  50098. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50099. HYBRID_BREAK();
  50100. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED):
  50101. VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED)
  50102. ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50103. HYBRID_BREAK();
  50104. HYBRID_CASE(ZEND_ADD_SPEC_TMPVAR_CV):
  50105. VM_TRACE(ZEND_ADD_SPEC_TMPVAR_CV)
  50106. ZEND_ADD_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50107. HYBRID_BREAK();
  50108. HYBRID_CASE(ZEND_SUB_SPEC_TMPVAR_CV):
  50109. VM_TRACE(ZEND_SUB_SPEC_TMPVAR_CV)
  50110. ZEND_SUB_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50111. HYBRID_BREAK();
  50112. HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CV):
  50113. VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CV)
  50114. ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50115. HYBRID_BREAK();
  50116. HYBRID_CASE(ZEND_MOD_SPEC_TMPVAR_CV):
  50117. VM_TRACE(ZEND_MOD_SPEC_TMPVAR_CV)
  50118. ZEND_MOD_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50119. HYBRID_BREAK();
  50120. HYBRID_CASE(ZEND_SL_SPEC_TMPVAR_CV):
  50121. VM_TRACE(ZEND_SL_SPEC_TMPVAR_CV)
  50122. ZEND_SL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50123. HYBRID_BREAK();
  50124. HYBRID_CASE(ZEND_SR_SPEC_TMPVAR_CV):
  50125. VM_TRACE(ZEND_SR_SPEC_TMPVAR_CV)
  50126. ZEND_SR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50127. HYBRID_BREAK();
  50128. HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CV):
  50129. VM_TRACE(ZEND_POW_SPEC_TMPVAR_CV)
  50130. ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50131. HYBRID_BREAK();
  50132. HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CV):
  50133. VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CV)
  50134. ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50135. HYBRID_BREAK();
  50136. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVAR_CV):
  50137. VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVAR_CV)
  50138. ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50139. HYBRID_BREAK();
  50140. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV):
  50141. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV)
  50142. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50143. HYBRID_BREAK();
  50144. HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CV):
  50145. VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CV)
  50146. ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50147. HYBRID_BREAK();
  50148. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV):
  50149. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV)
  50150. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50151. HYBRID_BREAK();
  50152. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV):
  50153. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV)
  50154. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50155. HYBRID_BREAK();
  50156. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV):
  50157. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV)
  50158. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50159. HYBRID_BREAK();
  50160. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV):
  50161. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV)
  50162. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50163. HYBRID_BREAK();
  50164. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV):
  50165. VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV)
  50166. ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50167. HYBRID_BREAK();
  50168. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV):
  50169. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV)
  50170. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50171. HYBRID_BREAK();
  50172. HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CV):
  50173. VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CV)
  50174. ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50175. HYBRID_BREAK();
  50176. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV):
  50177. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV)
  50178. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50179. HYBRID_BREAK();
  50180. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV):
  50181. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV)
  50182. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50183. HYBRID_BREAK();
  50184. HYBRID_CASE(ZEND_RETURN_SPEC_TMP):
  50185. VM_TRACE(ZEND_RETURN_SPEC_TMP)
  50186. {
  50187. USE_OPLINE
  50188. zval *retval_ptr;
  50189. zval *return_value;
  50190. zend_free_op free_op1;
  50191. retval_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  50192. return_value = EX(return_value);
  50193. if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  50194. SAVE_OPLINE();
  50195. retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R);
  50196. if (return_value) {
  50197. ZVAL_NULL(return_value);
  50198. }
  50199. } else if (!return_value) {
  50200. if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
  50201. if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
  50202. SAVE_OPLINE();
  50203. rc_dtor_func(Z_COUNTED_P(free_op1));
  50204. }
  50205. }
  50206. } else {
  50207. if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
  50208. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50209. if (IS_TMP_VAR == IS_CONST) {
  50210. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  50211. Z_ADDREF_P(return_value);
  50212. }
  50213. }
  50214. } else if (IS_TMP_VAR == IS_CV) {
  50215. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  50216. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  50217. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50218. if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
  50219. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  50220. if (GC_MAY_LEAK(ref)) {
  50221. gc_possible_root(ref);
  50222. }
  50223. ZVAL_NULL(retval_ptr);
  50224. } else {
  50225. Z_ADDREF_P(return_value);
  50226. }
  50227. } else {
  50228. retval_ptr = Z_REFVAL_P(retval_ptr);
  50229. ZVAL_COPY(return_value, retval_ptr);
  50230. }
  50231. } else {
  50232. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50233. }
  50234. } else /* if (IS_TMP_VAR == IS_VAR) */ {
  50235. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  50236. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  50237. retval_ptr = Z_REFVAL_P(retval_ptr);
  50238. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50239. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  50240. efree_size(ref, sizeof(zend_reference));
  50241. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  50242. Z_ADDREF_P(retval_ptr);
  50243. }
  50244. } else {
  50245. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50246. }
  50247. }
  50248. }
  50249. goto zend_leave_helper_SPEC_LABEL;
  50250. }
  50251. HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_TMP):
  50252. VM_TRACE(ZEND_RETURN_BY_REF_SPEC_TMP)
  50253. ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50254. HYBRID_BREAK();
  50255. HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_TMP):
  50256. VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_TMP)
  50257. ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50258. HYBRID_BREAK();
  50259. HYBRID_CASE(ZEND_THROW_SPEC_TMP):
  50260. VM_TRACE(ZEND_THROW_SPEC_TMP)
  50261. ZEND_THROW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50262. HYBRID_BREAK();
  50263. HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP):
  50264. VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP)
  50265. ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50266. HYBRID_BREAK();
  50267. HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_QUICK):
  50268. VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_QUICK)
  50269. ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50270. HYBRID_BREAK();
  50271. HYBRID_CASE(ZEND_SEND_USER_SPEC_TMP):
  50272. VM_TRACE(ZEND_SEND_USER_SPEC_TMP)
  50273. ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50274. HYBRID_BREAK();
  50275. HYBRID_CASE(ZEND_CAST_SPEC_TMP):
  50276. VM_TRACE(ZEND_CAST_SPEC_TMP)
  50277. ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50278. HYBRID_BREAK();
  50279. HYBRID_CASE(ZEND_FE_RESET_R_SPEC_TMP):
  50280. VM_TRACE(ZEND_FE_RESET_R_SPEC_TMP)
  50281. ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50282. HYBRID_BREAK();
  50283. HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_TMP):
  50284. VM_TRACE(ZEND_FE_RESET_RW_SPEC_TMP)
  50285. ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50286. HYBRID_BREAK();
  50287. HYBRID_CASE(ZEND_END_SILENCE_SPEC_TMP):
  50288. VM_TRACE(ZEND_END_SILENCE_SPEC_TMP)
  50289. ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50290. HYBRID_BREAK();
  50291. HYBRID_CASE(ZEND_JMP_SET_SPEC_TMP):
  50292. VM_TRACE(ZEND_JMP_SET_SPEC_TMP)
  50293. ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50294. HYBRID_BREAK();
  50295. HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_TMP):
  50296. VM_TRACE(ZEND_QM_ASSIGN_SPEC_TMP)
  50297. ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50298. HYBRID_BREAK();
  50299. HYBRID_CASE(ZEND_YIELD_FROM_SPEC_TMP):
  50300. VM_TRACE(ZEND_YIELD_FROM_SPEC_TMP)
  50301. ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50302. HYBRID_BREAK();
  50303. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST):
  50304. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST)
  50305. ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50306. HYBRID_BREAK();
  50307. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST):
  50308. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST)
  50309. ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50310. HYBRID_BREAK();
  50311. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST):
  50312. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST)
  50313. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50314. HYBRID_BREAK();
  50315. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST):
  50316. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST)
  50317. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50318. HYBRID_BREAK();
  50319. HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CONST):
  50320. VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CONST)
  50321. ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50322. HYBRID_BREAK();
  50323. HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CONST):
  50324. VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CONST)
  50325. ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50326. HYBRID_BREAK();
  50327. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST):
  50328. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST)
  50329. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50330. HYBRID_BREAK();
  50331. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CONST):
  50332. VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CONST)
  50333. ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50334. HYBRID_BREAK();
  50335. HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CONST):
  50336. VM_TRACE(ZEND_YIELD_SPEC_TMP_CONST)
  50337. ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50338. HYBRID_BREAK();
  50339. HYBRID_CASE(ZEND_IN_ARRAY_SPEC_TMP_CONST):
  50340. VM_TRACE(ZEND_IN_ARRAY_SPEC_TMP_CONST)
  50341. ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50342. HYBRID_BREAK();
  50343. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR):
  50344. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR)
  50345. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50346. HYBRID_BREAK();
  50347. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR):
  50348. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR)
  50349. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50350. HYBRID_BREAK();
  50351. HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR):
  50352. VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR)
  50353. ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50354. HYBRID_BREAK();
  50355. HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_TMPVAR):
  50356. VM_TRACE(ZEND_ROPE_END_SPEC_TMP_TMPVAR)
  50357. ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50358. HYBRID_BREAK();
  50359. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR):
  50360. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR)
  50361. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50362. HYBRID_BREAK();
  50363. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR):
  50364. VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR)
  50365. ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50366. HYBRID_BREAK();
  50367. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP):
  50368. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP)
  50369. ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50370. HYBRID_BREAK();
  50371. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP):
  50372. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP)
  50373. ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50374. HYBRID_BREAK();
  50375. HYBRID_CASE(ZEND_YIELD_SPEC_TMP_TMP):
  50376. VM_TRACE(ZEND_YIELD_SPEC_TMP_TMP)
  50377. ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50378. HYBRID_BREAK();
  50379. HYBRID_CASE(ZEND_YIELD_SPEC_TMP_VAR):
  50380. VM_TRACE(ZEND_YIELD_SPEC_TMP_VAR)
  50381. ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50382. HYBRID_BREAK();
  50383. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED):
  50384. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED)
  50385. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50386. HYBRID_BREAK();
  50387. HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED):
  50388. VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED)
  50389. ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50390. HYBRID_BREAK();
  50391. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED):
  50392. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED)
  50393. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50394. HYBRID_BREAK();
  50395. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED):
  50396. VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED)
  50397. ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50398. HYBRID_BREAK();
  50399. HYBRID_CASE(ZEND_YIELD_SPEC_TMP_UNUSED):
  50400. VM_TRACE(ZEND_YIELD_SPEC_TMP_UNUSED)
  50401. ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50402. HYBRID_BREAK();
  50403. HYBRID_CASE(ZEND_COUNT_SPEC_TMP_UNUSED):
  50404. VM_TRACE(ZEND_COUNT_SPEC_TMP_UNUSED)
  50405. ZEND_COUNT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50406. HYBRID_BREAK();
  50407. HYBRID_CASE(ZEND_GET_CLASS_SPEC_TMP_UNUSED):
  50408. VM_TRACE(ZEND_GET_CLASS_SPEC_TMP_UNUSED)
  50409. ZEND_GET_CLASS_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50410. HYBRID_BREAK();
  50411. HYBRID_CASE(ZEND_GET_TYPE_SPEC_TMP_UNUSED):
  50412. VM_TRACE(ZEND_GET_TYPE_SPEC_TMP_UNUSED)
  50413. ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50414. HYBRID_BREAK();
  50415. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV):
  50416. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV)
  50417. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50418. HYBRID_BREAK();
  50419. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV):
  50420. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV)
  50421. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50422. HYBRID_BREAK();
  50423. HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CV):
  50424. VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CV)
  50425. ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50426. HYBRID_BREAK();
  50427. HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CV):
  50428. VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CV)
  50429. ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50430. HYBRID_BREAK();
  50431. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV):
  50432. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV)
  50433. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50434. HYBRID_BREAK();
  50435. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CV):
  50436. VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CV)
  50437. ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50438. HYBRID_BREAK();
  50439. HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CV):
  50440. VM_TRACE(ZEND_YIELD_SPEC_TMP_CV)
  50441. ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50442. HYBRID_BREAK();
  50443. HYBRID_CASE(ZEND_BIND_LEXICAL_SPEC_TMP_CV):
  50444. VM_TRACE(ZEND_BIND_LEXICAL_SPEC_TMP_CV)
  50445. ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50446. HYBRID_BREAK();
  50447. HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED):
  50448. VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED)
  50449. ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50450. HYBRID_BREAK();
  50451. HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED):
  50452. VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED)
  50453. ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50454. HYBRID_BREAK();
  50455. HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED):
  50456. VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED)
  50457. ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50458. HYBRID_BREAK();
  50459. HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED):
  50460. VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED)
  50461. ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50462. HYBRID_BREAK();
  50463. HYBRID_CASE(ZEND_POST_INC_SPEC_VAR):
  50464. VM_TRACE(ZEND_POST_INC_SPEC_VAR)
  50465. ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50466. HYBRID_BREAK();
  50467. HYBRID_CASE(ZEND_POST_DEC_SPEC_VAR):
  50468. VM_TRACE(ZEND_POST_DEC_SPEC_VAR)
  50469. ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50470. HYBRID_BREAK();
  50471. HYBRID_CASE(ZEND_RETURN_SPEC_VAR):
  50472. VM_TRACE(ZEND_RETURN_SPEC_VAR)
  50473. {
  50474. USE_OPLINE
  50475. zval *retval_ptr;
  50476. zval *return_value;
  50477. zend_free_op free_op1;
  50478. retval_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
  50479. return_value = EX(return_value);
  50480. if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  50481. SAVE_OPLINE();
  50482. retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R);
  50483. if (return_value) {
  50484. ZVAL_NULL(return_value);
  50485. }
  50486. } else if (!return_value) {
  50487. if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
  50488. if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
  50489. SAVE_OPLINE();
  50490. rc_dtor_func(Z_COUNTED_P(free_op1));
  50491. }
  50492. }
  50493. } else {
  50494. if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
  50495. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50496. if (IS_VAR == IS_CONST) {
  50497. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  50498. Z_ADDREF_P(return_value);
  50499. }
  50500. }
  50501. } else if (IS_VAR == IS_CV) {
  50502. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  50503. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  50504. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50505. if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
  50506. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  50507. if (GC_MAY_LEAK(ref)) {
  50508. gc_possible_root(ref);
  50509. }
  50510. ZVAL_NULL(retval_ptr);
  50511. } else {
  50512. Z_ADDREF_P(return_value);
  50513. }
  50514. } else {
  50515. retval_ptr = Z_REFVAL_P(retval_ptr);
  50516. ZVAL_COPY(return_value, retval_ptr);
  50517. }
  50518. } else {
  50519. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50520. }
  50521. } else /* if (IS_VAR == IS_VAR) */ {
  50522. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  50523. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  50524. retval_ptr = Z_REFVAL_P(retval_ptr);
  50525. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50526. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  50527. efree_size(ref, sizeof(zend_reference));
  50528. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  50529. Z_ADDREF_P(retval_ptr);
  50530. }
  50531. } else {
  50532. ZVAL_COPY_VALUE(return_value, retval_ptr);
  50533. }
  50534. }
  50535. }
  50536. goto zend_leave_helper_SPEC_LABEL;
  50537. }
  50538. HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_VAR):
  50539. VM_TRACE(ZEND_RETURN_BY_REF_SPEC_VAR)
  50540. ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50541. HYBRID_BREAK();
  50542. HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_VAR):
  50543. VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_VAR)
  50544. ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50545. HYBRID_BREAK();
  50546. HYBRID_CASE(ZEND_THROW_SPEC_VAR):
  50547. VM_TRACE(ZEND_THROW_SPEC_VAR)
  50548. ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50549. HYBRID_BREAK();
  50550. HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR):
  50551. VM_TRACE(ZEND_SEND_VAR_SPEC_VAR)
  50552. ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50553. HYBRID_BREAK();
  50554. HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR):
  50555. VM_TRACE(ZEND_SEND_VAR_NO_REF_SPEC_VAR)
  50556. ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50557. HYBRID_BREAK();
  50558. HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR):
  50559. VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR)
  50560. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50561. HYBRID_BREAK();
  50562. HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK):
  50563. VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK)
  50564. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50565. HYBRID_BREAK();
  50566. HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR):
  50567. VM_TRACE(ZEND_SEND_REF_SPEC_VAR)
  50568. ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50569. HYBRID_BREAK();
  50570. HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR):
  50571. VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR)
  50572. ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50573. HYBRID_BREAK();
  50574. HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_QUICK):
  50575. VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_QUICK)
  50576. ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50577. HYBRID_BREAK();
  50578. HYBRID_CASE(ZEND_SEND_FUNC_ARG_SPEC_VAR):
  50579. VM_TRACE(ZEND_SEND_FUNC_ARG_SPEC_VAR)
  50580. ZEND_SEND_FUNC_ARG_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50581. HYBRID_BREAK();
  50582. HYBRID_CASE(ZEND_SEND_USER_SPEC_VAR):
  50583. VM_TRACE(ZEND_SEND_USER_SPEC_VAR)
  50584. ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50585. HYBRID_BREAK();
  50586. HYBRID_CASE(ZEND_CAST_SPEC_VAR):
  50587. VM_TRACE(ZEND_CAST_SPEC_VAR)
  50588. ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50589. HYBRID_BREAK();
  50590. HYBRID_CASE(ZEND_FE_RESET_R_SPEC_VAR):
  50591. VM_TRACE(ZEND_FE_RESET_R_SPEC_VAR)
  50592. ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50593. HYBRID_BREAK();
  50594. HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_VAR):
  50595. VM_TRACE(ZEND_FE_RESET_RW_SPEC_VAR)
  50596. ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50597. HYBRID_BREAK();
  50598. HYBRID_CASE(ZEND_FE_FETCH_R_SPEC_VAR):
  50599. VM_TRACE(ZEND_FE_FETCH_R_SPEC_VAR)
  50600. ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50601. HYBRID_BREAK();
  50602. HYBRID_CASE(ZEND_FE_FETCH_RW_SPEC_VAR):
  50603. VM_TRACE(ZEND_FE_FETCH_RW_SPEC_VAR)
  50604. ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50605. HYBRID_BREAK();
  50606. HYBRID_CASE(ZEND_JMP_SET_SPEC_VAR):
  50607. VM_TRACE(ZEND_JMP_SET_SPEC_VAR)
  50608. ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50609. HYBRID_BREAK();
  50610. HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_VAR):
  50611. VM_TRACE(ZEND_QM_ASSIGN_SPEC_VAR)
  50612. ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50613. HYBRID_BREAK();
  50614. HYBRID_CASE(ZEND_YIELD_FROM_SPEC_VAR):
  50615. VM_TRACE(ZEND_YIELD_FROM_SPEC_VAR)
  50616. ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50617. HYBRID_BREAK();
  50618. HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR):
  50619. VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR)
  50620. ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50621. HYBRID_BREAK();
  50622. HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR):
  50623. VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR)
  50624. ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50625. HYBRID_BREAK();
  50626. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST):
  50627. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST)
  50628. ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50629. HYBRID_BREAK();
  50630. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST):
  50631. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST)
  50632. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50633. HYBRID_BREAK();
  50634. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CONST):
  50635. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_CONST)
  50636. ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50637. HYBRID_BREAK();
  50638. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM):
  50639. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM)
  50640. ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50641. HYBRID_BREAK();
  50642. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ):
  50643. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ)
  50644. ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50645. HYBRID_BREAK();
  50646. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CONST):
  50647. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_CONST)
  50648. ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50649. HYBRID_BREAK();
  50650. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM):
  50651. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM)
  50652. ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50653. HYBRID_BREAK();
  50654. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ):
  50655. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ)
  50656. ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50657. HYBRID_BREAK();
  50658. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CONST):
  50659. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_CONST)
  50660. ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50661. HYBRID_BREAK();
  50662. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM):
  50663. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM)
  50664. ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50665. HYBRID_BREAK();
  50666. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ):
  50667. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ)
  50668. ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50669. HYBRID_BREAK();
  50670. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CONST):
  50671. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_CONST)
  50672. ZEND_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50673. HYBRID_BREAK();
  50674. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM):
  50675. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM)
  50676. ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50677. HYBRID_BREAK();
  50678. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ):
  50679. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ)
  50680. ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50681. HYBRID_BREAK();
  50682. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CONST):
  50683. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_CONST)
  50684. ZEND_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50685. HYBRID_BREAK();
  50686. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM):
  50687. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM)
  50688. ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50689. HYBRID_BREAK();
  50690. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ):
  50691. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ)
  50692. ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50693. HYBRID_BREAK();
  50694. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CONST):
  50695. VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_CONST)
  50696. ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50697. HYBRID_BREAK();
  50698. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM):
  50699. VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM)
  50700. ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50701. HYBRID_BREAK();
  50702. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ):
  50703. VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ)
  50704. ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50705. HYBRID_BREAK();
  50706. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CONST):
  50707. VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_CONST)
  50708. ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50709. HYBRID_BREAK();
  50710. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM):
  50711. VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM)
  50712. ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50713. HYBRID_BREAK();
  50714. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ):
  50715. VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ)
  50716. ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50717. HYBRID_BREAK();
  50718. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST):
  50719. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST)
  50720. ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50721. HYBRID_BREAK();
  50722. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM):
  50723. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM)
  50724. ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50725. HYBRID_BREAK();
  50726. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ):
  50727. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ)
  50728. ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50729. HYBRID_BREAK();
  50730. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST):
  50731. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST)
  50732. ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50733. HYBRID_BREAK();
  50734. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM):
  50735. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM)
  50736. ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50737. HYBRID_BREAK();
  50738. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ):
  50739. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ)
  50740. ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50741. HYBRID_BREAK();
  50742. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST):
  50743. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST)
  50744. ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50745. HYBRID_BREAK();
  50746. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM):
  50747. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM)
  50748. ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50749. HYBRID_BREAK();
  50750. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ):
  50751. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ)
  50752. ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50753. HYBRID_BREAK();
  50754. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST):
  50755. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST)
  50756. ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50757. HYBRID_BREAK();
  50758. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM):
  50759. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM)
  50760. ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50761. HYBRID_BREAK();
  50762. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ):
  50763. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ)
  50764. ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50765. HYBRID_BREAK();
  50766. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CONST):
  50767. VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_CONST)
  50768. ZEND_ASSIGN_POW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50769. HYBRID_BREAK();
  50770. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM):
  50771. VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM)
  50772. ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50773. HYBRID_BREAK();
  50774. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ):
  50775. VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ)
  50776. ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50777. HYBRID_BREAK();
  50778. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST):
  50779. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST)
  50780. ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50781. HYBRID_BREAK();
  50782. HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST):
  50783. VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST)
  50784. ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50785. HYBRID_BREAK();
  50786. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST):
  50787. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST)
  50788. ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50789. HYBRID_BREAK();
  50790. HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_VAR_CONST):
  50791. VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_VAR_CONST)
  50792. ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50793. HYBRID_BREAK();
  50794. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST):
  50795. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST)
  50796. ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50797. HYBRID_BREAK();
  50798. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST):
  50799. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST)
  50800. ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50801. HYBRID_BREAK();
  50802. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST):
  50803. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST)
  50804. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50805. HYBRID_BREAK();
  50806. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST):
  50807. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST)
  50808. ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50809. HYBRID_BREAK();
  50810. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST):
  50811. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST)
  50812. ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50813. HYBRID_BREAK();
  50814. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST):
  50815. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST)
  50816. ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50817. HYBRID_BREAK();
  50818. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST):
  50819. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST)
  50820. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50821. HYBRID_BREAK();
  50822. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST):
  50823. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST)
  50824. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50825. HYBRID_BREAK();
  50826. HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST):
  50827. VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST)
  50828. ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50829. HYBRID_BREAK();
  50830. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST):
  50831. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST)
  50832. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50833. HYBRID_BREAK();
  50834. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP):
  50835. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP)
  50836. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50837. HYBRID_BREAK();
  50838. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR):
  50839. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR)
  50840. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50841. HYBRID_BREAK();
  50842. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV):
  50843. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV)
  50844. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50845. HYBRID_BREAK();
  50846. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST):
  50847. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST)
  50848. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50849. HYBRID_BREAK();
  50850. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP):
  50851. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP)
  50852. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50853. HYBRID_BREAK();
  50854. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR):
  50855. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR)
  50856. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50857. HYBRID_BREAK();
  50858. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV):
  50859. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV)
  50860. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50861. HYBRID_BREAK();
  50862. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED):
  50863. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED)
  50864. ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50865. HYBRID_BREAK();
  50866. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED):
  50867. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED)
  50868. ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50869. HYBRID_BREAK();
  50870. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST):
  50871. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST)
  50872. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50873. HYBRID_BREAK();
  50874. HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST):
  50875. VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST)
  50876. ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50877. HYBRID_BREAK();
  50878. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST):
  50879. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST)
  50880. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50881. HYBRID_BREAK();
  50882. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CONST):
  50883. VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CONST)
  50884. ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50885. HYBRID_BREAK();
  50886. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CONST):
  50887. VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CONST)
  50888. ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50889. HYBRID_BREAK();
  50890. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CONST):
  50891. VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CONST)
  50892. ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50893. HYBRID_BREAK();
  50894. HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CONST):
  50895. VM_TRACE(ZEND_YIELD_SPEC_VAR_CONST)
  50896. ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50897. HYBRID_BREAK();
  50898. HYBRID_CASE(ZEND_IN_ARRAY_SPEC_VAR_CONST):
  50899. VM_TRACE(ZEND_IN_ARRAY_SPEC_VAR_CONST)
  50900. ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50901. HYBRID_BREAK();
  50902. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR):
  50903. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR)
  50904. ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50905. HYBRID_BREAK();
  50906. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM):
  50907. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM)
  50908. ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50909. HYBRID_BREAK();
  50910. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ):
  50911. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ)
  50912. ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50913. HYBRID_BREAK();
  50914. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR):
  50915. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR)
  50916. ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50917. HYBRID_BREAK();
  50918. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM):
  50919. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM)
  50920. ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50921. HYBRID_BREAK();
  50922. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ):
  50923. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ)
  50924. ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50925. HYBRID_BREAK();
  50926. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR):
  50927. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR)
  50928. ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50929. HYBRID_BREAK();
  50930. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM):
  50931. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM)
  50932. ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50933. HYBRID_BREAK();
  50934. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ):
  50935. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ)
  50936. ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50937. HYBRID_BREAK();
  50938. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR):
  50939. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR)
  50940. ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50941. HYBRID_BREAK();
  50942. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM):
  50943. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM)
  50944. ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50945. HYBRID_BREAK();
  50946. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ):
  50947. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ)
  50948. ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50949. HYBRID_BREAK();
  50950. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR):
  50951. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR)
  50952. ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50953. HYBRID_BREAK();
  50954. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM):
  50955. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM)
  50956. ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50957. HYBRID_BREAK();
  50958. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ):
  50959. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ)
  50960. ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50961. HYBRID_BREAK();
  50962. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR):
  50963. VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR)
  50964. ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50965. HYBRID_BREAK();
  50966. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM):
  50967. VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM)
  50968. ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50969. HYBRID_BREAK();
  50970. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ):
  50971. VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ)
  50972. ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50973. HYBRID_BREAK();
  50974. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR):
  50975. VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR)
  50976. ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50977. HYBRID_BREAK();
  50978. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM):
  50979. VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM)
  50980. ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50981. HYBRID_BREAK();
  50982. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ):
  50983. VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ)
  50984. ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50985. HYBRID_BREAK();
  50986. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR):
  50987. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR)
  50988. ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50989. HYBRID_BREAK();
  50990. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM):
  50991. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM)
  50992. ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50993. HYBRID_BREAK();
  50994. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ):
  50995. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ)
  50996. ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  50997. HYBRID_BREAK();
  50998. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR):
  50999. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR)
  51000. ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51001. HYBRID_BREAK();
  51002. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM):
  51003. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM)
  51004. ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51005. HYBRID_BREAK();
  51006. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ):
  51007. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ)
  51008. ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51009. HYBRID_BREAK();
  51010. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR):
  51011. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR)
  51012. ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51013. HYBRID_BREAK();
  51014. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM):
  51015. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM)
  51016. ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51017. HYBRID_BREAK();
  51018. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ):
  51019. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ)
  51020. ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51021. HYBRID_BREAK();
  51022. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR):
  51023. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR)
  51024. ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51025. HYBRID_BREAK();
  51026. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM):
  51027. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM)
  51028. ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51029. HYBRID_BREAK();
  51030. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ):
  51031. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ)
  51032. ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51033. HYBRID_BREAK();
  51034. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR):
  51035. VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR)
  51036. ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51037. HYBRID_BREAK();
  51038. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM):
  51039. VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM)
  51040. ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51041. HYBRID_BREAK();
  51042. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ):
  51043. VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ)
  51044. ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51045. HYBRID_BREAK();
  51046. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR):
  51047. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR)
  51048. ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51049. HYBRID_BREAK();
  51050. HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR):
  51051. VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR)
  51052. ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51053. HYBRID_BREAK();
  51054. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR):
  51055. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR)
  51056. ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51057. HYBRID_BREAK();
  51058. HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR):
  51059. VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR)
  51060. ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51061. HYBRID_BREAK();
  51062. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR):
  51063. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR)
  51064. ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51065. HYBRID_BREAK();
  51066. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR):
  51067. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR)
  51068. ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51069. HYBRID_BREAK();
  51070. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR):
  51071. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR)
  51072. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51073. HYBRID_BREAK();
  51074. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR):
  51075. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR)
  51076. ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51077. HYBRID_BREAK();
  51078. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR):
  51079. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR)
  51080. ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51081. HYBRID_BREAK();
  51082. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR):
  51083. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR)
  51084. ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51085. HYBRID_BREAK();
  51086. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR):
  51087. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR)
  51088. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51089. HYBRID_BREAK();
  51090. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR):
  51091. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR)
  51092. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51093. HYBRID_BREAK();
  51094. HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR):
  51095. VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR)
  51096. ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51097. HYBRID_BREAK();
  51098. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST):
  51099. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST)
  51100. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51101. HYBRID_BREAK();
  51102. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP):
  51103. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP)
  51104. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51105. HYBRID_BREAK();
  51106. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR):
  51107. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR)
  51108. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51109. HYBRID_BREAK();
  51110. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV):
  51111. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV)
  51112. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51113. HYBRID_BREAK();
  51114. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST):
  51115. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST)
  51116. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51117. HYBRID_BREAK();
  51118. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP):
  51119. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP)
  51120. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51121. HYBRID_BREAK();
  51122. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR):
  51123. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR)
  51124. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51125. HYBRID_BREAK();
  51126. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV):
  51127. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV)
  51128. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51129. HYBRID_BREAK();
  51130. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR):
  51131. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR)
  51132. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51133. HYBRID_BREAK();
  51134. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR):
  51135. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR)
  51136. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51137. HYBRID_BREAK();
  51138. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR):
  51139. VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR)
  51140. ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51141. HYBRID_BREAK();
  51142. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR):
  51143. VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR)
  51144. ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51145. HYBRID_BREAK();
  51146. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR):
  51147. VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR)
  51148. ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51149. HYBRID_BREAK();
  51150. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP):
  51151. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP)
  51152. ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51153. HYBRID_BREAK();
  51154. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP):
  51155. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP)
  51156. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51157. HYBRID_BREAK();
  51158. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED):
  51159. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED)
  51160. ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51161. HYBRID_BREAK();
  51162. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED):
  51163. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED)
  51164. ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51165. HYBRID_BREAK();
  51166. HYBRID_CASE(ZEND_YIELD_SPEC_VAR_TMP):
  51167. VM_TRACE(ZEND_YIELD_SPEC_VAR_TMP)
  51168. ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51169. HYBRID_BREAK();
  51170. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR):
  51171. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR)
  51172. ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51173. HYBRID_BREAK();
  51174. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR):
  51175. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR)
  51176. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51177. HYBRID_BREAK();
  51178. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED):
  51179. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED)
  51180. ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51181. HYBRID_BREAK();
  51182. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED):
  51183. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED)
  51184. ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51185. HYBRID_BREAK();
  51186. HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_VAR):
  51187. VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_VAR)
  51188. ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51189. HYBRID_BREAK();
  51190. HYBRID_CASE(ZEND_YIELD_SPEC_VAR_VAR):
  51191. VM_TRACE(ZEND_YIELD_SPEC_VAR_VAR)
  51192. ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51193. HYBRID_BREAK();
  51194. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM):
  51195. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM)
  51196. ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51197. HYBRID_BREAK();
  51198. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM):
  51199. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM)
  51200. ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51201. HYBRID_BREAK();
  51202. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM):
  51203. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM)
  51204. ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51205. HYBRID_BREAK();
  51206. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM):
  51207. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM)
  51208. ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51209. HYBRID_BREAK();
  51210. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM):
  51211. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM)
  51212. ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51213. HYBRID_BREAK();
  51214. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM):
  51215. VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM)
  51216. ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51217. HYBRID_BREAK();
  51218. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM):
  51219. VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM)
  51220. ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51221. HYBRID_BREAK();
  51222. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM):
  51223. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM)
  51224. ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51225. HYBRID_BREAK();
  51226. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM):
  51227. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM)
  51228. ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51229. HYBRID_BREAK();
  51230. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM):
  51231. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM)
  51232. ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51233. HYBRID_BREAK();
  51234. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM):
  51235. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM)
  51236. ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51237. HYBRID_BREAK();
  51238. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM):
  51239. VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM)
  51240. ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51241. HYBRID_BREAK();
  51242. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED):
  51243. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED)
  51244. ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51245. HYBRID_BREAK();
  51246. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED):
  51247. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED)
  51248. ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51249. HYBRID_BREAK();
  51250. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED):
  51251. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED)
  51252. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51253. HYBRID_BREAK();
  51254. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST):
  51255. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST)
  51256. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51257. HYBRID_BREAK();
  51258. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP):
  51259. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP)
  51260. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51261. HYBRID_BREAK();
  51262. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR):
  51263. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR)
  51264. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51265. HYBRID_BREAK();
  51266. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV):
  51267. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV)
  51268. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51269. HYBRID_BREAK();
  51270. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED):
  51271. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED)
  51272. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51273. HYBRID_BREAK();
  51274. HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED):
  51275. VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED)
  51276. ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51277. HYBRID_BREAK();
  51278. HYBRID_CASE(ZEND_NEW_SPEC_VAR_UNUSED):
  51279. VM_TRACE(ZEND_NEW_SPEC_VAR_UNUSED)
  51280. ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51281. HYBRID_BREAK();
  51282. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED):
  51283. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED)
  51284. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51285. HYBRID_BREAK();
  51286. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED):
  51287. VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED)
  51288. ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51289. HYBRID_BREAK();
  51290. HYBRID_CASE(ZEND_SEPARATE_SPEC_VAR_UNUSED):
  51291. VM_TRACE(ZEND_SEPARATE_SPEC_VAR_UNUSED)
  51292. ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51293. HYBRID_BREAK();
  51294. HYBRID_CASE(ZEND_YIELD_SPEC_VAR_UNUSED):
  51295. VM_TRACE(ZEND_YIELD_SPEC_VAR_UNUSED)
  51296. ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51297. HYBRID_BREAK();
  51298. HYBRID_CASE(ZEND_MAKE_REF_SPEC_VAR_UNUSED):
  51299. VM_TRACE(ZEND_MAKE_REF_SPEC_VAR_UNUSED)
  51300. ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51301. HYBRID_BREAK();
  51302. HYBRID_CASE(ZEND_COUNT_SPEC_VAR_UNUSED):
  51303. VM_TRACE(ZEND_COUNT_SPEC_VAR_UNUSED)
  51304. ZEND_COUNT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51305. HYBRID_BREAK();
  51306. HYBRID_CASE(ZEND_GET_CLASS_SPEC_VAR_UNUSED):
  51307. VM_TRACE(ZEND_GET_CLASS_SPEC_VAR_UNUSED)
  51308. ZEND_GET_CLASS_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51309. HYBRID_BREAK();
  51310. HYBRID_CASE(ZEND_GET_TYPE_SPEC_VAR_UNUSED):
  51311. VM_TRACE(ZEND_GET_TYPE_SPEC_VAR_UNUSED)
  51312. ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51313. HYBRID_BREAK();
  51314. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CV):
  51315. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_CV)
  51316. ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51317. HYBRID_BREAK();
  51318. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM):
  51319. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM)
  51320. ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51321. HYBRID_BREAK();
  51322. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ):
  51323. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ)
  51324. ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51325. HYBRID_BREAK();
  51326. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CV):
  51327. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_CV)
  51328. ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51329. HYBRID_BREAK();
  51330. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM):
  51331. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM)
  51332. ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51333. HYBRID_BREAK();
  51334. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ):
  51335. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ)
  51336. ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51337. HYBRID_BREAK();
  51338. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CV):
  51339. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_CV)
  51340. ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51341. HYBRID_BREAK();
  51342. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM):
  51343. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM)
  51344. ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51345. HYBRID_BREAK();
  51346. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ):
  51347. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ)
  51348. ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51349. HYBRID_BREAK();
  51350. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CV):
  51351. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_CV)
  51352. ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51353. HYBRID_BREAK();
  51354. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM):
  51355. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM)
  51356. ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51357. HYBRID_BREAK();
  51358. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ):
  51359. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ)
  51360. ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51361. HYBRID_BREAK();
  51362. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CV):
  51363. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_CV)
  51364. ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51365. HYBRID_BREAK();
  51366. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM):
  51367. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM)
  51368. ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51369. HYBRID_BREAK();
  51370. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ):
  51371. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ)
  51372. ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51373. HYBRID_BREAK();
  51374. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CV):
  51375. VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_CV)
  51376. ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51377. HYBRID_BREAK();
  51378. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM):
  51379. VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM)
  51380. ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51381. HYBRID_BREAK();
  51382. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ):
  51383. VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ)
  51384. ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51385. HYBRID_BREAK();
  51386. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CV):
  51387. VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_CV)
  51388. ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51389. HYBRID_BREAK();
  51390. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM):
  51391. VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM)
  51392. ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51393. HYBRID_BREAK();
  51394. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ):
  51395. VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ)
  51396. ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51397. HYBRID_BREAK();
  51398. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CV):
  51399. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CV)
  51400. ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51401. HYBRID_BREAK();
  51402. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM):
  51403. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM)
  51404. ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51405. HYBRID_BREAK();
  51406. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ):
  51407. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ)
  51408. ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51409. HYBRID_BREAK();
  51410. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CV):
  51411. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CV)
  51412. ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51413. HYBRID_BREAK();
  51414. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM):
  51415. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM)
  51416. ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51417. HYBRID_BREAK();
  51418. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ):
  51419. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ)
  51420. ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51421. HYBRID_BREAK();
  51422. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CV):
  51423. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CV)
  51424. ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51425. HYBRID_BREAK();
  51426. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM):
  51427. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM)
  51428. ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51429. HYBRID_BREAK();
  51430. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ):
  51431. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ)
  51432. ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51433. HYBRID_BREAK();
  51434. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV):
  51435. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV)
  51436. ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51437. HYBRID_BREAK();
  51438. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM):
  51439. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM)
  51440. ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51441. HYBRID_BREAK();
  51442. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ):
  51443. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ)
  51444. ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51445. HYBRID_BREAK();
  51446. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CV):
  51447. VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_CV)
  51448. ZEND_ASSIGN_POW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51449. HYBRID_BREAK();
  51450. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM):
  51451. VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM)
  51452. ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51453. HYBRID_BREAK();
  51454. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ):
  51455. VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ)
  51456. ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51457. HYBRID_BREAK();
  51458. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV):
  51459. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV)
  51460. ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51461. HYBRID_BREAK();
  51462. HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_VAR_CV):
  51463. VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_VAR_CV)
  51464. ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51465. HYBRID_BREAK();
  51466. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CV):
  51467. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CV)
  51468. ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51469. HYBRID_BREAK();
  51470. HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_VAR_CV):
  51471. VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_VAR_CV)
  51472. ZEND_POST_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51473. HYBRID_BREAK();
  51474. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CV):
  51475. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CV)
  51476. ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51477. HYBRID_BREAK();
  51478. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV):
  51479. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV)
  51480. ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51481. HYBRID_BREAK();
  51482. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV):
  51483. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV)
  51484. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51485. HYBRID_BREAK();
  51486. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV):
  51487. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV)
  51488. ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51489. HYBRID_BREAK();
  51490. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV):
  51491. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV)
  51492. ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51493. HYBRID_BREAK();
  51494. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV):
  51495. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV)
  51496. ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51497. HYBRID_BREAK();
  51498. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV):
  51499. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV)
  51500. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51501. HYBRID_BREAK();
  51502. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV):
  51503. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV)
  51504. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51505. HYBRID_BREAK();
  51506. HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CV):
  51507. VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CV)
  51508. ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51509. HYBRID_BREAK();
  51510. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST):
  51511. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST)
  51512. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51513. HYBRID_BREAK();
  51514. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP):
  51515. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP)
  51516. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51517. HYBRID_BREAK();
  51518. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR):
  51519. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR)
  51520. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51521. HYBRID_BREAK();
  51522. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV):
  51523. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV)
  51524. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51525. HYBRID_BREAK();
  51526. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST):
  51527. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST)
  51528. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51529. HYBRID_BREAK();
  51530. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP):
  51531. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP)
  51532. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51533. HYBRID_BREAK();
  51534. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR):
  51535. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR)
  51536. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51537. HYBRID_BREAK();
  51538. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV):
  51539. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV)
  51540. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51541. HYBRID_BREAK();
  51542. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED):
  51543. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED)
  51544. ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51545. HYBRID_BREAK();
  51546. HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED):
  51547. VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED)
  51548. ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51549. HYBRID_BREAK();
  51550. HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_CV):
  51551. VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_CV)
  51552. ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51553. HYBRID_BREAK();
  51554. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV):
  51555. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV)
  51556. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51557. HYBRID_BREAK();
  51558. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV):
  51559. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV)
  51560. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51561. HYBRID_BREAK();
  51562. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CV):
  51563. VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CV)
  51564. ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51565. HYBRID_BREAK();
  51566. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CV):
  51567. VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CV)
  51568. ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51569. HYBRID_BREAK();
  51570. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CV):
  51571. VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CV)
  51572. ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51573. HYBRID_BREAK();
  51574. HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CV):
  51575. VM_TRACE(ZEND_YIELD_SPEC_VAR_CV)
  51576. ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51577. HYBRID_BREAK();
  51578. HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED):
  51579. VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED)
  51580. ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51581. HYBRID_BREAK();
  51582. HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED):
  51583. VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED)
  51584. ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51585. HYBRID_BREAK();
  51586. HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED):
  51587. VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED)
  51588. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51589. HYBRID_BREAK();
  51590. HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK):
  51591. VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK)
  51592. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51593. HYBRID_BREAK();
  51594. HYBRID_CASE(ZEND_CLONE_SPEC_UNUSED):
  51595. VM_TRACE(ZEND_CLONE_SPEC_UNUSED)
  51596. ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51597. HYBRID_BREAK();
  51598. HYBRID_CASE(ZEND_EXIT_SPEC_UNUSED):
  51599. VM_TRACE(ZEND_EXIT_SPEC_UNUSED)
  51600. ZEND_EXIT_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51601. HYBRID_BREAK();
  51602. HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED):
  51603. VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED)
  51604. ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51605. HYBRID_BREAK();
  51606. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ):
  51607. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ)
  51608. ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51609. HYBRID_BREAK();
  51610. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ):
  51611. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ)
  51612. ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51613. HYBRID_BREAK();
  51614. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ):
  51615. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ)
  51616. ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51617. HYBRID_BREAK();
  51618. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ):
  51619. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ)
  51620. ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51621. HYBRID_BREAK();
  51622. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ):
  51623. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ)
  51624. ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51625. HYBRID_BREAK();
  51626. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ):
  51627. VM_TRACE(ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ)
  51628. ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51629. HYBRID_BREAK();
  51630. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ):
  51631. VM_TRACE(ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ)
  51632. ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51633. HYBRID_BREAK();
  51634. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ):
  51635. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ)
  51636. ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51637. HYBRID_BREAK();
  51638. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ):
  51639. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ)
  51640. ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51641. HYBRID_BREAK();
  51642. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ):
  51643. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ)
  51644. ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51645. HYBRID_BREAK();
  51646. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ):
  51647. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ)
  51648. ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51649. HYBRID_BREAK();
  51650. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ):
  51651. VM_TRACE(ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ)
  51652. ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51653. HYBRID_BREAK();
  51654. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST):
  51655. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST)
  51656. ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51657. HYBRID_BREAK();
  51658. HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST):
  51659. VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST)
  51660. ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51661. HYBRID_BREAK();
  51662. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST):
  51663. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST)
  51664. ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51665. HYBRID_BREAK();
  51666. HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST):
  51667. VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST)
  51668. ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51669. HYBRID_BREAK();
  51670. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST):
  51671. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST)
  51672. ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51673. HYBRID_BREAK();
  51674. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST):
  51675. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST)
  51676. ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51677. HYBRID_BREAK();
  51678. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST):
  51679. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST)
  51680. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51681. HYBRID_BREAK();
  51682. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST):
  51683. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST)
  51684. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51685. HYBRID_BREAK();
  51686. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST):
  51687. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST)
  51688. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51689. HYBRID_BREAK();
  51690. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST):
  51691. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST)
  51692. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51693. HYBRID_BREAK();
  51694. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST):
  51695. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST)
  51696. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51697. HYBRID_BREAK();
  51698. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP):
  51699. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP)
  51700. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51701. HYBRID_BREAK();
  51702. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR):
  51703. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR)
  51704. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51705. HYBRID_BREAK();
  51706. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV):
  51707. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV)
  51708. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51709. HYBRID_BREAK();
  51710. HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST):
  51711. VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST)
  51712. ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51713. HYBRID_BREAK();
  51714. HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST):
  51715. VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST)
  51716. ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51717. HYBRID_BREAK();
  51718. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST):
  51719. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST)
  51720. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51721. HYBRID_BREAK();
  51722. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST):
  51723. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST)
  51724. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51725. HYBRID_BREAK();
  51726. HYBRID_CASE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST):
  51727. VM_TRACE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST)
  51728. ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51729. HYBRID_BREAK();
  51730. HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST):
  51731. VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST)
  51732. ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51733. HYBRID_BREAK();
  51734. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST):
  51735. VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST)
  51736. ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51737. HYBRID_BREAK();
  51738. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST):
  51739. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST)
  51740. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51741. HYBRID_BREAK();
  51742. HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CONST):
  51743. VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CONST)
  51744. ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51745. HYBRID_BREAK();
  51746. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ):
  51747. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ)
  51748. ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51749. HYBRID_BREAK();
  51750. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ):
  51751. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ)
  51752. ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51753. HYBRID_BREAK();
  51754. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ):
  51755. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ)
  51756. ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51757. HYBRID_BREAK();
  51758. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ):
  51759. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ)
  51760. ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51761. HYBRID_BREAK();
  51762. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ):
  51763. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ)
  51764. ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51765. HYBRID_BREAK();
  51766. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ):
  51767. VM_TRACE(ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ)
  51768. ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51769. HYBRID_BREAK();
  51770. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ):
  51771. VM_TRACE(ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ)
  51772. ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51773. HYBRID_BREAK();
  51774. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ):
  51775. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ)
  51776. ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51777. HYBRID_BREAK();
  51778. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ):
  51779. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ)
  51780. ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51781. HYBRID_BREAK();
  51782. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ):
  51783. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ)
  51784. ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51785. HYBRID_BREAK();
  51786. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ):
  51787. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ)
  51788. ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51789. HYBRID_BREAK();
  51790. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ):
  51791. VM_TRACE(ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ)
  51792. ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51793. HYBRID_BREAK();
  51794. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR):
  51795. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR)
  51796. ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51797. HYBRID_BREAK();
  51798. HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR):
  51799. VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR)
  51800. ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51801. HYBRID_BREAK();
  51802. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR):
  51803. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR)
  51804. ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51805. HYBRID_BREAK();
  51806. HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR):
  51807. VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR)
  51808. ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51809. HYBRID_BREAK();
  51810. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR):
  51811. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR)
  51812. ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51813. HYBRID_BREAK();
  51814. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR):
  51815. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR)
  51816. ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51817. HYBRID_BREAK();
  51818. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR):
  51819. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR)
  51820. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51821. HYBRID_BREAK();
  51822. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR):
  51823. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR)
  51824. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51825. HYBRID_BREAK();
  51826. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR):
  51827. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR)
  51828. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51829. HYBRID_BREAK();
  51830. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR):
  51831. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR)
  51832. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51833. HYBRID_BREAK();
  51834. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST):
  51835. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST)
  51836. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51837. HYBRID_BREAK();
  51838. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP):
  51839. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP)
  51840. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51841. HYBRID_BREAK();
  51842. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
  51843. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
  51844. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51845. HYBRID_BREAK();
  51846. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
  51847. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
  51848. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51849. HYBRID_BREAK();
  51850. HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR):
  51851. VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR)
  51852. ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51853. HYBRID_BREAK();
  51854. HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR):
  51855. VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR)
  51856. ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51857. HYBRID_BREAK();
  51858. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR):
  51859. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR)
  51860. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51861. HYBRID_BREAK();
  51862. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR):
  51863. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR)
  51864. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51865. HYBRID_BREAK();
  51866. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR):
  51867. VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR)
  51868. ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51869. HYBRID_BREAK();
  51870. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR):
  51871. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR)
  51872. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51873. HYBRID_BREAK();
  51874. HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_TMP):
  51875. VM_TRACE(ZEND_YIELD_SPEC_UNUSED_TMP)
  51876. ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51877. HYBRID_BREAK();
  51878. HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_VAR):
  51879. VM_TRACE(ZEND_YIELD_SPEC_UNUSED_VAR)
  51880. ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51881. HYBRID_BREAK();
  51882. HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED):
  51883. VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED)
  51884. ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51885. HYBRID_BREAK();
  51886. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED):
  51887. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED)
  51888. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51889. HYBRID_BREAK();
  51890. HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED):
  51891. VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED)
  51892. ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51893. HYBRID_BREAK();
  51894. HYBRID_CASE(ZEND_NEW_SPEC_UNUSED_UNUSED):
  51895. VM_TRACE(ZEND_NEW_SPEC_UNUSED_UNUSED)
  51896. ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51897. HYBRID_BREAK();
  51898. HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_UNUSED):
  51899. VM_TRACE(ZEND_YIELD_SPEC_UNUSED_UNUSED)
  51900. ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51901. HYBRID_BREAK();
  51902. HYBRID_CASE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED):
  51903. VM_TRACE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED)
  51904. ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51905. HYBRID_BREAK();
  51906. HYBRID_CASE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED):
  51907. VM_TRACE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED)
  51908. ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51909. HYBRID_BREAK();
  51910. HYBRID_CASE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED):
  51911. VM_TRACE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED)
  51912. ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51913. HYBRID_BREAK();
  51914. HYBRID_CASE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED):
  51915. VM_TRACE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED)
  51916. ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51917. HYBRID_BREAK();
  51918. HYBRID_CASE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED):
  51919. VM_TRACE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED)
  51920. ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51921. HYBRID_BREAK();
  51922. HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED):
  51923. VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED)
  51924. ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51925. HYBRID_BREAK();
  51926. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ):
  51927. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ)
  51928. ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51929. HYBRID_BREAK();
  51930. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ):
  51931. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ)
  51932. ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51933. HYBRID_BREAK();
  51934. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ):
  51935. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ)
  51936. ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51937. HYBRID_BREAK();
  51938. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ):
  51939. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ)
  51940. ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51941. HYBRID_BREAK();
  51942. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ):
  51943. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ)
  51944. ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51945. HYBRID_BREAK();
  51946. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ):
  51947. VM_TRACE(ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ)
  51948. ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51949. HYBRID_BREAK();
  51950. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ):
  51951. VM_TRACE(ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ)
  51952. ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51953. HYBRID_BREAK();
  51954. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ):
  51955. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ)
  51956. ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51957. HYBRID_BREAK();
  51958. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ):
  51959. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ)
  51960. ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51961. HYBRID_BREAK();
  51962. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ):
  51963. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ)
  51964. ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51965. HYBRID_BREAK();
  51966. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ):
  51967. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ)
  51968. ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51969. HYBRID_BREAK();
  51970. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ):
  51971. VM_TRACE(ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ)
  51972. ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51973. HYBRID_BREAK();
  51974. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV):
  51975. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV)
  51976. ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51977. HYBRID_BREAK();
  51978. HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV):
  51979. VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV)
  51980. ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51981. HYBRID_BREAK();
  51982. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV):
  51983. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV)
  51984. ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51985. HYBRID_BREAK();
  51986. HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV):
  51987. VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV)
  51988. ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51989. HYBRID_BREAK();
  51990. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV):
  51991. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV)
  51992. ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51993. HYBRID_BREAK();
  51994. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV):
  51995. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV)
  51996. ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  51997. HYBRID_BREAK();
  51998. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV):
  51999. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV)
  52000. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52001. HYBRID_BREAK();
  52002. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV):
  52003. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV)
  52004. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52005. HYBRID_BREAK();
  52006. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV):
  52007. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV)
  52008. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52009. HYBRID_BREAK();
  52010. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV):
  52011. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV)
  52012. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52013. HYBRID_BREAK();
  52014. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST):
  52015. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST)
  52016. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52017. HYBRID_BREAK();
  52018. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP):
  52019. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP)
  52020. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52021. HYBRID_BREAK();
  52022. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR):
  52023. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR)
  52024. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52025. HYBRID_BREAK();
  52026. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV):
  52027. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV)
  52028. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52029. HYBRID_BREAK();
  52030. HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CV):
  52031. VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CV)
  52032. ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52033. HYBRID_BREAK();
  52034. HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV):
  52035. VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV)
  52036. ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52037. HYBRID_BREAK();
  52038. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV):
  52039. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV)
  52040. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52041. HYBRID_BREAK();
  52042. HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV):
  52043. VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV)
  52044. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52045. HYBRID_BREAK();
  52046. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV):
  52047. VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV)
  52048. ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52049. HYBRID_BREAK();
  52050. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV):
  52051. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV)
  52052. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52053. HYBRID_BREAK();
  52054. HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CV):
  52055. VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CV)
  52056. ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52057. HYBRID_BREAK();
  52058. HYBRID_CASE(ZEND_BW_NOT_SPEC_CV):
  52059. VM_TRACE(ZEND_BW_NOT_SPEC_CV)
  52060. ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52061. HYBRID_BREAK();
  52062. HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CV):
  52063. VM_TRACE(ZEND_BOOL_NOT_SPEC_CV)
  52064. ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52065. HYBRID_BREAK();
  52066. HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED):
  52067. VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED)
  52068. ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52069. HYBRID_BREAK();
  52070. HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED):
  52071. VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED)
  52072. ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52073. HYBRID_BREAK();
  52074. HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED):
  52075. VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED)
  52076. ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52077. HYBRID_BREAK();
  52078. HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED):
  52079. VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED)
  52080. ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52081. HYBRID_BREAK();
  52082. HYBRID_CASE(ZEND_POST_INC_SPEC_CV):
  52083. VM_TRACE(ZEND_POST_INC_SPEC_CV)
  52084. ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52085. HYBRID_BREAK();
  52086. HYBRID_CASE(ZEND_POST_DEC_SPEC_CV):
  52087. VM_TRACE(ZEND_POST_DEC_SPEC_CV)
  52088. ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52089. HYBRID_BREAK();
  52090. HYBRID_CASE(ZEND_ECHO_SPEC_CV):
  52091. VM_TRACE(ZEND_ECHO_SPEC_CV)
  52092. ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52093. HYBRID_BREAK();
  52094. HYBRID_CASE(ZEND_JMPZ_SPEC_CV):
  52095. VM_TRACE(ZEND_JMPZ_SPEC_CV)
  52096. ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52097. HYBRID_BREAK();
  52098. HYBRID_CASE(ZEND_JMPNZ_SPEC_CV):
  52099. VM_TRACE(ZEND_JMPNZ_SPEC_CV)
  52100. ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52101. HYBRID_BREAK();
  52102. HYBRID_CASE(ZEND_JMPZNZ_SPEC_CV):
  52103. VM_TRACE(ZEND_JMPZNZ_SPEC_CV)
  52104. ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52105. HYBRID_BREAK();
  52106. HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CV):
  52107. VM_TRACE(ZEND_JMPZ_EX_SPEC_CV)
  52108. ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52109. HYBRID_BREAK();
  52110. HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CV):
  52111. VM_TRACE(ZEND_JMPNZ_EX_SPEC_CV)
  52112. ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52113. HYBRID_BREAK();
  52114. HYBRID_CASE(ZEND_RETURN_SPEC_CV):
  52115. VM_TRACE(ZEND_RETURN_SPEC_CV)
  52116. {
  52117. USE_OPLINE
  52118. zval *retval_ptr;
  52119. zval *return_value;
  52120. zend_free_op free_op1;
  52121. retval_ptr = EX_VAR(opline->op1.var);
  52122. return_value = EX(return_value);
  52123. if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
  52124. SAVE_OPLINE();
  52125. retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R);
  52126. if (return_value) {
  52127. ZVAL_NULL(return_value);
  52128. }
  52129. } else if (!return_value) {
  52130. if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
  52131. if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
  52132. SAVE_OPLINE();
  52133. rc_dtor_func(Z_COUNTED_P(free_op1));
  52134. }
  52135. }
  52136. } else {
  52137. if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
  52138. ZVAL_COPY_VALUE(return_value, retval_ptr);
  52139. if (IS_CV == IS_CONST) {
  52140. if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
  52141. Z_ADDREF_P(return_value);
  52142. }
  52143. }
  52144. } else if (IS_CV == IS_CV) {
  52145. if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  52146. if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
  52147. ZVAL_COPY_VALUE(return_value, retval_ptr);
  52148. if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
  52149. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  52150. if (GC_MAY_LEAK(ref)) {
  52151. gc_possible_root(ref);
  52152. }
  52153. ZVAL_NULL(retval_ptr);
  52154. } else {
  52155. Z_ADDREF_P(return_value);
  52156. }
  52157. } else {
  52158. retval_ptr = Z_REFVAL_P(retval_ptr);
  52159. ZVAL_COPY(return_value, retval_ptr);
  52160. }
  52161. } else {
  52162. ZVAL_COPY_VALUE(return_value, retval_ptr);
  52163. }
  52164. } else /* if (IS_CV == IS_VAR) */ {
  52165. if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
  52166. zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
  52167. retval_ptr = Z_REFVAL_P(retval_ptr);
  52168. ZVAL_COPY_VALUE(return_value, retval_ptr);
  52169. if (UNEXPECTED(GC_DELREF(ref) == 0)) {
  52170. efree_size(ref, sizeof(zend_reference));
  52171. } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
  52172. Z_ADDREF_P(retval_ptr);
  52173. }
  52174. } else {
  52175. ZVAL_COPY_VALUE(return_value, retval_ptr);
  52176. }
  52177. }
  52178. }
  52179. goto zend_leave_helper_SPEC_LABEL;
  52180. }
  52181. HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CV):
  52182. VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CV)
  52183. ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52184. HYBRID_BREAK();
  52185. HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CV):
  52186. VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CV)
  52187. ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52188. HYBRID_BREAK();
  52189. HYBRID_CASE(ZEND_THROW_SPEC_CV):
  52190. VM_TRACE(ZEND_THROW_SPEC_CV)
  52191. ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52192. HYBRID_BREAK();
  52193. HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV):
  52194. VM_TRACE(ZEND_SEND_VAR_SPEC_CV)
  52195. ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52196. HYBRID_BREAK();
  52197. HYBRID_CASE(ZEND_SEND_REF_SPEC_CV):
  52198. VM_TRACE(ZEND_SEND_REF_SPEC_CV)
  52199. ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52200. HYBRID_BREAK();
  52201. HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV):
  52202. VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV)
  52203. ZEND_SEND_VAR_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52204. HYBRID_BREAK();
  52205. HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_QUICK):
  52206. VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_QUICK)
  52207. ZEND_SEND_VAR_EX_SPEC_CV_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52208. HYBRID_BREAK();
  52209. HYBRID_CASE(ZEND_SEND_USER_SPEC_CV):
  52210. VM_TRACE(ZEND_SEND_USER_SPEC_CV)
  52211. ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52212. HYBRID_BREAK();
  52213. HYBRID_CASE(ZEND_BOOL_SPEC_CV):
  52214. VM_TRACE(ZEND_BOOL_SPEC_CV)
  52215. ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52216. HYBRID_BREAK();
  52217. HYBRID_CASE(ZEND_CLONE_SPEC_CV):
  52218. VM_TRACE(ZEND_CLONE_SPEC_CV)
  52219. ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52220. HYBRID_BREAK();
  52221. HYBRID_CASE(ZEND_CAST_SPEC_CV):
  52222. VM_TRACE(ZEND_CAST_SPEC_CV)
  52223. ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52224. HYBRID_BREAK();
  52225. HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CV):
  52226. VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CV)
  52227. ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52228. HYBRID_BREAK();
  52229. HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CV):
  52230. VM_TRACE(ZEND_FE_RESET_R_SPEC_CV)
  52231. ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52232. HYBRID_BREAK();
  52233. HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CV):
  52234. VM_TRACE(ZEND_FE_RESET_RW_SPEC_CV)
  52235. ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52236. HYBRID_BREAK();
  52237. HYBRID_CASE(ZEND_EXIT_SPEC_CV):
  52238. VM_TRACE(ZEND_EXIT_SPEC_CV)
  52239. ZEND_EXIT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52240. HYBRID_BREAK();
  52241. HYBRID_CASE(ZEND_JMP_SET_SPEC_CV):
  52242. VM_TRACE(ZEND_JMP_SET_SPEC_CV)
  52243. ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52244. HYBRID_BREAK();
  52245. HYBRID_CASE(ZEND_COALESCE_SPEC_CV):
  52246. VM_TRACE(ZEND_COALESCE_SPEC_CV)
  52247. ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52248. HYBRID_BREAK();
  52249. HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CV):
  52250. VM_TRACE(ZEND_QM_ASSIGN_SPEC_CV)
  52251. ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52252. HYBRID_BREAK();
  52253. HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CV):
  52254. VM_TRACE(ZEND_YIELD_FROM_SPEC_CV)
  52255. ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52256. HYBRID_BREAK();
  52257. HYBRID_CASE(ZEND_STRLEN_SPEC_CV):
  52258. VM_TRACE(ZEND_STRLEN_SPEC_CV)
  52259. ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52260. HYBRID_BREAK();
  52261. HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CV):
  52262. VM_TRACE(ZEND_TYPE_CHECK_SPEC_CV)
  52263. ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52264. HYBRID_BREAK();
  52265. HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
  52266. VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
  52267. ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52268. HYBRID_BREAK();
  52269. HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
  52270. VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
  52271. ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52272. HYBRID_BREAK();
  52273. HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED):
  52274. VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED)
  52275. ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52276. HYBRID_BREAK();
  52277. HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED):
  52278. VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED)
  52279. ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52280. HYBRID_BREAK();
  52281. HYBRID_CASE(ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED):
  52282. VM_TRACE(ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED)
  52283. ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52284. HYBRID_BREAK();
  52285. HYBRID_CASE(ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED):
  52286. VM_TRACE(ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED)
  52287. ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52288. HYBRID_BREAK();
  52289. HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
  52290. VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
  52291. ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52292. HYBRID_BREAK();
  52293. HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
  52294. VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
  52295. ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52296. HYBRID_BREAK();
  52297. HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED):
  52298. VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED)
  52299. ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52300. HYBRID_BREAK();
  52301. HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED):
  52302. VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED)
  52303. ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52304. HYBRID_BREAK();
  52305. HYBRID_CASE(ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED):
  52306. VM_TRACE(ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED)
  52307. ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52308. HYBRID_BREAK();
  52309. HYBRID_CASE(ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED):
  52310. VM_TRACE(ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED)
  52311. ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52312. HYBRID_BREAK();
  52313. HYBRID_CASE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV):
  52314. VM_TRACE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV)
  52315. ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52316. HYBRID_BREAK();
  52317. HYBRID_CASE(ZEND_POST_INC_LONG_SPEC_CV):
  52318. VM_TRACE(ZEND_POST_INC_LONG_SPEC_CV)
  52319. ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52320. HYBRID_BREAK();
  52321. HYBRID_CASE(ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_CV):
  52322. VM_TRACE(ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_CV)
  52323. ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52324. HYBRID_BREAK();
  52325. HYBRID_CASE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV):
  52326. VM_TRACE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV)
  52327. ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52328. HYBRID_BREAK();
  52329. HYBRID_CASE(ZEND_POST_DEC_LONG_SPEC_CV):
  52330. VM_TRACE(ZEND_POST_DEC_LONG_SPEC_CV)
  52331. ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52332. HYBRID_BREAK();
  52333. HYBRID_CASE(ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_CV):
  52334. VM_TRACE(ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_CV)
  52335. ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52336. HYBRID_BREAK();
  52337. HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_CV):
  52338. VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_CV)
  52339. ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52340. HYBRID_BREAK();
  52341. HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV):
  52342. VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV)
  52343. ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52344. HYBRID_BREAK();
  52345. HYBRID_CASE(ZEND_ADD_SPEC_CV_CONST):
  52346. VM_TRACE(ZEND_ADD_SPEC_CV_CONST)
  52347. ZEND_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52348. HYBRID_BREAK();
  52349. HYBRID_CASE(ZEND_SUB_SPEC_CV_CONST):
  52350. VM_TRACE(ZEND_SUB_SPEC_CV_CONST)
  52351. ZEND_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52352. HYBRID_BREAK();
  52353. HYBRID_CASE(ZEND_MUL_SPEC_CV_CONST):
  52354. VM_TRACE(ZEND_MUL_SPEC_CV_CONST)
  52355. ZEND_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52356. HYBRID_BREAK();
  52357. HYBRID_CASE(ZEND_DIV_SPEC_CV_CONST):
  52358. VM_TRACE(ZEND_DIV_SPEC_CV_CONST)
  52359. ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52360. HYBRID_BREAK();
  52361. HYBRID_CASE(ZEND_MOD_SPEC_CV_CONST):
  52362. VM_TRACE(ZEND_MOD_SPEC_CV_CONST)
  52363. ZEND_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52364. HYBRID_BREAK();
  52365. HYBRID_CASE(ZEND_SL_SPEC_CV_CONST):
  52366. VM_TRACE(ZEND_SL_SPEC_CV_CONST)
  52367. ZEND_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52368. HYBRID_BREAK();
  52369. HYBRID_CASE(ZEND_SR_SPEC_CV_CONST):
  52370. VM_TRACE(ZEND_SR_SPEC_CV_CONST)
  52371. ZEND_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52372. HYBRID_BREAK();
  52373. HYBRID_CASE(ZEND_POW_SPEC_CV_CONST):
  52374. VM_TRACE(ZEND_POW_SPEC_CV_CONST)
  52375. ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52376. HYBRID_BREAK();
  52377. HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CONST):
  52378. VM_TRACE(ZEND_CONCAT_SPEC_CV_CONST)
  52379. ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52380. HYBRID_BREAK();
  52381. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CONST):
  52382. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CONST)
  52383. ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52384. HYBRID_BREAK();
  52385. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST):
  52386. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST)
  52387. ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52388. HYBRID_BREAK();
  52389. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST):
  52390. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST)
  52391. ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52392. HYBRID_BREAK();
  52393. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST):
  52394. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST)
  52395. ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52396. HYBRID_BREAK();
  52397. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CV_CONST):
  52398. VM_TRACE(ZEND_IS_SMALLER_SPEC_CV_CONST)
  52399. ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52400. HYBRID_BREAK();
  52401. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST):
  52402. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST)
  52403. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52404. HYBRID_BREAK();
  52405. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CONST):
  52406. VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CONST)
  52407. ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52408. HYBRID_BREAK();
  52409. HYBRID_CASE(ZEND_BW_OR_SPEC_CV_CONST):
  52410. VM_TRACE(ZEND_BW_OR_SPEC_CV_CONST)
  52411. ZEND_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52412. HYBRID_BREAK();
  52413. HYBRID_CASE(ZEND_BW_AND_SPEC_CV_CONST):
  52414. VM_TRACE(ZEND_BW_AND_SPEC_CV_CONST)
  52415. ZEND_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52416. HYBRID_BREAK();
  52417. HYBRID_CASE(ZEND_BW_XOR_SPEC_CV_CONST):
  52418. VM_TRACE(ZEND_BW_XOR_SPEC_CV_CONST)
  52419. ZEND_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52420. HYBRID_BREAK();
  52421. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CONST):
  52422. VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CONST)
  52423. ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52424. HYBRID_BREAK();
  52425. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CONST):
  52426. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_CONST)
  52427. ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52428. HYBRID_BREAK();
  52429. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM):
  52430. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM)
  52431. ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52432. HYBRID_BREAK();
  52433. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ):
  52434. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ)
  52435. ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52436. HYBRID_BREAK();
  52437. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CONST):
  52438. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_CONST)
  52439. ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52440. HYBRID_BREAK();
  52441. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM):
  52442. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM)
  52443. ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52444. HYBRID_BREAK();
  52445. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ):
  52446. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ)
  52447. ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52448. HYBRID_BREAK();
  52449. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CONST):
  52450. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_CONST)
  52451. ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52452. HYBRID_BREAK();
  52453. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM):
  52454. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM)
  52455. ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52456. HYBRID_BREAK();
  52457. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ):
  52458. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ)
  52459. ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52460. HYBRID_BREAK();
  52461. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CONST):
  52462. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_CONST)
  52463. ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52464. HYBRID_BREAK();
  52465. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM):
  52466. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM)
  52467. ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52468. HYBRID_BREAK();
  52469. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ):
  52470. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ)
  52471. ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52472. HYBRID_BREAK();
  52473. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CONST):
  52474. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_CONST)
  52475. ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52476. HYBRID_BREAK();
  52477. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM):
  52478. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM)
  52479. ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52480. HYBRID_BREAK();
  52481. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ):
  52482. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ)
  52483. ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52484. HYBRID_BREAK();
  52485. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CONST):
  52486. VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_CONST)
  52487. ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52488. HYBRID_BREAK();
  52489. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM):
  52490. VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM)
  52491. ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52492. HYBRID_BREAK();
  52493. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ):
  52494. VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ)
  52495. ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52496. HYBRID_BREAK();
  52497. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CONST):
  52498. VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_CONST)
  52499. ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52500. HYBRID_BREAK();
  52501. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM):
  52502. VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM)
  52503. ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52504. HYBRID_BREAK();
  52505. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ):
  52506. VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ)
  52507. ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52508. HYBRID_BREAK();
  52509. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CONST):
  52510. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_CONST)
  52511. ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52512. HYBRID_BREAK();
  52513. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM):
  52514. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM)
  52515. ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52516. HYBRID_BREAK();
  52517. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ):
  52518. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ)
  52519. ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52520. HYBRID_BREAK();
  52521. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CONST):
  52522. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_CONST)
  52523. ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52524. HYBRID_BREAK();
  52525. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM):
  52526. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM)
  52527. ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52528. HYBRID_BREAK();
  52529. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ):
  52530. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ)
  52531. ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52532. HYBRID_BREAK();
  52533. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CONST):
  52534. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_CONST)
  52535. ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52536. HYBRID_BREAK();
  52537. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM):
  52538. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM)
  52539. ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52540. HYBRID_BREAK();
  52541. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ):
  52542. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ)
  52543. ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52544. HYBRID_BREAK();
  52545. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST):
  52546. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST)
  52547. ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52548. HYBRID_BREAK();
  52549. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM):
  52550. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM)
  52551. ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52552. HYBRID_BREAK();
  52553. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ):
  52554. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ)
  52555. ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52556. HYBRID_BREAK();
  52557. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CONST):
  52558. VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_CONST)
  52559. ZEND_ASSIGN_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52560. HYBRID_BREAK();
  52561. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM):
  52562. VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM)
  52563. ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52564. HYBRID_BREAK();
  52565. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ):
  52566. VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ)
  52567. ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52568. HYBRID_BREAK();
  52569. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST):
  52570. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST)
  52571. ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52572. HYBRID_BREAK();
  52573. HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_CV_CONST):
  52574. VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_CV_CONST)
  52575. ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52576. HYBRID_BREAK();
  52577. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CONST):
  52578. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CONST)
  52579. ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52580. HYBRID_BREAK();
  52581. HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_CV_CONST):
  52582. VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_CV_CONST)
  52583. ZEND_POST_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52584. HYBRID_BREAK();
  52585. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST):
  52586. VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST)
  52587. ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52588. HYBRID_BREAK();
  52589. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST):
  52590. VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST)
  52591. ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52592. HYBRID_BREAK();
  52593. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST):
  52594. VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST)
  52595. ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52596. HYBRID_BREAK();
  52597. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST):
  52598. VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST)
  52599. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52600. HYBRID_BREAK();
  52601. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST):
  52602. VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST)
  52603. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52604. HYBRID_BREAK();
  52605. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST):
  52606. VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST)
  52607. ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52608. HYBRID_BREAK();
  52609. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CONST):
  52610. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CONST)
  52611. ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52612. HYBRID_BREAK();
  52613. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CONST):
  52614. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CONST)
  52615. ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52616. HYBRID_BREAK();
  52617. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST):
  52618. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST)
  52619. ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52620. HYBRID_BREAK();
  52621. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST):
  52622. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST)
  52623. ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52624. HYBRID_BREAK();
  52625. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST):
  52626. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST)
  52627. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52628. HYBRID_BREAK();
  52629. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST):
  52630. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST)
  52631. ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52632. HYBRID_BREAK();
  52633. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST):
  52634. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST)
  52635. ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52636. HYBRID_BREAK();
  52637. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST):
  52638. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST)
  52639. ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52640. HYBRID_BREAK();
  52641. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST):
  52642. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST)
  52643. ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52644. HYBRID_BREAK();
  52645. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST):
  52646. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST)
  52647. ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52648. HYBRID_BREAK();
  52649. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST):
  52650. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST)
  52651. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52652. HYBRID_BREAK();
  52653. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST):
  52654. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST)
  52655. ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52656. HYBRID_BREAK();
  52657. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST):
  52658. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST)
  52659. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52660. HYBRID_BREAK();
  52661. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP):
  52662. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP)
  52663. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52664. HYBRID_BREAK();
  52665. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR):
  52666. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR)
  52667. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52668. HYBRID_BREAK();
  52669. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV):
  52670. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV)
  52671. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52672. HYBRID_BREAK();
  52673. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST):
  52674. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST)
  52675. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52676. HYBRID_BREAK();
  52677. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP):
  52678. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP)
  52679. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52680. HYBRID_BREAK();
  52681. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR):
  52682. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR)
  52683. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52684. HYBRID_BREAK();
  52685. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV):
  52686. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV)
  52687. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52688. HYBRID_BREAK();
  52689. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED):
  52690. VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED)
  52691. ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52692. HYBRID_BREAK();
  52693. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED):
  52694. VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED)
  52695. ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52696. HYBRID_BREAK();
  52697. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CONST):
  52698. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CONST)
  52699. ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52700. HYBRID_BREAK();
  52701. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST):
  52702. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST)
  52703. ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52704. HYBRID_BREAK();
  52705. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST):
  52706. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST)
  52707. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52708. HYBRID_BREAK();
  52709. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CONST):
  52710. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CONST)
  52711. ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52712. HYBRID_BREAK();
  52713. HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST):
  52714. VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST)
  52715. ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52716. HYBRID_BREAK();
  52717. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CONST):
  52718. VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CONST)
  52719. ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52720. HYBRID_BREAK();
  52721. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CONST):
  52722. VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CONST)
  52723. ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52724. HYBRID_BREAK();
  52725. HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST):
  52726. VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST)
  52727. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52728. HYBRID_BREAK();
  52729. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST):
  52730. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST)
  52731. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52732. HYBRID_BREAK();
  52733. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST):
  52734. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST)
  52735. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52736. HYBRID_BREAK();
  52737. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_CONST):
  52738. VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_CONST)
  52739. ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52740. HYBRID_BREAK();
  52741. HYBRID_CASE(ZEND_YIELD_SPEC_CV_CONST):
  52742. VM_TRACE(ZEND_YIELD_SPEC_CV_CONST)
  52743. ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52744. HYBRID_BREAK();
  52745. HYBRID_CASE(ZEND_BIND_GLOBAL_SPEC_CV_CONST):
  52746. VM_TRACE(ZEND_BIND_GLOBAL_SPEC_CV_CONST)
  52747. ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52748. HYBRID_BREAK();
  52749. HYBRID_CASE(ZEND_BIND_STATIC_SPEC_CV_CONST):
  52750. VM_TRACE(ZEND_BIND_STATIC_SPEC_CV_CONST)
  52751. ZEND_BIND_STATIC_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52752. HYBRID_BREAK();
  52753. HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CV_CONST):
  52754. VM_TRACE(ZEND_IN_ARRAY_SPEC_CV_CONST)
  52755. ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52756. HYBRID_BREAK();
  52757. HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST):
  52758. VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST)
  52759. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52760. HYBRID_BREAK();
  52761. HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV):
  52762. VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV)
  52763. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52764. HYBRID_BREAK();
  52765. HYBRID_CASE(ZEND_ADD_SPEC_CV_TMPVAR):
  52766. VM_TRACE(ZEND_ADD_SPEC_CV_TMPVAR)
  52767. ZEND_ADD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52768. HYBRID_BREAK();
  52769. HYBRID_CASE(ZEND_SUB_SPEC_CV_TMPVAR):
  52770. VM_TRACE(ZEND_SUB_SPEC_CV_TMPVAR)
  52771. ZEND_SUB_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52772. HYBRID_BREAK();
  52773. HYBRID_CASE(ZEND_MUL_SPEC_CV_TMPVAR):
  52774. VM_TRACE(ZEND_MUL_SPEC_CV_TMPVAR)
  52775. ZEND_MUL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52776. HYBRID_BREAK();
  52777. HYBRID_CASE(ZEND_DIV_SPEC_CV_TMPVAR):
  52778. VM_TRACE(ZEND_DIV_SPEC_CV_TMPVAR)
  52779. ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52780. HYBRID_BREAK();
  52781. HYBRID_CASE(ZEND_MOD_SPEC_CV_TMPVAR):
  52782. VM_TRACE(ZEND_MOD_SPEC_CV_TMPVAR)
  52783. ZEND_MOD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52784. HYBRID_BREAK();
  52785. HYBRID_CASE(ZEND_SL_SPEC_CV_TMPVAR):
  52786. VM_TRACE(ZEND_SL_SPEC_CV_TMPVAR)
  52787. ZEND_SL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52788. HYBRID_BREAK();
  52789. HYBRID_CASE(ZEND_SR_SPEC_CV_TMPVAR):
  52790. VM_TRACE(ZEND_SR_SPEC_CV_TMPVAR)
  52791. ZEND_SR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52792. HYBRID_BREAK();
  52793. HYBRID_CASE(ZEND_POW_SPEC_CV_TMPVAR):
  52794. VM_TRACE(ZEND_POW_SPEC_CV_TMPVAR)
  52795. ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52796. HYBRID_BREAK();
  52797. HYBRID_CASE(ZEND_CONCAT_SPEC_CV_TMPVAR):
  52798. VM_TRACE(ZEND_CONCAT_SPEC_CV_TMPVAR)
  52799. ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52800. HYBRID_BREAK();
  52801. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR):
  52802. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR)
  52803. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52804. HYBRID_BREAK();
  52805. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR):
  52806. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR)
  52807. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52808. HYBRID_BREAK();
  52809. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CV_TMPVAR):
  52810. VM_TRACE(ZEND_IS_SMALLER_SPEC_CV_TMPVAR)
  52811. ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52812. HYBRID_BREAK();
  52813. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR):
  52814. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR)
  52815. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52816. HYBRID_BREAK();
  52817. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_TMPVAR):
  52818. VM_TRACE(ZEND_SPACESHIP_SPEC_CV_TMPVAR)
  52819. ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52820. HYBRID_BREAK();
  52821. HYBRID_CASE(ZEND_BW_OR_SPEC_CV_TMPVAR):
  52822. VM_TRACE(ZEND_BW_OR_SPEC_CV_TMPVAR)
  52823. ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52824. HYBRID_BREAK();
  52825. HYBRID_CASE(ZEND_BW_AND_SPEC_CV_TMPVAR):
  52826. VM_TRACE(ZEND_BW_AND_SPEC_CV_TMPVAR)
  52827. ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52828. HYBRID_BREAK();
  52829. HYBRID_CASE(ZEND_BW_XOR_SPEC_CV_TMPVAR):
  52830. VM_TRACE(ZEND_BW_XOR_SPEC_CV_TMPVAR)
  52831. ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52832. HYBRID_BREAK();
  52833. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR):
  52834. VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR)
  52835. ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52836. HYBRID_BREAK();
  52837. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR):
  52838. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR)
  52839. ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52840. HYBRID_BREAK();
  52841. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM):
  52842. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM)
  52843. ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52844. HYBRID_BREAK();
  52845. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ):
  52846. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ)
  52847. ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52848. HYBRID_BREAK();
  52849. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR):
  52850. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR)
  52851. ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52852. HYBRID_BREAK();
  52853. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM):
  52854. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM)
  52855. ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52856. HYBRID_BREAK();
  52857. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ):
  52858. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ)
  52859. ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52860. HYBRID_BREAK();
  52861. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR):
  52862. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR)
  52863. ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52864. HYBRID_BREAK();
  52865. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM):
  52866. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM)
  52867. ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52868. HYBRID_BREAK();
  52869. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ):
  52870. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ)
  52871. ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52872. HYBRID_BREAK();
  52873. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR):
  52874. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR)
  52875. ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52876. HYBRID_BREAK();
  52877. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM):
  52878. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM)
  52879. ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52880. HYBRID_BREAK();
  52881. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ):
  52882. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ)
  52883. ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52884. HYBRID_BREAK();
  52885. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR):
  52886. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR)
  52887. ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52888. HYBRID_BREAK();
  52889. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM):
  52890. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM)
  52891. ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52892. HYBRID_BREAK();
  52893. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ):
  52894. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ)
  52895. ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52896. HYBRID_BREAK();
  52897. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_TMPVAR):
  52898. VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_TMPVAR)
  52899. ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52900. HYBRID_BREAK();
  52901. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM):
  52902. VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM)
  52903. ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52904. HYBRID_BREAK();
  52905. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ):
  52906. VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ)
  52907. ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52908. HYBRID_BREAK();
  52909. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_TMPVAR):
  52910. VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_TMPVAR)
  52911. ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52912. HYBRID_BREAK();
  52913. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM):
  52914. VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM)
  52915. ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52916. HYBRID_BREAK();
  52917. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ):
  52918. VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ)
  52919. ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52920. HYBRID_BREAK();
  52921. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR):
  52922. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR)
  52923. ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52924. HYBRID_BREAK();
  52925. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM):
  52926. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM)
  52927. ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52928. HYBRID_BREAK();
  52929. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ):
  52930. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ)
  52931. ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52932. HYBRID_BREAK();
  52933. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR):
  52934. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR)
  52935. ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52936. HYBRID_BREAK();
  52937. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM):
  52938. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM)
  52939. ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52940. HYBRID_BREAK();
  52941. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ):
  52942. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ)
  52943. ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52944. HYBRID_BREAK();
  52945. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR):
  52946. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR)
  52947. ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52948. HYBRID_BREAK();
  52949. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM):
  52950. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM)
  52951. ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52952. HYBRID_BREAK();
  52953. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ):
  52954. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ)
  52955. ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52956. HYBRID_BREAK();
  52957. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR):
  52958. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR)
  52959. ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52960. HYBRID_BREAK();
  52961. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM):
  52962. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM)
  52963. ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52964. HYBRID_BREAK();
  52965. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ):
  52966. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ)
  52967. ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52968. HYBRID_BREAK();
  52969. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_TMPVAR):
  52970. VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_TMPVAR)
  52971. ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52972. HYBRID_BREAK();
  52973. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM):
  52974. VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM)
  52975. ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52976. HYBRID_BREAK();
  52977. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ):
  52978. VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ)
  52979. ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52980. HYBRID_BREAK();
  52981. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR):
  52982. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR)
  52983. ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52984. HYBRID_BREAK();
  52985. HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR):
  52986. VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR)
  52987. ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52988. HYBRID_BREAK();
  52989. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR):
  52990. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR)
  52991. ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52992. HYBRID_BREAK();
  52993. HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR):
  52994. VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR)
  52995. ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  52996. HYBRID_BREAK();
  52997. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR):
  52998. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR)
  52999. ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53000. HYBRID_BREAK();
  53001. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR):
  53002. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR)
  53003. ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53004. HYBRID_BREAK();
  53005. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR):
  53006. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR)
  53007. ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53008. HYBRID_BREAK();
  53009. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR):
  53010. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR)
  53011. ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53012. HYBRID_BREAK();
  53013. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR):
  53014. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR)
  53015. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53016. HYBRID_BREAK();
  53017. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR):
  53018. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR)
  53019. ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53020. HYBRID_BREAK();
  53021. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR):
  53022. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR)
  53023. ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53024. HYBRID_BREAK();
  53025. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR):
  53026. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR)
  53027. ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53028. HYBRID_BREAK();
  53029. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR):
  53030. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR)
  53031. ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53032. HYBRID_BREAK();
  53033. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR):
  53034. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR)
  53035. ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53036. HYBRID_BREAK();
  53037. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR):
  53038. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR)
  53039. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53040. HYBRID_BREAK();
  53041. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR):
  53042. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR)
  53043. ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53044. HYBRID_BREAK();
  53045. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST):
  53046. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST)
  53047. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53048. HYBRID_BREAK();
  53049. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP):
  53050. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP)
  53051. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53052. HYBRID_BREAK();
  53053. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR):
  53054. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR)
  53055. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53056. HYBRID_BREAK();
  53057. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV):
  53058. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV)
  53059. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53060. HYBRID_BREAK();
  53061. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST):
  53062. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST)
  53063. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53064. HYBRID_BREAK();
  53065. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP):
  53066. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP)
  53067. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53068. HYBRID_BREAK();
  53069. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR):
  53070. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR)
  53071. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53072. HYBRID_BREAK();
  53073. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV):
  53074. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV)
  53075. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53076. HYBRID_BREAK();
  53077. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR):
  53078. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR)
  53079. ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53080. HYBRID_BREAK();
  53081. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR):
  53082. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR)
  53083. ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53084. HYBRID_BREAK();
  53085. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR):
  53086. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR)
  53087. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53088. HYBRID_BREAK();
  53089. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR):
  53090. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR)
  53091. ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53092. HYBRID_BREAK();
  53093. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR):
  53094. VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR)
  53095. ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53096. HYBRID_BREAK();
  53097. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR):
  53098. VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR)
  53099. ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53100. HYBRID_BREAK();
  53101. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR):
  53102. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR)
  53103. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53104. HYBRID_BREAK();
  53105. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR):
  53106. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR)
  53107. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53108. HYBRID_BREAK();
  53109. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_TMP):
  53110. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_TMP)
  53111. ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53112. HYBRID_BREAK();
  53113. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP):
  53114. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP)
  53115. ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53116. HYBRID_BREAK();
  53117. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED):
  53118. VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED)
  53119. ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53120. HYBRID_BREAK();
  53121. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED):
  53122. VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED)
  53123. ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53124. HYBRID_BREAK();
  53125. HYBRID_CASE(ZEND_YIELD_SPEC_CV_TMP):
  53126. VM_TRACE(ZEND_YIELD_SPEC_CV_TMP)
  53127. ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53128. HYBRID_BREAK();
  53129. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_VAR):
  53130. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_VAR)
  53131. ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53132. HYBRID_BREAK();
  53133. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR):
  53134. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR)
  53135. ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53136. HYBRID_BREAK();
  53137. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR):
  53138. VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR)
  53139. ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53140. HYBRID_BREAK();
  53141. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR):
  53142. VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR)
  53143. ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53144. HYBRID_BREAK();
  53145. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR):
  53146. VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR)
  53147. ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53148. HYBRID_BREAK();
  53149. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR):
  53150. VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR)
  53151. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53152. HYBRID_BREAK();
  53153. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR):
  53154. VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR)
  53155. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53156. HYBRID_BREAK();
  53157. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR):
  53158. VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR)
  53159. ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53160. HYBRID_BREAK();
  53161. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED):
  53162. VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED)
  53163. ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53164. HYBRID_BREAK();
  53165. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED):
  53166. VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED)
  53167. ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53168. HYBRID_BREAK();
  53169. HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_VAR):
  53170. VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_VAR)
  53171. ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53172. HYBRID_BREAK();
  53173. HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR):
  53174. VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR)
  53175. ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53176. HYBRID_BREAK();
  53177. HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR):
  53178. VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR)
  53179. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53180. HYBRID_BREAK();
  53181. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_VAR):
  53182. VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_VAR)
  53183. ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53184. HYBRID_BREAK();
  53185. HYBRID_CASE(ZEND_YIELD_SPEC_CV_VAR):
  53186. VM_TRACE(ZEND_YIELD_SPEC_CV_VAR)
  53187. ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53188. HYBRID_BREAK();
  53189. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM):
  53190. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM)
  53191. ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53192. HYBRID_BREAK();
  53193. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM):
  53194. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM)
  53195. ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53196. HYBRID_BREAK();
  53197. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM):
  53198. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM)
  53199. ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53200. HYBRID_BREAK();
  53201. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM):
  53202. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM)
  53203. ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53204. HYBRID_BREAK();
  53205. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM):
  53206. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM)
  53207. ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53208. HYBRID_BREAK();
  53209. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM):
  53210. VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM)
  53211. ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53212. HYBRID_BREAK();
  53213. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM):
  53214. VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM)
  53215. ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53216. HYBRID_BREAK();
  53217. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM):
  53218. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM)
  53219. ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53220. HYBRID_BREAK();
  53221. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM):
  53222. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM)
  53223. ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53224. HYBRID_BREAK();
  53225. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM):
  53226. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM)
  53227. ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53228. HYBRID_BREAK();
  53229. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM):
  53230. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM)
  53231. ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53232. HYBRID_BREAK();
  53233. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM):
  53234. VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM)
  53235. ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53236. HYBRID_BREAK();
  53237. HYBRID_CASE(ZEND_FETCH_R_SPEC_CV_UNUSED):
  53238. VM_TRACE(ZEND_FETCH_R_SPEC_CV_UNUSED)
  53239. ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53240. HYBRID_BREAK();
  53241. HYBRID_CASE(ZEND_FETCH_W_SPEC_CV_UNUSED):
  53242. VM_TRACE(ZEND_FETCH_W_SPEC_CV_UNUSED)
  53243. ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53244. HYBRID_BREAK();
  53245. HYBRID_CASE(ZEND_FETCH_RW_SPEC_CV_UNUSED):
  53246. VM_TRACE(ZEND_FETCH_RW_SPEC_CV_UNUSED)
  53247. ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53248. HYBRID_BREAK();
  53249. HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED):
  53250. VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED)
  53251. ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53252. HYBRID_BREAK();
  53253. HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED):
  53254. VM_TRACE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED)
  53255. ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53256. HYBRID_BREAK();
  53257. HYBRID_CASE(ZEND_FETCH_IS_SPEC_CV_UNUSED):
  53258. VM_TRACE(ZEND_FETCH_IS_SPEC_CV_UNUSED)
  53259. ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53260. HYBRID_BREAK();
  53261. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED):
  53262. VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED)
  53263. ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53264. HYBRID_BREAK();
  53265. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED):
  53266. VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED)
  53267. ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53268. HYBRID_BREAK();
  53269. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED):
  53270. VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED)
  53271. ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53272. HYBRID_BREAK();
  53273. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED):
  53274. VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED)
  53275. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53276. HYBRID_BREAK();
  53277. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED):
  53278. VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED)
  53279. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53280. HYBRID_BREAK();
  53281. HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED):
  53282. VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED)
  53283. ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53284. HYBRID_BREAK();
  53285. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED):
  53286. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED)
  53287. ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53288. HYBRID_BREAK();
  53289. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED):
  53290. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED)
  53291. ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53292. HYBRID_BREAK();
  53293. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED):
  53294. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED)
  53295. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53296. HYBRID_BREAK();
  53297. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST):
  53298. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST)
  53299. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53300. HYBRID_BREAK();
  53301. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP):
  53302. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP)
  53303. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53304. HYBRID_BREAK();
  53305. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR):
  53306. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR)
  53307. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53308. HYBRID_BREAK();
  53309. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV):
  53310. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV)
  53311. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53312. HYBRID_BREAK();
  53313. HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED):
  53314. VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED)
  53315. ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53316. HYBRID_BREAK();
  53317. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED):
  53318. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED)
  53319. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53320. HYBRID_BREAK();
  53321. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED):
  53322. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED)
  53323. ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53324. HYBRID_BREAK();
  53325. HYBRID_CASE(ZEND_UNSET_CV_SPEC_CV_UNUSED):
  53326. VM_TRACE(ZEND_UNSET_CV_SPEC_CV_UNUSED)
  53327. ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53328. HYBRID_BREAK();
  53329. HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CV_UNUSED):
  53330. VM_TRACE(ZEND_UNSET_VAR_SPEC_CV_UNUSED)
  53331. ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53332. HYBRID_BREAK();
  53333. HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED):
  53334. VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED)
  53335. ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53336. HYBRID_BREAK();
  53337. HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET):
  53338. VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET)
  53339. ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53340. HYBRID_BREAK();
  53341. HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY):
  53342. VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY)
  53343. ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53344. HYBRID_BREAK();
  53345. HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED):
  53346. VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED)
  53347. ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53348. HYBRID_BREAK();
  53349. HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED):
  53350. VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED)
  53351. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53352. HYBRID_BREAK();
  53353. HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_UNUSED):
  53354. VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_UNUSED)
  53355. ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53356. HYBRID_BREAK();
  53357. HYBRID_CASE(ZEND_YIELD_SPEC_CV_UNUSED):
  53358. VM_TRACE(ZEND_YIELD_SPEC_CV_UNUSED)
  53359. ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53360. HYBRID_BREAK();
  53361. HYBRID_CASE(ZEND_CHECK_VAR_SPEC_CV_UNUSED):
  53362. VM_TRACE(ZEND_CHECK_VAR_SPEC_CV_UNUSED)
  53363. ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53364. HYBRID_BREAK();
  53365. HYBRID_CASE(ZEND_MAKE_REF_SPEC_CV_UNUSED):
  53366. VM_TRACE(ZEND_MAKE_REF_SPEC_CV_UNUSED)
  53367. ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53368. HYBRID_BREAK();
  53369. HYBRID_CASE(ZEND_COUNT_SPEC_CV_UNUSED):
  53370. VM_TRACE(ZEND_COUNT_SPEC_CV_UNUSED)
  53371. ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53372. HYBRID_BREAK();
  53373. HYBRID_CASE(ZEND_GET_CLASS_SPEC_CV_UNUSED):
  53374. VM_TRACE(ZEND_GET_CLASS_SPEC_CV_UNUSED)
  53375. ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53376. HYBRID_BREAK();
  53377. HYBRID_CASE(ZEND_GET_TYPE_SPEC_CV_UNUSED):
  53378. VM_TRACE(ZEND_GET_TYPE_SPEC_CV_UNUSED)
  53379. ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53380. HYBRID_BREAK();
  53381. HYBRID_CASE(ZEND_ADD_SPEC_CV_CV):
  53382. VM_TRACE(ZEND_ADD_SPEC_CV_CV)
  53383. ZEND_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53384. HYBRID_BREAK();
  53385. HYBRID_CASE(ZEND_SUB_SPEC_CV_CV):
  53386. VM_TRACE(ZEND_SUB_SPEC_CV_CV)
  53387. ZEND_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53388. HYBRID_BREAK();
  53389. HYBRID_CASE(ZEND_MUL_SPEC_CV_CV):
  53390. VM_TRACE(ZEND_MUL_SPEC_CV_CV)
  53391. ZEND_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53392. HYBRID_BREAK();
  53393. HYBRID_CASE(ZEND_DIV_SPEC_CV_CV):
  53394. VM_TRACE(ZEND_DIV_SPEC_CV_CV)
  53395. ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53396. HYBRID_BREAK();
  53397. HYBRID_CASE(ZEND_MOD_SPEC_CV_CV):
  53398. VM_TRACE(ZEND_MOD_SPEC_CV_CV)
  53399. ZEND_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53400. HYBRID_BREAK();
  53401. HYBRID_CASE(ZEND_SL_SPEC_CV_CV):
  53402. VM_TRACE(ZEND_SL_SPEC_CV_CV)
  53403. ZEND_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53404. HYBRID_BREAK();
  53405. HYBRID_CASE(ZEND_SR_SPEC_CV_CV):
  53406. VM_TRACE(ZEND_SR_SPEC_CV_CV)
  53407. ZEND_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53408. HYBRID_BREAK();
  53409. HYBRID_CASE(ZEND_POW_SPEC_CV_CV):
  53410. VM_TRACE(ZEND_POW_SPEC_CV_CV)
  53411. ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53412. HYBRID_BREAK();
  53413. HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CV):
  53414. VM_TRACE(ZEND_CONCAT_SPEC_CV_CV)
  53415. ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53416. HYBRID_BREAK();
  53417. HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CV):
  53418. VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CV)
  53419. ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53420. HYBRID_BREAK();
  53421. HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV):
  53422. VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV)
  53423. ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53424. HYBRID_BREAK();
  53425. HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV):
  53426. VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV)
  53427. ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53428. HYBRID_BREAK();
  53429. HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV):
  53430. VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV)
  53431. ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53432. HYBRID_BREAK();
  53433. HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CV_CV):
  53434. VM_TRACE(ZEND_IS_SMALLER_SPEC_CV_CV)
  53435. ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53436. HYBRID_BREAK();
  53437. HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV):
  53438. VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV)
  53439. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53440. HYBRID_BREAK();
  53441. HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CV):
  53442. VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CV)
  53443. ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53444. HYBRID_BREAK();
  53445. HYBRID_CASE(ZEND_BW_OR_SPEC_CV_CV):
  53446. VM_TRACE(ZEND_BW_OR_SPEC_CV_CV)
  53447. ZEND_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53448. HYBRID_BREAK();
  53449. HYBRID_CASE(ZEND_BW_AND_SPEC_CV_CV):
  53450. VM_TRACE(ZEND_BW_AND_SPEC_CV_CV)
  53451. ZEND_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53452. HYBRID_BREAK();
  53453. HYBRID_CASE(ZEND_BW_XOR_SPEC_CV_CV):
  53454. VM_TRACE(ZEND_BW_XOR_SPEC_CV_CV)
  53455. ZEND_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53456. HYBRID_BREAK();
  53457. HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CV):
  53458. VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CV)
  53459. ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53460. HYBRID_BREAK();
  53461. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CV):
  53462. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_CV)
  53463. ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53464. HYBRID_BREAK();
  53465. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM):
  53466. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM)
  53467. ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53468. HYBRID_BREAK();
  53469. HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ):
  53470. VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ)
  53471. ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53472. HYBRID_BREAK();
  53473. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CV):
  53474. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_CV)
  53475. ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53476. HYBRID_BREAK();
  53477. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM):
  53478. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM)
  53479. ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53480. HYBRID_BREAK();
  53481. HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ):
  53482. VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ)
  53483. ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53484. HYBRID_BREAK();
  53485. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CV):
  53486. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_CV)
  53487. ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53488. HYBRID_BREAK();
  53489. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM):
  53490. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM)
  53491. ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53492. HYBRID_BREAK();
  53493. HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ):
  53494. VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ)
  53495. ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53496. HYBRID_BREAK();
  53497. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CV):
  53498. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_CV)
  53499. ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53500. HYBRID_BREAK();
  53501. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM):
  53502. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM)
  53503. ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53504. HYBRID_BREAK();
  53505. HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ):
  53506. VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ)
  53507. ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53508. HYBRID_BREAK();
  53509. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CV):
  53510. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_CV)
  53511. ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53512. HYBRID_BREAK();
  53513. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM):
  53514. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM)
  53515. ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53516. HYBRID_BREAK();
  53517. HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ):
  53518. VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ)
  53519. ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53520. HYBRID_BREAK();
  53521. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CV):
  53522. VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_CV)
  53523. ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53524. HYBRID_BREAK();
  53525. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CV_DIM):
  53526. VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_CV_DIM)
  53527. ZEND_ASSIGN_SL_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53528. HYBRID_BREAK();
  53529. HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ):
  53530. VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ)
  53531. ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53532. HYBRID_BREAK();
  53533. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CV):
  53534. VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_CV)
  53535. ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53536. HYBRID_BREAK();
  53537. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CV_DIM):
  53538. VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_CV_DIM)
  53539. ZEND_ASSIGN_SR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53540. HYBRID_BREAK();
  53541. HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ):
  53542. VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ)
  53543. ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53544. HYBRID_BREAK();
  53545. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CV):
  53546. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_CV)
  53547. ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53548. HYBRID_BREAK();
  53549. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM):
  53550. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM)
  53551. ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53552. HYBRID_BREAK();
  53553. HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ):
  53554. VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ)
  53555. ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53556. HYBRID_BREAK();
  53557. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CV):
  53558. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_CV)
  53559. ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53560. HYBRID_BREAK();
  53561. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM):
  53562. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM)
  53563. ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53564. HYBRID_BREAK();
  53565. HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ):
  53566. VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ)
  53567. ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53568. HYBRID_BREAK();
  53569. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CV):
  53570. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_CV)
  53571. ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53572. HYBRID_BREAK();
  53573. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM):
  53574. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM)
  53575. ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53576. HYBRID_BREAK();
  53577. HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ):
  53578. VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ)
  53579. ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53580. HYBRID_BREAK();
  53581. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CV):
  53582. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CV)
  53583. ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53584. HYBRID_BREAK();
  53585. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM):
  53586. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM)
  53587. ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53588. HYBRID_BREAK();
  53589. HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ):
  53590. VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ)
  53591. ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53592. HYBRID_BREAK();
  53593. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CV):
  53594. VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_CV)
  53595. ZEND_ASSIGN_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53596. HYBRID_BREAK();
  53597. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CV_DIM):
  53598. VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_CV_DIM)
  53599. ZEND_ASSIGN_POW_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53600. HYBRID_BREAK();
  53601. HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ):
  53602. VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ)
  53603. ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53604. HYBRID_BREAK();
  53605. HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CV):
  53606. VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CV)
  53607. ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53608. HYBRID_BREAK();
  53609. HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_CV_CV):
  53610. VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_CV_CV)
  53611. ZEND_PRE_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53612. HYBRID_BREAK();
  53613. HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CV):
  53614. VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CV)
  53615. ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53616. HYBRID_BREAK();
  53617. HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_CV_CV):
  53618. VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_CV_CV)
  53619. ZEND_POST_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53620. HYBRID_BREAK();
  53621. HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CV):
  53622. VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CV)
  53623. ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53624. HYBRID_BREAK();
  53625. HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CV):
  53626. VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CV)
  53627. ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53628. HYBRID_BREAK();
  53629. HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CV):
  53630. VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CV)
  53631. ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53632. HYBRID_BREAK();
  53633. HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CV):
  53634. VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CV)
  53635. ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53636. HYBRID_BREAK();
  53637. HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV):
  53638. VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV)
  53639. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53640. HYBRID_BREAK();
  53641. HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV):
  53642. VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV)
  53643. ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53644. HYBRID_BREAK();
  53645. HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CV):
  53646. VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CV)
  53647. ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53648. HYBRID_BREAK();
  53649. HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CV):
  53650. VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CV)
  53651. ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53652. HYBRID_BREAK();
  53653. HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV):
  53654. VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV)
  53655. ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53656. HYBRID_BREAK();
  53657. HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV):
  53658. VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV)
  53659. ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53660. HYBRID_BREAK();
  53661. HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV):
  53662. VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV)
  53663. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53664. HYBRID_BREAK();
  53665. HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV):
  53666. VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV)
  53667. ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53668. HYBRID_BREAK();
  53669. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST):
  53670. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST)
  53671. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53672. HYBRID_BREAK();
  53673. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP):
  53674. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP)
  53675. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53676. HYBRID_BREAK();
  53677. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR):
  53678. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR)
  53679. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53680. HYBRID_BREAK();
  53681. HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV):
  53682. VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV)
  53683. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53684. HYBRID_BREAK();
  53685. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST):
  53686. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST)
  53687. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53688. HYBRID_BREAK();
  53689. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP):
  53690. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP)
  53691. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53692. HYBRID_BREAK();
  53693. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR):
  53694. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR)
  53695. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53696. HYBRID_BREAK();
  53697. HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV):
  53698. VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV)
  53699. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53700. HYBRID_BREAK();
  53701. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED):
  53702. VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED)
  53703. ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53704. HYBRID_BREAK();
  53705. HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED):
  53706. VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED)
  53707. ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53708. HYBRID_BREAK();
  53709. HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_CV):
  53710. VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_CV)
  53711. ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53712. HYBRID_BREAK();
  53713. HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CV):
  53714. VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CV)
  53715. ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53716. HYBRID_BREAK();
  53717. HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV):
  53718. VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV)
  53719. ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53720. HYBRID_BREAK();
  53721. HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV):
  53722. VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV)
  53723. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53724. HYBRID_BREAK();
  53725. HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CV):
  53726. VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CV)
  53727. ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53728. HYBRID_BREAK();
  53729. HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CV):
  53730. VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CV)
  53731. ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53732. HYBRID_BREAK();
  53733. HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CV):
  53734. VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CV)
  53735. ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53736. HYBRID_BREAK();
  53737. HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV):
  53738. VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV)
  53739. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53740. HYBRID_BREAK();
  53741. HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV):
  53742. VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV)
  53743. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53744. HYBRID_BREAK();
  53745. HYBRID_CASE(ZEND_YIELD_SPEC_CV_CV):
  53746. VM_TRACE(ZEND_YIELD_SPEC_CV_CV)
  53747. ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53748. HYBRID_BREAK();
  53749. HYBRID_CASE(HYBRID_HALT):
  53750. execute_data = orig_execute_data;
  53751. opline = orig_opline;
  53752. return;
  53753. HYBRID_DEFAULT:
  53754. VM_TRACE(ZEND_NULL)
  53755. ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  53756. HYBRID_BREAK(); /* Never reached */
  53757. #else
  53758. #ifdef ZEND_VM_FP_GLOBAL_REG
  53759. execute_data = orig_execute_data;
  53760. # ifdef ZEND_VM_IP_GLOBAL_REG
  53761. opline = orig_opline;
  53762. # endif
  53763. return;
  53764. #else
  53765. if (EXPECTED(ret > 0)) {
  53766. execute_data = EG(current_execute_data);
  53767. ZEND_VM_LOOP_INTERRUPT_CHECK();
  53768. } else {
  53769. # ifdef ZEND_VM_IP_GLOBAL_REG
  53770. opline = orig_opline;
  53771. # endif
  53772. return;
  53773. }
  53774. #endif
  53775. #endif
  53776. }
  53777. }
  53778. zend_error_noreturn(E_CORE_ERROR, "Arrived at end of main loop which shouldn't happen");
  53779. }
  53780. ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value)
  53781. {
  53782. zend_execute_data *execute_data;
  53783. if (EG(exception) != NULL) {
  53784. return;
  53785. }
  53786. execute_data = zend_vm_stack_push_call_frame(ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
  53787. (zend_function*)op_array, 0, zend_get_called_scope(EG(current_execute_data)), zend_get_this_object(EG(current_execute_data)));
  53788. if (EG(current_execute_data)) {
  53789. execute_data->symbol_table = zend_rebuild_symbol_table();
  53790. } else {
  53791. execute_data->symbol_table = &EG(symbol_table);
  53792. }
  53793. EX(prev_execute_data) = EG(current_execute_data);
  53794. i_init_code_execute_data(execute_data, op_array, return_value);
  53795. zend_execute_ex(execute_data);
  53796. zend_vm_stack_free_call_frame(execute_data);
  53797. }
  53798. void zend_vm_init(void)
  53799. {
  53800. static const void * const labels[] = {
  53801. ZEND_NOP_SPEC_HANDLER,
  53802. ZEND_ADD_SPEC_CONST_CONST_HANDLER,
  53803. ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER,
  53804. ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER,
  53805. ZEND_NULL_HANDLER,
  53806. ZEND_ADD_SPEC_CONST_CV_HANDLER,
  53807. ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER,
  53808. ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER,
  53809. ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER,
  53810. ZEND_NULL_HANDLER,
  53811. ZEND_ADD_SPEC_TMPVAR_CV_HANDLER,
  53812. ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER,
  53813. ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER,
  53814. ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER,
  53815. ZEND_NULL_HANDLER,
  53816. ZEND_ADD_SPEC_TMPVAR_CV_HANDLER,
  53817. ZEND_NULL_HANDLER,
  53818. ZEND_NULL_HANDLER,
  53819. ZEND_NULL_HANDLER,
  53820. ZEND_NULL_HANDLER,
  53821. ZEND_NULL_HANDLER,
  53822. ZEND_ADD_SPEC_CV_CONST_HANDLER,
  53823. ZEND_ADD_SPEC_CV_TMPVAR_HANDLER,
  53824. ZEND_ADD_SPEC_CV_TMPVAR_HANDLER,
  53825. ZEND_NULL_HANDLER,
  53826. ZEND_ADD_SPEC_CV_CV_HANDLER,
  53827. ZEND_SUB_SPEC_CONST_CONST_HANDLER,
  53828. ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER,
  53829. ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER,
  53830. ZEND_NULL_HANDLER,
  53831. ZEND_SUB_SPEC_CONST_CV_HANDLER,
  53832. ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER,
  53833. ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER,
  53834. ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER,
  53835. ZEND_NULL_HANDLER,
  53836. ZEND_SUB_SPEC_TMPVAR_CV_HANDLER,
  53837. ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER,
  53838. ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER,
  53839. ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER,
  53840. ZEND_NULL_HANDLER,
  53841. ZEND_SUB_SPEC_TMPVAR_CV_HANDLER,
  53842. ZEND_NULL_HANDLER,
  53843. ZEND_NULL_HANDLER,
  53844. ZEND_NULL_HANDLER,
  53845. ZEND_NULL_HANDLER,
  53846. ZEND_NULL_HANDLER,
  53847. ZEND_SUB_SPEC_CV_CONST_HANDLER,
  53848. ZEND_SUB_SPEC_CV_TMPVAR_HANDLER,
  53849. ZEND_SUB_SPEC_CV_TMPVAR_HANDLER,
  53850. ZEND_NULL_HANDLER,
  53851. ZEND_SUB_SPEC_CV_CV_HANDLER,
  53852. ZEND_MUL_SPEC_CONST_CONST_HANDLER,
  53853. ZEND_NULL_HANDLER,
  53854. ZEND_NULL_HANDLER,
  53855. ZEND_NULL_HANDLER,
  53856. ZEND_NULL_HANDLER,
  53857. ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER,
  53858. ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER,
  53859. ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER,
  53860. ZEND_NULL_HANDLER,
  53861. ZEND_NULL_HANDLER,
  53862. ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER,
  53863. ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER,
  53864. ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER,
  53865. ZEND_NULL_HANDLER,
  53866. ZEND_NULL_HANDLER,
  53867. ZEND_NULL_HANDLER,
  53868. ZEND_NULL_HANDLER,
  53869. ZEND_NULL_HANDLER,
  53870. ZEND_NULL_HANDLER,
  53871. ZEND_NULL_HANDLER,
  53872. ZEND_MUL_SPEC_CV_CONST_HANDLER,
  53873. ZEND_MUL_SPEC_CV_TMPVAR_HANDLER,
  53874. ZEND_MUL_SPEC_CV_TMPVAR_HANDLER,
  53875. ZEND_NULL_HANDLER,
  53876. ZEND_MUL_SPEC_CV_CV_HANDLER,
  53877. ZEND_DIV_SPEC_CONST_CONST_HANDLER,
  53878. ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
  53879. ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
  53880. ZEND_NULL_HANDLER,
  53881. ZEND_DIV_SPEC_CONST_CV_HANDLER,
  53882. ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
  53883. ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
  53884. ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
  53885. ZEND_NULL_HANDLER,
  53886. ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
  53887. ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
  53888. ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
  53889. ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
  53890. ZEND_NULL_HANDLER,
  53891. ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
  53892. ZEND_NULL_HANDLER,
  53893. ZEND_NULL_HANDLER,
  53894. ZEND_NULL_HANDLER,
  53895. ZEND_NULL_HANDLER,
  53896. ZEND_NULL_HANDLER,
  53897. ZEND_DIV_SPEC_CV_CONST_HANDLER,
  53898. ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
  53899. ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
  53900. ZEND_NULL_HANDLER,
  53901. ZEND_DIV_SPEC_CV_CV_HANDLER,
  53902. ZEND_MOD_SPEC_CONST_CONST_HANDLER,
  53903. ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER,
  53904. ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER,
  53905. ZEND_NULL_HANDLER,
  53906. ZEND_MOD_SPEC_CONST_CV_HANDLER,
  53907. ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER,
  53908. ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER,
  53909. ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER,
  53910. ZEND_NULL_HANDLER,
  53911. ZEND_MOD_SPEC_TMPVAR_CV_HANDLER,
  53912. ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER,
  53913. ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER,
  53914. ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER,
  53915. ZEND_NULL_HANDLER,
  53916. ZEND_MOD_SPEC_TMPVAR_CV_HANDLER,
  53917. ZEND_NULL_HANDLER,
  53918. ZEND_NULL_HANDLER,
  53919. ZEND_NULL_HANDLER,
  53920. ZEND_NULL_HANDLER,
  53921. ZEND_NULL_HANDLER,
  53922. ZEND_MOD_SPEC_CV_CONST_HANDLER,
  53923. ZEND_MOD_SPEC_CV_TMPVAR_HANDLER,
  53924. ZEND_MOD_SPEC_CV_TMPVAR_HANDLER,
  53925. ZEND_NULL_HANDLER,
  53926. ZEND_MOD_SPEC_CV_CV_HANDLER,
  53927. ZEND_SL_SPEC_CONST_CONST_HANDLER,
  53928. ZEND_SL_SPEC_CONST_TMPVAR_HANDLER,
  53929. ZEND_SL_SPEC_CONST_TMPVAR_HANDLER,
  53930. ZEND_NULL_HANDLER,
  53931. ZEND_SL_SPEC_CONST_CV_HANDLER,
  53932. ZEND_SL_SPEC_TMPVAR_CONST_HANDLER,
  53933. ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER,
  53934. ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER,
  53935. ZEND_NULL_HANDLER,
  53936. ZEND_SL_SPEC_TMPVAR_CV_HANDLER,
  53937. ZEND_SL_SPEC_TMPVAR_CONST_HANDLER,
  53938. ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER,
  53939. ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER,
  53940. ZEND_NULL_HANDLER,
  53941. ZEND_SL_SPEC_TMPVAR_CV_HANDLER,
  53942. ZEND_NULL_HANDLER,
  53943. ZEND_NULL_HANDLER,
  53944. ZEND_NULL_HANDLER,
  53945. ZEND_NULL_HANDLER,
  53946. ZEND_NULL_HANDLER,
  53947. ZEND_SL_SPEC_CV_CONST_HANDLER,
  53948. ZEND_SL_SPEC_CV_TMPVAR_HANDLER,
  53949. ZEND_SL_SPEC_CV_TMPVAR_HANDLER,
  53950. ZEND_NULL_HANDLER,
  53951. ZEND_SL_SPEC_CV_CV_HANDLER,
  53952. ZEND_SR_SPEC_CONST_CONST_HANDLER,
  53953. ZEND_SR_SPEC_CONST_TMPVAR_HANDLER,
  53954. ZEND_SR_SPEC_CONST_TMPVAR_HANDLER,
  53955. ZEND_NULL_HANDLER,
  53956. ZEND_SR_SPEC_CONST_CV_HANDLER,
  53957. ZEND_SR_SPEC_TMPVAR_CONST_HANDLER,
  53958. ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER,
  53959. ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER,
  53960. ZEND_NULL_HANDLER,
  53961. ZEND_SR_SPEC_TMPVAR_CV_HANDLER,
  53962. ZEND_SR_SPEC_TMPVAR_CONST_HANDLER,
  53963. ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER,
  53964. ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER,
  53965. ZEND_NULL_HANDLER,
  53966. ZEND_SR_SPEC_TMPVAR_CV_HANDLER,
  53967. ZEND_NULL_HANDLER,
  53968. ZEND_NULL_HANDLER,
  53969. ZEND_NULL_HANDLER,
  53970. ZEND_NULL_HANDLER,
  53971. ZEND_NULL_HANDLER,
  53972. ZEND_SR_SPEC_CV_CONST_HANDLER,
  53973. ZEND_SR_SPEC_CV_TMPVAR_HANDLER,
  53974. ZEND_SR_SPEC_CV_TMPVAR_HANDLER,
  53975. ZEND_NULL_HANDLER,
  53976. ZEND_SR_SPEC_CV_CV_HANDLER,
  53977. ZEND_NULL_HANDLER,
  53978. ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
  53979. ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
  53980. ZEND_NULL_HANDLER,
  53981. ZEND_CONCAT_SPEC_CONST_CV_HANDLER,
  53982. ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
  53983. ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  53984. ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  53985. ZEND_NULL_HANDLER,
  53986. ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
  53987. ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
  53988. ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  53989. ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  53990. ZEND_NULL_HANDLER,
  53991. ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
  53992. ZEND_NULL_HANDLER,
  53993. ZEND_NULL_HANDLER,
  53994. ZEND_NULL_HANDLER,
  53995. ZEND_NULL_HANDLER,
  53996. ZEND_NULL_HANDLER,
  53997. ZEND_CONCAT_SPEC_CV_CONST_HANDLER,
  53998. ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
  53999. ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
  54000. ZEND_NULL_HANDLER,
  54001. ZEND_CONCAT_SPEC_CV_CV_HANDLER,
  54002. ZEND_BW_OR_SPEC_CONST_CONST_HANDLER,
  54003. ZEND_NULL_HANDLER,
  54004. ZEND_NULL_HANDLER,
  54005. ZEND_NULL_HANDLER,
  54006. ZEND_NULL_HANDLER,
  54007. ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLER,
  54008. ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54009. ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54010. ZEND_NULL_HANDLER,
  54011. ZEND_NULL_HANDLER,
  54012. ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLER,
  54013. ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54014. ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54015. ZEND_NULL_HANDLER,
  54016. ZEND_NULL_HANDLER,
  54017. ZEND_NULL_HANDLER,
  54018. ZEND_NULL_HANDLER,
  54019. ZEND_NULL_HANDLER,
  54020. ZEND_NULL_HANDLER,
  54021. ZEND_NULL_HANDLER,
  54022. ZEND_BW_OR_SPEC_CV_CONST_HANDLER,
  54023. ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER,
  54024. ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER,
  54025. ZEND_NULL_HANDLER,
  54026. ZEND_BW_OR_SPEC_CV_CV_HANDLER,
  54027. ZEND_BW_AND_SPEC_CONST_CONST_HANDLER,
  54028. ZEND_NULL_HANDLER,
  54029. ZEND_NULL_HANDLER,
  54030. ZEND_NULL_HANDLER,
  54031. ZEND_NULL_HANDLER,
  54032. ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDLER,
  54033. ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER,
  54034. ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER,
  54035. ZEND_NULL_HANDLER,
  54036. ZEND_NULL_HANDLER,
  54037. ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDLER,
  54038. ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER,
  54039. ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER,
  54040. ZEND_NULL_HANDLER,
  54041. ZEND_NULL_HANDLER,
  54042. ZEND_NULL_HANDLER,
  54043. ZEND_NULL_HANDLER,
  54044. ZEND_NULL_HANDLER,
  54045. ZEND_NULL_HANDLER,
  54046. ZEND_NULL_HANDLER,
  54047. ZEND_BW_AND_SPEC_CV_CONST_HANDLER,
  54048. ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER,
  54049. ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER,
  54050. ZEND_NULL_HANDLER,
  54051. ZEND_BW_AND_SPEC_CV_CV_HANDLER,
  54052. ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER,
  54053. ZEND_NULL_HANDLER,
  54054. ZEND_NULL_HANDLER,
  54055. ZEND_NULL_HANDLER,
  54056. ZEND_NULL_HANDLER,
  54057. ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDLER,
  54058. ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54059. ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54060. ZEND_NULL_HANDLER,
  54061. ZEND_NULL_HANDLER,
  54062. ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDLER,
  54063. ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54064. ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54065. ZEND_NULL_HANDLER,
  54066. ZEND_NULL_HANDLER,
  54067. ZEND_NULL_HANDLER,
  54068. ZEND_NULL_HANDLER,
  54069. ZEND_NULL_HANDLER,
  54070. ZEND_NULL_HANDLER,
  54071. ZEND_NULL_HANDLER,
  54072. ZEND_BW_XOR_SPEC_CV_CONST_HANDLER,
  54073. ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER,
  54074. ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER,
  54075. ZEND_NULL_HANDLER,
  54076. ZEND_BW_XOR_SPEC_CV_CV_HANDLER,
  54077. ZEND_BW_NOT_SPEC_CONST_HANDLER,
  54078. ZEND_BW_NOT_SPEC_TMPVAR_HANDLER,
  54079. ZEND_BW_NOT_SPEC_TMPVAR_HANDLER,
  54080. ZEND_NULL_HANDLER,
  54081. ZEND_BW_NOT_SPEC_CV_HANDLER,
  54082. ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
  54083. ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
  54084. ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
  54085. ZEND_NULL_HANDLER,
  54086. ZEND_BOOL_NOT_SPEC_CV_HANDLER,
  54087. ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER,
  54088. ZEND_NULL_HANDLER,
  54089. ZEND_NULL_HANDLER,
  54090. ZEND_NULL_HANDLER,
  54091. ZEND_NULL_HANDLER,
  54092. ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
  54093. ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54094. ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54095. ZEND_NULL_HANDLER,
  54096. ZEND_NULL_HANDLER,
  54097. ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
  54098. ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54099. ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
  54100. ZEND_NULL_HANDLER,
  54101. ZEND_NULL_HANDLER,
  54102. ZEND_NULL_HANDLER,
  54103. ZEND_NULL_HANDLER,
  54104. ZEND_NULL_HANDLER,
  54105. ZEND_NULL_HANDLER,
  54106. ZEND_NULL_HANDLER,
  54107. ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER,
  54108. ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
  54109. ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
  54110. ZEND_NULL_HANDLER,
  54111. ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER,
  54112. ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER,
  54113. ZEND_NULL_HANDLER,
  54114. ZEND_NULL_HANDLER,
  54115. ZEND_NULL_HANDLER,
  54116. ZEND_NULL_HANDLER,
  54117. ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER,
  54118. ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER,
  54119. ZEND_NULL_HANDLER,
  54120. ZEND_NULL_HANDLER,
  54121. ZEND_NULL_HANDLER,
  54122. ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER,
  54123. ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER,
  54124. ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER,
  54125. ZEND_NULL_HANDLER,
  54126. ZEND_NULL_HANDLER,
  54127. ZEND_NULL_HANDLER,
  54128. ZEND_NULL_HANDLER,
  54129. ZEND_NULL_HANDLER,
  54130. ZEND_NULL_HANDLER,
  54131. ZEND_NULL_HANDLER,
  54132. ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER,
  54133. ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER,
  54134. ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER,
  54135. ZEND_NULL_HANDLER,
  54136. ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER,
  54137. ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER,
  54138. ZEND_NULL_HANDLER,
  54139. ZEND_NULL_HANDLER,
  54140. ZEND_NULL_HANDLER,
  54141. ZEND_NULL_HANDLER,
  54142. ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER,
  54143. ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER,
  54144. ZEND_NULL_HANDLER,
  54145. ZEND_NULL_HANDLER,
  54146. ZEND_NULL_HANDLER,
  54147. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER,
  54148. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER,
  54149. ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER,
  54150. ZEND_NULL_HANDLER,
  54151. ZEND_NULL_HANDLER,
  54152. ZEND_NULL_HANDLER,
  54153. ZEND_NULL_HANDLER,
  54154. ZEND_NULL_HANDLER,
  54155. ZEND_NULL_HANDLER,
  54156. ZEND_NULL_HANDLER,
  54157. ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER,
  54158. ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER,
  54159. ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER,
  54160. ZEND_NULL_HANDLER,
  54161. ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER,
  54162. ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
  54163. ZEND_NULL_HANDLER,
  54164. ZEND_NULL_HANDLER,
  54165. ZEND_NULL_HANDLER,
  54166. ZEND_NULL_HANDLER,
  54167. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
  54168. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54169. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54170. ZEND_NULL_HANDLER,
  54171. ZEND_NULL_HANDLER,
  54172. ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
  54173. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54174. ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54175. ZEND_NULL_HANDLER,
  54176. ZEND_NULL_HANDLER,
  54177. ZEND_NULL_HANDLER,
  54178. ZEND_NULL_HANDLER,
  54179. ZEND_NULL_HANDLER,
  54180. ZEND_NULL_HANDLER,
  54181. ZEND_NULL_HANDLER,
  54182. ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER,
  54183. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
  54184. ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
  54185. ZEND_NULL_HANDLER,
  54186. ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER,
  54187. ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
  54188. ZEND_NULL_HANDLER,
  54189. ZEND_NULL_HANDLER,
  54190. ZEND_NULL_HANDLER,
  54191. ZEND_NULL_HANDLER,
  54192. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
  54193. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54194. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54195. ZEND_NULL_HANDLER,
  54196. ZEND_NULL_HANDLER,
  54197. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
  54198. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54199. ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54200. ZEND_NULL_HANDLER,
  54201. ZEND_NULL_HANDLER,
  54202. ZEND_NULL_HANDLER,
  54203. ZEND_NULL_HANDLER,
  54204. ZEND_NULL_HANDLER,
  54205. ZEND_NULL_HANDLER,
  54206. ZEND_NULL_HANDLER,
  54207. ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER,
  54208. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
  54209. ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
  54210. ZEND_NULL_HANDLER,
  54211. ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER,
  54212. ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
  54213. ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_HANDLER,
  54214. ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_HANDLER,
  54215. ZEND_NULL_HANDLER,
  54216. ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER,
  54217. ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_HANDLER,
  54218. ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER,
  54219. ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER,
  54220. ZEND_NULL_HANDLER,
  54221. ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HANDLER,
  54222. ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_HANDLER,
  54223. ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER,
  54224. ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER,
  54225. ZEND_NULL_HANDLER,
  54226. ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HANDLER,
  54227. ZEND_NULL_HANDLER,
  54228. ZEND_NULL_HANDLER,
  54229. ZEND_NULL_HANDLER,
  54230. ZEND_NULL_HANDLER,
  54231. ZEND_NULL_HANDLER,
  54232. ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER,
  54233. ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HANDLER,
  54234. ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HANDLER,
  54235. ZEND_NULL_HANDLER,
  54236. ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER,
  54237. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
  54238. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_HANDLER,
  54239. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_HANDLER,
  54240. ZEND_NULL_HANDLER,
  54241. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER,
  54242. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
  54243. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54244. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54245. ZEND_NULL_HANDLER,
  54246. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_HANDLER,
  54247. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
  54248. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54249. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
  54250. ZEND_NULL_HANDLER,
  54251. ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_HANDLER,
  54252. ZEND_NULL_HANDLER,
  54253. ZEND_NULL_HANDLER,
  54254. ZEND_NULL_HANDLER,
  54255. ZEND_NULL_HANDLER,
  54256. ZEND_NULL_HANDLER,
  54257. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER,
  54258. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_HANDLER,
  54259. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_HANDLER,
  54260. ZEND_NULL_HANDLER,
  54261. ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER,
  54262. ZEND_CAST_SPEC_CONST_HANDLER,
  54263. ZEND_CAST_SPEC_TMP_HANDLER,
  54264. ZEND_CAST_SPEC_VAR_HANDLER,
  54265. ZEND_NULL_HANDLER,
  54266. ZEND_CAST_SPEC_CV_HANDLER,
  54267. ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
  54268. ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
  54269. ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
  54270. ZEND_NULL_HANDLER,
  54271. ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
  54272. ZEND_NULL_HANDLER,
  54273. ZEND_NULL_HANDLER,
  54274. ZEND_NULL_HANDLER,
  54275. ZEND_NULL_HANDLER,
  54276. ZEND_NULL_HANDLER,
  54277. ZEND_NULL_HANDLER,
  54278. ZEND_NULL_HANDLER,
  54279. ZEND_NULL_HANDLER,
  54280. ZEND_NULL_HANDLER,
  54281. ZEND_NULL_HANDLER,
  54282. ZEND_NULL_HANDLER,
  54283. ZEND_NULL_HANDLER,
  54284. ZEND_NULL_HANDLER,
  54285. ZEND_NULL_HANDLER,
  54286. ZEND_NULL_HANDLER,
  54287. ZEND_NULL_HANDLER,
  54288. ZEND_NULL_HANDLER,
  54289. ZEND_NULL_HANDLER,
  54290. ZEND_NULL_HANDLER,
  54291. ZEND_NULL_HANDLER,
  54292. ZEND_NULL_HANDLER,
  54293. ZEND_NULL_HANDLER,
  54294. ZEND_NULL_HANDLER,
  54295. ZEND_NULL_HANDLER,
  54296. ZEND_NULL_HANDLER,
  54297. ZEND_NULL_HANDLER,
  54298. ZEND_NULL_HANDLER,
  54299. ZEND_NULL_HANDLER,
  54300. ZEND_NULL_HANDLER,
  54301. ZEND_NULL_HANDLER,
  54302. ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER,
  54303. ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM_HANDLER,
  54304. ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ_HANDLER,
  54305. ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER,
  54306. ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54307. ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54308. ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER,
  54309. ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54310. ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54311. ZEND_NULL_HANDLER,
  54312. ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM_HANDLER,
  54313. ZEND_NULL_HANDLER,
  54314. ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER,
  54315. ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM_HANDLER,
  54316. ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ_HANDLER,
  54317. ZEND_NULL_HANDLER,
  54318. ZEND_NULL_HANDLER,
  54319. ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ_HANDLER,
  54320. ZEND_NULL_HANDLER,
  54321. ZEND_NULL_HANDLER,
  54322. ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54323. ZEND_NULL_HANDLER,
  54324. ZEND_NULL_HANDLER,
  54325. ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54326. ZEND_NULL_HANDLER,
  54327. ZEND_NULL_HANDLER,
  54328. ZEND_NULL_HANDLER,
  54329. ZEND_NULL_HANDLER,
  54330. ZEND_NULL_HANDLER,
  54331. ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ_HANDLER,
  54332. ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER,
  54333. ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM_HANDLER,
  54334. ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ_HANDLER,
  54335. ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER,
  54336. ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_HANDLER,
  54337. ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54338. ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER,
  54339. ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_HANDLER,
  54340. ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54341. ZEND_NULL_HANDLER,
  54342. ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM_HANDLER,
  54343. ZEND_NULL_HANDLER,
  54344. ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER,
  54345. ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM_HANDLER,
  54346. ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ_HANDLER,
  54347. ZEND_NULL_HANDLER,
  54348. ZEND_NULL_HANDLER,
  54349. ZEND_NULL_HANDLER,
  54350. ZEND_NULL_HANDLER,
  54351. ZEND_NULL_HANDLER,
  54352. ZEND_NULL_HANDLER,
  54353. ZEND_NULL_HANDLER,
  54354. ZEND_NULL_HANDLER,
  54355. ZEND_NULL_HANDLER,
  54356. ZEND_NULL_HANDLER,
  54357. ZEND_NULL_HANDLER,
  54358. ZEND_NULL_HANDLER,
  54359. ZEND_NULL_HANDLER,
  54360. ZEND_NULL_HANDLER,
  54361. ZEND_NULL_HANDLER,
  54362. ZEND_NULL_HANDLER,
  54363. ZEND_NULL_HANDLER,
  54364. ZEND_NULL_HANDLER,
  54365. ZEND_NULL_HANDLER,
  54366. ZEND_NULL_HANDLER,
  54367. ZEND_NULL_HANDLER,
  54368. ZEND_NULL_HANDLER,
  54369. ZEND_NULL_HANDLER,
  54370. ZEND_NULL_HANDLER,
  54371. ZEND_NULL_HANDLER,
  54372. ZEND_NULL_HANDLER,
  54373. ZEND_NULL_HANDLER,
  54374. ZEND_NULL_HANDLER,
  54375. ZEND_NULL_HANDLER,
  54376. ZEND_NULL_HANDLER,
  54377. ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER,
  54378. ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM_HANDLER,
  54379. ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ_HANDLER,
  54380. ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_HANDLER,
  54381. ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54382. ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54383. ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_HANDLER,
  54384. ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54385. ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54386. ZEND_NULL_HANDLER,
  54387. ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM_HANDLER,
  54388. ZEND_NULL_HANDLER,
  54389. ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER,
  54390. ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM_HANDLER,
  54391. ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ_HANDLER,
  54392. ZEND_NULL_HANDLER,
  54393. ZEND_NULL_HANDLER,
  54394. ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ_HANDLER,
  54395. ZEND_NULL_HANDLER,
  54396. ZEND_NULL_HANDLER,
  54397. ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54398. ZEND_NULL_HANDLER,
  54399. ZEND_NULL_HANDLER,
  54400. ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54401. ZEND_NULL_HANDLER,
  54402. ZEND_NULL_HANDLER,
  54403. ZEND_NULL_HANDLER,
  54404. ZEND_NULL_HANDLER,
  54405. ZEND_NULL_HANDLER,
  54406. ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ_HANDLER,
  54407. ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER,
  54408. ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM_HANDLER,
  54409. ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ_HANDLER,
  54410. ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_HANDLER,
  54411. ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_HANDLER,
  54412. ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54413. ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_HANDLER,
  54414. ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_HANDLER,
  54415. ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54416. ZEND_NULL_HANDLER,
  54417. ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM_HANDLER,
  54418. ZEND_NULL_HANDLER,
  54419. ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER,
  54420. ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM_HANDLER,
  54421. ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ_HANDLER,
  54422. ZEND_NULL_HANDLER,
  54423. ZEND_NULL_HANDLER,
  54424. ZEND_NULL_HANDLER,
  54425. ZEND_NULL_HANDLER,
  54426. ZEND_NULL_HANDLER,
  54427. ZEND_NULL_HANDLER,
  54428. ZEND_NULL_HANDLER,
  54429. ZEND_NULL_HANDLER,
  54430. ZEND_NULL_HANDLER,
  54431. ZEND_NULL_HANDLER,
  54432. ZEND_NULL_HANDLER,
  54433. ZEND_NULL_HANDLER,
  54434. ZEND_NULL_HANDLER,
  54435. ZEND_NULL_HANDLER,
  54436. ZEND_NULL_HANDLER,
  54437. ZEND_NULL_HANDLER,
  54438. ZEND_NULL_HANDLER,
  54439. ZEND_NULL_HANDLER,
  54440. ZEND_NULL_HANDLER,
  54441. ZEND_NULL_HANDLER,
  54442. ZEND_NULL_HANDLER,
  54443. ZEND_NULL_HANDLER,
  54444. ZEND_NULL_HANDLER,
  54445. ZEND_NULL_HANDLER,
  54446. ZEND_NULL_HANDLER,
  54447. ZEND_NULL_HANDLER,
  54448. ZEND_NULL_HANDLER,
  54449. ZEND_NULL_HANDLER,
  54450. ZEND_NULL_HANDLER,
  54451. ZEND_NULL_HANDLER,
  54452. ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER,
  54453. ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM_HANDLER,
  54454. ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ_HANDLER,
  54455. ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_HANDLER,
  54456. ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54457. ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54458. ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_HANDLER,
  54459. ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54460. ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54461. ZEND_NULL_HANDLER,
  54462. ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM_HANDLER,
  54463. ZEND_NULL_HANDLER,
  54464. ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER,
  54465. ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM_HANDLER,
  54466. ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ_HANDLER,
  54467. ZEND_NULL_HANDLER,
  54468. ZEND_NULL_HANDLER,
  54469. ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ_HANDLER,
  54470. ZEND_NULL_HANDLER,
  54471. ZEND_NULL_HANDLER,
  54472. ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54473. ZEND_NULL_HANDLER,
  54474. ZEND_NULL_HANDLER,
  54475. ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54476. ZEND_NULL_HANDLER,
  54477. ZEND_NULL_HANDLER,
  54478. ZEND_NULL_HANDLER,
  54479. ZEND_NULL_HANDLER,
  54480. ZEND_NULL_HANDLER,
  54481. ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ_HANDLER,
  54482. ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER,
  54483. ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM_HANDLER,
  54484. ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ_HANDLER,
  54485. ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_HANDLER,
  54486. ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_HANDLER,
  54487. ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54488. ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_HANDLER,
  54489. ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_HANDLER,
  54490. ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54491. ZEND_NULL_HANDLER,
  54492. ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM_HANDLER,
  54493. ZEND_NULL_HANDLER,
  54494. ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER,
  54495. ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM_HANDLER,
  54496. ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ_HANDLER,
  54497. ZEND_NULL_HANDLER,
  54498. ZEND_NULL_HANDLER,
  54499. ZEND_NULL_HANDLER,
  54500. ZEND_NULL_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_NULL_HANDLER,
  54508. ZEND_NULL_HANDLER,
  54509. ZEND_NULL_HANDLER,
  54510. ZEND_NULL_HANDLER,
  54511. ZEND_NULL_HANDLER,
  54512. ZEND_NULL_HANDLER,
  54513. ZEND_NULL_HANDLER,
  54514. ZEND_NULL_HANDLER,
  54515. ZEND_NULL_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_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER,
  54528. ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM_HANDLER,
  54529. ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ_HANDLER,
  54530. ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_HANDLER,
  54531. ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54532. ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54533. ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_HANDLER,
  54534. ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54535. ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54536. ZEND_NULL_HANDLER,
  54537. ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM_HANDLER,
  54538. ZEND_NULL_HANDLER,
  54539. ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER,
  54540. ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM_HANDLER,
  54541. ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ_HANDLER,
  54542. ZEND_NULL_HANDLER,
  54543. ZEND_NULL_HANDLER,
  54544. ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ_HANDLER,
  54545. ZEND_NULL_HANDLER,
  54546. ZEND_NULL_HANDLER,
  54547. ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54548. ZEND_NULL_HANDLER,
  54549. ZEND_NULL_HANDLER,
  54550. ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54551. ZEND_NULL_HANDLER,
  54552. ZEND_NULL_HANDLER,
  54553. ZEND_NULL_HANDLER,
  54554. ZEND_NULL_HANDLER,
  54555. ZEND_NULL_HANDLER,
  54556. ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ_HANDLER,
  54557. ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER,
  54558. ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM_HANDLER,
  54559. ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ_HANDLER,
  54560. ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_HANDLER,
  54561. ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_HANDLER,
  54562. ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54563. ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_HANDLER,
  54564. ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_HANDLER,
  54565. ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54566. ZEND_NULL_HANDLER,
  54567. ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM_HANDLER,
  54568. ZEND_NULL_HANDLER,
  54569. ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER,
  54570. ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM_HANDLER,
  54571. ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ_HANDLER,
  54572. ZEND_NULL_HANDLER,
  54573. ZEND_NULL_HANDLER,
  54574. ZEND_NULL_HANDLER,
  54575. ZEND_NULL_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_NULL_HANDLER,
  54583. ZEND_NULL_HANDLER,
  54584. ZEND_NULL_HANDLER,
  54585. ZEND_NULL_HANDLER,
  54586. ZEND_NULL_HANDLER,
  54587. ZEND_NULL_HANDLER,
  54588. ZEND_NULL_HANDLER,
  54589. ZEND_NULL_HANDLER,
  54590. ZEND_NULL_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_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER,
  54603. ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM_HANDLER,
  54604. ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ_HANDLER,
  54605. ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_HANDLER,
  54606. ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54607. ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54608. ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_HANDLER,
  54609. ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54610. ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54611. ZEND_NULL_HANDLER,
  54612. ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM_HANDLER,
  54613. ZEND_NULL_HANDLER,
  54614. ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER,
  54615. ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM_HANDLER,
  54616. ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ_HANDLER,
  54617. ZEND_NULL_HANDLER,
  54618. ZEND_NULL_HANDLER,
  54619. ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ_HANDLER,
  54620. ZEND_NULL_HANDLER,
  54621. ZEND_NULL_HANDLER,
  54622. ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54623. ZEND_NULL_HANDLER,
  54624. ZEND_NULL_HANDLER,
  54625. ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54626. ZEND_NULL_HANDLER,
  54627. ZEND_NULL_HANDLER,
  54628. ZEND_NULL_HANDLER,
  54629. ZEND_NULL_HANDLER,
  54630. ZEND_NULL_HANDLER,
  54631. ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ_HANDLER,
  54632. ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER,
  54633. ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM_HANDLER,
  54634. ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ_HANDLER,
  54635. ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_HANDLER,
  54636. ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_HANDLER,
  54637. ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54638. ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_HANDLER,
  54639. ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_HANDLER,
  54640. ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54641. ZEND_NULL_HANDLER,
  54642. ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM_HANDLER,
  54643. ZEND_NULL_HANDLER,
  54644. ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER,
  54645. ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM_HANDLER,
  54646. ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ_HANDLER,
  54647. ZEND_NULL_HANDLER,
  54648. ZEND_NULL_HANDLER,
  54649. ZEND_NULL_HANDLER,
  54650. ZEND_NULL_HANDLER,
  54651. ZEND_NULL_HANDLER,
  54652. ZEND_NULL_HANDLER,
  54653. ZEND_NULL_HANDLER,
  54654. ZEND_NULL_HANDLER,
  54655. ZEND_NULL_HANDLER,
  54656. ZEND_NULL_HANDLER,
  54657. ZEND_NULL_HANDLER,
  54658. ZEND_NULL_HANDLER,
  54659. ZEND_NULL_HANDLER,
  54660. ZEND_NULL_HANDLER,
  54661. ZEND_NULL_HANDLER,
  54662. ZEND_NULL_HANDLER,
  54663. ZEND_NULL_HANDLER,
  54664. ZEND_NULL_HANDLER,
  54665. ZEND_NULL_HANDLER,
  54666. ZEND_NULL_HANDLER,
  54667. ZEND_NULL_HANDLER,
  54668. ZEND_NULL_HANDLER,
  54669. ZEND_NULL_HANDLER,
  54670. ZEND_NULL_HANDLER,
  54671. ZEND_NULL_HANDLER,
  54672. ZEND_NULL_HANDLER,
  54673. ZEND_NULL_HANDLER,
  54674. ZEND_NULL_HANDLER,
  54675. ZEND_NULL_HANDLER,
  54676. ZEND_NULL_HANDLER,
  54677. ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER,
  54678. ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM_HANDLER,
  54679. ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ_HANDLER,
  54680. ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_HANDLER,
  54681. ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54682. ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54683. ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_HANDLER,
  54684. ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54685. ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54686. ZEND_NULL_HANDLER,
  54687. ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM_HANDLER,
  54688. ZEND_NULL_HANDLER,
  54689. ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER,
  54690. ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM_HANDLER,
  54691. ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ_HANDLER,
  54692. ZEND_NULL_HANDLER,
  54693. ZEND_NULL_HANDLER,
  54694. ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ_HANDLER,
  54695. ZEND_NULL_HANDLER,
  54696. ZEND_NULL_HANDLER,
  54697. ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54698. ZEND_NULL_HANDLER,
  54699. ZEND_NULL_HANDLER,
  54700. ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54701. ZEND_NULL_HANDLER,
  54702. ZEND_NULL_HANDLER,
  54703. ZEND_NULL_HANDLER,
  54704. ZEND_NULL_HANDLER,
  54705. ZEND_NULL_HANDLER,
  54706. ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ_HANDLER,
  54707. ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER,
  54708. ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM_HANDLER,
  54709. ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ_HANDLER,
  54710. ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_HANDLER,
  54711. ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_HANDLER,
  54712. ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54713. ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_HANDLER,
  54714. ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_HANDLER,
  54715. ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54716. ZEND_NULL_HANDLER,
  54717. ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM_HANDLER,
  54718. ZEND_NULL_HANDLER,
  54719. ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER,
  54720. ZEND_ASSIGN_SL_SPEC_CV_CV_DIM_HANDLER,
  54721. ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ_HANDLER,
  54722. ZEND_NULL_HANDLER,
  54723. ZEND_NULL_HANDLER,
  54724. ZEND_NULL_HANDLER,
  54725. ZEND_NULL_HANDLER,
  54726. ZEND_NULL_HANDLER,
  54727. ZEND_NULL_HANDLER,
  54728. ZEND_NULL_HANDLER,
  54729. ZEND_NULL_HANDLER,
  54730. ZEND_NULL_HANDLER,
  54731. ZEND_NULL_HANDLER,
  54732. ZEND_NULL_HANDLER,
  54733. ZEND_NULL_HANDLER,
  54734. ZEND_NULL_HANDLER,
  54735. ZEND_NULL_HANDLER,
  54736. ZEND_NULL_HANDLER,
  54737. ZEND_NULL_HANDLER,
  54738. ZEND_NULL_HANDLER,
  54739. ZEND_NULL_HANDLER,
  54740. ZEND_NULL_HANDLER,
  54741. ZEND_NULL_HANDLER,
  54742. ZEND_NULL_HANDLER,
  54743. ZEND_NULL_HANDLER,
  54744. ZEND_NULL_HANDLER,
  54745. ZEND_NULL_HANDLER,
  54746. ZEND_NULL_HANDLER,
  54747. ZEND_NULL_HANDLER,
  54748. ZEND_NULL_HANDLER,
  54749. ZEND_NULL_HANDLER,
  54750. ZEND_NULL_HANDLER,
  54751. ZEND_NULL_HANDLER,
  54752. ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER,
  54753. ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM_HANDLER,
  54754. ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ_HANDLER,
  54755. ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_HANDLER,
  54756. ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54757. ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54758. ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_HANDLER,
  54759. ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54760. ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54761. ZEND_NULL_HANDLER,
  54762. ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM_HANDLER,
  54763. ZEND_NULL_HANDLER,
  54764. ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER,
  54765. ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM_HANDLER,
  54766. ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ_HANDLER,
  54767. ZEND_NULL_HANDLER,
  54768. ZEND_NULL_HANDLER,
  54769. ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ_HANDLER,
  54770. ZEND_NULL_HANDLER,
  54771. ZEND_NULL_HANDLER,
  54772. ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54773. ZEND_NULL_HANDLER,
  54774. ZEND_NULL_HANDLER,
  54775. ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54776. ZEND_NULL_HANDLER,
  54777. ZEND_NULL_HANDLER,
  54778. ZEND_NULL_HANDLER,
  54779. ZEND_NULL_HANDLER,
  54780. ZEND_NULL_HANDLER,
  54781. ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ_HANDLER,
  54782. ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER,
  54783. ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM_HANDLER,
  54784. ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ_HANDLER,
  54785. ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_HANDLER,
  54786. ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_HANDLER,
  54787. ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54788. ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_HANDLER,
  54789. ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_HANDLER,
  54790. ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54791. ZEND_NULL_HANDLER,
  54792. ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM_HANDLER,
  54793. ZEND_NULL_HANDLER,
  54794. ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER,
  54795. ZEND_ASSIGN_SR_SPEC_CV_CV_DIM_HANDLER,
  54796. ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ_HANDLER,
  54797. ZEND_NULL_HANDLER,
  54798. ZEND_NULL_HANDLER,
  54799. ZEND_NULL_HANDLER,
  54800. ZEND_NULL_HANDLER,
  54801. ZEND_NULL_HANDLER,
  54802. ZEND_NULL_HANDLER,
  54803. ZEND_NULL_HANDLER,
  54804. ZEND_NULL_HANDLER,
  54805. ZEND_NULL_HANDLER,
  54806. ZEND_NULL_HANDLER,
  54807. ZEND_NULL_HANDLER,
  54808. ZEND_NULL_HANDLER,
  54809. ZEND_NULL_HANDLER,
  54810. ZEND_NULL_HANDLER,
  54811. ZEND_NULL_HANDLER,
  54812. ZEND_NULL_HANDLER,
  54813. ZEND_NULL_HANDLER,
  54814. ZEND_NULL_HANDLER,
  54815. ZEND_NULL_HANDLER,
  54816. ZEND_NULL_HANDLER,
  54817. ZEND_NULL_HANDLER,
  54818. ZEND_NULL_HANDLER,
  54819. ZEND_NULL_HANDLER,
  54820. ZEND_NULL_HANDLER,
  54821. ZEND_NULL_HANDLER,
  54822. ZEND_NULL_HANDLER,
  54823. ZEND_NULL_HANDLER,
  54824. ZEND_NULL_HANDLER,
  54825. ZEND_NULL_HANDLER,
  54826. ZEND_NULL_HANDLER,
  54827. ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER,
  54828. ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM_HANDLER,
  54829. ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ_HANDLER,
  54830. ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_HANDLER,
  54831. ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54832. ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54833. ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_HANDLER,
  54834. ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54835. ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54836. ZEND_NULL_HANDLER,
  54837. ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM_HANDLER,
  54838. ZEND_NULL_HANDLER,
  54839. ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER,
  54840. ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM_HANDLER,
  54841. ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ_HANDLER,
  54842. ZEND_NULL_HANDLER,
  54843. ZEND_NULL_HANDLER,
  54844. ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ_HANDLER,
  54845. ZEND_NULL_HANDLER,
  54846. ZEND_NULL_HANDLER,
  54847. ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54848. ZEND_NULL_HANDLER,
  54849. ZEND_NULL_HANDLER,
  54850. ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54851. ZEND_NULL_HANDLER,
  54852. ZEND_NULL_HANDLER,
  54853. ZEND_NULL_HANDLER,
  54854. ZEND_NULL_HANDLER,
  54855. ZEND_NULL_HANDLER,
  54856. ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ_HANDLER,
  54857. ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER,
  54858. ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM_HANDLER,
  54859. ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ_HANDLER,
  54860. ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_HANDLER,
  54861. ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_HANDLER,
  54862. ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54863. ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_HANDLER,
  54864. ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_HANDLER,
  54865. ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54866. ZEND_NULL_HANDLER,
  54867. ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM_HANDLER,
  54868. ZEND_NULL_HANDLER,
  54869. ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER,
  54870. ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM_HANDLER,
  54871. ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ_HANDLER,
  54872. ZEND_NULL_HANDLER,
  54873. ZEND_NULL_HANDLER,
  54874. ZEND_NULL_HANDLER,
  54875. ZEND_NULL_HANDLER,
  54876. ZEND_NULL_HANDLER,
  54877. ZEND_NULL_HANDLER,
  54878. ZEND_NULL_HANDLER,
  54879. ZEND_NULL_HANDLER,
  54880. ZEND_NULL_HANDLER,
  54881. ZEND_NULL_HANDLER,
  54882. ZEND_NULL_HANDLER,
  54883. ZEND_NULL_HANDLER,
  54884. ZEND_NULL_HANDLER,
  54885. ZEND_NULL_HANDLER,
  54886. ZEND_NULL_HANDLER,
  54887. ZEND_NULL_HANDLER,
  54888. ZEND_NULL_HANDLER,
  54889. ZEND_NULL_HANDLER,
  54890. ZEND_NULL_HANDLER,
  54891. ZEND_NULL_HANDLER,
  54892. ZEND_NULL_HANDLER,
  54893. ZEND_NULL_HANDLER,
  54894. ZEND_NULL_HANDLER,
  54895. ZEND_NULL_HANDLER,
  54896. ZEND_NULL_HANDLER,
  54897. ZEND_NULL_HANDLER,
  54898. ZEND_NULL_HANDLER,
  54899. ZEND_NULL_HANDLER,
  54900. ZEND_NULL_HANDLER,
  54901. ZEND_NULL_HANDLER,
  54902. ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER,
  54903. ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM_HANDLER,
  54904. ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ_HANDLER,
  54905. ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_HANDLER,
  54906. ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54907. ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54908. ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_HANDLER,
  54909. ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54910. ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54911. ZEND_NULL_HANDLER,
  54912. ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM_HANDLER,
  54913. ZEND_NULL_HANDLER,
  54914. ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER,
  54915. ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM_HANDLER,
  54916. ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ_HANDLER,
  54917. ZEND_NULL_HANDLER,
  54918. ZEND_NULL_HANDLER,
  54919. ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ_HANDLER,
  54920. ZEND_NULL_HANDLER,
  54921. ZEND_NULL_HANDLER,
  54922. ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54923. ZEND_NULL_HANDLER,
  54924. ZEND_NULL_HANDLER,
  54925. ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54926. ZEND_NULL_HANDLER,
  54927. ZEND_NULL_HANDLER,
  54928. ZEND_NULL_HANDLER,
  54929. ZEND_NULL_HANDLER,
  54930. ZEND_NULL_HANDLER,
  54931. ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ_HANDLER,
  54932. ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER,
  54933. ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM_HANDLER,
  54934. ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ_HANDLER,
  54935. ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_HANDLER,
  54936. ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_HANDLER,
  54937. ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54938. ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_HANDLER,
  54939. ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_HANDLER,
  54940. ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_HANDLER,
  54941. ZEND_NULL_HANDLER,
  54942. ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM_HANDLER,
  54943. ZEND_NULL_HANDLER,
  54944. ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER,
  54945. ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM_HANDLER,
  54946. ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ_HANDLER,
  54947. ZEND_NULL_HANDLER,
  54948. ZEND_NULL_HANDLER,
  54949. ZEND_NULL_HANDLER,
  54950. ZEND_NULL_HANDLER,
  54951. ZEND_NULL_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_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER,
  54978. ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM_HANDLER,
  54979. ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ_HANDLER,
  54980. ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_HANDLER,
  54981. ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54982. ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54983. ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_HANDLER,
  54984. ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_HANDLER,
  54985. ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  54986. ZEND_NULL_HANDLER,
  54987. ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM_HANDLER,
  54988. ZEND_NULL_HANDLER,
  54989. ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER,
  54990. ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM_HANDLER,
  54991. ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ_HANDLER,
  54992. ZEND_NULL_HANDLER,
  54993. ZEND_NULL_HANDLER,
  54994. ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ_HANDLER,
  54995. ZEND_NULL_HANDLER,
  54996. ZEND_NULL_HANDLER,
  54997. ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  54998. ZEND_NULL_HANDLER,
  54999. ZEND_NULL_HANDLER,
  55000. ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  55001. ZEND_NULL_HANDLER,
  55002. ZEND_NULL_HANDLER,
  55003. ZEND_NULL_HANDLER,
  55004. ZEND_NULL_HANDLER,
  55005. ZEND_NULL_HANDLER,
  55006. ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ_HANDLER,
  55007. ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER,
  55008. ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM_HANDLER,
  55009. ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ_HANDLER,
  55010. ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_HANDLER,
  55011. ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_HANDLER,
  55012. ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_HANDLER,
  55013. ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_HANDLER,
  55014. ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_HANDLER,
  55015. ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_HANDLER,
  55016. ZEND_NULL_HANDLER,
  55017. ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM_HANDLER,
  55018. ZEND_NULL_HANDLER,
  55019. ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER,
  55020. ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM_HANDLER,
  55021. ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ_HANDLER,
  55022. ZEND_NULL_HANDLER,
  55023. ZEND_NULL_HANDLER,
  55024. ZEND_NULL_HANDLER,
  55025. ZEND_NULL_HANDLER,
  55026. ZEND_NULL_HANDLER,
  55027. ZEND_NULL_HANDLER,
  55028. ZEND_NULL_HANDLER,
  55029. ZEND_NULL_HANDLER,
  55030. ZEND_NULL_HANDLER,
  55031. ZEND_NULL_HANDLER,
  55032. ZEND_NULL_HANDLER,
  55033. ZEND_NULL_HANDLER,
  55034. ZEND_NULL_HANDLER,
  55035. ZEND_NULL_HANDLER,
  55036. ZEND_NULL_HANDLER,
  55037. ZEND_NULL_HANDLER,
  55038. ZEND_NULL_HANDLER,
  55039. ZEND_NULL_HANDLER,
  55040. ZEND_NULL_HANDLER,
  55041. ZEND_NULL_HANDLER,
  55042. ZEND_NULL_HANDLER,
  55043. ZEND_NULL_HANDLER,
  55044. ZEND_NULL_HANDLER,
  55045. ZEND_NULL_HANDLER,
  55046. ZEND_NULL_HANDLER,
  55047. ZEND_NULL_HANDLER,
  55048. ZEND_NULL_HANDLER,
  55049. ZEND_NULL_HANDLER,
  55050. ZEND_NULL_HANDLER,
  55051. ZEND_NULL_HANDLER,
  55052. ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER,
  55053. ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM_HANDLER,
  55054. ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ_HANDLER,
  55055. ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_HANDLER,
  55056. ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_HANDLER,
  55057. ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  55058. ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_HANDLER,
  55059. ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_HANDLER,
  55060. ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  55061. ZEND_NULL_HANDLER,
  55062. ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM_HANDLER,
  55063. ZEND_NULL_HANDLER,
  55064. ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER,
  55065. ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM_HANDLER,
  55066. ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ_HANDLER,
  55067. ZEND_NULL_HANDLER,
  55068. ZEND_NULL_HANDLER,
  55069. ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ_HANDLER,
  55070. ZEND_NULL_HANDLER,
  55071. ZEND_NULL_HANDLER,
  55072. ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  55073. ZEND_NULL_HANDLER,
  55074. ZEND_NULL_HANDLER,
  55075. ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  55076. ZEND_NULL_HANDLER,
  55077. ZEND_NULL_HANDLER,
  55078. ZEND_NULL_HANDLER,
  55079. ZEND_NULL_HANDLER,
  55080. ZEND_NULL_HANDLER,
  55081. ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ_HANDLER,
  55082. ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER,
  55083. ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM_HANDLER,
  55084. ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ_HANDLER,
  55085. ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_HANDLER,
  55086. ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_HANDLER,
  55087. ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_HANDLER,
  55088. ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_HANDLER,
  55089. ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_HANDLER,
  55090. ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_HANDLER,
  55091. ZEND_NULL_HANDLER,
  55092. ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM_HANDLER,
  55093. ZEND_NULL_HANDLER,
  55094. ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER,
  55095. ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM_HANDLER,
  55096. ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ_HANDLER,
  55097. ZEND_NULL_HANDLER,
  55098. ZEND_NULL_HANDLER,
  55099. ZEND_NULL_HANDLER,
  55100. ZEND_NULL_HANDLER,
  55101. ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
  55102. ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER,
  55103. ZEND_NULL_HANDLER,
  55104. ZEND_NULL_HANDLER,
  55105. ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER,
  55106. ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER,
  55107. ZEND_NULL_HANDLER,
  55108. ZEND_NULL_HANDLER,
  55109. ZEND_NULL_HANDLER,
  55110. ZEND_NULL_HANDLER,
  55111. ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
  55112. ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER,
  55113. ZEND_NULL_HANDLER,
  55114. ZEND_NULL_HANDLER,
  55115. ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER,
  55116. ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER,
  55117. ZEND_NULL_HANDLER,
  55118. ZEND_NULL_HANDLER,
  55119. ZEND_POST_INC_SPEC_VAR_HANDLER,
  55120. ZEND_NULL_HANDLER,
  55121. ZEND_POST_INC_SPEC_CV_HANDLER,
  55122. ZEND_NULL_HANDLER,
  55123. ZEND_NULL_HANDLER,
  55124. ZEND_POST_DEC_SPEC_VAR_HANDLER,
  55125. ZEND_NULL_HANDLER,
  55126. ZEND_POST_DEC_SPEC_CV_HANDLER,
  55127. ZEND_NULL_HANDLER,
  55128. ZEND_NULL_HANDLER,
  55129. ZEND_NULL_HANDLER,
  55130. ZEND_NULL_HANDLER,
  55131. ZEND_NULL_HANDLER,
  55132. ZEND_NULL_HANDLER,
  55133. ZEND_NULL_HANDLER,
  55134. ZEND_NULL_HANDLER,
  55135. ZEND_NULL_HANDLER,
  55136. ZEND_NULL_HANDLER,
  55137. ZEND_NULL_HANDLER,
  55138. ZEND_NULL_HANDLER,
  55139. ZEND_NULL_HANDLER,
  55140. ZEND_NULL_HANDLER,
  55141. ZEND_NULL_HANDLER,
  55142. ZEND_NULL_HANDLER,
  55143. ZEND_NULL_HANDLER,
  55144. ZEND_NULL_HANDLER,
  55145. ZEND_NULL_HANDLER,
  55146. ZEND_NULL_HANDLER,
  55147. ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER,
  55148. ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER,
  55149. ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER,
  55150. ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER,
  55151. ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER,
  55152. ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER,
  55153. ZEND_NULL_HANDLER,
  55154. ZEND_NULL_HANDLER,
  55155. ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
  55156. ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER,
  55157. ZEND_NULL_HANDLER,
  55158. ZEND_NULL_HANDLER,
  55159. ZEND_NULL_HANDLER,
  55160. ZEND_NULL_HANDLER,
  55161. ZEND_NULL_HANDLER,
  55162. ZEND_NULL_HANDLER,
  55163. ZEND_NULL_HANDLER,
  55164. ZEND_NULL_HANDLER,
  55165. ZEND_NULL_HANDLER,
  55166. ZEND_NULL_HANDLER,
  55167. ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER,
  55168. ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER,
  55169. ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER,
  55170. ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER,
  55171. ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER,
  55172. ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER,
  55173. ZEND_NULL_HANDLER,
  55174. ZEND_NULL_HANDLER,
  55175. ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER,
  55176. ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER,
  55177. ZEND_NULL_HANDLER,
  55178. ZEND_NULL_HANDLER,
  55179. ZEND_NULL_HANDLER,
  55180. ZEND_NULL_HANDLER,
  55181. ZEND_NULL_HANDLER,
  55182. ZEND_NULL_HANDLER,
  55183. ZEND_NULL_HANDLER,
  55184. ZEND_NULL_HANDLER,
  55185. ZEND_NULL_HANDLER,
  55186. ZEND_NULL_HANDLER,
  55187. ZEND_NULL_HANDLER,
  55188. ZEND_NULL_HANDLER,
  55189. ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER,
  55190. ZEND_NULL_HANDLER,
  55191. ZEND_ASSIGN_REF_SPEC_VAR_CV_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_ASSIGN_REF_SPEC_CV_VAR_HANDLER,
  55200. ZEND_NULL_HANDLER,
  55201. ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER,
  55202. ZEND_ECHO_SPEC_CONST_HANDLER,
  55203. ZEND_ECHO_SPEC_TMPVAR_HANDLER,
  55204. ZEND_ECHO_SPEC_TMPVAR_HANDLER,
  55205. ZEND_NULL_HANDLER,
  55206. ZEND_ECHO_SPEC_CV_HANDLER,
  55207. ZEND_GENERATOR_CREATE_SPEC_HANDLER,
  55208. ZEND_JMP_SPEC_HANDLER,
  55209. ZEND_JMPZ_SPEC_CONST_HANDLER,
  55210. ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
  55211. ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
  55212. ZEND_NULL_HANDLER,
  55213. ZEND_JMPZ_SPEC_CV_HANDLER,
  55214. ZEND_JMPNZ_SPEC_CONST_HANDLER,
  55215. ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
  55216. ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
  55217. ZEND_NULL_HANDLER,
  55218. ZEND_JMPNZ_SPEC_CV_HANDLER,
  55219. ZEND_JMPZNZ_SPEC_CONST_HANDLER,
  55220. ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
  55221. ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
  55222. ZEND_NULL_HANDLER,
  55223. ZEND_JMPZNZ_SPEC_CV_HANDLER,
  55224. ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
  55225. ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
  55226. ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
  55227. ZEND_NULL_HANDLER,
  55228. ZEND_JMPZ_EX_SPEC_CV_HANDLER,
  55229. ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
  55230. ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
  55231. ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
  55232. ZEND_NULL_HANDLER,
  55233. ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
  55234. ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER,
  55235. ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
  55236. ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
  55237. ZEND_NULL_HANDLER,
  55238. ZEND_CASE_SPEC_TMPVAR_CV_HANDLER,
  55239. ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER,
  55240. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_HANDLER,
  55241. ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK_HANDLER,
  55242. ZEND_NULL_HANDLER,
  55243. ZEND_NULL_HANDLER,
  55244. ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER,
  55245. ZEND_NULL_HANDLER,
  55246. ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER,
  55247. ZEND_BOOL_SPEC_CONST_HANDLER,
  55248. ZEND_BOOL_SPEC_TMPVAR_HANDLER,
  55249. ZEND_BOOL_SPEC_TMPVAR_HANDLER,
  55250. ZEND_NULL_HANDLER,
  55251. ZEND_BOOL_SPEC_CV_HANDLER,
  55252. ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER,
  55253. ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
  55254. ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
  55255. ZEND_NULL_HANDLER,
  55256. ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER,
  55257. ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
  55258. ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  55259. ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  55260. ZEND_NULL_HANDLER,
  55261. ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
  55262. ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
  55263. ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  55264. ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
  55265. ZEND_NULL_HANDLER,
  55266. ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
  55267. ZEND_NULL_HANDLER,
  55268. ZEND_NULL_HANDLER,
  55269. ZEND_NULL_HANDLER,
  55270. ZEND_NULL_HANDLER,
  55271. ZEND_NULL_HANDLER,
  55272. ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER,
  55273. ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
  55274. ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
  55275. ZEND_NULL_HANDLER,
  55276. ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER,
  55277. ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER,
  55278. ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
  55279. ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
  55280. ZEND_NULL_HANDLER,
  55281. ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER,
  55282. ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER,
  55283. ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
  55284. ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
  55285. ZEND_NULL_HANDLER,
  55286. ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER,
  55287. ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER,
  55288. ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
  55289. ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
  55290. ZEND_NULL_HANDLER,
  55291. ZEND_ROPE_END_SPEC_TMP_CV_HANDLER,
  55292. ZEND_BEGIN_SILENCE_SPEC_HANDLER,
  55293. ZEND_END_SILENCE_SPEC_TMP_HANDLER,
  55294. ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
  55295. ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER,
  55296. ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER,
  55297. ZEND_INIT_FCALL_SPEC_CONST_HANDLER,
  55298. ZEND_RETURN_SPEC_CONST_HANDLER,
  55299. ZEND_RETURN_SPEC_TMP_HANDLER,
  55300. ZEND_RETURN_SPEC_VAR_HANDLER,
  55301. ZEND_NULL_HANDLER,
  55302. ZEND_RETURN_SPEC_CV_HANDLER,
  55303. ZEND_RECV_SPEC_UNUSED_HANDLER,
  55304. ZEND_RECV_INIT_SPEC_CONST_HANDLER,
  55305. ZEND_SEND_VAL_SPEC_CONST_HANDLER,
  55306. ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER,
  55307. ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER,
  55308. ZEND_NULL_HANDLER,
  55309. ZEND_NULL_HANDLER,
  55310. ZEND_NULL_HANDLER,
  55311. ZEND_NULL_HANDLER,
  55312. ZEND_NULL_HANDLER,
  55313. ZEND_NULL_HANDLER,
  55314. ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER,
  55315. ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_HANDLER,
  55316. ZEND_NULL_HANDLER,
  55317. ZEND_NULL_HANDLER,
  55318. ZEND_SEND_VAR_EX_SPEC_CV_HANDLER,
  55319. ZEND_SEND_VAR_EX_SPEC_CV_QUICK_HANDLER,
  55320. ZEND_NULL_HANDLER,
  55321. ZEND_NULL_HANDLER,
  55322. ZEND_SEND_REF_SPEC_VAR_HANDLER,
  55323. ZEND_NULL_HANDLER,
  55324. ZEND_SEND_REF_SPEC_CV_HANDLER,
  55325. ZEND_NEW_SPEC_CONST_UNUSED_HANDLER,
  55326. ZEND_NULL_HANDLER,
  55327. ZEND_NEW_SPEC_VAR_UNUSED_HANDLER,
  55328. ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER,
  55329. ZEND_NULL_HANDLER,
  55330. ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
  55331. ZEND_FREE_SPEC_TMPVAR_HANDLER,
  55332. ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER,
  55333. ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
  55334. ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
  55335. ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER,
  55336. ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER,
  55337. ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER,
  55338. ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
  55339. ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
  55340. ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER,
  55341. ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER,
  55342. ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER,
  55343. ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
  55344. ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
  55345. ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER,
  55346. ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER,
  55347. ZEND_NULL_HANDLER,
  55348. ZEND_NULL_HANDLER,
  55349. ZEND_NULL_HANDLER,
  55350. ZEND_NULL_HANDLER,
  55351. ZEND_NULL_HANDLER,
  55352. ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER,
  55353. ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
  55354. ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
  55355. ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER,
  55356. ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER,
  55357. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER,
  55358. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
  55359. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
  55360. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER,
  55361. ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER,
  55362. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER,
  55363. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
  55364. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
  55365. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER,
  55366. ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER,
  55367. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER,
  55368. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
  55369. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
  55370. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER,
  55371. ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER,
  55372. ZEND_NULL_HANDLER,
  55373. ZEND_NULL_HANDLER,
  55374. ZEND_NULL_HANDLER,
  55375. ZEND_NULL_HANDLER,
  55376. ZEND_NULL_HANDLER,
  55377. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER,
  55378. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
  55379. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
  55380. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER,
  55381. ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER,
  55382. ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
  55383. ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
  55384. ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
  55385. ZEND_NULL_HANDLER,
  55386. ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
  55387. ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER,
  55388. ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
  55389. ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
  55390. ZEND_NULL_HANDLER,
  55391. ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER,
  55392. ZEND_NULL_HANDLER,
  55393. ZEND_NULL_HANDLER,
  55394. ZEND_NULL_HANDLER,
  55395. ZEND_NULL_HANDLER,
  55396. ZEND_NULL_HANDLER,
  55397. ZEND_NULL_HANDLER,
  55398. ZEND_NULL_HANDLER,
  55399. ZEND_NULL_HANDLER,
  55400. ZEND_NULL_HANDLER,
  55401. ZEND_NULL_HANDLER,
  55402. ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER,
  55403. ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
  55404. ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
  55405. ZEND_NULL_HANDLER,
  55406. ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER,
  55407. ZEND_NULL_HANDLER,
  55408. ZEND_NULL_HANDLER,
  55409. ZEND_NULL_HANDLER,
  55410. ZEND_NULL_HANDLER,
  55411. ZEND_NULL_HANDLER,
  55412. ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER,
  55413. ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
  55414. ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
  55415. ZEND_NULL_HANDLER,
  55416. ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER,
  55417. ZEND_NULL_HANDLER,
  55418. ZEND_NULL_HANDLER,
  55419. ZEND_NULL_HANDLER,
  55420. ZEND_NULL_HANDLER,
  55421. ZEND_NULL_HANDLER,
  55422. ZEND_NULL_HANDLER,
  55423. ZEND_NULL_HANDLER,
  55424. ZEND_NULL_HANDLER,
  55425. ZEND_NULL_HANDLER,
  55426. ZEND_NULL_HANDLER,
  55427. ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER,
  55428. ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  55429. ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  55430. ZEND_NULL_HANDLER,
  55431. ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER,
  55432. ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER,
  55433. ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  55434. ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  55435. ZEND_NULL_HANDLER,
  55436. ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER,
  55437. ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER,
  55438. ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
  55439. ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
  55440. ZEND_NULL_HANDLER,
  55441. ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER,
  55442. ZEND_FE_RESET_R_SPEC_CONST_HANDLER,
  55443. ZEND_FE_RESET_R_SPEC_TMP_HANDLER,
  55444. ZEND_FE_RESET_R_SPEC_VAR_HANDLER,
  55445. ZEND_NULL_HANDLER,
  55446. ZEND_FE_RESET_R_SPEC_CV_HANDLER,
  55447. ZEND_FE_FETCH_R_SPEC_VAR_HANDLER,
  55448. ZEND_EXIT_SPEC_CONST_HANDLER,
  55449. ZEND_EXIT_SPEC_TMPVAR_HANDLER,
  55450. ZEND_EXIT_SPEC_TMPVAR_HANDLER,
  55451. ZEND_EXIT_SPEC_UNUSED_HANDLER,
  55452. ZEND_EXIT_SPEC_CV_HANDLER,
  55453. ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER,
  55454. ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
  55455. ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
  55456. ZEND_NULL_HANDLER,
  55457. ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER,
  55458. ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER,
  55459. ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
  55460. ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
  55461. ZEND_NULL_HANDLER,
  55462. ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER,
  55463. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
  55464. ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55465. ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55466. ZEND_NULL_HANDLER,
  55467. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
  55468. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
  55469. ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55470. ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55471. ZEND_NULL_HANDLER,
  55472. ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
  55473. ZEND_NULL_HANDLER,
  55474. ZEND_NULL_HANDLER,
  55475. ZEND_NULL_HANDLER,
  55476. ZEND_NULL_HANDLER,
  55477. ZEND_NULL_HANDLER,
  55478. ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER,
  55479. ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
  55480. ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
  55481. ZEND_NULL_HANDLER,
  55482. ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER,
  55483. ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER,
  55484. ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
  55485. ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
  55486. ZEND_NULL_HANDLER,
  55487. ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER,
  55488. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
  55489. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55490. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55491. ZEND_NULL_HANDLER,
  55492. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
  55493. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
  55494. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55495. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
  55496. ZEND_NULL_HANDLER,
  55497. ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
  55498. ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER,
  55499. ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
  55500. ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
  55501. ZEND_NULL_HANDLER,
  55502. ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER,
  55503. ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER,
  55504. ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
  55505. ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
  55506. ZEND_NULL_HANDLER,
  55507. ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER,
  55508. ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER,
  55509. ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
  55510. ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
  55511. ZEND_NULL_HANDLER,
  55512. ZEND_FETCH_W_SPEC_CV_UNUSED_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_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER,
  55524. ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
  55525. ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
  55526. ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER,
  55527. ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER,
  55528. ZEND_NULL_HANDLER,
  55529. ZEND_NULL_HANDLER,
  55530. ZEND_NULL_HANDLER,
  55531. ZEND_NULL_HANDLER,
  55532. ZEND_NULL_HANDLER,
  55533. ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER,
  55534. ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
  55535. ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
  55536. ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER,
  55537. ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER,
  55538. ZEND_NULL_HANDLER,
  55539. ZEND_NULL_HANDLER,
  55540. ZEND_NULL_HANDLER,
  55541. ZEND_NULL_HANDLER,
  55542. ZEND_NULL_HANDLER,
  55543. ZEND_NULL_HANDLER,
  55544. ZEND_NULL_HANDLER,
  55545. ZEND_NULL_HANDLER,
  55546. ZEND_NULL_HANDLER,
  55547. ZEND_NULL_HANDLER,
  55548. ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER,
  55549. ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
  55550. ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
  55551. ZEND_NULL_HANDLER,
  55552. ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER,
  55553. ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER,
  55554. ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
  55555. ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
  55556. ZEND_NULL_HANDLER,
  55557. ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER,
  55558. ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER,
  55559. ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
  55560. ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
  55561. ZEND_NULL_HANDLER,
  55562. ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER,
  55563. ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER,
  55564. ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
  55565. ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
  55566. ZEND_NULL_HANDLER,
  55567. ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER,
  55568. ZEND_NULL_HANDLER,
  55569. ZEND_NULL_HANDLER,
  55570. ZEND_NULL_HANDLER,
  55571. ZEND_NULL_HANDLER,
  55572. ZEND_NULL_HANDLER,
  55573. ZEND_NULL_HANDLER,
  55574. ZEND_NULL_HANDLER,
  55575. ZEND_NULL_HANDLER,
  55576. ZEND_NULL_HANDLER,
  55577. ZEND_NULL_HANDLER,
  55578. ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER,
  55579. ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
  55580. ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
  55581. ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER,
  55582. ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER,
  55583. ZEND_NULL_HANDLER,
  55584. ZEND_NULL_HANDLER,
  55585. ZEND_NULL_HANDLER,
  55586. ZEND_NULL_HANDLER,
  55587. ZEND_NULL_HANDLER,
  55588. ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER,
  55589. ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
  55590. ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
  55591. ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER,
  55592. ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER,
  55593. ZEND_NULL_HANDLER,
  55594. ZEND_NULL_HANDLER,
  55595. ZEND_NULL_HANDLER,
  55596. ZEND_NULL_HANDLER,
  55597. ZEND_NULL_HANDLER,
  55598. ZEND_NULL_HANDLER,
  55599. ZEND_NULL_HANDLER,
  55600. ZEND_NULL_HANDLER,
  55601. ZEND_NULL_HANDLER,
  55602. ZEND_NULL_HANDLER,
  55603. ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER,
  55604. ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
  55605. ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
  55606. ZEND_NULL_HANDLER,
  55607. ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER,
  55608. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER,
  55609. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
  55610. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
  55611. ZEND_NULL_HANDLER,
  55612. ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER,
  55613. ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER,
  55614. ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
  55615. ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
  55616. ZEND_NULL_HANDLER,
  55617. ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER,
  55618. ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER,
  55619. ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
  55620. ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
  55621. ZEND_NULL_HANDLER,
  55622. ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER,
  55623. ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER,
  55624. ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
  55625. ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
  55626. ZEND_NULL_HANDLER,
  55627. ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER,
  55628. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
  55629. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55630. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55631. ZEND_NULL_HANDLER,
  55632. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
  55633. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
  55634. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55635. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55636. ZEND_NULL_HANDLER,
  55637. ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
  55638. ZEND_NULL_HANDLER,
  55639. ZEND_NULL_HANDLER,
  55640. ZEND_NULL_HANDLER,
  55641. ZEND_NULL_HANDLER,
  55642. ZEND_NULL_HANDLER,
  55643. ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER,
  55644. ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
  55645. ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
  55646. ZEND_NULL_HANDLER,
  55647. ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER,
  55648. ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER,
  55649. ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
  55650. ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
  55651. ZEND_NULL_HANDLER,
  55652. ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER,
  55653. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
  55654. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55655. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55656. ZEND_NULL_HANDLER,
  55657. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
  55658. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
  55659. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55660. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
  55661. ZEND_NULL_HANDLER,
  55662. ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
  55663. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER,
  55664. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
  55665. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
  55666. ZEND_NULL_HANDLER,
  55667. ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER,
  55668. ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER,
  55669. ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
  55670. ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
  55671. ZEND_NULL_HANDLER,
  55672. ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER,
  55673. ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
  55674. ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
  55675. ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
  55676. ZEND_NULL_HANDLER,
  55677. ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
  55678. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
  55679. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
  55680. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
  55681. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
  55682. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER,
  55683. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
  55684. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
  55685. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
  55686. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER,
  55687. ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER,
  55688. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
  55689. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
  55690. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
  55691. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
  55692. ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER,
  55693. ZEND_NULL_HANDLER,
  55694. ZEND_NULL_HANDLER,
  55695. ZEND_NULL_HANDLER,
  55696. ZEND_NULL_HANDLER,
  55697. ZEND_NULL_HANDLER,
  55698. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER,
  55699. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
  55700. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
  55701. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
  55702. ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER,
  55703. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
  55704. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
  55705. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
  55706. ZEND_NULL_HANDLER,
  55707. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER,
  55708. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
  55709. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
  55710. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
  55711. ZEND_NULL_HANDLER,
  55712. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER,
  55713. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
  55714. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
  55715. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
  55716. ZEND_NULL_HANDLER,
  55717. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER,
  55718. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
  55719. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
  55720. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
  55721. ZEND_NULL_HANDLER,
  55722. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER,
  55723. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER,
  55724. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
  55725. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
  55726. ZEND_NULL_HANDLER,
  55727. ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER,
  55728. ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER,
  55729. ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
  55730. ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
  55731. ZEND_NULL_HANDLER,
  55732. ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER,
  55733. ZEND_NULL_HANDLER,
  55734. ZEND_NULL_HANDLER,
  55735. ZEND_NULL_HANDLER,
  55736. ZEND_NULL_HANDLER,
  55737. ZEND_NULL_HANDLER,
  55738. ZEND_NULL_HANDLER,
  55739. ZEND_NULL_HANDLER,
  55740. ZEND_NULL_HANDLER,
  55741. ZEND_NULL_HANDLER,
  55742. ZEND_NULL_HANDLER,
  55743. ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER,
  55744. ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
  55745. ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
  55746. ZEND_NULL_HANDLER,
  55747. ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER,
  55748. ZEND_NULL_HANDLER,
  55749. ZEND_NULL_HANDLER,
  55750. ZEND_NULL_HANDLER,
  55751. ZEND_NULL_HANDLER,
  55752. ZEND_NULL_HANDLER,
  55753. ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER,
  55754. ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
  55755. ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
  55756. ZEND_NULL_HANDLER,
  55757. ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER,
  55758. ZEND_NULL_HANDLER,
  55759. ZEND_NULL_HANDLER,
  55760. ZEND_NULL_HANDLER,
  55761. ZEND_NULL_HANDLER,
  55762. ZEND_NULL_HANDLER,
  55763. ZEND_NULL_HANDLER,
  55764. ZEND_NULL_HANDLER,
  55765. ZEND_NULL_HANDLER,
  55766. ZEND_NULL_HANDLER,
  55767. ZEND_NULL_HANDLER,
  55768. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER,
  55769. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
  55770. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
  55771. ZEND_NULL_HANDLER,
  55772. ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER,
  55773. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER,
  55774. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
  55775. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
  55776. ZEND_NULL_HANDLER,
  55777. ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER,
  55778. ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER,
  55779. ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
  55780. ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
  55781. ZEND_NULL_HANDLER,
  55782. ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER,
  55783. ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER,
  55784. ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
  55785. ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
  55786. ZEND_NULL_HANDLER,
  55787. ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER,
  55788. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
  55789. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  55790. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  55791. ZEND_NULL_HANDLER,
  55792. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
  55793. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
  55794. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  55795. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  55796. ZEND_NULL_HANDLER,
  55797. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
  55798. ZEND_NULL_HANDLER,
  55799. ZEND_NULL_HANDLER,
  55800. ZEND_NULL_HANDLER,
  55801. ZEND_NULL_HANDLER,
  55802. ZEND_NULL_HANDLER,
  55803. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
  55804. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  55805. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
  55806. ZEND_NULL_HANDLER,
  55807. ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
  55808. ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
  55809. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_HANDLER,
  55810. ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK_HANDLER,
  55811. ZEND_EXT_STMT_SPEC_HANDLER,
  55812. ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
  55813. ZEND_EXT_FCALL_END_SPEC_HANDLER,
  55814. ZEND_EXT_NOP_SPEC_HANDLER,
  55815. ZEND_TICKS_SPEC_HANDLER,
  55816. ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
  55817. ZEND_CATCH_SPEC_CONST_HANDLER,
  55818. ZEND_THROW_SPEC_CONST_HANDLER,
  55819. ZEND_THROW_SPEC_TMP_HANDLER,
  55820. ZEND_THROW_SPEC_VAR_HANDLER,
  55821. ZEND_NULL_HANDLER,
  55822. ZEND_THROW_SPEC_CV_HANDLER,
  55823. ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER,
  55824. ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
  55825. ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
  55826. ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
  55827. ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER,
  55828. ZEND_CLONE_SPEC_CONST_HANDLER,
  55829. ZEND_CLONE_SPEC_TMPVAR_HANDLER,
  55830. ZEND_CLONE_SPEC_TMPVAR_HANDLER,
  55831. ZEND_CLONE_SPEC_UNUSED_HANDLER,
  55832. ZEND_CLONE_SPEC_CV_HANDLER,
  55833. ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
  55834. ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
  55835. ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
  55836. ZEND_NULL_HANDLER,
  55837. ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
  55838. ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
  55839. ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
  55840. ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
  55841. ZEND_NULL_HANDLER,
  55842. ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER,
  55843. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
  55844. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
  55845. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
  55846. ZEND_NULL_HANDLER,
  55847. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
  55848. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
  55849. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
  55850. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
  55851. ZEND_NULL_HANDLER,
  55852. ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
  55853. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
  55854. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
  55855. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
  55856. ZEND_NULL_HANDLER,
  55857. ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
  55858. ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER,
  55859. ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
  55860. ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
  55861. ZEND_NULL_HANDLER,
  55862. ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER,
  55863. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
  55864. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
  55865. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
  55866. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER,
  55867. ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER,
  55868. ZEND_NULL_HANDLER,
  55869. ZEND_NULL_HANDLER,
  55870. ZEND_NULL_HANDLER,
  55871. ZEND_NULL_HANDLER,
  55872. ZEND_NULL_HANDLER,
  55873. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER,
  55874. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
  55875. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
  55876. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER,
  55877. ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER,
  55878. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
  55879. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
  55880. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
  55881. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER,
  55882. ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
  55883. ZEND_NULL_HANDLER,
  55884. ZEND_NULL_HANDLER,
  55885. ZEND_NULL_HANDLER,
  55886. ZEND_NULL_HANDLER,
  55887. ZEND_NULL_HANDLER,
  55888. ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER,
  55889. ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
  55890. ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
  55891. ZEND_NULL_HANDLER,
  55892. ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER,
  55893. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER,
  55894. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
  55895. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
  55896. ZEND_NULL_HANDLER,
  55897. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER,
  55898. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
  55899. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  55900. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  55901. ZEND_NULL_HANDLER,
  55902. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
  55903. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
  55904. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  55905. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  55906. ZEND_NULL_HANDLER,
  55907. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
  55908. ZEND_NULL_HANDLER,
  55909. ZEND_NULL_HANDLER,
  55910. ZEND_NULL_HANDLER,
  55911. ZEND_NULL_HANDLER,
  55912. ZEND_NULL_HANDLER,
  55913. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER,
  55914. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
  55915. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
  55916. ZEND_NULL_HANDLER,
  55917. ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER,
  55918. ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER,
  55919. ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_HANDLER,
  55920. ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER,
  55921. ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_HANDLER,
  55922. ZEND_NULL_HANDLER,
  55923. ZEND_NULL_HANDLER,
  55924. ZEND_NULL_HANDLER,
  55925. ZEND_NULL_HANDLER,
  55926. ZEND_NULL_HANDLER,
  55927. ZEND_NULL_HANDLER,
  55928. ZEND_NULL_HANDLER,
  55929. ZEND_NULL_HANDLER,
  55930. ZEND_SEND_VAR_SPEC_VAR_HANDLER,
  55931. ZEND_NULL_HANDLER,
  55932. ZEND_SEND_VAR_SPEC_CV_HANDLER,
  55933. ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER,
  55934. ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
  55935. ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
  55936. ZEND_NULL_HANDLER,
  55937. ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER,
  55938. ZEND_SEND_ARRAY_SPEC_HANDLER,
  55939. ZEND_SEND_USER_SPEC_CONST_HANDLER,
  55940. ZEND_SEND_USER_SPEC_TMP_HANDLER,
  55941. ZEND_SEND_USER_SPEC_VAR_HANDLER,
  55942. ZEND_NULL_HANDLER,
  55943. ZEND_SEND_USER_SPEC_CV_HANDLER,
  55944. ZEND_STRLEN_SPEC_CONST_HANDLER,
  55945. ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
  55946. ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
  55947. ZEND_NULL_HANDLER,
  55948. ZEND_STRLEN_SPEC_CV_HANDLER,
  55949. ZEND_DEFINED_SPEC_CONST_HANDLER,
  55950. ZEND_TYPE_CHECK_SPEC_CONST_HANDLER,
  55951. ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
  55952. ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
  55953. ZEND_NULL_HANDLER,
  55954. ZEND_TYPE_CHECK_SPEC_CV_HANDLER,
  55955. ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER,
  55956. ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER,
  55957. ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER,
  55958. ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
  55959. ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER,
  55960. ZEND_FE_RESET_RW_SPEC_CONST_HANDLER,
  55961. ZEND_FE_RESET_RW_SPEC_TMP_HANDLER,
  55962. ZEND_FE_RESET_RW_SPEC_VAR_HANDLER,
  55963. ZEND_NULL_HANDLER,
  55964. ZEND_FE_RESET_RW_SPEC_CV_HANDLER,
  55965. ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER,
  55966. ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
  55967. ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER,
  55968. ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
  55969. ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
  55970. ZEND_NULL_HANDLER,
  55971. ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER,
  55972. ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER,
  55973. ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER,
  55974. ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER,
  55975. ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER,
  55976. ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER,
  55977. ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER,
  55978. ZEND_NULL_HANDLER,
  55979. ZEND_NULL_HANDLER,
  55980. ZEND_NULL_HANDLER,
  55981. ZEND_NULL_HANDLER,
  55982. ZEND_NULL_HANDLER,
  55983. ZEND_NULL_HANDLER,
  55984. ZEND_NULL_HANDLER,
  55985. ZEND_NULL_HANDLER,
  55986. ZEND_NULL_HANDLER,
  55987. ZEND_NULL_HANDLER,
  55988. ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER,
  55989. ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  55990. ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  55991. ZEND_NULL_HANDLER,
  55992. ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER,
  55993. ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
  55994. ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  55995. ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  55996. ZEND_NULL_HANDLER,
  55997. ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
  55998. ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER,
  55999. ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56000. ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56001. ZEND_NULL_HANDLER,
  56002. ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER,
  56003. ZEND_NULL_HANDLER,
  56004. ZEND_NULL_HANDLER,
  56005. ZEND_NULL_HANDLER,
  56006. ZEND_NULL_HANDLER,
  56007. ZEND_NULL_HANDLER,
  56008. ZEND_NULL_HANDLER,
  56009. ZEND_NULL_HANDLER,
  56010. ZEND_NULL_HANDLER,
  56011. ZEND_NULL_HANDLER,
  56012. ZEND_NULL_HANDLER,
  56013. ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_HANDLER,
  56014. ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  56015. ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  56016. ZEND_NULL_HANDLER,
  56017. ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_HANDLER,
  56018. ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER,
  56019. ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56020. ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56021. ZEND_NULL_HANDLER,
  56022. ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_HANDLER,
  56023. ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_HANDLER,
  56024. ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56025. ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56026. ZEND_NULL_HANDLER,
  56027. ZEND_PRE_DEC_OBJ_SPEC_CV_CV_HANDLER,
  56028. ZEND_NULL_HANDLER,
  56029. ZEND_NULL_HANDLER,
  56030. ZEND_NULL_HANDLER,
  56031. ZEND_NULL_HANDLER,
  56032. ZEND_NULL_HANDLER,
  56033. ZEND_NULL_HANDLER,
  56034. ZEND_NULL_HANDLER,
  56035. ZEND_NULL_HANDLER,
  56036. ZEND_NULL_HANDLER,
  56037. ZEND_NULL_HANDLER,
  56038. ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER,
  56039. ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  56040. ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  56041. ZEND_NULL_HANDLER,
  56042. ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER,
  56043. ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
  56044. ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56045. ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56046. ZEND_NULL_HANDLER,
  56047. ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
  56048. ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER,
  56049. ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56050. ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56051. ZEND_NULL_HANDLER,
  56052. ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER,
  56053. ZEND_NULL_HANDLER,
  56054. ZEND_NULL_HANDLER,
  56055. ZEND_NULL_HANDLER,
  56056. ZEND_NULL_HANDLER,
  56057. ZEND_NULL_HANDLER,
  56058. ZEND_NULL_HANDLER,
  56059. ZEND_NULL_HANDLER,
  56060. ZEND_NULL_HANDLER,
  56061. ZEND_NULL_HANDLER,
  56062. ZEND_NULL_HANDLER,
  56063. ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_HANDLER,
  56064. ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  56065. ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
  56066. ZEND_NULL_HANDLER,
  56067. ZEND_POST_DEC_OBJ_SPEC_VAR_CV_HANDLER,
  56068. ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER,
  56069. ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56070. ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56071. ZEND_NULL_HANDLER,
  56072. ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_HANDLER,
  56073. ZEND_POST_DEC_OBJ_SPEC_CV_CONST_HANDLER,
  56074. ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56075. ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56076. ZEND_NULL_HANDLER,
  56077. ZEND_POST_DEC_OBJ_SPEC_CV_CV_HANDLER,
  56078. ZEND_NULL_HANDLER,
  56079. ZEND_NULL_HANDLER,
  56080. ZEND_NULL_HANDLER,
  56081. ZEND_NULL_HANDLER,
  56082. ZEND_NULL_HANDLER,
  56083. ZEND_NULL_HANDLER,
  56084. ZEND_NULL_HANDLER,
  56085. ZEND_NULL_HANDLER,
  56086. ZEND_NULL_HANDLER,
  56087. ZEND_NULL_HANDLER,
  56088. ZEND_NULL_HANDLER,
  56089. ZEND_NULL_HANDLER,
  56090. ZEND_NULL_HANDLER,
  56091. ZEND_NULL_HANDLER,
  56092. ZEND_NULL_HANDLER,
  56093. ZEND_NULL_HANDLER,
  56094. ZEND_NULL_HANDLER,
  56095. ZEND_NULL_HANDLER,
  56096. ZEND_NULL_HANDLER,
  56097. ZEND_NULL_HANDLER,
  56098. ZEND_NULL_HANDLER,
  56099. ZEND_NULL_HANDLER,
  56100. ZEND_NULL_HANDLER,
  56101. ZEND_NULL_HANDLER,
  56102. ZEND_NULL_HANDLER,
  56103. ZEND_NULL_HANDLER,
  56104. ZEND_NULL_HANDLER,
  56105. ZEND_NULL_HANDLER,
  56106. ZEND_NULL_HANDLER,
  56107. ZEND_NULL_HANDLER,
  56108. ZEND_NULL_HANDLER,
  56109. ZEND_NULL_HANDLER,
  56110. ZEND_NULL_HANDLER,
  56111. ZEND_NULL_HANDLER,
  56112. ZEND_NULL_HANDLER,
  56113. ZEND_NULL_HANDLER,
  56114. ZEND_NULL_HANDLER,
  56115. ZEND_NULL_HANDLER,
  56116. ZEND_NULL_HANDLER,
  56117. ZEND_NULL_HANDLER,
  56118. ZEND_NULL_HANDLER,
  56119. ZEND_NULL_HANDLER,
  56120. ZEND_NULL_HANDLER,
  56121. ZEND_NULL_HANDLER,
  56122. ZEND_NULL_HANDLER,
  56123. ZEND_NULL_HANDLER,
  56124. ZEND_NULL_HANDLER,
  56125. ZEND_NULL_HANDLER,
  56126. ZEND_NULL_HANDLER,
  56127. ZEND_NULL_HANDLER,
  56128. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
  56129. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
  56130. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
  56131. ZEND_NULL_HANDLER,
  56132. ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
  56133. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
  56134. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
  56135. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
  56136. ZEND_NULL_HANDLER,
  56137. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
  56138. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
  56139. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
  56140. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
  56141. ZEND_NULL_HANDLER,
  56142. ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
  56143. ZEND_NULL_HANDLER,
  56144. ZEND_NULL_HANDLER,
  56145. ZEND_NULL_HANDLER,
  56146. ZEND_NULL_HANDLER,
  56147. ZEND_NULL_HANDLER,
  56148. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
  56149. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
  56150. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
  56151. ZEND_NULL_HANDLER,
  56152. ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
  56153. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER,
  56154. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER,
  56155. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
  56156. ZEND_NULL_HANDLER,
  56157. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
  56158. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
  56159. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
  56160. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
  56161. ZEND_NULL_HANDLER,
  56162. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
  56163. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
  56164. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
  56165. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
  56166. ZEND_NULL_HANDLER,
  56167. ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
  56168. ZEND_NULL_HANDLER,
  56169. ZEND_NULL_HANDLER,
  56170. ZEND_NULL_HANDLER,
  56171. ZEND_NULL_HANDLER,
  56172. ZEND_NULL_HANDLER,
  56173. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER,
  56174. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER,
  56175. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
  56176. ZEND_NULL_HANDLER,
  56177. ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
  56178. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
  56179. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
  56180. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
  56181. ZEND_NULL_HANDLER,
  56182. ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
  56183. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
  56184. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
  56185. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
  56186. ZEND_NULL_HANDLER,
  56187. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
  56188. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
  56189. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
  56190. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
  56191. ZEND_NULL_HANDLER,
  56192. ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
  56193. ZEND_NULL_HANDLER,
  56194. ZEND_NULL_HANDLER,
  56195. ZEND_NULL_HANDLER,
  56196. ZEND_NULL_HANDLER,
  56197. ZEND_NULL_HANDLER,
  56198. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
  56199. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
  56200. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
  56201. ZEND_NULL_HANDLER,
  56202. ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_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_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
  56210. ZEND_NULL_HANDLER,
  56211. ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
  56212. ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
  56213. ZEND_NULL_HANDLER,
  56214. ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
  56215. ZEND_NULL_HANDLER,
  56216. ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
  56217. ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_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_INSTANCEOF_SPEC_CV_CONST_HANDLER,
  56225. ZEND_NULL_HANDLER,
  56226. ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER,
  56227. ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER,
  56228. ZEND_NULL_HANDLER,
  56229. ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER,
  56230. ZEND_DECLARE_INHERITED_CLASS_SPEC_CONST_CONST_HANDLER,
  56231. ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
  56232. ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
  56233. ZEND_YIELD_FROM_SPEC_TMP_HANDLER,
  56234. ZEND_YIELD_FROM_SPEC_VAR_HANDLER,
  56235. ZEND_NULL_HANDLER,
  56236. ZEND_YIELD_FROM_SPEC_CV_HANDLER,
  56237. ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER,
  56238. ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER,
  56239. ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER,
  56240. ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
  56241. ZEND_NULL_HANDLER,
  56242. ZEND_NULL_HANDLER,
  56243. ZEND_NULL_HANDLER,
  56244. ZEND_NULL_HANDLER,
  56245. ZEND_NULL_HANDLER,
  56246. ZEND_NULL_HANDLER,
  56247. ZEND_NULL_HANDLER,
  56248. ZEND_NULL_HANDLER,
  56249. ZEND_NULL_HANDLER,
  56250. ZEND_NULL_HANDLER,
  56251. ZEND_NULL_HANDLER,
  56252. ZEND_NULL_HANDLER,
  56253. ZEND_NULL_HANDLER,
  56254. ZEND_NULL_HANDLER,
  56255. ZEND_NULL_HANDLER,
  56256. ZEND_NULL_HANDLER,
  56257. ZEND_NULL_HANDLER,
  56258. ZEND_NULL_HANDLER,
  56259. ZEND_NULL_HANDLER,
  56260. ZEND_NULL_HANDLER,
  56261. ZEND_NULL_HANDLER,
  56262. ZEND_NULL_HANDLER,
  56263. ZEND_NULL_HANDLER,
  56264. ZEND_NULL_HANDLER,
  56265. ZEND_NULL_HANDLER,
  56266. ZEND_NULL_HANDLER,
  56267. ZEND_NULL_HANDLER,
  56268. ZEND_NULL_HANDLER,
  56269. ZEND_NULL_HANDLER,
  56270. ZEND_NULL_HANDLER,
  56271. ZEND_NULL_HANDLER,
  56272. ZEND_NULL_HANDLER,
  56273. ZEND_NULL_HANDLER,
  56274. ZEND_NULL_HANDLER,
  56275. ZEND_NULL_HANDLER,
  56276. ZEND_NULL_HANDLER,
  56277. ZEND_NULL_HANDLER,
  56278. ZEND_NULL_HANDLER,
  56279. ZEND_NULL_HANDLER,
  56280. ZEND_NULL_HANDLER,
  56281. ZEND_NULL_HANDLER,
  56282. ZEND_NULL_HANDLER,
  56283. ZEND_NULL_HANDLER,
  56284. ZEND_NULL_HANDLER,
  56285. ZEND_NULL_HANDLER,
  56286. ZEND_NULL_HANDLER,
  56287. ZEND_NULL_HANDLER,
  56288. ZEND_NULL_HANDLER,
  56289. ZEND_NULL_HANDLER,
  56290. ZEND_NULL_HANDLER,
  56291. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
  56292. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
  56293. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
  56294. ZEND_NULL_HANDLER,
  56295. ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
  56296. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
  56297. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
  56298. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
  56299. ZEND_NULL_HANDLER,
  56300. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
  56301. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
  56302. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
  56303. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
  56304. ZEND_NULL_HANDLER,
  56305. ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
  56306. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER,
  56307. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER,
  56308. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER,
  56309. ZEND_NULL_HANDLER,
  56310. ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER,
  56311. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
  56312. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
  56313. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
  56314. ZEND_NULL_HANDLER,
  56315. ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
  56316. ZEND_NULL_HANDLER,
  56317. ZEND_NULL_HANDLER,
  56318. ZEND_NULL_HANDLER,
  56319. ZEND_NULL_HANDLER,
  56320. ZEND_NULL_HANDLER,
  56321. ZEND_NULL_HANDLER,
  56322. ZEND_NULL_HANDLER,
  56323. ZEND_NULL_HANDLER,
  56324. ZEND_NULL_HANDLER,
  56325. ZEND_NULL_HANDLER,
  56326. ZEND_NULL_HANDLER,
  56327. ZEND_NULL_HANDLER,
  56328. ZEND_NULL_HANDLER,
  56329. ZEND_NULL_HANDLER,
  56330. ZEND_NULL_HANDLER,
  56331. ZEND_NULL_HANDLER,
  56332. ZEND_NULL_HANDLER,
  56333. ZEND_NULL_HANDLER,
  56334. ZEND_NULL_HANDLER,
  56335. ZEND_NULL_HANDLER,
  56336. ZEND_NULL_HANDLER,
  56337. ZEND_NULL_HANDLER,
  56338. ZEND_NULL_HANDLER,
  56339. ZEND_NULL_HANDLER,
  56340. ZEND_NULL_HANDLER,
  56341. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
  56342. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
  56343. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
  56344. ZEND_NULL_HANDLER,
  56345. ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
  56346. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
  56347. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
  56348. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
  56349. ZEND_NULL_HANDLER,
  56350. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
  56351. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
  56352. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
  56353. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
  56354. ZEND_NULL_HANDLER,
  56355. ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
  56356. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER,
  56357. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER,
  56358. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER,
  56359. ZEND_NULL_HANDLER,
  56360. ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER,
  56361. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
  56362. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
  56363. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
  56364. ZEND_NULL_HANDLER,
  56365. ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER,
  56366. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER,
  56367. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
  56368. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
  56369. ZEND_NULL_HANDLER,
  56370. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER,
  56371. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
  56372. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56373. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56374. ZEND_NULL_HANDLER,
  56375. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
  56376. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
  56377. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56378. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
  56379. ZEND_NULL_HANDLER,
  56380. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
  56381. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER,
  56382. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56383. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
  56384. ZEND_NULL_HANDLER,
  56385. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER,
  56386. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER,
  56387. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56388. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
  56389. ZEND_NULL_HANDLER,
  56390. ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER,
  56391. ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
  56392. ZEND_USER_OPCODE_SPEC_HANDLER,
  56393. ZEND_ASSERT_CHECK_SPEC_HANDLER,
  56394. ZEND_JMP_SET_SPEC_CONST_HANDLER,
  56395. ZEND_JMP_SET_SPEC_TMP_HANDLER,
  56396. ZEND_JMP_SET_SPEC_VAR_HANDLER,
  56397. ZEND_NULL_HANDLER,
  56398. ZEND_JMP_SET_SPEC_CV_HANDLER,
  56399. ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER,
  56400. ZEND_ADD_TRAIT_SPEC_HANDLER,
  56401. ZEND_BIND_TRAITS_SPEC_HANDLER,
  56402. ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER,
  56403. ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER,
  56404. ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
  56405. ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
  56406. ZEND_YIELD_SPEC_CONST_CONST_HANDLER,
  56407. ZEND_YIELD_SPEC_CONST_TMP_HANDLER,
  56408. ZEND_YIELD_SPEC_CONST_VAR_HANDLER,
  56409. ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER,
  56410. ZEND_YIELD_SPEC_CONST_CV_HANDLER,
  56411. ZEND_YIELD_SPEC_TMP_CONST_HANDLER,
  56412. ZEND_YIELD_SPEC_TMP_TMP_HANDLER,
  56413. ZEND_YIELD_SPEC_TMP_VAR_HANDLER,
  56414. ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER,
  56415. ZEND_YIELD_SPEC_TMP_CV_HANDLER,
  56416. ZEND_YIELD_SPEC_VAR_CONST_HANDLER,
  56417. ZEND_YIELD_SPEC_VAR_TMP_HANDLER,
  56418. ZEND_YIELD_SPEC_VAR_VAR_HANDLER,
  56419. ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER,
  56420. ZEND_YIELD_SPEC_VAR_CV_HANDLER,
  56421. ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER,
  56422. ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER,
  56423. ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER,
  56424. ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER,
  56425. ZEND_YIELD_SPEC_UNUSED_CV_HANDLER,
  56426. ZEND_YIELD_SPEC_CV_CONST_HANDLER,
  56427. ZEND_YIELD_SPEC_CV_TMP_HANDLER,
  56428. ZEND_YIELD_SPEC_CV_VAR_HANDLER,
  56429. ZEND_YIELD_SPEC_CV_UNUSED_HANDLER,
  56430. ZEND_YIELD_SPEC_CV_CV_HANDLER,
  56431. ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER,
  56432. ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER,
  56433. ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER,
  56434. ZEND_NULL_HANDLER,
  56435. ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER,
  56436. ZEND_FAST_CALL_SPEC_HANDLER,
  56437. ZEND_FAST_RET_SPEC_HANDLER,
  56438. ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER,
  56439. ZEND_SEND_UNPACK_SPEC_HANDLER,
  56440. ZEND_POW_SPEC_CONST_CONST_HANDLER,
  56441. ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
  56442. ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
  56443. ZEND_NULL_HANDLER,
  56444. ZEND_POW_SPEC_CONST_CV_HANDLER,
  56445. ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
  56446. ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
  56447. ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
  56448. ZEND_NULL_HANDLER,
  56449. ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
  56450. ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
  56451. ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
  56452. ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
  56453. ZEND_NULL_HANDLER,
  56454. ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
  56455. ZEND_NULL_HANDLER,
  56456. ZEND_NULL_HANDLER,
  56457. ZEND_NULL_HANDLER,
  56458. ZEND_NULL_HANDLER,
  56459. ZEND_NULL_HANDLER,
  56460. ZEND_POW_SPEC_CV_CONST_HANDLER,
  56461. ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
  56462. ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
  56463. ZEND_NULL_HANDLER,
  56464. ZEND_POW_SPEC_CV_CV_HANDLER,
  56465. ZEND_NULL_HANDLER,
  56466. ZEND_NULL_HANDLER,
  56467. ZEND_NULL_HANDLER,
  56468. ZEND_NULL_HANDLER,
  56469. ZEND_NULL_HANDLER,
  56470. ZEND_NULL_HANDLER,
  56471. ZEND_NULL_HANDLER,
  56472. ZEND_NULL_HANDLER,
  56473. ZEND_NULL_HANDLER,
  56474. ZEND_NULL_HANDLER,
  56475. ZEND_NULL_HANDLER,
  56476. ZEND_NULL_HANDLER,
  56477. ZEND_NULL_HANDLER,
  56478. ZEND_NULL_HANDLER,
  56479. ZEND_NULL_HANDLER,
  56480. ZEND_NULL_HANDLER,
  56481. ZEND_NULL_HANDLER,
  56482. ZEND_NULL_HANDLER,
  56483. ZEND_NULL_HANDLER,
  56484. ZEND_NULL_HANDLER,
  56485. ZEND_NULL_HANDLER,
  56486. ZEND_NULL_HANDLER,
  56487. ZEND_NULL_HANDLER,
  56488. ZEND_NULL_HANDLER,
  56489. ZEND_NULL_HANDLER,
  56490. ZEND_NULL_HANDLER,
  56491. ZEND_NULL_HANDLER,
  56492. ZEND_NULL_HANDLER,
  56493. ZEND_NULL_HANDLER,
  56494. ZEND_NULL_HANDLER,
  56495. ZEND_ASSIGN_POW_SPEC_VAR_CONST_HANDLER,
  56496. ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM_HANDLER,
  56497. ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ_HANDLER,
  56498. ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_HANDLER,
  56499. ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_HANDLER,
  56500. ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  56501. ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_HANDLER,
  56502. ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_HANDLER,
  56503. ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_HANDLER,
  56504. ZEND_NULL_HANDLER,
  56505. ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM_HANDLER,
  56506. ZEND_NULL_HANDLER,
  56507. ZEND_ASSIGN_POW_SPEC_VAR_CV_HANDLER,
  56508. ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM_HANDLER,
  56509. ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ_HANDLER,
  56510. ZEND_NULL_HANDLER,
  56511. ZEND_NULL_HANDLER,
  56512. ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ_HANDLER,
  56513. ZEND_NULL_HANDLER,
  56514. ZEND_NULL_HANDLER,
  56515. ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  56516. ZEND_NULL_HANDLER,
  56517. ZEND_NULL_HANDLER,
  56518. ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
  56519. ZEND_NULL_HANDLER,
  56520. ZEND_NULL_HANDLER,
  56521. ZEND_NULL_HANDLER,
  56522. ZEND_NULL_HANDLER,
  56523. ZEND_NULL_HANDLER,
  56524. ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ_HANDLER,
  56525. ZEND_ASSIGN_POW_SPEC_CV_CONST_HANDLER,
  56526. ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM_HANDLER,
  56527. ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ_HANDLER,
  56528. ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_HANDLER,
  56529. ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_HANDLER,
  56530. ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_HANDLER,
  56531. ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_HANDLER,
  56532. ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_HANDLER,
  56533. ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_HANDLER,
  56534. ZEND_NULL_HANDLER,
  56535. ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM_HANDLER,
  56536. ZEND_NULL_HANDLER,
  56537. ZEND_ASSIGN_POW_SPEC_CV_CV_HANDLER,
  56538. ZEND_ASSIGN_POW_SPEC_CV_CV_DIM_HANDLER,
  56539. ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ_HANDLER,
  56540. ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER,
  56541. ZEND_COALESCE_SPEC_CONST_HANDLER,
  56542. ZEND_COALESCE_SPEC_TMPVAR_HANDLER,
  56543. ZEND_COALESCE_SPEC_TMPVAR_HANDLER,
  56544. ZEND_NULL_HANDLER,
  56545. ZEND_COALESCE_SPEC_CV_HANDLER,
  56546. ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER,
  56547. ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
  56548. ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
  56549. ZEND_NULL_HANDLER,
  56550. ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER,
  56551. ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
  56552. ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
  56553. ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
  56554. ZEND_NULL_HANDLER,
  56555. ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
  56556. ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
  56557. ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
  56558. ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
  56559. ZEND_NULL_HANDLER,
  56560. ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
  56561. ZEND_NULL_HANDLER,
  56562. ZEND_NULL_HANDLER,
  56563. ZEND_NULL_HANDLER,
  56564. ZEND_NULL_HANDLER,
  56565. ZEND_NULL_HANDLER,
  56566. ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER,
  56567. ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
  56568. ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
  56569. ZEND_NULL_HANDLER,
  56570. ZEND_SPACESHIP_SPEC_CV_CV_HANDLER,
  56571. ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
  56572. ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_CONST_CONST_HANDLER,
  56573. ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST_HANDLER,
  56574. ZEND_NULL_HANDLER,
  56575. ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR_HANDLER,
  56576. ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED_HANDLER,
  56577. ZEND_NULL_HANDLER,
  56578. ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_HANDLER,
  56579. ZEND_NULL_HANDLER,
  56580. ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_HANDLER,
  56581. ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_HANDLER,
  56582. ZEND_NULL_HANDLER,
  56583. ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_HANDLER,
  56584. ZEND_NULL_HANDLER,
  56585. ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_HANDLER,
  56586. ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_HANDLER,
  56587. ZEND_NULL_HANDLER,
  56588. ZEND_NULL_HANDLER,
  56589. ZEND_NULL_HANDLER,
  56590. ZEND_NULL_HANDLER,
  56591. ZEND_NULL_HANDLER,
  56592. ZEND_NULL_HANDLER,
  56593. ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST_HANDLER,
  56594. ZEND_NULL_HANDLER,
  56595. ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR_HANDLER,
  56596. ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED_HANDLER,
  56597. ZEND_NULL_HANDLER,
  56598. ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST_HANDLER,
  56599. ZEND_NULL_HANDLER,
  56600. ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR_HANDLER,
  56601. ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED_HANDLER,
  56602. ZEND_NULL_HANDLER,
  56603. ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_HANDLER,
  56604. ZEND_NULL_HANDLER,
  56605. ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_HANDLER,
  56606. ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_HANDLER,
  56607. ZEND_NULL_HANDLER,
  56608. ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_HANDLER,
  56609. ZEND_NULL_HANDLER,
  56610. ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_HANDLER,
  56611. ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_HANDLER,
  56612. ZEND_NULL_HANDLER,
  56613. ZEND_NULL_HANDLER,
  56614. ZEND_NULL_HANDLER,
  56615. ZEND_NULL_HANDLER,
  56616. ZEND_NULL_HANDLER,
  56617. ZEND_NULL_HANDLER,
  56618. ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST_HANDLER,
  56619. ZEND_NULL_HANDLER,
  56620. ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR_HANDLER,
  56621. ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED_HANDLER,
  56622. ZEND_NULL_HANDLER,
  56623. ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST_HANDLER,
  56624. ZEND_NULL_HANDLER,
  56625. ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR_HANDLER,
  56626. ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED_HANDLER,
  56627. ZEND_NULL_HANDLER,
  56628. ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_HANDLER,
  56629. ZEND_NULL_HANDLER,
  56630. ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_HANDLER,
  56631. ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_HANDLER,
  56632. ZEND_NULL_HANDLER,
  56633. ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_HANDLER,
  56634. ZEND_NULL_HANDLER,
  56635. ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_HANDLER,
  56636. ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_HANDLER,
  56637. ZEND_NULL_HANDLER,
  56638. ZEND_NULL_HANDLER,
  56639. ZEND_NULL_HANDLER,
  56640. ZEND_NULL_HANDLER,
  56641. ZEND_NULL_HANDLER,
  56642. ZEND_NULL_HANDLER,
  56643. ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST_HANDLER,
  56644. ZEND_NULL_HANDLER,
  56645. ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR_HANDLER,
  56646. ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED_HANDLER,
  56647. ZEND_NULL_HANDLER,
  56648. ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST_HANDLER,
  56649. ZEND_NULL_HANDLER,
  56650. ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR_HANDLER,
  56651. ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED_HANDLER,
  56652. ZEND_NULL_HANDLER,
  56653. ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_HANDLER,
  56654. ZEND_NULL_HANDLER,
  56655. ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_HANDLER,
  56656. ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_HANDLER,
  56657. ZEND_NULL_HANDLER,
  56658. ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_HANDLER,
  56659. ZEND_NULL_HANDLER,
  56660. ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_HANDLER,
  56661. ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_HANDLER,
  56662. ZEND_NULL_HANDLER,
  56663. ZEND_NULL_HANDLER,
  56664. ZEND_NULL_HANDLER,
  56665. ZEND_NULL_HANDLER,
  56666. ZEND_NULL_HANDLER,
  56667. ZEND_NULL_HANDLER,
  56668. ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST_HANDLER,
  56669. ZEND_NULL_HANDLER,
  56670. ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR_HANDLER,
  56671. ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED_HANDLER,
  56672. ZEND_NULL_HANDLER,
  56673. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
  56674. ZEND_NULL_HANDLER,
  56675. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR_HANDLER,
  56676. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
  56677. ZEND_NULL_HANDLER,
  56678. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER,
  56679. ZEND_NULL_HANDLER,
  56680. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_HANDLER,
  56681. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
  56682. ZEND_NULL_HANDLER,
  56683. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER,
  56684. ZEND_NULL_HANDLER,
  56685. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_HANDLER,
  56686. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
  56687. ZEND_NULL_HANDLER,
  56688. ZEND_NULL_HANDLER,
  56689. ZEND_NULL_HANDLER,
  56690. ZEND_NULL_HANDLER,
  56691. ZEND_NULL_HANDLER,
  56692. ZEND_NULL_HANDLER,
  56693. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST_HANDLER,
  56694. ZEND_NULL_HANDLER,
  56695. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR_HANDLER,
  56696. ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
  56697. ZEND_NULL_HANDLER,
  56698. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST_HANDLER,
  56699. ZEND_NULL_HANDLER,
  56700. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR_HANDLER,
  56701. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED_HANDLER,
  56702. ZEND_NULL_HANDLER,
  56703. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_HANDLER,
  56704. ZEND_NULL_HANDLER,
  56705. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_HANDLER,
  56706. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
  56707. ZEND_NULL_HANDLER,
  56708. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_HANDLER,
  56709. ZEND_NULL_HANDLER,
  56710. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_HANDLER,
  56711. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
  56712. ZEND_NULL_HANDLER,
  56713. ZEND_NULL_HANDLER,
  56714. ZEND_NULL_HANDLER,
  56715. ZEND_NULL_HANDLER,
  56716. ZEND_NULL_HANDLER,
  56717. ZEND_NULL_HANDLER,
  56718. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST_HANDLER,
  56719. ZEND_NULL_HANDLER,
  56720. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR_HANDLER,
  56721. ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED_HANDLER,
  56722. ZEND_NULL_HANDLER,
  56723. ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST_HANDLER,
  56724. ZEND_NULL_HANDLER,
  56725. ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR_HANDLER,
  56726. ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER,
  56727. ZEND_NULL_HANDLER,
  56728. ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER,
  56729. ZEND_NULL_HANDLER,
  56730. ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER,
  56731. ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER,
  56732. ZEND_NULL_HANDLER,
  56733. ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER,
  56734. ZEND_NULL_HANDLER,
  56735. ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER,
  56736. ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER,
  56737. ZEND_NULL_HANDLER,
  56738. ZEND_NULL_HANDLER,
  56739. ZEND_NULL_HANDLER,
  56740. ZEND_NULL_HANDLER,
  56741. ZEND_NULL_HANDLER,
  56742. ZEND_NULL_HANDLER,
  56743. ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST_HANDLER,
  56744. ZEND_NULL_HANDLER,
  56745. ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR_HANDLER,
  56746. ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED_HANDLER,
  56747. ZEND_NULL_HANDLER,
  56748. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST_HANDLER,
  56749. ZEND_NULL_HANDLER,
  56750. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR_HANDLER,
  56751. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER,
  56752. ZEND_NULL_HANDLER,
  56753. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER,
  56754. ZEND_NULL_HANDLER,
  56755. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER,
  56756. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER,
  56757. ZEND_NULL_HANDLER,
  56758. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER,
  56759. ZEND_NULL_HANDLER,
  56760. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER,
  56761. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER,
  56762. ZEND_NULL_HANDLER,
  56763. ZEND_NULL_HANDLER,
  56764. ZEND_NULL_HANDLER,
  56765. ZEND_NULL_HANDLER,
  56766. ZEND_NULL_HANDLER,
  56767. ZEND_NULL_HANDLER,
  56768. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST_HANDLER,
  56769. ZEND_NULL_HANDLER,
  56770. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR_HANDLER,
  56771. ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED_HANDLER,
  56772. ZEND_NULL_HANDLER,
  56773. ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER,
  56774. ZEND_NULL_HANDLER,
  56775. ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER,
  56776. ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
  56777. ZEND_NULL_HANDLER,
  56778. ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER,
  56779. ZEND_BIND_STATIC_SPEC_CV_CONST_HANDLER,
  56780. ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER,
  56781. ZEND_SEND_FUNC_ARG_SPEC_VAR_HANDLER,
  56782. ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER,
  56783. ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER,
  56784. ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56785. ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56786. ZEND_NULL_HANDLER,
  56787. ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56788. ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER,
  56789. ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
  56790. ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
  56791. ZEND_NULL_HANDLER,
  56792. ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
  56793. ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER,
  56794. ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER,
  56795. ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER,
  56796. ZEND_NULL_HANDLER,
  56797. ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER,
  56798. ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER,
  56799. ZEND_COUNT_SPEC_TMP_UNUSED_HANDLER,
  56800. ZEND_COUNT_SPEC_VAR_UNUSED_HANDLER,
  56801. ZEND_NULL_HANDLER,
  56802. ZEND_COUNT_SPEC_CV_UNUSED_HANDLER,
  56803. ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER,
  56804. ZEND_GET_CLASS_SPEC_TMP_UNUSED_HANDLER,
  56805. ZEND_GET_CLASS_SPEC_VAR_UNUSED_HANDLER,
  56806. ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
  56807. ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER,
  56808. ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
  56809. ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER,
  56810. ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER,
  56811. ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER,
  56812. ZEND_NULL_HANDLER,
  56813. ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER,
  56814. ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
  56815. ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER,
  56816. ZEND_NULL_HANDLER,
  56817. ZEND_NULL_HANDLER,
  56818. ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
  56819. ZEND_NULL_HANDLER,
  56820. ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER,
  56821. ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER,
  56822. ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER,
  56823. ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER,
  56824. ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
  56825. ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
  56826. ZEND_NULL_HANDLER,
  56827. ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER,
  56828. ZEND_JMP_FORWARD_SPEC_HANDLER,
  56829. ZEND_NULL_HANDLER,
  56830. ZEND_NULL_HANDLER,
  56831. ZEND_NULL_HANDLER,
  56832. ZEND_NULL_HANDLER,
  56833. ZEND_NULL_HANDLER,
  56834. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56835. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56836. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56837. ZEND_NULL_HANDLER,
  56838. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56839. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56840. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56841. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56842. ZEND_NULL_HANDLER,
  56843. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56844. ZEND_NULL_HANDLER,
  56845. ZEND_NULL_HANDLER,
  56846. ZEND_NULL_HANDLER,
  56847. ZEND_NULL_HANDLER,
  56848. ZEND_NULL_HANDLER,
  56849. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56850. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56851. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56852. ZEND_NULL_HANDLER,
  56853. ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56854. ZEND_NULL_HANDLER,
  56855. ZEND_NULL_HANDLER,
  56856. ZEND_NULL_HANDLER,
  56857. ZEND_NULL_HANDLER,
  56858. ZEND_NULL_HANDLER,
  56859. ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56860. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56861. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56862. ZEND_NULL_HANDLER,
  56863. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56864. ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56865. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56866. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56867. ZEND_NULL_HANDLER,
  56868. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56869. ZEND_NULL_HANDLER,
  56870. ZEND_NULL_HANDLER,
  56871. ZEND_NULL_HANDLER,
  56872. ZEND_NULL_HANDLER,
  56873. ZEND_NULL_HANDLER,
  56874. ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56875. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56876. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56877. ZEND_NULL_HANDLER,
  56878. ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56879. ZEND_NULL_HANDLER,
  56880. ZEND_NULL_HANDLER,
  56881. ZEND_NULL_HANDLER,
  56882. ZEND_NULL_HANDLER,
  56883. ZEND_NULL_HANDLER,
  56884. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56885. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56886. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56887. ZEND_NULL_HANDLER,
  56888. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56889. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56890. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56891. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56892. ZEND_NULL_HANDLER,
  56893. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56894. ZEND_NULL_HANDLER,
  56895. ZEND_NULL_HANDLER,
  56896. ZEND_NULL_HANDLER,
  56897. ZEND_NULL_HANDLER,
  56898. ZEND_NULL_HANDLER,
  56899. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56900. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56901. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56902. ZEND_NULL_HANDLER,
  56903. ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56904. ZEND_NULL_HANDLER,
  56905. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
  56906. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
  56907. ZEND_NULL_HANDLER,
  56908. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
  56909. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56910. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56911. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56912. ZEND_NULL_HANDLER,
  56913. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56914. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56915. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56916. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56917. ZEND_NULL_HANDLER,
  56918. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56919. ZEND_NULL_HANDLER,
  56920. ZEND_NULL_HANDLER,
  56921. ZEND_NULL_HANDLER,
  56922. ZEND_NULL_HANDLER,
  56923. ZEND_NULL_HANDLER,
  56924. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56925. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56926. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56927. ZEND_NULL_HANDLER,
  56928. ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56929. ZEND_NULL_HANDLER,
  56930. ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  56931. ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  56932. ZEND_NULL_HANDLER,
  56933. ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  56934. ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56935. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56936. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56937. ZEND_NULL_HANDLER,
  56938. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56939. ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56940. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56941. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56942. ZEND_NULL_HANDLER,
  56943. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56944. ZEND_NULL_HANDLER,
  56945. ZEND_NULL_HANDLER,
  56946. ZEND_NULL_HANDLER,
  56947. ZEND_NULL_HANDLER,
  56948. ZEND_NULL_HANDLER,
  56949. ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  56950. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56951. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56952. ZEND_NULL_HANDLER,
  56953. ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56954. ZEND_NULL_HANDLER,
  56955. ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  56956. ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  56957. ZEND_NULL_HANDLER,
  56958. ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  56959. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56960. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56961. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56962. ZEND_NULL_HANDLER,
  56963. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56964. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56965. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56966. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56967. ZEND_NULL_HANDLER,
  56968. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56969. ZEND_NULL_HANDLER,
  56970. ZEND_NULL_HANDLER,
  56971. ZEND_NULL_HANDLER,
  56972. ZEND_NULL_HANDLER,
  56973. ZEND_NULL_HANDLER,
  56974. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  56975. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56976. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56977. ZEND_NULL_HANDLER,
  56978. ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56979. ZEND_NULL_HANDLER,
  56980. ZEND_NULL_HANDLER,
  56981. ZEND_NULL_HANDLER,
  56982. ZEND_NULL_HANDLER,
  56983. ZEND_NULL_HANDLER,
  56984. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56985. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56986. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56987. ZEND_NULL_HANDLER,
  56988. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56989. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  56990. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56991. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56992. ZEND_NULL_HANDLER,
  56993. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  56994. ZEND_NULL_HANDLER,
  56995. ZEND_NULL_HANDLER,
  56996. ZEND_NULL_HANDLER,
  56997. ZEND_NULL_HANDLER,
  56998. ZEND_NULL_HANDLER,
  56999. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
  57000. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57001. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57002. ZEND_NULL_HANDLER,
  57003. ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57004. ZEND_NULL_HANDLER,
  57005. ZEND_NULL_HANDLER,
  57006. ZEND_NULL_HANDLER,
  57007. ZEND_NULL_HANDLER,
  57008. ZEND_NULL_HANDLER,
  57009. ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57010. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57011. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57012. ZEND_NULL_HANDLER,
  57013. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57014. ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57015. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57016. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57017. ZEND_NULL_HANDLER,
  57018. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57019. ZEND_NULL_HANDLER,
  57020. ZEND_NULL_HANDLER,
  57021. ZEND_NULL_HANDLER,
  57022. ZEND_NULL_HANDLER,
  57023. ZEND_NULL_HANDLER,
  57024. ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57025. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57026. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57027. ZEND_NULL_HANDLER,
  57028. ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57029. ZEND_NULL_HANDLER,
  57030. ZEND_NULL_HANDLER,
  57031. ZEND_NULL_HANDLER,
  57032. ZEND_NULL_HANDLER,
  57033. ZEND_NULL_HANDLER,
  57034. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57035. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57036. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57037. ZEND_NULL_HANDLER,
  57038. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57039. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57040. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57041. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57042. ZEND_NULL_HANDLER,
  57043. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57044. ZEND_NULL_HANDLER,
  57045. ZEND_NULL_HANDLER,
  57046. ZEND_NULL_HANDLER,
  57047. ZEND_NULL_HANDLER,
  57048. ZEND_NULL_HANDLER,
  57049. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57050. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57051. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57052. ZEND_NULL_HANDLER,
  57053. ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57054. ZEND_NULL_HANDLER,
  57055. ZEND_NULL_HANDLER,
  57056. ZEND_NULL_HANDLER,
  57057. ZEND_NULL_HANDLER,
  57058. ZEND_NULL_HANDLER,
  57059. ZEND_NULL_HANDLER,
  57060. ZEND_NULL_HANDLER,
  57061. ZEND_NULL_HANDLER,
  57062. ZEND_NULL_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_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57070. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57071. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57072. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57073. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57074. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57075. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57076. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57077. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57078. ZEND_NULL_HANDLER,
  57079. ZEND_NULL_HANDLER,
  57080. ZEND_NULL_HANDLER,
  57081. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57082. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57083. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57084. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57085. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57086. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57087. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57088. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57089. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57090. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57091. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57092. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57093. ZEND_NULL_HANDLER,
  57094. ZEND_NULL_HANDLER,
  57095. ZEND_NULL_HANDLER,
  57096. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57097. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57098. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_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_NULL_HANDLER,
  57109. ZEND_NULL_HANDLER,
  57110. ZEND_NULL_HANDLER,
  57111. ZEND_NULL_HANDLER,
  57112. ZEND_NULL_HANDLER,
  57113. ZEND_NULL_HANDLER,
  57114. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57115. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57116. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57117. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57118. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57119. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57120. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57121. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57122. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57123. ZEND_NULL_HANDLER,
  57124. ZEND_NULL_HANDLER,
  57125. ZEND_NULL_HANDLER,
  57126. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57127. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57128. ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57129. ZEND_NULL_HANDLER,
  57130. ZEND_NULL_HANDLER,
  57131. ZEND_NULL_HANDLER,
  57132. ZEND_NULL_HANDLER,
  57133. ZEND_NULL_HANDLER,
  57134. ZEND_NULL_HANDLER,
  57135. ZEND_NULL_HANDLER,
  57136. ZEND_NULL_HANDLER,
  57137. ZEND_NULL_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_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57145. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57146. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57147. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57148. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57149. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57150. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57151. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57152. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57153. ZEND_NULL_HANDLER,
  57154. ZEND_NULL_HANDLER,
  57155. ZEND_NULL_HANDLER,
  57156. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57157. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57158. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57159. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57160. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57161. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57162. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57163. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57164. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57165. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57166. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57167. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57168. ZEND_NULL_HANDLER,
  57169. ZEND_NULL_HANDLER,
  57170. ZEND_NULL_HANDLER,
  57171. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57172. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57173. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57174. ZEND_NULL_HANDLER,
  57175. ZEND_NULL_HANDLER,
  57176. ZEND_NULL_HANDLER,
  57177. ZEND_NULL_HANDLER,
  57178. ZEND_NULL_HANDLER,
  57179. ZEND_NULL_HANDLER,
  57180. ZEND_NULL_HANDLER,
  57181. ZEND_NULL_HANDLER,
  57182. ZEND_NULL_HANDLER,
  57183. ZEND_NULL_HANDLER,
  57184. ZEND_NULL_HANDLER,
  57185. ZEND_NULL_HANDLER,
  57186. ZEND_NULL_HANDLER,
  57187. ZEND_NULL_HANDLER,
  57188. ZEND_NULL_HANDLER,
  57189. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57190. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57191. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57192. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57193. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57194. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57195. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57196. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57197. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57198. ZEND_NULL_HANDLER,
  57199. ZEND_NULL_HANDLER,
  57200. ZEND_NULL_HANDLER,
  57201. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57202. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57203. ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57204. ZEND_NULL_HANDLER,
  57205. ZEND_NULL_HANDLER,
  57206. ZEND_NULL_HANDLER,
  57207. ZEND_NULL_HANDLER,
  57208. ZEND_NULL_HANDLER,
  57209. ZEND_NULL_HANDLER,
  57210. ZEND_NULL_HANDLER,
  57211. ZEND_NULL_HANDLER,
  57212. ZEND_NULL_HANDLER,
  57213. ZEND_NULL_HANDLER,
  57214. ZEND_NULL_HANDLER,
  57215. ZEND_NULL_HANDLER,
  57216. ZEND_NULL_HANDLER,
  57217. ZEND_NULL_HANDLER,
  57218. ZEND_NULL_HANDLER,
  57219. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57220. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57221. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57222. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57223. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57224. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57225. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57226. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57227. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57228. ZEND_NULL_HANDLER,
  57229. ZEND_NULL_HANDLER,
  57230. ZEND_NULL_HANDLER,
  57231. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57232. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57233. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57234. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57235. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57236. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57237. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57238. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57239. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57240. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57241. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57242. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57243. ZEND_NULL_HANDLER,
  57244. ZEND_NULL_HANDLER,
  57245. ZEND_NULL_HANDLER,
  57246. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57247. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57248. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57249. ZEND_NULL_HANDLER,
  57250. ZEND_NULL_HANDLER,
  57251. ZEND_NULL_HANDLER,
  57252. ZEND_NULL_HANDLER,
  57253. ZEND_NULL_HANDLER,
  57254. ZEND_NULL_HANDLER,
  57255. ZEND_NULL_HANDLER,
  57256. ZEND_NULL_HANDLER,
  57257. ZEND_NULL_HANDLER,
  57258. ZEND_NULL_HANDLER,
  57259. ZEND_NULL_HANDLER,
  57260. ZEND_NULL_HANDLER,
  57261. ZEND_NULL_HANDLER,
  57262. ZEND_NULL_HANDLER,
  57263. ZEND_NULL_HANDLER,
  57264. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57265. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57266. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57267. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57268. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57269. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57270. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57271. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57272. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57273. ZEND_NULL_HANDLER,
  57274. ZEND_NULL_HANDLER,
  57275. ZEND_NULL_HANDLER,
  57276. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57277. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57278. ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57279. ZEND_NULL_HANDLER,
  57280. ZEND_NULL_HANDLER,
  57281. ZEND_NULL_HANDLER,
  57282. ZEND_NULL_HANDLER,
  57283. ZEND_NULL_HANDLER,
  57284. ZEND_NULL_HANDLER,
  57285. ZEND_NULL_HANDLER,
  57286. ZEND_NULL_HANDLER,
  57287. ZEND_NULL_HANDLER,
  57288. ZEND_NULL_HANDLER,
  57289. ZEND_NULL_HANDLER,
  57290. ZEND_NULL_HANDLER,
  57291. ZEND_NULL_HANDLER,
  57292. ZEND_NULL_HANDLER,
  57293. ZEND_NULL_HANDLER,
  57294. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57295. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57296. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57297. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57298. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57299. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57300. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57301. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57302. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57303. ZEND_NULL_HANDLER,
  57304. ZEND_NULL_HANDLER,
  57305. ZEND_NULL_HANDLER,
  57306. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57307. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57308. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57309. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57310. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57311. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57312. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57313. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57314. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57315. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57316. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57317. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57318. ZEND_NULL_HANDLER,
  57319. ZEND_NULL_HANDLER,
  57320. ZEND_NULL_HANDLER,
  57321. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57322. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57323. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57324. ZEND_NULL_HANDLER,
  57325. ZEND_NULL_HANDLER,
  57326. ZEND_NULL_HANDLER,
  57327. ZEND_NULL_HANDLER,
  57328. ZEND_NULL_HANDLER,
  57329. ZEND_NULL_HANDLER,
  57330. ZEND_NULL_HANDLER,
  57331. ZEND_NULL_HANDLER,
  57332. ZEND_NULL_HANDLER,
  57333. ZEND_NULL_HANDLER,
  57334. ZEND_NULL_HANDLER,
  57335. ZEND_NULL_HANDLER,
  57336. ZEND_NULL_HANDLER,
  57337. ZEND_NULL_HANDLER,
  57338. ZEND_NULL_HANDLER,
  57339. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57340. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57341. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57342. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57343. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57344. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57345. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57346. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57347. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57348. ZEND_NULL_HANDLER,
  57349. ZEND_NULL_HANDLER,
  57350. ZEND_NULL_HANDLER,
  57351. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57352. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57353. ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57354. ZEND_NULL_HANDLER,
  57355. ZEND_NULL_HANDLER,
  57356. ZEND_NULL_HANDLER,
  57357. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57358. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57359. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57360. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57361. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57362. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57363. ZEND_NULL_HANDLER,
  57364. ZEND_NULL_HANDLER,
  57365. ZEND_NULL_HANDLER,
  57366. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57367. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57368. ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57369. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57370. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57371. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57372. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57373. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57374. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57375. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57376. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57377. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57378. ZEND_NULL_HANDLER,
  57379. ZEND_NULL_HANDLER,
  57380. ZEND_NULL_HANDLER,
  57381. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57382. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57383. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57384. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57385. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57386. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57387. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57388. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57389. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57390. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57391. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57392. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57393. ZEND_NULL_HANDLER,
  57394. ZEND_NULL_HANDLER,
  57395. ZEND_NULL_HANDLER,
  57396. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57397. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57398. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57399. ZEND_NULL_HANDLER,
  57400. ZEND_NULL_HANDLER,
  57401. ZEND_NULL_HANDLER,
  57402. ZEND_NULL_HANDLER,
  57403. ZEND_NULL_HANDLER,
  57404. ZEND_NULL_HANDLER,
  57405. ZEND_NULL_HANDLER,
  57406. ZEND_NULL_HANDLER,
  57407. ZEND_NULL_HANDLER,
  57408. ZEND_NULL_HANDLER,
  57409. ZEND_NULL_HANDLER,
  57410. ZEND_NULL_HANDLER,
  57411. ZEND_NULL_HANDLER,
  57412. ZEND_NULL_HANDLER,
  57413. ZEND_NULL_HANDLER,
  57414. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57415. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57416. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57417. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57418. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57419. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57420. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57421. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57422. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57423. ZEND_NULL_HANDLER,
  57424. ZEND_NULL_HANDLER,
  57425. ZEND_NULL_HANDLER,
  57426. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57427. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57428. ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57429. ZEND_NULL_HANDLER,
  57430. ZEND_NULL_HANDLER,
  57431. ZEND_NULL_HANDLER,
  57432. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57433. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57434. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57435. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57436. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57437. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57438. ZEND_NULL_HANDLER,
  57439. ZEND_NULL_HANDLER,
  57440. ZEND_NULL_HANDLER,
  57441. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57442. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57443. ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57444. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57445. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57446. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57447. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57448. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57449. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57450. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57451. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57452. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57453. ZEND_NULL_HANDLER,
  57454. ZEND_NULL_HANDLER,
  57455. ZEND_NULL_HANDLER,
  57456. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57457. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57458. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57459. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57460. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57461. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57462. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57463. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57464. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57465. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57466. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57467. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57468. ZEND_NULL_HANDLER,
  57469. ZEND_NULL_HANDLER,
  57470. ZEND_NULL_HANDLER,
  57471. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57472. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57473. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57474. ZEND_NULL_HANDLER,
  57475. ZEND_NULL_HANDLER,
  57476. ZEND_NULL_HANDLER,
  57477. ZEND_NULL_HANDLER,
  57478. ZEND_NULL_HANDLER,
  57479. ZEND_NULL_HANDLER,
  57480. ZEND_NULL_HANDLER,
  57481. ZEND_NULL_HANDLER,
  57482. ZEND_NULL_HANDLER,
  57483. ZEND_NULL_HANDLER,
  57484. ZEND_NULL_HANDLER,
  57485. ZEND_NULL_HANDLER,
  57486. ZEND_NULL_HANDLER,
  57487. ZEND_NULL_HANDLER,
  57488. ZEND_NULL_HANDLER,
  57489. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57490. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57491. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57492. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57493. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57494. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57495. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57496. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57497. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57498. ZEND_NULL_HANDLER,
  57499. ZEND_NULL_HANDLER,
  57500. ZEND_NULL_HANDLER,
  57501. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57502. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57503. ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57504. ZEND_NULL_HANDLER,
  57505. ZEND_NULL_HANDLER,
  57506. ZEND_NULL_HANDLER,
  57507. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57508. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57509. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57510. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57511. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57512. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57513. ZEND_NULL_HANDLER,
  57514. ZEND_NULL_HANDLER,
  57515. ZEND_NULL_HANDLER,
  57516. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
  57517. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57518. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57519. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57520. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57521. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57522. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57523. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57524. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57525. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57526. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57527. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57528. ZEND_NULL_HANDLER,
  57529. ZEND_NULL_HANDLER,
  57530. ZEND_NULL_HANDLER,
  57531. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57532. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57533. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57534. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57535. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57536. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57537. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57538. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57539. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57540. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57541. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57542. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57543. ZEND_NULL_HANDLER,
  57544. ZEND_NULL_HANDLER,
  57545. ZEND_NULL_HANDLER,
  57546. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57547. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57548. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57549. ZEND_NULL_HANDLER,
  57550. ZEND_NULL_HANDLER,
  57551. ZEND_NULL_HANDLER,
  57552. ZEND_NULL_HANDLER,
  57553. ZEND_NULL_HANDLER,
  57554. ZEND_NULL_HANDLER,
  57555. ZEND_NULL_HANDLER,
  57556. ZEND_NULL_HANDLER,
  57557. ZEND_NULL_HANDLER,
  57558. ZEND_NULL_HANDLER,
  57559. ZEND_NULL_HANDLER,
  57560. ZEND_NULL_HANDLER,
  57561. ZEND_NULL_HANDLER,
  57562. ZEND_NULL_HANDLER,
  57563. ZEND_NULL_HANDLER,
  57564. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
  57565. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57566. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57567. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57568. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57569. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57570. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57571. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57572. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57573. ZEND_NULL_HANDLER,
  57574. ZEND_NULL_HANDLER,
  57575. ZEND_NULL_HANDLER,
  57576. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57577. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57578. ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57579. ZEND_NULL_HANDLER,
  57580. ZEND_NULL_HANDLER,
  57581. ZEND_NULL_HANDLER,
  57582. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57583. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57584. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57585. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57586. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57587. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57588. ZEND_NULL_HANDLER,
  57589. ZEND_NULL_HANDLER,
  57590. ZEND_NULL_HANDLER,
  57591. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
  57592. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
  57593. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
  57594. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57595. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57596. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57597. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57598. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57599. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57600. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57601. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57602. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57603. ZEND_NULL_HANDLER,
  57604. ZEND_NULL_HANDLER,
  57605. ZEND_NULL_HANDLER,
  57606. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57607. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57608. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57609. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57610. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57611. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57612. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57613. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57614. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57615. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57616. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57617. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57618. ZEND_NULL_HANDLER,
  57619. ZEND_NULL_HANDLER,
  57620. ZEND_NULL_HANDLER,
  57621. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57622. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57623. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57624. ZEND_NULL_HANDLER,
  57625. ZEND_NULL_HANDLER,
  57626. ZEND_NULL_HANDLER,
  57627. ZEND_NULL_HANDLER,
  57628. ZEND_NULL_HANDLER,
  57629. ZEND_NULL_HANDLER,
  57630. ZEND_NULL_HANDLER,
  57631. ZEND_NULL_HANDLER,
  57632. ZEND_NULL_HANDLER,
  57633. ZEND_NULL_HANDLER,
  57634. ZEND_NULL_HANDLER,
  57635. ZEND_NULL_HANDLER,
  57636. ZEND_NULL_HANDLER,
  57637. ZEND_NULL_HANDLER,
  57638. ZEND_NULL_HANDLER,
  57639. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
  57640. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
  57641. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
  57642. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57643. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57644. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57645. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57646. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57647. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57648. ZEND_NULL_HANDLER,
  57649. ZEND_NULL_HANDLER,
  57650. ZEND_NULL_HANDLER,
  57651. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
  57652. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
  57653. ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
  57654. ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
  57655. ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
  57656. ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
  57657. ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
  57658. ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED_HANDLER,
  57659. ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED_HANDLER,
  57660. ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
  57661. ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
  57662. ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
  57663. ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
  57664. ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED_HANDLER,
  57665. ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED_HANDLER,
  57666. ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
  57667. ZEND_POST_INC_LONG_SPEC_CV_HANDLER,
  57668. ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_CV_HANDLER,
  57669. ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
  57670. ZEND_POST_DEC_LONG_SPEC_CV_HANDLER,
  57671. ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_CV_HANDLER,
  57672. ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER,
  57673. ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
  57674. ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
  57675. ZEND_NULL_HANDLER,
  57676. ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
  57677. ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER,
  57678. ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
  57679. ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
  57680. ZEND_NULL_HANDLER,
  57681. ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
  57682. ZEND_NULL_HANDLER,
  57683. ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
  57684. ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
  57685. ZEND_NULL_HANDLER,
  57686. ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
  57687. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
  57688. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57689. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57690. ZEND_NULL_HANDLER,
  57691. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57692. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
  57693. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57694. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57695. ZEND_NULL_HANDLER,
  57696. ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
  57697. ZEND_NULL_HANDLER,
  57698. ZEND_NULL_HANDLER,
  57699. ZEND_NULL_HANDLER,
  57700. ZEND_NULL_HANDLER,
  57701. ZEND_NULL_HANDLER,
  57702. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER,
  57703. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
  57704. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
  57705. ZEND_NULL_HANDLER,
  57706. ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
  57707. ZEND_NULL_HANDLER,
  57708. ZEND_NULL_HANDLER,
  57709. ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER,
  57710. ZEND_NULL_HANDLER,
  57711. ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER,
  57712. ZEND_NULL_HANDLER,
  57713. ZEND_NULL_HANDLER,
  57714. ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_HANDLER,
  57715. ZEND_NULL_HANDLER,
  57716. ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_HANDLER,
  57717. ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER,
  57718. ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER,
  57719. ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
  57720. ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER,
  57721. ZEND_NULL_HANDLER
  57722. };
  57723. static const uint32_t specs[] = {
  57724. 0,
  57725. 1 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57726. 26 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57727. 51 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57728. 76 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57729. 101 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57730. 126 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57731. 151 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57732. 176 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57733. 201 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57734. 226 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57735. 251 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57736. 276 | SPEC_RULE_OP1,
  57737. 281 | SPEC_RULE_OP1,
  57738. 286 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57739. 311 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57740. 336 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57741. 361 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57742. 386 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
  57743. 411 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57744. 436 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57745. 461 | SPEC_RULE_OP1,
  57746. 466 | SPEC_RULE_OP1,
  57747. 471 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
  57748. 546 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
  57749. 621 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
  57750. 696 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
  57751. 771 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
  57752. 846 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
  57753. 921 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
  57754. 996 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
  57755. 1071 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
  57756. 1146 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
  57757. 1221 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
  57758. 1296 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
  57759. 1306 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
  57760. 1316 | SPEC_RULE_OP1,
  57761. 1321 | SPEC_RULE_OP1,
  57762. 1326 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_RETVAL,
  57763. 1376 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57764. 1401 | SPEC_RULE_OP1,
  57765. 1406,
  57766. 1407,
  57767. 1408 | SPEC_RULE_OP1,
  57768. 1413 | SPEC_RULE_OP1,
  57769. 1418 | SPEC_RULE_OP1,
  57770. 1423 | SPEC_RULE_OP1,
  57771. 1428 | SPEC_RULE_OP1,
  57772. 1433 | SPEC_RULE_OP2,
  57773. 1438,
  57774. 1439 | SPEC_RULE_QUICK_ARG,
  57775. 1441 | SPEC_RULE_OP1,
  57776. 1446 | SPEC_RULE_OP1,
  57777. 1451 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57778. 1476 | SPEC_RULE_OP2,
  57779. 1481 | SPEC_RULE_OP2,
  57780. 1486 | SPEC_RULE_OP2,
  57781. 1491,
  57782. 1492,
  57783. 1493,
  57784. 1494 | SPEC_RULE_RETVAL,
  57785. 1496,
  57786. 1497 | SPEC_RULE_OP1,
  57787. 1502,
  57788. 1503,
  57789. 1504 | SPEC_RULE_OP1,
  57790. 1509 | SPEC_RULE_OP1 | SPEC_RULE_QUICK_ARG,
  57791. 1519 | SPEC_RULE_OP1,
  57792. 1524 | SPEC_RULE_OP1,
  57793. 1529,
  57794. 1530,
  57795. 1531 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57796. 1556 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57797. 1581 | SPEC_RULE_OP1,
  57798. 1586 | SPEC_RULE_OP1,
  57799. 1591 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57800. 1616 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57801. 1641 | SPEC_RULE_OP1,
  57802. 1646,
  57803. 1647 | SPEC_RULE_OP1,
  57804. 1652 | SPEC_RULE_OP1,
  57805. 1657 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57806. 1682 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57807. 1707 | SPEC_RULE_OP1,
  57808. 1712 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57809. 1737 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57810. 1762 | SPEC_RULE_OP1,
  57811. 1767 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57812. 1792 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57813. 1817 | SPEC_RULE_OP1,
  57814. 1822 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57815. 1847 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57816. 1872 | SPEC_RULE_OP1,
  57817. 1877 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57818. 1902 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57819. 1927 | SPEC_RULE_OP1,
  57820. 1932 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57821. 1957 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57822. 1982 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57823. 2007,
  57824. 2008 | SPEC_RULE_QUICK_ARG,
  57825. 2010,
  57826. 2011,
  57827. 2012,
  57828. 2013,
  57829. 2014,
  57830. 2015,
  57831. 2016,
  57832. 2017 | SPEC_RULE_OP1,
  57833. 2022 | SPEC_RULE_OP2,
  57834. 2027 | SPEC_RULE_OP1,
  57835. 2032 | SPEC_RULE_OP1,
  57836. 2037 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57837. 2062 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57838. 2087 | SPEC_RULE_OP1,
  57839. 2092 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57840. 2117 | SPEC_RULE_OP1 | SPEC_RULE_QUICK_ARG,
  57841. 2127 | SPEC_RULE_OP1,
  57842. 2132 | SPEC_RULE_OP2,
  57843. 2137,
  57844. 2138 | SPEC_RULE_OP1,
  57845. 2143 | SPEC_RULE_OP1,
  57846. 2148,
  57847. 2149 | SPEC_RULE_OP1,
  57848. 2154 | SPEC_RULE_OP1,
  57849. 2159 | SPEC_RULE_OP1,
  57850. 2164,
  57851. 2165,
  57852. 2166 | SPEC_RULE_OP2,
  57853. 2171 | SPEC_RULE_RETVAL,
  57854. 2173 | SPEC_RULE_RETVAL,
  57855. 2175 | SPEC_RULE_RETVAL,
  57856. 2177 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57857. 2202 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57858. 2227 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57859. 2252 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57860. 2277 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
  57861. 2402,
  57862. 2403 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57863. 2428,
  57864. 2429,
  57865. 2430,
  57866. 2431 | SPEC_RULE_OP1,
  57867. 2436,
  57868. 2437,
  57869. 2438,
  57870. 2439,
  57871. 2440 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
  57872. 2565 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57873. 2590,
  57874. 2591,
  57875. 2592,
  57876. 2593 | SPEC_RULE_OP1,
  57877. 2598,
  57878. 2599,
  57879. 2600,
  57880. 2601,
  57881. 2602,
  57882. 2603,
  57883. 2604,
  57884. 2605 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57885. 2630 | SPEC_RULE_OP1,
  57886. 2635,
  57887. 2636,
  57888. 2637,
  57889. 2638,
  57890. 2639 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57891. 2664 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
  57892. 2739,
  57893. 2740 | SPEC_RULE_OP1,
  57894. 2745 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57895. 2770,
  57896. 2771,
  57897. 2772 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57898. 2797 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57899. 2822 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57900. 2847 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57901. 2872 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57902. 2897 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57903. 2922 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57904. 2947 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
  57905. 2972 | SPEC_RULE_OP1,
  57906. 2977,
  57907. 2978,
  57908. 2979,
  57909. 2980,
  57910. 2981,
  57911. 2982 | SPEC_RULE_OP1,
  57912. 2987 | SPEC_RULE_OP1,
  57913. 2992 | SPEC_RULE_OP1,
  57914. 2997 | SPEC_RULE_OP1,
  57915. 3002 | SPEC_RULE_OP1,
  57916. 3007,
  57917. 3008 | SPEC_RULE_OP1,
  57918. 3013,
  57919. 3014 | SPEC_RULE_OP1,
  57920. 3019,
  57921. 3020 | SPEC_RULE_ISSET,
  57922. 3022 | SPEC_RULE_OP2,
  57923. 3920
  57924. };
  57925. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  57926. zend_opcode_handler_funcs = labels;
  57927. zend_spec_handlers = specs;
  57928. execute_ex(NULL);
  57929. #else
  57930. zend_opcode_handlers = labels;
  57931. zend_handlers_count = sizeof(labels) / sizeof(void*);
  57932. zend_spec_handlers = specs;
  57933. #endif
  57934. VM_TRACE_START();
  57935. }
  57936. void zend_vm_dtor(void)
  57937. {
  57938. VM_TRACE_END();
  57939. }
  57940. static HashTable *zend_handlers_table = NULL;
  57941. static void init_opcode_serialiser(void)
  57942. {
  57943. int i;
  57944. zval tmp;
  57945. zend_handlers_table = malloc(sizeof(HashTable));
  57946. zend_hash_init_ex(zend_handlers_table, zend_handlers_count, NULL, NULL, 1, 0);
  57947. zend_hash_real_init(zend_handlers_table, 0);
  57948. Z_TYPE_INFO(tmp) = IS_LONG;
  57949. for (i = 0; i < zend_handlers_count; i++) {
  57950. Z_LVAL(tmp) = i;
  57951. zend_hash_index_add(zend_handlers_table, (zend_long)(zend_uintptr_t)zend_opcode_handlers[i], &tmp);
  57952. }
  57953. }
  57954. ZEND_API void ZEND_FASTCALL zend_serialize_opcode_handler(zend_op *op)
  57955. {
  57956. zval *zv;
  57957. if (!zend_handlers_table) {
  57958. init_opcode_serialiser();
  57959. }
  57960. zv = zend_hash_index_find(zend_handlers_table, (zend_long)(zend_uintptr_t)op->handler);
  57961. ZEND_ASSERT(zv != NULL);
  57962. op->handler = (const void *)(zend_uintptr_t)Z_LVAL_P(zv);
  57963. }
  57964. ZEND_API void ZEND_FASTCALL zend_deserialize_opcode_handler(zend_op *op)
  57965. {
  57966. op->handler = zend_opcode_handlers[(zend_uintptr_t)op->handler];
  57967. }
  57968. ZEND_API const void* ZEND_FASTCALL zend_get_opcode_handler_func(const zend_op *op)
  57969. {
  57970. #if ZEND_VM_KIND == ZEND_VM_KIND_CALL
  57971. return op->handler;
  57972. #elif ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
  57973. zval *zv;
  57974. if (!zend_handlers_table) {
  57975. init_opcode_serialiser();
  57976. }
  57977. zv = zend_hash_index_find(zend_handlers_table, (zend_long)(zend_uintptr_t)op->handler);
  57978. ZEND_ASSERT(zv != NULL);
  57979. return zend_opcode_handler_funcs[Z_LVAL_P(zv)];
  57980. #else
  57981. return NULL;
  57982. #endif
  57983. }
  57984. ZEND_API const zend_op *zend_get_halt_op(void)
  57985. {
  57986. #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
  57987. return &hybrid_halt_op;
  57988. #else
  57989. return NULL;
  57990. #endif
  57991. }
  57992. ZEND_API int zend_vm_kind(void)
  57993. {
  57994. return ZEND_VM_KIND;
  57995. }
  57996. static const void* ZEND_FASTCALL zend_vm_get_opcode_handler_ex(uint32_t spec, const zend_op* op)
  57997. {
  57998. static const int zend_vm_decode[] = {
  57999. _UNUSED_CODE, /* 0 = IS_UNUSED */
  58000. _CONST_CODE, /* 1 = IS_CONST */
  58001. _TMP_CODE, /* 2 = IS_TMP_VAR */
  58002. _UNUSED_CODE, /* 3 */
  58003. _VAR_CODE, /* 4 = IS_VAR */
  58004. _UNUSED_CODE, /* 5 */
  58005. _UNUSED_CODE, /* 6 */
  58006. _UNUSED_CODE, /* 7 */
  58007. _CV_CODE /* 8 = IS_CV */
  58008. };
  58009. uint32_t offset = 0;
  58010. if (spec & SPEC_RULE_OP1) offset = offset * 5 + zend_vm_decode[op->op1_type];
  58011. if (spec & SPEC_RULE_OP2) offset = offset * 5 + zend_vm_decode[op->op2_type];
  58012. if (spec & SPEC_EXTRA_MASK) {
  58013. if (spec & SPEC_RULE_OP_DATA) offset = offset * 5 + zend_vm_decode[(op + 1)->op1_type];
  58014. else if (spec & SPEC_RULE_RETVAL) offset = offset * 2 + (op->result_type != IS_UNUSED);
  58015. else if (spec & SPEC_RULE_QUICK_ARG) offset = offset * 2 + (op->op2.num <= MAX_ARG_FLAG_NUM);
  58016. else if (spec & SPEC_RULE_SMART_BRANCH) {
  58017. offset = offset * 3;
  58018. if ((op+1)->opcode == ZEND_JMPZ) {
  58019. offset += 1;
  58020. } else if ((op+1)->opcode == ZEND_JMPNZ) {
  58021. offset += 2;
  58022. }
  58023. }
  58024. else if (spec & SPEC_RULE_DIM_OBJ) {
  58025. offset = offset * 3;
  58026. if (op->extended_value == ZEND_ASSIGN_DIM) {
  58027. offset += 1;
  58028. } else if (op->extended_value == ZEND_ASSIGN_OBJ) {
  58029. offset += 2;
  58030. }
  58031. }
  58032. else if (spec & SPEC_RULE_ISSET) offset = offset * 2 + (op->extended_value & ZEND_ISEMPTY);
  58033. }
  58034. return zend_opcode_handlers[(spec & SPEC_START_MASK) + offset];
  58035. }
  58036. #if (ZEND_VM_KIND != ZEND_VM_KIND_HYBRID) || !ZEND_VM_SPEC
  58037. static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op* op)
  58038. {
  58039. return zend_vm_get_opcode_handler_ex(zend_spec_handlers[opcode], op);
  58040. }
  58041. #endif
  58042. #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
  58043. static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend_op* op)
  58044. {
  58045. uint32_t spec = zend_spec_handlers[opcode];
  58046. static const int zend_vm_decode[] = {
  58047. _UNUSED_CODE, /* 0 = IS_UNUSED */
  58048. _CONST_CODE, /* 1 = IS_CONST */
  58049. _TMP_CODE, /* 2 = IS_TMP_VAR */
  58050. _UNUSED_CODE, /* 3 */
  58051. _VAR_CODE, /* 4 = IS_VAR */
  58052. _UNUSED_CODE, /* 5 */
  58053. _UNUSED_CODE, /* 6 */
  58054. _UNUSED_CODE, /* 7 */
  58055. _CV_CODE /* 8 = IS_CV */
  58056. };
  58057. uint32_t offset = 0;
  58058. if (spec & SPEC_RULE_OP1) offset = offset * 5 + zend_vm_decode[op->op1_type];
  58059. if (spec & SPEC_RULE_OP2) offset = offset * 5 + zend_vm_decode[op->op2_type];
  58060. if (spec & SPEC_EXTRA_MASK) {
  58061. if (spec & SPEC_RULE_OP_DATA) offset = offset * 5 + zend_vm_decode[(op + 1)->op1_type];
  58062. else if (spec & SPEC_RULE_RETVAL) offset = offset * 2 + (op->result_type != IS_UNUSED);
  58063. else if (spec & SPEC_RULE_QUICK_ARG) offset = offset * 2 + (op->op2.num <= MAX_ARG_FLAG_NUM);
  58064. else if (spec & SPEC_RULE_SMART_BRANCH) {
  58065. offset = offset * 3;
  58066. if ((op+1)->opcode == ZEND_JMPZ) {
  58067. offset += 1;
  58068. } else if ((op+1)->opcode == ZEND_JMPNZ) {
  58069. offset += 2;
  58070. }
  58071. }
  58072. else if (spec & SPEC_RULE_DIM_OBJ) {
  58073. offset = offset * 3;
  58074. if (op->extended_value == ZEND_ASSIGN_DIM) {
  58075. offset += 1;
  58076. } else if (op->extended_value == ZEND_ASSIGN_OBJ) {
  58077. offset += 2;
  58078. }
  58079. }
  58080. else if (spec & SPEC_RULE_ISSET) offset = offset * 2 + (op->extended_value & ZEND_ISEMPTY);
  58081. }
  58082. return zend_opcode_handler_funcs[(spec & SPEC_START_MASK) + offset];
  58083. }
  58084. #endif
  58085. ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler(zend_op* op)
  58086. {
  58087. zend_uchar opcode = zend_user_opcodes[op->opcode];
  58088. if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
  58089. if (op->op1_type < op->op2_type) {
  58090. zend_swap_operands(op);
  58091. }
  58092. }
  58093. op->handler = zend_vm_get_opcode_handler_ex(zend_spec_handlers[opcode], op);
  58094. }
  58095. 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)
  58096. {
  58097. zend_uchar opcode = zend_user_opcodes[op->opcode];
  58098. uint32_t spec = zend_spec_handlers[opcode];
  58099. switch (opcode) {
  58100. case ZEND_ADD:
  58101. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58102. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58103. break;
  58104. }
  58105. spec = 3028 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  58106. if (op->op1_type < op->op2_type) {
  58107. zend_swap_operands(op);
  58108. }
  58109. } else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58110. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58111. break;
  58112. }
  58113. spec = 3053 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  58114. if (op->op1_type < op->op2_type) {
  58115. zend_swap_operands(op);
  58116. }
  58117. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  58118. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58119. break;
  58120. }
  58121. spec = 3078 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  58122. if (op->op1_type < op->op2_type) {
  58123. zend_swap_operands(op);
  58124. }
  58125. }
  58126. break;
  58127. case ZEND_SUB:
  58128. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58129. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58130. break;
  58131. }
  58132. spec = 3103 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
  58133. } else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58134. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58135. break;
  58136. }
  58137. spec = 3128 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
  58138. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  58139. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58140. break;
  58141. }
  58142. spec = 3153 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
  58143. }
  58144. break;
  58145. case ZEND_MUL:
  58146. if (op->op1_type < op->op2_type) {
  58147. zend_swap_operands(op);
  58148. }
  58149. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58150. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58151. break;
  58152. }
  58153. spec = 3178 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  58154. } else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58155. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58156. break;
  58157. }
  58158. spec = 3203 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  58159. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  58160. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58161. break;
  58162. }
  58163. spec = 3228 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
  58164. }
  58165. break;
  58166. case ZEND_IS_EQUAL:
  58167. if (op->op1_type < op->op2_type) {
  58168. zend_swap_operands(op);
  58169. }
  58170. if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58171. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58172. break;
  58173. }
  58174. spec = 3253 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  58175. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  58176. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58177. break;
  58178. }
  58179. spec = 3328 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  58180. }
  58181. break;
  58182. case ZEND_IS_NOT_EQUAL:
  58183. if (op->op1_type < op->op2_type) {
  58184. zend_swap_operands(op);
  58185. }
  58186. if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58187. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58188. break;
  58189. }
  58190. spec = 3403 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  58191. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  58192. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58193. break;
  58194. }
  58195. spec = 3478 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
  58196. }
  58197. break;
  58198. case ZEND_IS_SMALLER:
  58199. if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58200. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58201. break;
  58202. }
  58203. spec = 3553 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
  58204. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  58205. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58206. break;
  58207. }
  58208. spec = 3628 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
  58209. }
  58210. break;
  58211. case ZEND_IS_SMALLER_OR_EQUAL:
  58212. if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
  58213. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58214. break;
  58215. }
  58216. spec = 3703 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
  58217. } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
  58218. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58219. break;
  58220. }
  58221. spec = 3778 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
  58222. }
  58223. break;
  58224. case ZEND_QM_ASSIGN:
  58225. if (op1_info == MAY_BE_DOUBLE) {
  58226. spec = 3871 | SPEC_RULE_OP1;
  58227. } 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))))) {
  58228. spec = 3876 | SPEC_RULE_OP1;
  58229. }
  58230. break;
  58231. case ZEND_PRE_INC:
  58232. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
  58233. spec = 3853 | SPEC_RULE_RETVAL;
  58234. } else if (op1_info == MAY_BE_LONG) {
  58235. spec = 3855 | SPEC_RULE_RETVAL;
  58236. } else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
  58237. spec = 3857 | SPEC_RULE_RETVAL;
  58238. }
  58239. break;
  58240. case ZEND_PRE_DEC:
  58241. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
  58242. spec = 3859 | SPEC_RULE_RETVAL;
  58243. } else if (op1_info == MAY_BE_LONG) {
  58244. spec = 3861 | SPEC_RULE_RETVAL;
  58245. } else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
  58246. spec = 3863 | SPEC_RULE_RETVAL;
  58247. }
  58248. break;
  58249. case ZEND_POST_INC:
  58250. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
  58251. spec = 3865;
  58252. } else if (op1_info == MAY_BE_LONG) {
  58253. spec = 3866;
  58254. } else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
  58255. spec = 3867;
  58256. }
  58257. break;
  58258. case ZEND_POST_DEC:
  58259. if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
  58260. spec = 3868;
  58261. } else if (op1_info == MAY_BE_LONG) {
  58262. spec = 3869;
  58263. } else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
  58264. spec = 3870;
  58265. }
  58266. break;
  58267. case ZEND_JMP:
  58268. if (OP_JMP_ADDR(op, op->op1) > op) {
  58269. spec = 3027;
  58270. }
  58271. break;
  58272. case ZEND_SEND_VAL:
  58273. if (op->op1_type == IS_CONST && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
  58274. spec = 3916;
  58275. }
  58276. break;
  58277. case ZEND_SEND_VAR_EX:
  58278. if (op->op2.num <= MAX_ARG_FLAG_NUM && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
  58279. spec = 3911 | SPEC_RULE_OP1;
  58280. }
  58281. break;
  58282. case ZEND_FE_FETCH_R:
  58283. if (op->op2_type == IS_CV && (op1_info & (MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY) {
  58284. spec = 3918 | SPEC_RULE_RETVAL;
  58285. }
  58286. break;
  58287. case ZEND_FETCH_DIM_R:
  58288. if (!(op2_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
  58289. if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
  58290. break;
  58291. }
  58292. spec = 3881 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
  58293. }
  58294. break;
  58295. case ZEND_SEND_VAL_EX:
  58296. if (op->op2.num <= MAX_ARG_FLAG_NUM && op->op1_type == IS_CONST && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
  58297. spec = 3917;
  58298. }
  58299. break;
  58300. case ZEND_SEND_VAR:
  58301. if ((op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
  58302. spec = 3906 | SPEC_RULE_OP1;
  58303. }
  58304. break;
  58305. case ZEND_BW_OR:
  58306. case ZEND_BW_AND:
  58307. case ZEND_BW_XOR:
  58308. case ZEND_BOOL_XOR:
  58309. case ZEND_IS_IDENTICAL:
  58310. case ZEND_IS_NOT_IDENTICAL:
  58311. if (op->op1_type < op->op2_type) {
  58312. zend_swap_operands(op);
  58313. }
  58314. break;
  58315. case ZEND_USER_OPCODE:
  58316. if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
  58317. if (op->op1_type < op->op2_type) {
  58318. zend_swap_operands(op);
  58319. }
  58320. }
  58321. break;
  58322. default:
  58323. break;
  58324. }
  58325. op->handler = zend_vm_get_opcode_handler_ex(spec, op);
  58326. }
  58327. ZEND_API int ZEND_FASTCALL zend_vm_call_opcode_handler(zend_execute_data* ex)
  58328. {
  58329. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  58330. opcode_handler_t handler;
  58331. #endif
  58332. int ret;
  58333. #ifdef ZEND_VM_IP_GLOBAL_REG
  58334. const zend_op *orig_opline = opline;
  58335. #endif
  58336. #ifdef ZEND_VM_FP_GLOBAL_REG
  58337. zend_execute_data *orig_execute_data = execute_data;
  58338. execute_data = ex;
  58339. #else
  58340. zend_execute_data *execute_data = ex;
  58341. #endif
  58342. LOAD_OPLINE();
  58343. #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
  58344. #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
  58345. handler = (opcode_handler_t)zend_vm_get_opcode_handler_func(zend_user_opcodes[opline->opcode], opline);
  58346. handler(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  58347. if (EXPECTED(opline != &hybrid_halt_op)) {
  58348. #else
  58349. ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  58350. if (EXPECTED(opline)) {
  58351. #endif
  58352. ret = execute_data != ex ? (int)(execute_data->prev_execute_data != ex) + 1 : 0;
  58353. SAVE_OPLINE();
  58354. } else {
  58355. ret = -1;
  58356. }
  58357. #else
  58358. ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  58359. SAVE_OPLINE();
  58360. #endif
  58361. #ifdef ZEND_VM_FP_GLOBAL_REG
  58362. execute_data = orig_execute_data;
  58363. #endif
  58364. #ifdef ZEND_VM_IP_GLOBAL_REG
  58365. opline = orig_opline;
  58366. #endif
  58367. return ret;
  58368. }